2 SELinuxポリシーの管理
SELinuxポリシーは、すべてのユーザー、プログラム、プロセス、ファイルおよびこれらが動作するデバイスのアクセス権限を示します。SELinuxは、TargetedポリシーまたはMulti-Level Security (MLS)ポリシーを実装するように構成できます。この章では、SELinuxポリシーおよびその管理方法について説明します。
Targetedポリシー
targetedポリシーでは、システム上で攻撃対象となる可能性が最も高い限られた数のプロセスに、アクセス制御を適用します。ターゲット・プロセスは、攻撃者が悪用する可能性のあるファイルへのアクセスを制限する、制限されたドメインと呼ばれる独自のSELinuxドメインで実行されます。ターゲット・プロセスが制限されたドメイン外のリソースにアクセスを試みていることが検出された場合、SELinuxはこれらのリソースへのアクセスを拒否して、拒否を記録します。制限されたドメインでは、特定のサービスのみが実行されます。例として、httpd、named、sshdなど、ネットワーク上でクライアント・リクエストをリスニングするサービス、およびpasswdなど、ユーザーのかわりにタスクを実行するためにroot
として実行されるプロセスがあげられます。多くのユーザー・プロセスを含め、その他のプロセスは、DACルールのみが適用される制限されないドメインで実行されます。制限されていないプロセスが攻撃によって危険にさらされた場合、SELinuxはシステム・リソースおよびデータへのアクセスを防ぐことはできません。
次の表に、SELinuxドメインの例を示します。
ドメイン | 説明 |
---|---|
|
|
|
HTTPデーモン・スレッド |
|
カーネル・スレッド |
|
|
|
Oracle Linuxユーザーによって起動されるプロセスは制限されていないドメインで実行されます |
Multi-Level Securityポリシー
Multi-Level Security (MLS)ポリシーでは、各レベルのユーザー・アクセス・ルールが異なる複数レベルのプロセスに、アクセス制御を適用します。特定レベルでプロセスを実行するための適切な権限を持っていない場合、ユーザーは情報にアクセスできません。SELinuxでは、MLSはシステム・セキュリティにBell-LaPadula (BLP)モデルを実装します。このモデルでは、ファイル、プロセス、およびその他のシステム・オブジェクトにラベルを適用して、セキュリティ・レベル間の情報フローを制御します。一般的な実装では、セキュリティ・レベルのラベルは、最もセキュアなtop secret
からsecret
およびclassified
、最も安全でないunclassified
まで多岐にわたります。たとえば、MLSで、top secret
というラベルのファイルに書き込めるが、そこから読み取ることができないsecret
というラベルのプログラムを構成できます。同様に、同じプログラムに対して、secret
とラベル付けされたファイルについては読取りおよび書込みを構成するが、classified
ファイルやunclassified
ファイルについては読取りのみを構成するということができます。したがって、プログラムを通過する情報はセキュリティ・レベル階層の上方に流れることができますが、下方に流れることはできません。
ノート:
MLSポリシーを適用するには、selinux-policy-MLS
パッケージをインストールする必要があります。
ノート:
Oracleでは、X Window Systemを実行しているシステムでMLSポリシーを使用することは推奨していません。
ノート:
SELinux拒否は、次の主な理由からMLSでより一般的になっています。
-
MLSは、無制限のポリシー・モジュールを無効にします。
-
MLSは感度レベルを利用します。
SELinuxポリシーの設定または切替え
ノート:
実行中のシステムのポリシー・タイプを変更することはできません。
/etc/selinux/config
ファイルを編集し、SELINUXTYPE
ディレクティブの値をtargeted
またはmls
に設定して、デフォルトのポリシー・タイプを構成できます。
ポリシー間で切り替える前に、SELinuxモードを許可モードに変更します。強制モード中にラベルを変更すると、制限されたドメインがファイルにアクセスできなくなる可能性があるため、システムが正しく起動できなくなることがあります。
SELinuxポリシーのカスタマイズ
一連のブール値のメンバーを有効または無効にすることで、SELinuxポリシーをカスタマイズできます。変更内容はただちに有効になり、リブートは必要ありません。
すべてのブール値とその説明を表示するには、次のコマンドを使用します。
semanage boolean -l
SELinux boolean State Default Description
ftp_home_dir (off , off)
Determine whether ftpd can read and write files in user home directories.
smartmon_3ware (off , off)
Determine whether smartmon can support devices on 3ware controllers.
mpd_enable_homedirs (off , off)
Determine whether mpd can traverse user home directories.
...
getseboolおよびsetseboolコマンドを使用して、特定のブールの値を表示および設定できます。
getsebool boolean
sudo setsebool boolean on|off
次の例は、ftp_home_dir
ブールの値を表示および設定する方法を示しています。
getsebool ftp_home_dir
ftp_home_dir --> off
sudo setsebool ftp_home_dir on
getsebool ftp_home_dir
ftp_home_dir --> on
ブールの値を切り替えるには、次の例に示すようにtoggleseboolコマンドを使用します。
sudo togglesebool ftp_home_dir
ftp_home_dir: inactive
sudo setsebool -P ftp_home_dir on
getsebool ftp_home_dir
ftp_home_dir --> on