SELinux: httpd が /var/www/html 内のファイルを読み取ることができるのはなぜですか?

SELinux: httpd が /var/www/html 内のファイルを読み取ることができるのはなぜですか?

私は、ターゲットを絞った SELinux についてもっとよく理解しようとしています。ユーザー、プロセス、ポートなどに 4 つのラベルが付けられ<user>,role>,<type>,<sensitivity>、それらを使用してラベルを設定する方法はsemanage, restorecon理解していますが、プロセスからリソースにアクセスできるかどうかを SELinux がどのように判断するか、またプロセスからリソースにどのようにアクセスできるかはまだ理解していません。

たとえば、httpdREL8 を見ると、プロセスとデフォルトの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

しかし、私が求めているのは、次の質問に対する答えです。

  1. httpdプロセスが/var/www/html内のファイルにアクセスできるように許可されているのはなぜですか? ここではどのラベルがどの順序でチェックされ、どのラベルが一致する必要がありますか?
  2. roleこのアクセスが許可されている定義はどのようになっているか? 役割の定義を確認するにはどうすればいいですか
  3. プロセスが特定のラベルのリソースにどのようにアクセスできるかを判断するにはどうすればよいでしょうか?
  4. 管理者としてロールを変更して、たとえば他のファイルコンテキストにもアクセスできるようにすることはできますか??

ご説明いただければ幸いです。

答え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 ドキュメント

ご質問に回答するには:

  1. httpd プロセスが /var/www/html 内のファイルにアクセスできることがなぜ許可されているのでしょうか?ルールにより、httpd_tラベル付きのプロセスがhttpd_sys_content_tラベル付きのファイルを読み取ることが許可されるため(つまり、ALLOW apache_process apache_log:FILE READ;

  2. このアクセスが許可されることを定義するロールはどのようなものですか?ロールは、ユーザー タイプ (例: スタッフ) に MAC を適用しますが、デフォルトのポリシーでは使用されず、(デフォルト以外の) MLS ポリシーで使用されます。

  3. プロセスが特定のラベルのリソースにどのようにアクセスできるかを判断するにはどうすればよいでしょうか?ポリシーセット全体をダンプすることもできますが、これでは単純な情報は得られません。代わりに、semange fcontext -l

  4. 管理者として、たとえば他のファイル コンテキストにもアクセスできるようにロールを変更することはできますか?はい。ポリシーを最初から作成することも (非推奨)、使用することもできますaudit2allow(推奨)。ただし、カスタム ポリシーの変更は追跡/管理が難しくなるため、これを避けるようにしてください。代わりに、可能な場合は、setseboolまたはを使用してsemanage基本ポリシーをカスタマイズしてください。

関連情報