virgilというツールが出てる。

おお、作者、去年SELinux Symposiumで会った人だ!
Simplified Policy相当のもので,かつ,既存のポリシに追加できるものを作りたいと言っていた.
これは使えそうな予感がするので試そう。

インストール

(1) Perl-tkをインストール
http://search.cpan.org/~ni-s/Tk-804.027/
Tk-804.027.tar.gzをダウンロード
tar xzvf Tk-804.027.tar.gz
$cd Tk-804.027.tar.gz
$perl Makefile.PL
$make
$make test
make testがフリーズした。。
強引に
$su
#make install
いいのか?
(2) ConfigPerl.pmのインストール
あ…正しい方法書いたのにセーブし忘れてたorz
鬱。
二度手間してます…
http://search.cpan.org/dist/Apache-ConfigFile/
からダウンロード。
tar xzvfして
make makefile.pl
make
make install

(3)Virgilの起動
virgil-0.1.tgzをダウンロード。
http://sourceforge.net/projects/sepolicy-virgil/
いきなりsourceforgeが落ちてる。。
展開して,
./Virgil
おお。起動した。

virgilのできること

既存ポリシに追加可能なドメイン作り
GUIから,テンプレートのようなものを簡単に作れる
テンプレートは,simplified policyみたいな感じで,
XMLの設定ファイルで書かれている。
これが,SELinuxのポリシに変換される(生のallow文)

これを見ていると,SELinuxの「高級言語」が流行りそうな予感が。
今まではsimplified policyだけだったが,
次のシンポジウムでは,他に2,3出てくるし。
うまくお互いパクリあっていいものができればいいが。

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という今までと同様のコマンドで
編集した設定が反映できるようだ。