Ich arbeite mit der Systemadministration an einer Universität und bin nur auf etwas gestoßen, was wahrscheinlich üblich ist, aber für mich ein ziemlicher Schock war.
Alle public_html-Verzeichnisse und Webbereiche werden auf afs mit Leseberechtigungen für die Webserver gespeichert. Da Benutzer PHP-Skripte in ihrer public_html haben dürfen, bedeutet dies, dass sie über PHP (und die wichtigsten Webdateien!) Auf die Dateien der anderen zugreifen können.
Dies macht nicht nur jeden .htaccess-Passwortschutz völlig unbrauchbar, sondern ermöglicht es Benutzern auch, PHP-Quelldateien zu lesen, die MySQL-Datenbankkennwörter und ähnliche vertrauliche Informationen enthalten. Oder wenn sie feststellen, dass andere Personen Verzeichnisse haben, in denen die Webserver Schreibzugriff haben (z. B. für persönliche Protokolle oder zum Speichern übermittelter Formulardaten), können sie Dateien in diesen Konten speichern.
Ein einfaches Beispiel:
<?
header("Content-type: text/plain");
print file_get_contents("/afs/example.com/home/smith/public_html/.htpasswd");
?>
Ist das ein häufiges Problem? Und wie löst man das normalerweise?
AKTUALISIEREN:
Danke für die Eingabe. Leider scheint es keine einfache Antwort zu geben. In einer großen gemeinsamen Umgebung wie dieser sollten Benutzer wahrscheinlich nicht so viel Auswahl haben. Der beste Ansatz, den ich mir vorstellen kann, ist, "open_basedir" in der Hauptkonfiguration für alle "public_html" -Verzeichnisse festzulegen, suphp auszuführen und nur sauberes PHP zuzulassen (keine CGI-Skripte, externe Befehle mit Backticks usw. ausführen).
Eine solche Änderung der Richtlinie würde jedoch eine Menge Probleme verursachen und möglicherweise dazu führen, dass Benutzer ihre Mistgabeln greifen und uns verfolgen ... Ich werde dies mit meinen Kollegen besprechen und hier aktualisieren, wenn wir eine Entscheidung über die Änderung des Setups treffen.
quelle
open_basedir
unten stehende Lösung auf gemeinsam genutzten Produktionshosting-Systemen verwendet, aber wir haben alle in ihren eigenen vhost aufgeteilt - Ich bin mir nicht sicher, ob es für einzelne Verzeichnisse funktioniert ...Antworten:
Man kann suphp verwenden, das das PHP-Skript mit der UID seines Besitzers ausführt.
http://www.suphp.org
quelle
check_vhost_docroot
, aber AFAIK, die nur für das Skript gilt, das ausgeführt wird (? Ich könnte mich darin irren)Mein Vorschlag wäre, den Zugriff von PHP auf Dateien zu beschränken (über
open_basedir
& ähnliche Anweisungen, pro Host): Sie möchten, dass Benutzer Dateien unter ihrer Webroot öffnen / lesen / schreiben können und möglicherweise eine Ebene darüber (für Scratch) Leerzeichen), aber kein Verzeichnis, in dem sie zhtpasswd
. B. Dateien speichern würden .Eine Verzeichnisstruktur wie:
Würde diese Anforderung erfüllen:
open_basedir
könnte/Client/site
sicher gezeigt undhtpasswd
Dateien gespeichert werden/Client/auth
(mit.htaccess
Dateien oderhttpd.conf
geändert, um stattdessen auf den entsprechenden Ort zu zeigen).Dies verhindert, dass Ihre Kunden die Dateien anderer öffnen, UND als Vorteil können böswillige Benutzer das Material nicht einlesen
/Client/auth
(oder irgendetwas anderes auf Ihrem System, wie/etc/passwd
:-)Weitere Informationen zur Implementierung von open_basedir & per-vhost finden Sie unter http://php.net/manual/en/ini.core.php .
quelle
suphp
Wie von cstamas festgestellt, ist dies auch in einer Shared-Hosting-Umgebung eine wirklich gute Idee. Die Einrichtung ist mit einem geringen Aufwand verbunden, aber ich würde sagen, dass sich der Sicherheitsgewinn absolut lohnt. Wenn Sie nicht alle Ihre PHP-Sites in einem FreeBSD-Gefängnis oder einer dedizierten virtuellen Maschine sandboxen, ist dies einer der größten Sicherheitsgewinne.open_basedir
innerhalb einer <Directory> -Direktive zu setzen, aber ich denke, es sollte zulässig sein ("try it and see" - das Schlimmste, was es tun kann, ist, nicht zu funktionieren :)Nein, dies ist kein häufiges Problem, da die meisten freigegebenen Hosts eine open_basedir-Konfiguration in der htaccess-Datei im Verzeichnis public_html jedes Benutzers definieren (oder im vhost, wenn jeder Benutzer seinen eigenen vhost hat).
zB der .htaccess-Datei:
Stellen Sie jedoch sicher, dass Sie die richtigen Berechtigungen für die .htaccess-Datei festlegen, um zu verhindern, dass der Benutzer das open_basedir ändert (wenn er versucht, es in subdir / .htaccess zu überschreiben, sollte es nicht funktionieren - aber Sie sollten dies wahrscheinlich testen, um sicherzustellen). .
HTH
C.
quelle
AFS ignoriert einfache Unix-Benutzerberechtigungen. suPHP führt eine Setuid aus, bevor das PHP-Programm ausgeführt wird. Dadurch erhält der Prozess jedoch nicht die Kerberos-Token, die für den Zugriff auf AFS erforderlich sind, und ist auf seine Berechtigungen beschränkt. suPHP müsste auf irgendeine Weise modifiziert werden, um diese Token zu erhalten, bevor es sich dem AFS-System als dieser Benutzer präsentieren könnte. Soweit ich weiß, wurde dies nicht getan. (Tatsächlich fand ich diese Frage, als ich nachschaute, ob jemand anderes dies getan hatte.)
quelle