8.3.4. Permissive ドメイン
SELinux が permissive モードで実行されていると、SELinux はアクセスを拒否しませんが、enforcing モードでは拒否されたであろうアクションの拒否がログに記録されます。以前は、単一ドメイン permissive の作成はできませんでした (ドメインのプロセス実行)。特定の状況ではこの結果、システム全体の permissive が解決が必要な問題となっていました。
Red Hat Enterprise Linux 4 および 5 では、
domain_disable_trans
ブール値はアプリケーションが制限のあるドメインに移行することを防ぐために利用可能で、このため initrc_t
といった制御のないドメインでプロセスが実行されます。その結果、このようなブール値をオンにすると大きな問題が発生する可能性があります。例えば、 httpd_disable_trans
ブール値をオンにすると、以下のようなことが発生します。
httpd
サービスが制限のないinitrc_t
ドメインで実行されます。initrc_t
ドメインで実行中のプロセスが作成したファイルは、httpd_t
ドメインで実行中のプロセスが作成したファイルに適用されるラベリングルールとは違うラベリングルールが適用され、プロセスは間違ったラベルのファイルの作成を許可される可能性があります。これは後で、アクセス問題を引き起こします。httpd_t
との通信が許可されている制限のあるドメインは、initrc_t
とつ通信できず、新たな失敗を引き起こす可能性があります。
この問題に対処するために、Red Hat Enterprise Linux 6 では permissive ドメイン が導入されます。これは、管理者がシステム全体を permissive にするのではなく、単一プロセス (ドメイン) を permissive で実行する設定を可能にするものです。permissive ドメインでは SELinux チェックは引き続き行われますが、カーネルがアクセスを許可し、SELinux がアクセスを拒否したであろう状況の AVC 拒否をレポートします。
Permissive ドメインには以下の利点があります。
- システム全体を permissive にして危険にさらすことなく、単一のプロセス (ドメイン) を permissive にして問題解決ができます。
- 管理者が新たなアプリケーション用のポリシーを作成できます。以前は最低限のポリシーを作成し、マシン全体を permissive モードにすることでアプリケーションが実行できるようにすることが推奨されていましたが、SELinux 拒否はログ記録されていました。そして
audit2allow
を使ってポリシーを記述することができました。これは、システム全体を危険にさらしていました。permissive ドメインでは、新規ポリシー内のドメインのみが permissive でマークされるので、システム全体を危険にさらすことはありません。
8.3.4.1. ドメインを permissive にする
ドメインを permissive にするには、
semanage permissive -a domain
コマンドを実行します。ここでの domain は、permissive にするドメインのことです。例えば、Linux root ユーザーで以下のコマンドを実行し、httpd_t
ドメイン (Apache HTTP Server が稼働するドメイン) を permissive にします。
~]# semanage permissive -a httpd_t
permissive にしたドメインを一覧表示するには、Linux root ユーザーで
semodule -l | grep permissive
コマンドを実行します。以下のようになります。
~]# semodule -l | grep permissive
permissive_httpd_t 1.0
permissivedomains 1.0.0
ドメインが permissive である必要がなければ、
semanage permissive -d domain
コマンドを Linux root ユーザーで実行します。以下のようになります。
~]# semanage permissive -d httpd_t