[PHP] mkdir(): Ordner wird mit falschen Rechten erstellt

greenhawk

Mitglied
Beiträge
47
Hallo,

ich schreibe gerade an einer Datenbankapplikation (PHP, MySQL). Wenn dort neue Einträge in die DB gemacht werden (von PHP aus), muss immer ein Datenordner für den jeweiligen Eintrag angelegt werden.
Dazu benutze ich momentan folgenden Code:
Code:
mkdir($pfad, 0777);
chmod($pfad, 0777);

Das mag erstmal komisch aussehen. Aber nur so haben auch alle Schreibrechte.
Theoretisch müsste dazu ja aber
Code:
mkdir($pfad);
völlig ausreichend sein.
Wenn ich mir aber die Rechte des Datenorders, der so erstellt wird, ansehe, sieht das so aus:
Code:
drwxr-xr-x 2 www-data www-data
Das heißt, dass ich den Ordner in der Shell nur als Root wieder löschen kann. Das ist etwas nervig. Und schreiben können muss ich erstmal auch da drin. Das heißt, ich brauche 0777 und nicht 0751 auf diesem Verzeichnis.
Ich kann mir nicht vorstellen, wo da das Problem liegt, da ja auch die Erstellung des Ordners sonst einwandfrei funktioniert.

Nun gut, dann noch eine Frage, die damit zusammenhängt:
Welche Rechtekonstellation ist denn sinnvoll, wenn ich diese Datenbankapplikation dann mal ins Netz stelle? Schreibrechte für alle zu vergeben, halte ich prinzipell für ungut. Evtl. kann man dann aber auch auf 0755 umsteigen, wenn man alle Datenoperationen (inkl. Arbeiten in den Datenordnern) über die PHP-Schnittstelle (also als User www-data) laufen lässt. Also, sicher kann man das. Scheint auch ganz sinnvoll zu sein, oder?
 
Zuletzt bearbeitet:

yai

yet another idiot
Beiträge
166
wenn die umask 0022 ist wird das directory mit 755 erstellt (also drwxr-xr-x). wo siehst du 751? das wäre drwxr-x--x. das directory gehört dem user www-data, also kann der das directory auch löschen. Es sei denn du hast die Rechte eine Ebene höher verbogen. umask 0022 und mode 755 ist deshalb sinnvoll, weil der owner (www-data) Dateien in dem Verzeichnis erzeugen und löschen kann, aber sonst niemand. übrigens: er kann auch Dateien löschen, für die er keine Schreibberechtigung hat.
 

saeckereier

Graue Eminenz
Beiträge
1.920
Theoretisch müsste dazu ja aber
Code:
mkdir($pfad);
völlig ausreichend sein.
Code:
[ ~]$ mkdir dir
[ ~]$ ls -ld dir
drwxr-xr-x 2 xxx xxx 4096 Jan 27 19:35 dir
Nö.
Wenn ich mir aber die Rechte des Datenorders, der so erstellt wird, ansehe, sieht das so aus:
Code:
drwxr-xr-x 2 www-data www-data
Das heißt, dass ich den Ordner in der Shell nur als Root wieder löschen kann.
Code:
[ ~]$ mkdir dir
[ ~]$ chmod  a= dir
[ ~]$ ls -ld dir
d--------- 2 xxx xxx 4096 Jan 27 19:37 dir
[ ~]$ rmdir dir
[ ~]$ ls -ld dir
ls: cannot access dir: No such file or directory
Nö. Ordner löschen kann jeder, der Rechte auf dem Ordner darüber hat. Dateien in dem Ordner kann bei dir www-data löschen.
Nun gut, dann noch eine Frage, die damit zusammenhängt:
Welche Rechtekonstellation ist denn sinnvoll, wenn ich diese Datenbankapplikation dann mal ins Netz stelle?
Eine Gruppe erstellen, die darauf Zugriff haben soll. Dann Schreibrechte für User und Gruppe.
Evtl. kann man dann aber auch auf 0755 umsteigen, wenn man alle Datenoperationen (inkl. Arbeiten in den Datenordnern) über die PHP-Schnittstelle (also als User www-data) laufen lässt. Also, sicher kann man das. Scheint auch ganz sinnvoll zu sein, oder?

Wird in der Regel auch so gemacht, hängt aber vom Ziel ab. Zum Thema der Berechtigungen beim Erstellen schau dir einfach mal das Thema umask an. Wegen der Gruppe könnte das hier hilfreich sein: http://de.wikipedia.org/wiki/Setgid
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

das directory gehört dem user www-data, also kann der das directory auch löschen. Es sei denn du hast die Rechte eine Ebene höher verbogen.

Der Vollständigkeit halber: Das stimmt so nicht. Das er löschen kann, hat nichts damit zu tun, ob ihm das Dingens gehört, sondern nur mit den Rechten des Ordners, in dem der Ordner enthalten ist. Es gibt da keinen Unterschied zwischen Dateien und Ordnern.
 
Zuletzt bearbeitet:

saeckereier

Graue Eminenz
Beiträge
1.920
directories sind ja auch nur dateien, gelle.

Nö. :-) (Das Wort konnte ich in diesem Thread echt gut gebrauchen. :-) ) Verzeichnisse und Dateien unterscheiden sich ja schon elementar dadurch, dass Verzeichnisse Dateien enthalten können und nicht umgekehrt.. Berechtigungsmässig sind sie insofern ähnlich, als dass die Rechte sich auf den Inhalt des Objektes und nicht das Objekt selbst beziehen. Aber ich denke, da bin ich eh Ironie aufgesessen, oder?
 

yai

yet another idiot
Beiträge
166
nicht wirklich. Unix ist ein Datei-basiertes Betriebssystem, das sieht man schon an den device files. Linux ist da nicht ganz so konsequent, ich habe zumindest noch kein /dev/eth0 gesehen, wohl aber ein /dev/lan0 auf hpux. Ein Directory enthält auch keine Dateien, das Dateisystem (deshalb heißt es ja so) enthält die Dateien. Ein Directory enthält nur Verweise auf Einträge in der inode-Tabelle (falls das Dateisystem mit inodes arbeitet). Ansonsten hast du natürlich Recht mit den Zugriffsrechten. Viele Webserver Betreiber wissen darüber nicht Bescheid, und das ist gefährlicher als mancher Apache Bug.
bye,
yai.
 

saeckereier

Graue Eminenz
Beiträge
1.920
Ich glaube das ist Ansichtssache, aber Dateien sind keine Verzeichnisse und Verzeichnisse sind keine Dateien.
 

Ähnliche Themen

Cent OS + Apache + PHP = ? zu rechten

Falsche Rechte gesetzt beim Anlegen von Ordnern via Samba-Client

Samba Ordner&Rechte struktur Hilfe!

[HowTo] TeamSpeak 2 - RC2 - Server (Deutsch/Englisch)

Oben