SELinux(エスイーリナックス)とはSecurity-Enhanced Linuxの略です。米国家安全保障局(The National Security Agency:NSA)が中心となって開発しているLinuxベースのセキュアOSです。Linuxの最新カーネル*2.6が正式採用したことで,数あるセキュアOSの中でも本命と目されています。

不要なリソースの利用を制限

 SELinuxの最大の特徴は,従来のLinuxやUNIXでは絶対的な権限を持っていたroot(ルート)アカウントの特権を無くしてしまったことです。リソースへの権限をユーザーやプロセスごとに細かく設定して,例外なくセキュリティ・ポリシーで制御します。必要最低限の権限しか与えないことで,クラッカに侵入されてもシステムへの影響を最小限に抑えることを目指しています。


図3 SELinuxではリソースへの全アクセスをセキュリティ・ポリシーで許可されているか検査する
実際のアクセスは,プロセスからはTE(type enforcement)が,ユーザーからはRBAC(role based access control)が制御する。プロセスが新しい権限のプロセスを生成しようとした場合は,ドメイン遷移がポリシーで許可されているかを検査する。

[画像のクリックで拡大表示]

 そのために,SELinuxはTE(type enforcement),ドメイン遷移,RBAC(role based access control),MAC(mandatory access control:強制アクセス制御)の四つの機能を提供します(図3[拡大表示])。リソースへのアクセスを強制的に制御するのがMACで,プロセス(サーバー・ソフトなどのプログラム)の操作権限を実際に設定するのがTE,ユーザーの操作権限を設定するのがRBAC,不正な権限の昇格を防止するのがドメイン遷移です。

 ファイルなどのリソースに対するアクセスをプロセスごとに制御するのがTEです。例えば,WebサーバーのプロセスはHTMLファイルなどのWeb関連ファイルにしか,DNS*のプロセスはゾーン・ファイルなどのDNS関連ファイルにしかアクセスできないように制御します。これにより,仮にプロセスを乗っ取られても,関係ないリソースにはアクセスできません。リソースとしては,ファイルの読み書きだけでなく,ソケット通信*などについても同様に権限を設定できます。

 新しいプロセスを生成すると,通常は親プロセスの権限を引き継ぎますが,場合によっては親プロセスとは異なる権限を割り当てたいことがあります。このような場合に使うのが「ドメイン遷移」です。プロセス起動時に,あらかじめポリシーで定義した条件でのみ別の権限を割り当てられるように制御します。これにより,不正に権限を昇格させることを防ぎます。

 ユーザーのアクセス権を制御するのがRBACです。RBACは,一般ユーザー,システム管理者,Web管理者といった役割(ロール)ごとに,グループを定義します。これらのロールごとに,必要最低限の権限を設定することで,もしユーザーのアカウントが乗っ取られても被害を最小限に防ぐことができます。

 ここまでの権限の割り当てを,すべてのアクセスに強制するのがMACです。これまでのLinuxやUNIXのように,ファイルやディレクトリの所有者が権限を自由に管理できるのではなく,セキュリティ・ポリシーという形で定義した内容に従ってシステム全体のアクセスを制御します。セキュリティ管理者以外のユーザーは変更できないようになっており,所有者であっても権限を自由に設定できません。

SELinuxの設定はなかなか大変

 SELinuxは,Linuxカーネルの追加機能として実装されています。このため,既存のシステムに追加インストールできます。また,カーネル2.6ではLSM(Linux security module)と呼ぶセキュリティ拡張モジュールを追加する機構が備わっており,カーネルを再構築せずにSELinuxの環境を構築できます。

 ただし,実際のシステムで使えるようにするにはチューニングが必要です。初期状態ではTE,ドメイン遷移,RBACのいずれも必要最小限の設定になっています。実際に利用するためには,管理者が必要に応じて許可の設定を追加して適切なポリシーを作成していく必要があります。

 この設定は非常に柔軟にできる半面,ファイル数が多くて内容が複雑です。このため,すべてのアプリケーションのポリシーを自力で設定するのは大変な作業です。Webサーバーやメール・サーバーといった代表的なアプリケーション向けにはシステム標準のポリシーがかなり整備されてきていますので,それらを利用するのがよいでしょう。

 SELinuxを使わなくても,セキュリティ・パッチを迅速に適用し,ファイアウォールやIDS*を導入すればセキュアな環境を構築することは可能です。しかし,完璧な環境を構築するには莫大なコストと手間が必要となりますし,そもそも未知の攻撃を防ぐのは困難です。このため,SELinuxのようにOSの基本部分で根本的な対策をしてしまおうというセキュアOSのメリットは十分にあるでしょう。

 ただし,SELinuxを導入したからといって,すべての問題が解決するわけではありません。例えば,DoS攻撃*によるサービス停止には無力ですし,いくら権限を厳格に設定したところで,不正に侵入されればその権限内では操作を許してしまいます。SELinuxの導入だけで安心するのではなく,システムのアップデートなど,通常のメンテナンスも怠りなく実行してください。


●筆者:岩元 貴彦(いわもと たかひこ)
ホライズン・デジタル・エンタープライズ
プロダクト本部開発部 部長