ubuntuusers.de

apache phprojekt Schreibrechte

Status: Gelöst | Ubuntu-Version: Ubuntu
Antworten |

delcour

Avatar von delcour

Anmeldungsdatum:
20. April 2005

Beiträge: 655

Wohnort: Berlin

Hallo!

Das Brett Sicherheit habe ich gewählt, weil mein Problem mit dem Rechtekonzept von Linux zusammenhängt bzw. dadurch verursacht ist.

Apache 2, mySQL, php5 usw. sind installiert und scheinen zu laufen. Außerdem habe ich den tar-Ball von phprojekt Version 5.2 nach /var/www/phprojekt52 kopiert (als root). Wenn ich in der URL-Zeile meines Browsers "localhost" eingebe, sehe ich

Index of /

[DIR] apache2-default/ 26-Jul-2006 19:50 -
[DIR] phpmyadmin/ 30-Aug-2006 03:05 -
[DIR] phprojekt52 20-Dec-2006 12:00 -

Das Rechtesystem von Linux habe ich nach knapp 10 Jahren noch immer nicht begriffen, auch wenn ich hin und wieder glaubte, dass dies endlich der Fall sei. Aber die Praxis belehrt mich leider immer wieder eines frustrierenden Besseren. ☹

1) IDer Eigentümer von /var/www und allem darunter ist root. Die Gruppe ist ebenfalls root. Da ich unter diesem Pfad die Berechtigungen der Dateien und Verzeichnisse nicht wechseln wollte, habe ich meinen normalen User zur Gruppe root hinzugefügt, um nicht immer als root an HTML-Seiten arbeiten zu müssen. Aber auch wenn mein normaler User der Gruppe root angehört kann ich dennoch im Pfad /var/www keine ["eine" war ein Tippfehler] Datei anlegen, obwohl das nach meinem - offensichtlich falschen - Verständnis für die Angehörigen der Gruppe root zulässig sein sollte, wenn die Rechte auf 0774 bzw. rwxrwxr-- lauten. Was mache ich falsch?

2) Darum habe ich mit sudo chown -R delcour:delcour /var/www/* und chmod delcour:delcour /var/www die Berechtigungen geändert. Damit hatte ich zwar Schreibrecht, aber die Setuproutine von phprojekt blieb ohne Fehlermeldung einfach stehen. An phprojekt wird es nicht liegen; denn auf meinem Webserver, wo ich zum Kopieren der Dateien nur einen FTP-Zugang habe, die Datenbank mit phpmyadmin bereitstelle und die übrige Installation über den Browser geschieht klappt. Nur lokal zum Testen klappt es nicht. Was hat mein Provider im Gegensatz zu Ubuntu mit meinen Modifikationen anders eingestellt?

3) Ich habe alles mit apache, php usw. deinstalliert und das komplette Verzeichnis /var/www gelöscht. Dann habe ich alles wieder installiert. Es ist also wieder in einem jungfräulichen Zustand. Das Phprojekt habe ich als root mit mc aus dem tar heraus nach /var/www/phprojekt52 extrahiert. Jetzt will ich das setup.php über http://localhost/phprojekt/setup.php starten und bekomme die Meldung:

Alert: Cannot create file config.inc.php!
The webserver needs the permission to write the file config.inc.php in the PHProjekt root directory.

Die Meldung ist klar. Die Lösung leider nicht. Google liefert unzählige Fundstellen, wo die Frage gestellt wird. Falls darauf jemand geantwortet hat, lautete die Antwort unisono etwa "Das steht doch dort: Gib dem Webserver Schreibrechte!".

Das ist zwar eine formal richtige, aber nicht hilfreiche Antwort. Das wusste der jeweilige Fragesteller und weiß ich auch.

Wie macht man das?

Ein Schreibrecht kann man nach meiner Kenntnis entweder über chmod oder indirekt über den Eigentümer setzen. Außerdem sollte es über die Gruppenzugehörigkeit gehen, wobei mir die Bedeutung der Gruppenzugehörigkeit schleierhaft ist, weil - siehe 1) - ein Schreibrecht für eine Gruppe anscheinend noch lange nicht ein Schreibrecht für die Angehörigen der Gruppe bedeutet - warum eigentlich nicht?

Es wird doch einen Grund haben, dass Ubuntu, das Verzeichnis /var/www dem User und der Gruppe root zuordnet und es für einen User Apache (wie immer der auch heißen mag: www? nobody?) kein Schreibrecht eingerichtet hat.

Gruß

Delcour

Elektranox

Avatar von Elektranox

Anmeldungsdatum:
19. Juli 2005

Beiträge: 417

Wohnort: Oldenburg

also ich hab es so gelöst, dass ich die group Datei editiert habe und mich selbst der Gruppe "www-data" hinzugefügt habe, die standardmäßig die vom apache ist. Desweiteren habe ich folgende Order Rechte auf /var/www:

(01:10) elektranox@merkur:~$ ls -ld /var/www
drwxrwxr-x 16 root www-data 4096 2007-01-13 17:42 www

Übrigens müssen Ordner ausführbar sein, damit man sie betreten kann. Das heißt, dass du evtl. für "andere User" auch noch das Ausführbit setzen solltest

> In meinem Debian wird es /var/www übrigens by default an root:www-data gegeben 😉 Alle Dateien die ich erstelle (per Nautilus) werden dann automatisch an elektranox:elektranox gegeben, die änderst du dann nach username:www-data. Wenn du dann www-data alle Rechte gibst, hat auch php alle Rechte dran (Vorrausgesetzt du vergibst auch gruppenrechte)

otzenpunk Team-Icon

Avatar von otzenpunk

Anmeldungsdatum:
17. Oktober 2005

Beiträge: 8691

Wohnort: Hamburg-Altona

delcour hat geschrieben:

1) IDer Eigentümer von /var/www und allem darunter ist root. Die Gruppe ist ebenfalls root. Da ich unter diesem Pfad die Berechtigungen der Dateien und Verzeichnisse nicht wechseln wollte, habe ich meinen normalen User zur Gruppe root hinzugefügt, um nicht immer als root an HTML-Seiten arbeiten zu müssen. Aber auch wenn mein normaler User der Gruppe root angehört kann ich dennoch im Pfad /var/www eine Datei anlegen, obwohl das nach meinem - offensichtlich falschen - Verständnis für die Angehörigen der Gruppe root zulässig sein sollte, wenn die Rechte auf 0774 bzw. rwxrwxr-- lauten. Was mache ich falsch?

Meintest du vielleicht "...kann ich dennoch im Pfad /var/www keine Datei anlegen,..."? Ansonsten verstehe ich die Frage nicht.
Ja, du müsstest dann eigentlich Dateien dort anlegen können, obwohl ich davon abraten würde, der root-Gruppe beizutreten (s.u.). Gruppenzugehörigkeiten ändern sich aber erst bei einem erneuten Login. Hast du dich vielleicht nicht zwischendurch ausgeloggt, nachdem du dich der Gruppe root hinzugefügt hast?
delcour hat geschrieben:

Es wird doch einen Grund haben, dass Ubuntu, das Verzeichnis /var/www dem User und der Gruppe root zuordnet und es für einen User Apache (wie immer der auch heißen mag: www? nobody?) kein Schreibrecht eingerichtet hat.

Genau das ist richtig. Die Lösung von Elektranox ist deshalb suboptimal und nicht empfehlenswert. Der Grund ist der, dass immer mal Programmierfehler in den Webinhalten vorkommen können, die einem Angreifer erlauben Dateien zu erstellen oder zu überschreiben. Wenn der Webserver jetzt Schreibrechte auf das komplette /var/www hat, so wird aus diesen Schreibrechten sofort eine vollständige Kompromittierung des gesamten Servers. Der Angreifer kann dann den Quellcode der Webapplikation selber manipulieren und bspw. eine Passwort-Sammel-Funktion einbauen oder andere Scherze.

Der Apache (User und Group www-data) sollte deswegen so wenig Schreibrechte wie möglich erhalten, am besten gar keine. (In die Konfigdateien der Applikation muss er natürlich schreiben können.)

Stattdessen sollte der Webmaster dort schreiben können ohne root-Rechte zu benötigen. Wenn man den Server alleine administriert, empfiehlt sich deshalb, einfach mit chown -R benutzername /var/www das gesamte Verzeichnis zu übernehmen. Wenn man sich die Arbeit mit mehreren teilt, kann man auch eine Gruppe webmaster erstellen und das Verzeichnis dann root.webmaster geben. Dabei dann natürlich darauf achten, dass die Gruppenschreibrechte gesetzt sind.

Nun hast du einen Server, wo du selber überall schreiben kannst, aber der Webserver nicht. Deshalb musst du jetzt Stück für Stück dort Schreibrechte gewähren, wo es notwendig ist. (Eigentlich sollte das in der Doku der Software stehen.) Wie du diese Schreibrechte gewährst, hängt davon ab, wem /var/www denn nun gehört. Wenn du dir selber die Schreibrechte über deinen User gegeben hast, kannst du ganz /var/www der Gruppe www-data zuordnen, und dieser Gruppe bei Bedarf Schreibrechte auf bestimmte Verzeichnisse oder Dateien geben. Wenn du eine webmaster-Gruppe verwendest, musst du das über "world-writable"-Rechte machen.

Wenn es irgendwie geht, vermeide, dass man Dateien aus dem schreibbaren Bereich von außerhalb aufrufen kann. Konfigdateien, die bspw. von PHP über include geladen werden, müssen in der Regel niemals in einem Browser aufgerufen werden. Deswegen kann man sie z.B. alle in ein Verzeichnis stecken und über eine htaccess-Datei den direkten Zugriff darauf unterbinden. Oder man verlegt die gleich außerhalb des DocumentRoot.

Alert: Cannot create file config.inc.php!
The webserver needs the permission to write the file config.inc.php in the PHProjekt root directory.

Offensichtlich regelt phproject das nicht so paranoid, wie ich das machen würde. 😉
Ich hoffe aber mal, dass phproject nicht ständig neue Dateien im Hauptverzeichnis anlegen will, sondern nur während des Installationsvorgangs. Vielleicht reicht es, einfach diese Datei (und evtl. weitere aus zukünftigen Fehlermeldungen) mit touch anzulegen und Schreibrechte für www-data zu geben. Wenn das nicht klappt, (weil sich der Installer z.B. beschwert, dass die "Datei schon vorhanden" ist,) dann musst du doch vorerst Schreibrechte für das Hauptverzeichnis verteilen, solltest diese aber nach erfolgreicher Installation wieder entziehen.

delcour

(Themenstarter)
Avatar von delcour

Anmeldungsdatum:
20. April 2005

Beiträge: 655

Wohnort: Berlin

Meintest du vielleicht "...kann ich dennoch im Pfad /var/www keine Datei anlegen,..."? Ansonsten verstehe ich die Frage nicht.
Ja, du müsstest dann eigentlich Dateien dort anlegen können, obwohl ich davon abraten würde, der root-Gruppe beizutreten (s.u.). Gruppenzugehörigkeiten ändern sich aber erst bei einem erneuten Login. Hast du dich vielleicht nicht zwischendurch ausgeloggt, nachdem du dich der Gruppe root hinzugefügt hast?

Ich meinte "keine". Ich hatte mich nicht neu eingeloggt.

Ich hoffe aber mal, dass phproject nicht ständig neue Dateien im Hauptverzeichnis anlegen will, sondern nur während des Installationsvorgangs.

So ist es. Und man soll die Rechte der Konfigdatei nach der Installation anpassen.

Vielen Dank Euch beiden. Das Problem mit dem Schreibzugriff ist gelöst.

Die Installation klappt zwar immer noch nicht, aber die Probleme liegen jetzt woanders. Das Setupprogramm sagt fälschlicherweise, dass der Zugriff auf die Datenbank OK zu sein scheint, während aber das ebenfalls von Phprojekt stammende env_test.php beim Datenbank-Test keine Ausgabe liefert. Die Hilfe rät, mit phpinfo() nachzusehen, ob es einen mysql-abschnitt in der Ausgabe gibt. Den gab es nicht (obwohl phpmyadmin funktioniert). Ich habe dann nach weiterer Suche in der php.ini bei dynamic Extensions einen Eintrag mysql*.so aktiviert (der auskommentiert war). Jetzt zeigt mir phpinfo() einen mysql-Abschnitt an. Das env_test.php scheitert aber weiterhin beim Datenbank-Check. Jetzt ist es aber kein Linux-Problem mehr sondern ein Fall für das Supportforum von phprojekt.

Gruß

Delcour

Nachtrag: Das env_test.php scheitert, nicht aber das Setup. Soll mir recht sein. ☺

Antworten |