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?
Antworten:
Ändern Sie den Besitz von nichts in www-Daten, es sei denn, Sie möchten, dass PHP den Inhalt dieser Datei / dieses Ordners bearbeiten kann
Unabhängig davon, was Sie tun: Ordner benötigen Lese- und Ausführungsberechtigungen, damit der Benutzer Dateien finden kann. Dateien benötigen Leseberechtigungen, damit der Benutzer sie lesen kann. Wenn Sie beim Ändern von Dingen Berechtigungsfehler erhalten, haben Sie es geschafft, diese grundlegend erforderlichen Berechtigungen zu entfernen.
Wenn Sie keine Dateien über Ihre PHP-Anwendung schreiben, können Sie Dateien in Ihrem Besitz lassen: Sie. In diesem Fall gilt die Welterlaubnis (xx4 / 5).
Wenn Sie die Dateien als Ihr Eigentum belassen: Wenn Sie über die Dateiberechtigung 644 (Dateien) verfügen, bedeutet dies, dass nur Sie die Websitedateien bearbeiten können - www-data sind Sie nicht -, sodass die Dateien nicht bearbeitet werden können.
Wenn Sie den Zugriff auf Apache + You einschränken und alle anderen Zugriffe blockieren möchten
chown -R you:www-data *
. Mit Dateiberechtigungen von 640 und Ordnerberechtigungen von 750 können Sie bearbeiten, www-Daten können gelesen werden - denn dann liest Apache die Gruppenberechtigung (x4 / 5x).Schränken Sie die Pfade, in die Apache / PHP schreiben darf, auf ein Minimum ein - wenn es ein tmp-Verzeichnis gibt, in das die Anwendung schreiben muss - lassen Sie zu, dass es nur in diesen Ordner schreibt - und stellen Sie für alle beschreibbaren Speicherorte, wenn möglich, sicher, dass es sich außerhalb des befindet Dokument root oder ergreifen Sie Maßnahmen, um sicherzustellen, dass dieser beschreibbare Pfad nicht über das Web zugänglich ist.
Beachten Sie, dass "Sie" nicht root sein sollten. Das Zulassen des direkten SSH-Zugriffs als Root ist ein Indikator für andere Sicherheitslücken (z. B. das Nichtzulassen der Kennwortanmeldung), aber das ist eine ganze Reihe von Fragen an sich.
quelle
Dies ist nicht wahr, Sie müssen nicht auf
rwx
"Andere" setzen. Sie sollten den Eigentümer und / oder die Gruppe des bestimmten Ordners / der Datei ändern, den / die Sie schützen möchten. Z.B:Jetzt können nur Mitglieder der Gruppe
www-data
lesen/var/www/cwd.com
. Und nur Sie (cwd) können darauf schreiben. Wenn Sie Ihren Anwendungen (über Apache) erlauben möchten, Dateien auch in diesem Verzeichnis zu schreiben / zu ändern, ändern Sie dies auf 770.Ich denke, dies deckt alle Ihre Probleme ab. Ich sehe keinen Grund, den Benutzer zu ändern, unter dem Apache ausgeführt wird.
quelle