Ich habe gerade eine Ubuntu 11.10-Box apt-get install apache2 php5
hochgefahren und bin dann gelaufen , um Apache2 und PHP 5 auf der Box zu installieren. Jetzt funktioniert es als "Webserver" und lädt das "It Works!" Seite. Jetzt versuche ich die Sicherheit zu erhöhen und habe folgende Fragen zu Linux-Webservern:
- Als wen sollte Apache laufen?
- Zu welcher Gruppe (n) sollte dieser Benutzer gehören?
- Mit welchen Paketen kann PHP (und Apache?) Als Eigentümer der Dateien ausgeführt werden? (wie bei freigegebenen Webhosts) Soll ich diese Pakete verwenden? Sind sie auf einem kleinen System einfach / machbar zu warten?
- Wie sollten die Standardberechtigungen für Dateien und Ordner lauten, die mit Apache im Web bereitgestellt werden
www-data
? Für Apache / PHP als Benutzer ausgeführt?
Bei der Überprüfung des Standard-Setups habe ich folgende Dinge getan:
Dateistruktur
Wenn ich cd /
eine ls -al
Auflistung der Inhalte mache , sehe ich /var
:
drwxr-xr-x 13 root root 4096 2012-02-04 20:47 var/
Wenn ich cd
in var
und sehe, ls -al
sehe ich:
drwxr-xr-x 2 root root 4096 2012-02-04 20:47 www/
Schließlich /var/www
sehe ich innen :
drwxr-xr-x 2 root root 4096 2012-02-04 20:47 ./
drwxr-xr-x 13 root root 4096 2012-02-04 20:47 ../
-rw-r--r-- 1 root root 177 2012-02-04 20:47 index.html
Mein Schlüssel zum Mitnehmen ist, dass bis jetzt alle diese Dateien gehören root:root
, Dateien Berechtigungen von 644 haben und Verzeichnisse Berechtigungen von 755 haben.
Apache's Berechtigungen
Wenn ich eine Datei als root /var/www/test.php
mit dem Inhalt erstelle :
<?php echo shell_exec('whoami');
und lade diese Datei in einen Browser, der mir sagt www-data
, das ist das gleiche wie in der /etc/apache2/envvars
Datei:
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
Wenn ich das tue, ps aux | grep -i apache
sehe ich Folgendes:
root 1916 1.2 104664 7488 Ss 20:47 /usr/sbin/apache2 -k start
www-data 1920 0.8 105144 5436 S 20:47 /usr/sbin/apache2 -k start
www-data 1921 1.0 105144 6312 S 20:47 /usr/sbin/apache2 -k start
www-data 1922 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
www-data 1923 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
www-data 1924 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
www-data 1925 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
Also, wer läuft als Apache? Es sieht so aus, als ob der erste Prozess wie der root
aus dem /etc/init.d/apache
Skript stammt, als das System gestartet wurde, und die anderen wie www-data
der erste. Ist das korrekt?
Als nächstes groups www-data
sehe ich , wenn ich eingebe, www-data : www-data
dass es nur in der www-data
Gruppe zu sein scheint. Ich schätze, das ist auch Standard.
Shared Hosting und Sicherheit
Also, wenn ich die Dinge richtig verstehe, wenn Apache als ausgeführt wird www-data
und Apache ein Verzeichnis lesen kann, muss das x
Bit für die world (other) group ( o+x
) gesetzt sein, und das muss auch für alle Eltern gesetzt sein Verzeichnisse bis zum Ende der Kette ( www
, var
). Und wenn Apache in der Lage sein soll, aus einer Datei zu lesen, muss das o+r
Bit gesetzt werden.
Leider glaube ich, dass dies eine Sicherheitslücke für mehrere Anwendungen und / oder mehrere Benutzer auf derselben Linux-Box mit sich bringt: Alle Webdateien müssen weltweit lesbar sein, und daher können auch andere Anwendungen und andere Benutzer auf dem System auf sie zugreifen. Wenn eine auf dem System installierte Anwendung eine Sicherheitslücke aufweist, die eine unbearbeitete Benutzereingabe zulässt, die dann von PHP ausgeführt wird, kann ein entfernter Angreifer alle anderen Dateien auf dem Websystem durchsuchen, die weltweit lesbar sind. Wenn die Box mehrere Benutzer hatte und ein Benutzer den Pfad der Webdateien eines anderen Benutzers kannte, konnte er den Dateiinhalt lesen (und vertrauliche Dinge wie Datenbankverbindungszeichenfolgen usw. sehen).
Ich bin aus zwei Paketen gehört, suphp
und phpsuexec
die sich mit der Benutzer Dateien ermöglicht ‚ wie sie‘ serviert werden aus auf einem gemeinsamen System. Eine der Besonderheiten dabei ist, dass Webanwendungen (wie Wordpress) Dateien erstellen und ändern können - sehr hilfreich beim Hinzufügen von Designs, Plugins und beim Aktualisieren von Software. Natürlich ist es wahrscheinlich sicherer, diese Dinge manuell zu erledigen, aber kann man vielleicht mit einem der oben genannten Pakete einen Kompromiss eingehen? Oder indem Sie möglicherweise verwenden chown
, um die WordPress-Verzeichnisgruppe zur Gruppe zu gehören www-data
und das Sticky-Bit für die Gruppe zu setzen ( g+s
)?
Ich habe diese nur als Endbenutzer eines Webhosting-Unternehmens verwendet und weiß daher nicht, wie sie aussehen und ob sie sich überhaupt auf einem kleinen System installieren lassen oder ob es andere gibt Sicherheitsmaßnahmen, die ich stattdessen anwenden sollte, aber ich dachte, ich würde sie hier erwähnen, da sie eine Möglichkeit darstellen, einige meiner Bedenken auszuräumen.
Zurück zu den Fragen
- Als wen sollte Apache laufen?
- Zu welcher Gruppe (n) sollte dieser Benutzer gehören?
- Mit welchen Paketen kann PHP (und Apache?) Als Eigentümer der Dateien ausgeführt werden? (wie bei freigegebenen Webhosts) Soll ich diese Pakete verwenden? Sind sie auf einem kleinen System einfach / machbar zu warten?
- Wie sollten die Standardberechtigungen für Dateien und Ordner lauten, die mit Apache im Web bereitgestellt werden
www-data
? Für Apache / PHP als Benutzer ausgeführt?