dedlfix: CHMOD 777

Beitrag lesen

echo $begrüßung;

Aber wer sind "halt alle"?
Alle User, die ein Passwort für den Unix-Server besitzen?

Ein Passwort ist dabei nicht vonnöten.

Es geht konkret darum, dass Dateien aus einem Verzeichnis verschwunden sind. Die Berechtigungen für das Verzeichnis waren auf 777 gesetzt, weil ein PHP Script Dateien in diesem Verzeichnis verändert.

Ja ja, das gedankenlose Setzen irgendwelcher Zahlenwerte, die einem irgendjemand sagte und die man selbst nicht verstanden hat ...

Nun hat jemand behauptet, "777" (gemeint ist natürlich das letzte w in drwxrwxrwx) würde "world writable" bedeuten und "jedermann auf der Welt" hätte diese Dateien löschen können. Darum möchte ich noch einmal jemanden, der sich mit Unix auskennt, fragen, wer nun aller wirklich Zugriff auf ein solches Verzeichnis hat.

Du hast sicher den von mir verlinkten Artikel gelesen, dann weißt du ja schon, wer User, wer Group und wer alle anderen ist.

Es ist aber bei manchen Providern nicht anders möglich, als "allen anderen" Schreibrechte zu geben, wenn man Dateien anlegen lassen möchte.

Nehmen wir an, der User martin gehört zur Gruppe users und der Apache samt PHP läuft unter nobody und der Gruppe nogroup. Das Verzeichnis web in dem deine Dateien liegen gehört dem User martin und der Gruppe users. Ein User kann zwar auch in mehreren Gruppen Mitglied sein, in diesem Beispiel gehört nobody aber keiner weiteren Gruppe an. Somit bekommt nobody nur dann Zugriff auf das Verzeichnis web, wenn web entsprechende Rechte für "alle anderen" hat, er ist ja weder martin noch der Gruppe users zugehörig.
Wenn sich auf solch einem System mehrere Benutzer den gleichen Webserver teilen, können deren Scripte also auch in fremden Verzeichnissen wildern. Wenn man "allen anderen" die Schreibrechte entzieht kann ja auch das eigene Script nicht mehr schreiben.

Es gibt verschiedene Ansätze, ein System weniger anfällig als das beschriebene Szenario zu gestalten. Und wenn du wissen möchtest, welche konkreten Wege in deinem Fall gegangen worden sein können, und welche Maßnahmen dagegen helfen können, müsstest du mindestens ermitteln:

  • User und Gruppe des Verzeichnisses
  • Username und Gruppenzugehörigkeiten des Webservers
  • Wie läuft PHP? Als Modul oder als CGI?
  • Wenn CGI: Unter welcher Kennung und zu welchen Gruppen gehört diese?

Einige Angaben liefert ein phpinfo(), einige bekommt man als normal sterblicher User nicht unbedingt raus.

echo "$verabschiedung $name";