Fedora11でSELinuxを使ってみた (1)

SELinuxはセキュアOSの1つで、かなり古くからLinuxカーネルにマージされている機能の一つである。最近のカーネルには、smack, tomoyoなどの別のセキュリティ機能もマージされており、使い分けで苦労しそうなのだが、Fedora(というかRed Hat)では一律で、SELinuxを使っているので、Fedora11で試してみた。

SUSEのAppArmor と同様、SELinuxの有力な使い方として、httpd などroot権限で動かさざるをえない(1024番以下のポートを使うため ) サービスに対して、アクセスできるファイル等を制限する使い方がある。制限をかけておくと、root権限のデーモンをクラックされても、ほとんどのファイルには、アクセスができないため、( /tmpにさえ、書き込めなかったりする ) システムが安全になる。

ポリシーの書き方(AppArmorの設定ファイルに対応) についてあまりまとまった資料がないようなのだが、大雑把な説明には、
http://fedoraproject.org/wiki/SELinux/Understanding
のプレゼンテーション、どんなツールがあるか(semanage など)の確認には、
http://userspace.selinuxproject.org/trac/
を利用できる。

SELinuxを使う際、httpdなどの制限のためや、boolean値で実際にどのような変更があるのかを調べるため、ポリシーの内容を調べたいことが多々あるのだが、残念ながら通常のシステムにはバイナリファイル(.pp ファイル) しかインストールされないため、selinux-policy-targeted などをソースを手にいれる必要があるようだ。

ソースファイル(src.rpm)は次のようにしてダウンロードできる。

$ yumdownloader --source selinux-policy

中身は、SELinuxの設定ファイルで、te, if, fcがあり、それぞれ te: AVCの設定の本体、if: 他ファイルから取り込むためのinterface (.h ファイルに対応), fc: ファイルごとのドメインの設定 がある。
httpdなどよく見知ったサービスについてはポリシーの動作も見やすいが(httpd_enable_cgiの設定など) ものによっては、何を行っているのか分からないものも多々ある。。 targeted, mls などのポリシーもどれもこのソースRPMに含まれているようだ。


なお、自作のポリシーの作成には、 selinux-policy 内に含まれる
/usr/share/selinux/devel/ ディレクトリ内の example モジュールと、Makefileが使えるようだ。 example.fc を変更し、make, make reload, restorecon を行ってみたところ、正しくファイルコンテクストが設定された。