![CentOS の restorecon は fcontext の順序に従わない](https://rvso.com/image/1428727/CentOS%20%E3%81%AE%20restorecon%20%E3%81%AF%20fcontext%20%E3%81%AE%E9%A0%86%E5%BA%8F%E3%81%AB%E5%BE%93%E3%82%8F%E3%81%AA%E3%81%84.png)
ファイル コンテキストを試していると、奇妙な動作が発生し、何かが欠けているように見えます。私が行ったことは次のとおりです。
たくさんのディレクトリとファイルを作成する
# mkdir -p /virtual/www/cgi-bin
# touch /virtual/www/cgi-bin/script
# touch /virtual/www/webpage
いくつかのルールをゼロから設定する
# semanage fcontext -D
# semanage fcontext -a -t httpd_sys_script_exec_t '/virtual/www/cgi-bin(/.*)?'
# semanage -a -t httpd_sys_content_t '/virtual/www(/.*)?'
試して!
# restorecon -vr /virtual
restorecon reset /virtual/www context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /virtual/www/cgi-bin context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /virtual/www/cgi-bin/script context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /virtual/www/webpage context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
cgi-bin のより具体的なルールにもかかわらず、すべてのファイル/ディレクトリは httpd_sys_content_t タイプになります。ただし、cgi-bin ディレクトリが必要なのに、その下には httpd_sys_script_exec_t タイプがあります。何が間違っているのでしょうか?
CentOS 6 と RedHat 7 でテストした結果は同じでした。
答え1
selinux で使用されるパターンは並べ替えることができないため (例:.*b
と比較b.*
)、selinux はルールを特定度ではなく、最後に追加されたもの、最後に適用されたものの順に並べ替えます。
残念ながら、semanage fcontext -l は単純な文字列比較によってルールを順序付けます。これはルールを見つけるのに役立ちますが、複数の一致するルールをデバッグする必要がある場合には役立ちません。
実際に適用される順序は
cat /etc/selinux/targeted/contexts/files/file_contexts.local
したがって、最初により一般的なルールを追加し、次により具体的なルールを追加する必要があります。または、さらに良い方法として、ファイルごとに 1 つのルールのみが一致するような方法でルールを構築するように最善を尽くしてください。