SELinuxことはじめ

今まで面倒くさい難しそうだと思って敬遠していた SELinuxだけど、ぬらりひょんなことからchconを弄るはめになり、ls -Zでいろんな情報が見えてしまうとなんとも気になってしまうので、ちゃんと勉強してみる気になる*1

セキュリティ基礎

セキュリティ、といっても様々だけれど、基本的には

  1. 未然に阻止する(ファイアウォール、認証など)
  2. 事後に被害を最小限にする(アクセス制限など)

のどちらかになる。SELinuxは2番のほう。未然に防止するのは限界があるので、もしもとられてしまったときにきめ細かなアクセス制御ができるようにする、という発想。
http://www.nsa.gov/research/selinux/index.shtml
そもそものUnixのセキュリティモデルは非情に大雑把、というかユーザ単位での所有権制御しかない。一応これでも最低限のアクセス制御は可能で、例えばdaemonだったらログイン不能な特定ユーザを作成して、daemonをそのユーザで実行する事で必要なファイルのみにアクセスを限定できたりとかした。しかし、それでは細かい制御が難しい。
また、そもそもがrootが何でもオッケーなジョーカー状態なので、結局はそこが穴になる。マスターキーが金庫の上に放置されている状態なわけで(一応簡単な金庫には入れてあるが)。SELinuxではrootであっても制限に縛られるようになっている。このため滅多な事では問題が起きない。。。わけもないか。実はrootがとられたらpolicyを変更されてしまえばアウトなので、この部分は単に複雑にしただけでメリットがあんまりないような気もしてくる。神髄は勉強しているうちに分かってくるのかな?
ちなみにSELinuxの機能はモジュールとして実現されている。

環境

殆どの Linux distributionにはついてる。僕が使った Fedora 11ではデフォルトでオンになっている。お陰で勉強する機会が得られた、ということで感謝*2。オンオフは「セキュリティレベルの設定」ツールで設定できる。変更には再起動が必要。

要素

以下の要素があるらしい。後で書く

Type-Enforcement(TE)

これがアクセス制御機構の根幹らしい。要するにプロセスとファイルにそれぞれドメインとタイプ情報を付加して、これをもって同じタイプの物同士でしかアクセス不能にするという方式。

ドメイン遷移
RBAC(Role-Base-Access-Control)

Typeの表示

 $ ls -Z

で表示される。

*1:具体的にはCUDAの32-bitライブラリがなぜか system-uドメインでインストールされていてハマったのがキッカケ

*2:なんか違う気がする