Reference Policy(refpolicy)

refpolicyのテスト。

インストール手順

「targetedポリシ、MCSが有効」をインストールすると仮定。
インストール先は/etc/selinux/refpolicy
目標はfedora標準のポリシのソースを作ること。
(1) selinux-policy-|version|.src.rpm を入手
http://download.fedora.redhat.com/pub/fedora/linux/core/development/SRPMS/

(2) Install src.rpm
rpm -ivh selinux-policy*.src.rpm

(3) Install refpolicy
# cd /usr/src/redhat/SPECS/
#rpmbuild -bp selinux-policy.spec
# cd /usr/src/redhat/BUILD/serefpolicy-2.1.6/
# make install-src

/etc/selinux/refpolicy/src/policy
にポリシのソースが。
# cd /etc/selinux/refpolicy/src/policy
# make bare
# make conf
# make html
でとりあえず初期化

(4) modules.conf
policy/modules.conf
というファイルが,make confで自動生成される。
が,まだrefpolicy自体未完成で、そのまま使うとポリシがコンパイルできない。
仕方ないのでRedhatが用意したものを使う。
# cp /usr/src/redhat/SOURCES/modules-targeted.conf policy/modules.conf

modules.confとは?
あるポリシファイル(te,if,fcファイルの組)を,
モジュールとしてビルドするか,baseポリシとしてビルドするか,
それとも無効にするかを設定する。

モジュール名 =base module off

というような行で設定する。

(5) ポリシコンパイルオプションを、用途に応じて設定
build.confで設定する。以下設定例。

TYPE = targeted-mcs
NAME = refpolicy
DISTRO = redhat
MONOLITHIC=n
DIRECT_INITRC=y
  • TYPEはポリシの種別。targeted,strictと,targeted|strict-mcs|mls(記法はてきとう)のような設定ができる。strictはまだ全然完成してない。
  • NAMEは、バイナリポリシのインストールパス。/etc/selinux/|NAME|にインストールされる。
  • DISTROディストリビューション特有の設定をONにするため。
  • MONOLITHICは,ポリシをモジュール対応させるか否か。「n」でモジュール対応。
  • DIRECT_INITRCを「n」にすると、デーモン起動時に「run_init」を使う必要があるポリシになる。

(6) ポリシのビルド, インストール
# make all
# make install
ビルドtarget名はREADME参照。
驚くべきことに,policy.20は作成されない。
/usr/share/selinux/refpolicy/base.pp
が作成されるだけ。

(7) policy.20とかfile_contextsの作成
さて、これをどう反映させる?
selinux-policy.specを見ると,%postでsemoduleコマンドを使ってるようだ。。
specからの抜粋。。

semodule -b /usr/share/selinux/%1/base.pp -s %1 \
for file in $(ls /usr/share/selinux/%1 | grep -v base.pp) \
do \
        semodule -i /usr/share/selinux/%1/$file -s %1;\
done; \

まず
# vi /etc/selinux/config
SELINUX=permissive
SELINUXTYPE=refpolicy

# mkdir -p /etc/selinux/refpolicy/policy
# make load
やっとpolicy.20が作成された。。

(8)設定の反映
# touch /.autorelabel
# reboot

こう見ると初期インストールは面倒か。。
未完成の部分が多いが、FC5正式版までには改善されるに違いない?

ついでに,
# cp /usr/src/redhat/SOURCES/seusers-targeted /etc/selinux/refpolicy/modules/active/seusers
して
make loadもしとこう。

設定の編集

詳細は調査中だが,
一度インストールすれば
make load

restoreconという今までと同様のコマンドで
編集した設定が反映できるようだ。