Nach meinem derzeitigen Verständnis müssen Sie restoreconden 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, inotifywie 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 restorecondEinträge nicht so behandelt werden, wie /etc/selinux/targeted/contexts/files/file_contextskeine regulären Ausdrücke, und dass sie nicht rekursiv funktionieren und daher so /etc/selinux/restorecond.confetwas 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_contextsmit der Installation geliefert . Da das nicht funktionierte, fügte ich den zweiten mit semanage fcontexteinem 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.