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

Fedora10 のSELinuxのユーザーマニュアルを見ると、FedoraSELinuxでは、プロセスに対する制限だけでなく、ユーザーに対する制限もできることがわかる。
http://docs.fedoraproject.org/selinux-user-guide/f10/en-US/

デフォルトの設定では、root以外に、staff_u, xguest_u など種々のユーザー(SELinuxユーザー ) が定義されている。 staff_u は、通常の一般ユーザーに近いが、suが使えない(sudoは可), xguest_u は、su, sudo共に使えず、デフォルトの設定では、ホームディレクトリ、/tmp への書込みも出来ない。 xguest_uはログインを行わずに使用する端末(キオスク端末など)で使うことを意図しているらしく、一般ユーザーと比べてもかなり厳しく制限がある。


上の例からわかるのだが、SELinuxでの制限は、 su, sudo可能なユーザー(SELinuxを使用しない場合にデフォルトとなる, SELinux使用時には、unconfined_u にマップされる )と比べて、制限が多いユーザーを作るために利用されている。 実際のところ、SELinuxの普通の使い方では、一般ユーザーよりも低い権限を持つユーザーは作成できるが、一般ユーザーより高い権限を持つユーザーは作成できない。これは、SELinuxが動いているシステムでも、通常のUnixパーミッションは稼働しているため、元々SELinuxが無い状態でできなかった操作は、SELinux導入後も実行はできないことによる。。例えば、/var/log/httpd 以下のログファイルを見るには、SELinux導入後も基本的にはroot 権限が必要となる。 (パーミッションが root のみ読み取り許可のため)

このため、例えば httpdの管理をroot権限無しで実行するために、 一般ユーザーでhttpdのログを確認できるようにするには、SELinuxの有る無しに関わらず、 /var/log/httpd のユーザー、グループの変更などを、まず行う必要がある。一般ユーザーでも確認できるようにした後、 SELinuxユーザーごとに /var/log/httpd (httpd_log_t) を閲覧できるようなユーザーを作成するには、SELinuxポリシーでの対応となる。 ただし、該当のユーザーを apache グループに加えて、 /var/log/httpd をグループに閲覧可能にした方がはるかにやりやすい w

どうも一般の管理業務に適用するには、色々と使いどころが分かり辛い機能に見えたのだが、よくよく考えると、細かい制御をしたいときには、やはりSELinuxを使った方がやりやすい場面もありそうだ。 例えば、/var/log/httpd/access.log だけは閲覧を許可し、ログローテーション後の /var/log/httpd/access.log.*.gz は閲覧を非許可にしたいなどの場合には、 グループによる制御より、 SELinux経由の制御の方がやりやすい。特にMLSでは、ファイルごとに階層が定義できるため、 ログローテーション後のファイルをより高い階層に置くことで、上手く対応できるだろう。(一応apachegrp1, apachegrp2 などのグループを作り、細かくログローテーションスクリプトを変更することでSELinux無しでも対応できるのかもしれないが、多分SELinuxを使った方がやりやすいだろう w )