Rechtevergabe im www-Verzeichnis

Massio

New Member
Hallo,
ich habe ein kleines PHP-Programm geschrieben. Es befindet sich im Verzeichnis /var/www/MyProg.
Ich hätte gern gewüßt, wie vergebe ich die Rechte an Verzeichnisse bzw. Dateien im Verzeichnis "MyProg".

Noch etwas dazu, die Benutzer des Programmes können z.B. ein Bild im Verzeichnis: /var/www/MyProg/UserImage hochladen.

Nach googlen und Dokumentation und ... bin ich wie folgt vorgegangen:

Rechte für Verzeichnisse: --> 711
Rechte für Dateien (PHP-, HTML, js-Dateien ): --> 644
Rechte fürs Verzeichnis, in dem die Bilder hochgeladen werden: --> 733 bzw. 777
Gruppe und Besitzer habe ich nur root .

Ist es korrekt so wie ich es gamacht habe, oder habe ich schon Sicherheitslücken eingebautt?
Wäre es besser/ Sicherer, wenn ich extra voralle für "/var/www/MyProg/UserImage" Gruppe und Besitzer generieren würde?

Vielen Dank im Voraus,

Gruß
 
Last edited by a moderator:
Angaben zum OS und den verwendeten Programmen wären noch hilfreich.
Läuft dort ein Apache mit mod_php, oder suphp, fcgi o.ä.
oder ein ganz anderer Webserver?
Eigener Root/vServer oder Hostingpaket?
Mehrere gehostete Webseiten auf dem Server oder nur diese eine.
Du merkst es gibt viele Fragen, mit ein bissl chmod und chown ists dabei nicht getan.

Von der Sache her ists natürlich immer sicherer eigene User/Gruppen für den vhost zu nutzen, wenn nicht grade mod php zum Einsatz kommt, dort wäre es dann halt www-data:www-data. Wobei das auch wieder eine Preformancefrage ist ....

So weit erstmal.

Gruß Sven
 
Hallo, danke für die Antwort.

Okay, hier sind die eigenschaften des Servers:
Das System ist Ubuntu Server 12.04
Verwendete Programme: Apache, MySQL, PHP, Postfix, PHPMyAdmin
Eigener Root-Server (kein VServer)
Auf dem Server sind mehrere Webseiten, aber sie sind meine eigene.

Mit "User/Gruppen" habe ich auch gedacht, aber laut Wiki (http://wiki.ubuntuusers.de/Apache):
Code:
Es sollte nicht die „www-data“ Gruppe genutzt werden.
Unter dieser Gruppe läuft der Apache Webserver und sollte ein Angreifer eine
Lücke in dem Apache finden, so erhält er unnötigerweise Schreibrechte im 
Verzeichnis /var/www/.
Oder habe ich es falsch verstanden?

Gruß
 
Last edited by a moderator:
...
Rechte für Verzeichnisse: --> 711
Rechte für Dateien (PHP-, HTML, js-Dateien ): --> 644
Rechte fürs Verzeichnis, in dem die Bilder hochgeladen werden: --> 733 bzw. 777
Gruppe und Besitzer habe ich nur root ...
Für Verzeichnisse wirst du vermutlich 755 brauchen. 777 für das Upload-Verzeichnis nur falls PHP als Modul (mod_PHP) läuft andernfalls reicht 755.

In welchem Modus wird PHP unter Apache betrieben? CGI, FastCGI oder als mod_PHP? Davon ist nämlich abhängig welchem User/Gruppe die Dateien und Verzeichnisse zugeordnet werden. Informiere Dich also bitte über die Unterschiede der verschiedenen Betriebsmodi von PHP unter dem Apache.

Last but not least stellt sich die Frage, ob Du nicht mit einem normalen Webhosting-Paket besser bedient wärst, dann könntest Du Dich auf die Programmierung Deines Scriptes konzentrieren und müsstest Dich nicht auch noch mit der Serveradministration herumschlagen; einem Fachgebiet, welches für Dich noch sehr neu zu sein scheint.
 
Wie ist das PHP bei dir eingebunden? Als Apache-Modul oder als CGI/FastGCI in Verbindung mit suPHP bzw suexec?
Bei letzterem laufen die Prozesse oft unter dem User, der auch für den FTP-Upload verwendet wird (abhängig davon wie du es konfiguriert hast, aber die meisten Anleitungen und Admin-Panels handhaben es so). Wenn dieser User nun per FTP oder SSH ein Verzeichnis anlegt, sind ausreichend Rechte vorhanden, damit das PHP-Script dort Dateien ablegen kann (evtl. sind die Leserechte aber zu umfangreich - hängt vom konkreten Einsatzzweck ab).
Wird PHP aber als Apache-Modul verwendet, dann muß der Apache-User www-data zwingend Schreibrechte auf das Verzeichnis haben, und die hochgeladenen Bilder gehören dann auch www-data. Hier funktioniert dann oft wirklich nur ein chmod 777, aber dann kann jeder auf dem Server in das Verzeichnis schreiben, was keine gute Idee ist.
Die Beschreibung im Ubuntu-Wiki bezüglich der Gruppe www-data ist ein wenig irreführend, denn sie bezieht sich einzig auf das direkt davor beschriebene Szenario und nicht das typische Webhosting-Szenario mit mehreren Kunden (die man auch voneinander abschotten muß).
 
Danke für die Antworten.
Auf dem Server läuft Apache in "mod_PHP".

Naja, wenn ich ein normalen Webhosting-Paket nehmen würde, müsste ich trotzdem mein Share-Verzeichnis selbst konfigurieren!

Okay, dann habe ich so verstanden, eher "UserImage" der Gruppe und dem Bsitzer "www-data" zuordnen:

chown www-data:www-data /var/www/MyProg/UserImage
chmod 777 /var/www/MyProg/UserImage

... und dann noch beten, dass alles gut geht! :D

Gruß
 
Naja, wenn ich ein normalen Webhosting-Paket nehmen würde, müsste ich trotzdem mein Share-Verzeichnis selbst konfigurieren!

Nein, i.d.R. mußt du zumindest bei den größeren Hostern nix machen, denn dort läuft PHP als CGI/FCGI über suexec oder suPHP und damit unter dem User, der die Dateien auch per FTP hochlädt oder per FTP Verzeichnisse anlegt. Damit sind automatisch die passenden Rechte vorhanden.

Okay, dann habe ich so verstanden, eher "UserImage" der Gruppe und dem Bsitzer "www-data" zuordnen:

chown www-data:www-data /var/www/MyProg/UserImage
chmod 777 /var/www/MyProg/UserImage

Du hast es nicht verstanden: Der Besitzer eines Verzeichnisses hat normalerweise Schreibrechte. Damit sind mit dem ersten Befehl schon genug Rechte vorhanden, damit der Webserver in das Verzeichnis schreiben darf.
Das zweite sorgt nur dafür, daß jeder User auf deinem Server und auch jeder Prozess in dieses Verzeichnis schreiben kann. Daher ist der chmod 777 eine ganz schlechte Idee und sollte wirklich nur als letzte Notlösung verwendet werden.
Also ja: Du hast dir da ein potentielles Loch geschaffen.

... und dann noch beten, dass alles gut geht! :D

Zur Administration eines Root-Servers gehört ein durchdachtes Sicherheitskonzept. Das hast du nicht und mir scheint es, auch nicht die notwendige Kenntnisse. Daher auch mein Rat: Auf ein Hosting-Paket oder einen Managed Server umsteigen. Und bevor jetzt das Argument kommt, daß du ja irgendwie lernen mußt: Das macht man zuhause auf einem alten PC oder in einer virtuellen Maschine.
 
Ach so, jetzt habe ich es begriffen! (oder hoffe ich zumindest :o)

chown www-data:www-data /var/www/MyProg/UserImage
chmod 300 /var/www/MyProg/UserImage

Okay, ihr habt recht, der Server sollte von einem richtigen Admin konfiguriert werden. Ich bin nur der Software-Entwickler, wenn die Software fertig ist, wird der Auftraggeber sich um den Server-Adminstration kümmern müssen.

Auf jeden Fall, nochmal vielen Dank für eure Hilfe.

Gruß
 
Ach so, jetzt habe ich es begriffen! (oder hoffe ich zumindest :o)

chown www-data:www-data /var/www/MyProg/UserImage
chmod 300 /var/www/MyProg/UserImage

Nope, hast du nicht wirklich. Du willst den Inhalt des Verzeichnisses ja auch noch lesen können, daher sollte es zumindest ein chmod 700 sein. Sofern auch Cronjobs oder FTP-User die Dateien lesen sollen, brauchst du ggfl. ein chmod 750 oder sogar chmod 755.
 
Nope, hast du nicht wirklich. Du willst den Inhalt des Verzeichnisses ja auch noch lesen können, daher sollte es zumindest ein chmod 700 sein. Sofern auch Cronjobs oder FTP-User die Dateien lesen sollen, brauchst du ggfl. ein chmod 750 oder sogar chmod 755.
Du hast ihn ja auch verwirrt mit Deiner vorherigen Aussage. Seine Angabe:

Code:
chown www-data:www-data /var/www/MyProg/UserImage 
chmod 777 /var/www/MyProg/UserImage
War nämlich richtig unter der Maßgabe, dass er PHP als Modul laufen hat (mod_PHP). Da ist ein 777 für ein Uploadverzeichnis leider notwendig.
 
"Nope"! meinst du?
Die Bilder werden mit einem Script, welches Root gehört, aus dem Verzeichnis "UserImage" geholt und
als Bilderschau anzeigen. Wobei das Verzeichnis "UserImage" chmod 300 ist und dem "www-data" gehört.

Die Bilder selbst sind chmod 600 und gehören dem "www-data".

Das Script (Programm) kann die Bilder (wenn gewünscht) löschen oder als Bilderschau anzeigen.

Ich habe es getest, in meinem Fall funktioniert es. :)
Mit "Cronjobs" muss ich noch testen, und "FTP" uninteressant, da sie über das Script verwaltet werden müssen.

Gruß
 
War nämlich richtig unter der Maßgabe, dass er PHP als Modul laufen hat (mod_PHP). Da ist ein 777 für ein Uploadverzeichnis leider notwendig.

Nein, ist es nicht. Das ist nur notwendig, wenn das Verzeichnis dem FTP-Upload-User gehört und nicht www-data. Da er aber den Eigentümer auf www-data geändert hat, gibt ein 777 zu viele Rechte frei.
 
Nein, ist es nicht. Das ist nur notwendig, wenn das Verzeichnis dem FTP-Upload-User gehört und nicht www-data. Da er aber den Eigentümer auf www-data geändert hat, gibt ein 777 zu viele Rechte frei.
Hmm, jo stimmt - hab schon ewig nicht mehr mit mod_PHP gearbeitet. Früher hatte man bei vielen Webhostern, das von dir beschriebene Problem.
 
Zum Glück ist ein chmod 777 bei den meisten Hostern nicht mehr notwendig - und wenn doch, dann würde ich persönlich akut überlegen, den Hoster zu wechseln.
 
Back
Top