
Ich betreibe einen experimentellen Apache-Webserver, der nur zum Spaß genutzt wird. Ein Teil der Idee hinter diesem Server ist, dass er ungewöhnlich offen für die Öffentlichkeit sein soll; zum Beispiel sollte das Root-Dateisystem für jedermann zugänglich sein. (Hier ist es tatsächlich:http://sylvester.s.zbasu.net/rootfs/) Infolgedessen wird die Sicherheit in den Hintergrund treten.
Allerdings gibt es Dinge, auf die Apache zugreifen können sollte, die Öffentlichkeit jedoch nicht. Das Beispiel, auf das ich stoße, ist eine Django-Site. Die Datei settings.py
muss für Apache lesbar sein, sonst funktioniert Django nicht. Sie settings.py
darf aber nicht für die Öffentlichkeit lesbar sein, da sie einen geheimen Schlüssel enthält. Die Datei sollte also im Besitz von sein www-data
, Apache sollte sich jedoch dennoch weigern, sie bereitzustellen.
Eine mögliche Lösung (danke an ellipsis753
Freenode) besteht darin, eine spezielle Anweisung zu erstellen, beispielsweise in einer .htaccess
Datei, die Apache anweist, diese Datei nicht bereitzustellen. Ich bin jedoch der Meinung, dass eine Datei, die nicht von allen Benutzern gelesen werden kann, wahrscheinlich auch nicht von Apache bereitgestellt werden sollte.
Kann ich Apache mitteilen, dass eine Datei nicht bereitgestellt werden soll, wenn sie nicht für alle lesbar ist?
Antwort1
Wenn Sie Ihre Django-Anwendung unter FastCGI oder im Daemon-Modus von mod_wsgi ausführen, können Sie sie als anderer Benutzer ausführen als den, unter dem Apache ausgeführt wird. Anschließend können Sie Apache und World die Berechtigung zum Lesen aller Dateien, die Sie nicht bereitstellen möchten, vollständig entziehen.
Beachten Sie beispielsweise, dass Ihre Passwortdatei/etc/shadow
ist bereits nicht zugänglich, da Apache keine Berechtigungen dafür hat und es nicht allgemein lesbar ist. Wenn Sie beispielsweise einen neuen Benutzer erstellen web-apps
und ihn WSGIDaemonProcess myapp user=web-apps ...
zur Apache-Konfiguration hinzufügen, können Sie die Django-Anwendung dem Benutzer zuordnen web-apps
, wobei seine Konfigurationsdatei nicht allgemein lesbar ist, wie dies shadow
bereits der Fall ist.