Unser Unternehmen verfügt über einen Webserver mit CentOS 7 und unsere Kunden verwalten ihre Websites über FTP (vsftpd). SELinux befindet sich im Durchsetzungsmodus.
Das Problem ist, dass über VSFTPD erstellte / hochgeladene Daten nicht den entsprechenden SELinux-Kontext erben. Lassen Sie mich erklären.
Für WordPress-Sites verfügt der Server beispielsweise bereits über einige Regeln, die mithilfe folgender Regeln angezeigt werden können semanage fcontext -l |grep '/var/www'
:
/var/www/html(/.*)?/uploads(/.*)? all files system_u:object_r:httpd_sys_rw_content_t:s0
/var/www/html(/.*)?/wp-content(/.*)? all files system_u:object_r:httpd_sys_rw_content_t:s0
Wenn ich also eine WordPress-Site kopiere, sagen wir von einem anderen Server in ein Verzeichnis /var/www/html/
von SSH, die Ordner wp-content/
und wp-content/uploads/
den richtigen httpd_sys_rw_content_t
Sicherheitskontext. Wenn diese Ordner jedoch über FTP erstellt werden, erhalten sie den Kontext httpd_sys_content_t
(no rw ). Dies bedeutet, dass die Websites, die unsere Kunden auf den Server hochladen, nicht in diese Verzeichnisse schreiben können, selbst wenn sie dem Apache-Benutzer / der Apache-Gruppe Schreibberechtigungen erteilen, sodass der WordPress-Administrator nicht funktioniert. Wenn sie eine Website hochladen, müssen sie uns um Unterstützung bitten, um dies zu beheben. Dies ist Zeitverschwendung für alle Beteiligten.
Nehmen wir an, der Kunde hat seine Website in hochgeladen httpdocs
. Wenn mv httpdocs/ httpdocs.2/ && cp -pr httpdocs.2/ httpdocs/ && rm httpdocs.2/ -fr
das Problem durch SSH behoben wird, ist an den Daten nichts auszusetzen.
Ich kann auch tun restorecon -Rv httpdocs/
, um das Problem zu beheben.
Die Frage ist also: Wie kann ich die über VSFTPD erstellten / hochgeladenen Verzeichnisse die richtigen SELinux-Kontexte erben lassen, so wie sie geerbt werden, wenn die Verzeichnisse über SSH erstellt / hochgeladen werden?
Antworten:
Es gibt einen Unterschied zwischen der Standardbeschriftung zur Laufzeit und der auf regulären Ausdrücken basierenden Nachbeschriftungsrichtlinie, die auf dem Server gilt.
Was Sie hier bemerken:
Ist die Post-Labeling-Richtlinie.
Was Sie in Ihrem Problem besprechen, bezieht sich tatsächlich auf die Laufzeitrichtlinie.
Wenn ein Eintrag in einem Verzeichnis mit SELinux erstellt wird, werden die Regeln für die Bezeichnung der Datei oder des Verzeichnisses nicht durch die von Ihnen zitierten regulären Ausdrücke bestimmt, sondern durch andere Regeln wie folgt (ich glaube, dies ist die richtige Reihenfolge, hat aber möglicherweise etwas übersehen). .
type_transition
Regel.type_transition
Regel.default_context
.Also, ja, das tut es, aber nicht aus dem Grund, den Sie denken. Sicherlich nicht wegen der Post-Labeling-Richtlinie.
Dies liegt daran, dass eine bestimmte benannte
type_transition
Regel vorhanden ist, die dieses Verhalten bereitstellt.Das heißt im Grunde.
unconfined_t
undhttpd_sys_content_t
httpd_sys_rw_content_t
Der Grund, warum dies für SSHD funktioniert, ist, dass Sie nach dem Anmelden den Quellkontext erhalten,
unconfined_t
für den diese Regel gilt.Dies funktioniert für den FTP-Dienst nicht, da der Quellkontext dieses Dienstes höchstwahrscheinlich
ftpd_t
keine Übereinstimmungsregel enthält.Daher müssen Sie die Richtlinie ändern, um das Verhalten von SELinux zu ändern und auch die benannten Dateiregeln zu berücksichtigen, die Sie auch in den anderen Einträgen für FTP sehen.
Zumindest in Fedora 23 gibt es eine Schnittstelle, um dies zu ermöglichen. Ein Richtlinienmodul wie dieses würde dies tun.
Sie können dies laden, indem Sie sicherstellen, dass das
selinux-policy-devel
Paket installiert ist und ausgeführt wirdmake -f /usr/share/selinux/devel/Makefile load
.quelle
local_ftpd.te
mit Ihrem Richtlinienmodul erstellt, dann habe ich es getanmake -f /usr/share/selinux/devel/Makefile local_ftpd.pp
und dannsemodule -i local_ftpd.pp
. Ist das ok? Jetzt erben die über FTP erstellten Dateien die gewünschten Kontexte. Danke noch einmal!