Einen SELinux-Denial durch Verschieben einer Datei mit falschem Kontext auslösen
In diesem Schritt sehen Sie, was passiert, wenn eine Datei mit einem falschen SELinux-Kontext in das Apache-Webverzeichnis verschoben wird. Dies ist ein häufiges Szenario, das verwirrend sein kann, wenn Sie nicht wissen, wie SELinux-Kontexte mit Dateioperationen wie mv
funktionieren. Im Gegensatz zur Erstellung einer Datei direkt in einem Verzeichnis (wodurch sie den Standardkontext des übergeordneten Verzeichnisses erbt), behält das Verschieben einer Datei ihren ursprünglichen Kontext bei.
Erstellen wir zunächst eine neue Webseite, page2.html
, in Ihrem aktuellen Arbeitsverzeichnis, ~/project
.
echo "This is Page 2" > page2.html
Überprüfen Sie nun den SELinux-Kontext dieser neuen Datei. Da sie in Ihrem Home-Projektverzeichnis erstellt wurde, erhält sie einen Standardkontext, der für Benutzerdateien zugewiesen wird.
ls -Z page2.html
Die Ausgabe zeigt einen Kontexttyp von user_home_t
oder etwas Ähnliches an, was der Standard für Dateien im Home-Verzeichnis eines Benutzers ist.
system_u:object_r:user_home_t:s0 page2.html
Beachten Sie, dass der Typ user_home_t
ist. Dies unterscheidet sich von httpd_sys_content_t
, auf das Apache zugreifen darf.
Verschieben Sie diese Datei als Nächstes mit dem Befehl mv
in das Apache-Web-Root-Verzeichnis. Sie benötigen sudo
, da das Zielverzeichnis /var/www/html
root
gehört.
sudo mv page2.html /var/www/html/
Der Befehl mv
behält den SELinux-Kontext der Quelldatei bei. Überprüfen wir dies, indem wir den Kontext der Datei an ihrem neuen Speicherort überprüfen.
ls -Z /var/www/html/page2.html
Wie Sie sehen können, hat sich der Kontext nicht geändert. Er ist immer noch user_home_t
, obwohl sich die Datei nun im Verzeichnis /var/www/html
befindet.
system_u:object_r:user_home_t:s0 /var/www/html/page2.html
Versuchen Sie nun, auf diese neue Seite mit curl
zuzugreifen. SELinux wird den Zugriff aufgrund der Kontextabweichung blockieren.
curl http://localhost/page2.html
Sie erhalten vom Server eine "403 Forbidden"-Fehlermeldung. Dies ist kein traditionelles Problem mit Dateiberechtigungen; es ist SELinux, das seine Sicherheitsrichtlinie durchsetzt und dem httpd
-Prozess den Zugriff auf eine Datei mit dem Label user_home_t
verweigert.
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /page2.html
on this server.</p>
</body></html>
Dies demonstriert ein klassisches SELinux-Problem. Im nächsten Schritt lernen Sie, wie Sie dies durch Ändern des Dateikontexts beheben können.