
私は、ターゲットを絞った SELinux についてもっとよく理解しようとしています。ユーザー、プロセス、ポートなどに 4 つのラベルが付けられ<user>,role>,<type>,<sensitivity>
、それらを使用してラベルを設定する方法はsemanage, restorecon
理解していますが、プロセスからリソースにアクセスできるかどうかを SELinux がどのように判断するか、またプロセスからリソースにどのようにアクセスできるかはまだ理解していません。
たとえば、httpd
REL8 を見ると、プロセスとデフォルトのDocumentRoot
ディレクトリに次のラベルが表示されます/var/www/html
。
[root@mylinux targeted]# ls -alZ /var/www/html
total 0
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0 6 Aug 17 16:53 .
drwxr-xr-x. 4 root root system_u:object_r:httpd_sys_content_t:s0 33 Aug 17 16:53 ..
[root@mylinux targeted]# ps -efZ | grep httpd
system_u:system_r:httpd_t:s0 root 35291 1 0 13:23 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 apache 35292 35291 0 13:23 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 apache 35293 35291 0 13:23 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 apache 35294 35291 0 13:23 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 apache 35295 35291 0 13:23 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 root 35838 27088 0 13:30 pts/0 00:00:00 grep --color=auto httpd
しかし、私が求めているのは、次の質問に対する答えです。
- httpdプロセスが/var/www/html内のファイルにアクセスできるように許可されているのはなぜですか? ここではどのラベルがどの順序でチェックされ、どのラベルが一致する必要がありますか?
role
このアクセスが許可されている定義はどのようになっているか? 役割の定義を確認するにはどうすればいいですか- プロセスが特定のラベルのリソースにどのようにアクセスできるかを判断するにはどうすればよいでしょうか?
- 管理者としてロールを変更して、たとえば他のファイルコンテキストにもアクセスできるようにすることはできますか??
ご説明いただければ幸いです。
答え1
出力から:
[root@mylinux targeted]# ps -efZ | grep httpd
system_u:system_r:httpd_t:s0 root 35291 1 0 13:23 ?
httpd
ラベルとして実行されますhttpd_t
。このようなラベルは、特定の selinux ドメイン遷移ルールを介してプロセスに添付されます。
すると、次のようになります。
[root@mylinux targeted]# ls -alZ /var/www/html
total 0
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0 6 Aug 17 16:53 .
drwxr-xr-x. 4 root root system_u:object_r:httpd_sys_content_t:s0 33 Aug 17 16:53 ..
/var/www/html
には許可されたドメイン ラベルがありますhttpd_sys_content_t
。したがって、 で実行されているプロセスは、httpd_d
同じ でラベル付けされたファイルシステムのコンテンツを読み取ることができますhttpd_sys_content_t
。
これらはすべて、非常に複雑で冗長な selinux ルールによって制御されます。システム管理者がルールセット全体を理解する必要はありませんので、慌てる必要はありません。重要なのは、a) selinux ログ、b)semanage
および c)を理解することです。audit2allow
詳細については、以下をお読みください。RedHat Selinux ドキュメント
ご質問に回答するには:
httpd プロセスが /var/www/html 内のファイルにアクセスできることがなぜ許可されているのでしょうか?ルールにより、
httpd_t
ラベル付きのプロセスがhttpd_sys_content_t
ラベル付きのファイルを読み取ることが許可されるため(つまり、ALLOW apache_process apache_log:FILE READ;
)このアクセスが許可されることを定義するロールはどのようなものですか?ロールは、ユーザー タイプ (例: スタッフ) に MAC を適用しますが、デフォルトのポリシーでは使用されず、(デフォルト以外の) MLS ポリシーで使用されます。
プロセスが特定のラベルのリソースにどのようにアクセスできるかを判断するにはどうすればよいでしょうか?ポリシーセット全体をダンプすることもできますが、これでは単純な情報は得られません。代わりに、
semange fcontext -l
管理者として、たとえば他のファイル コンテキストにもアクセスできるようにロールを変更することはできますか?はい。ポリシーを最初から作成することも (非推奨)、使用することもできます
audit2allow
(推奨)。ただし、カスタム ポリシーの変更は追跡/管理が難しくなるため、これを避けるようにしてください。代わりに、可能な場合は、setsebool
またはを使用してsemanage
基本ポリシーをカスタマイズしてください。