Nach meinem derzeitigen Verständnis müssen Sie restorecon
den gewünschten Kontext manuell auf eine neu erstellte Datei oder ein neu erstelltes Verzeichnis anwenden, es sei denn, Sie sind mit dem Kontext zufrieden, den es von seinem übergeordneten Verzeichnis erbt.
Ich frage mich, ob es möglich ist, einen Kontext basierend auf seinem Pfad automatisch auf die Erstellung anzuwenden, ohne ausgeführt werden zu müssen restorecon
.
Ich habe ein bisschen gegoogelt und diesen Beitrag von Dan Walsh gefunden, in dem er erwähnt restorecond
, inotify
wie sich der Kontext bei der Erstellung ändert. Er weist auch auf das offensichtliche Problem damit hin (Rennbedingung). Ist dies die einzige Möglichkeit, das Problem der erneuten Kontextualisierung automatisch zu lösen, falls ein Kind seinen Kontext nicht vom übergeordneten Verzeichnis erben sollte?
Ein Problem ist, dass restorecond
Einträge nicht so behandelt werden, wie /etc/selinux/targeted/contexts/files/file_contexts
keine regulären Ausdrücke, und dass sie nicht rekursiv funktionieren und daher so /etc/selinux/restorecond.conf
etwas nicht enthalten können
/var/www(/.*)?/logs(/.*)?
oder
/var/www/*
oder auch
/var/www/*/logs
Gibt es eine Möglichkeit, dieses Problem zu umgehen?
BEARBEITEN:
Gemäß der Antwort von @ Michael sollte dies OOTB funktionieren, wenn eine entsprechende Regel existiert, aber nicht:
# rm -rf /var/www/foo
# semanage fcontext -a -t httpd_log_t '/var/www/foo/logs'
# grep '/var/www.*logs' /etc/selinux/targeted/contexts/files/file_contexts*
/etc/selinux/targeted/contexts/files/file_contexts:/var/www(/.*)?/logs(/.*)? system_u:object_r:httpd_log_t:s0
/etc/selinux/targeted/contexts/files/file_contexts.local:/var/www/foo/logs system_u:object_r:httpd_log_t:s0
# matchpathcon /var/www/foo/logs
/var/www/foo/logs system_u:object_r:httpd_log_t:s0
# mkdir -p /var/www/foo/logs
# touch /var/www/foo/logs/quux
# ls -alZ /var/www/foo/logs*
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 .
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 ..
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 quux
# restorecon -vR /var/www/foo
restorecon reset /var/www/foo/logs context unconfined_u:object_r:httpd_sys_content_t:s0->unconfined_u:object_r:httpd_log_t:s0
restorecon reset /var/www/foo/logs/quux context unconfined_u:object_r:httpd_sys_content_t:s0->unconfined_u:object_r:httpd_log_t:s0
file_contexts
mit der Installation geliefert . Da das nicht funktionierte, fügte ich den zweiten mit semanage fcontext
einem einfachen absoluten Pfad und ohne weitere Regex-Magie hinzu, also stimme ich zu, dass das funktionieren sollte. Ich habe sowohl einen CentOS 6.0- als auch einen CentOS 6.3-Server ausprobiert und es funktioniert auf keinem von beiden. Hm.