Beim Experimentieren mit Dateikontexten bin ich auf ein seltsames Verhalten gestoßen und es sieht für mich so aus, als würde ich etwas übersehen. So gehe ich vor:
Erstellen Sie eine Reihe von Verzeichnissen und Dateien
# mkdir -p /virtual/www/cgi-bin
# touch /virtual/www/cgi-bin/script
# touch /virtual/www/webpage
Richten Sie einige Regeln von Grund auf ein
# 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(/.*)?'
Probier es aus!
# 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
Trotz der spezifischeren Regel für cgi-bin erhält jede Datei/jedes Verzeichnis den Typ httpd_sys_content_t. Ich möchte jedoch das Verzeichnis cgi-bin und darunter den Typ httpd_sys_script_exec_t. Was mache ich falsch?
Getestet in CentOS 6 und RedHat 7 mit demselben Ergebnis.
Antwort1
Da Muster, wie sie von Selinux verwendet werden, nicht sortiert werden können (z. B. vergleichen .*b
mit b.*
), sortiert Selinux die Regeln nicht nach Spezifität, sondern nach zuletzt hinzugefügter und zuletzt angewendeter Reihenfolge.
Leider sortiert semanage fcontext -l die Regeln durch einen einfachen Zeichenfolgenvergleich. Dies hilft zwar beim Auffinden Ihrer Regel, jedoch nicht, wenn Sie mehrere übereinstimmende Regeln debuggen müssen.
Die tatsächlich angewandte Reihenfolge können Sie in
cat /etc/selinux/targeted/contexts/files/file_contexts.local
Sie müssen also zuerst die allgemeinere Regel und dann die spezifischere hinzufügen. Oder, noch besser, versuchen Sie Ihr Bestes, die Regeln so zu formulieren, dass nur eine Regel pro Datei zutreffen kann.