Attribute von mit PHP geschriebenen Dateien
Gerhard
- php
Hallo,
ein Blick in meine log-Datei hat mich überrascht.
Dateien bis zu einem bestimmten Datum hatten (in fireftp angezeigt) folgende Eigenschaft: -rw-r--r--.
Ab diesem Datum aber plötzlich: -rw-rw-rw.
Da das Datum schon länger zurückliegt, weiß ich nicht mehr, ob ich etwas bzw. was ich geändert habe.
Daher die Frage: Wie kann man steuern, welche Eigenschaft eine über php geschriebene Datei haben soll?
Gruß
Gerhard
Daher die Frage: Wie kann man steuern, welche Eigenschaft eine über php geschriebene Datei haben soll?
Mit chmod.
Tach,
Daher die Frage: Wie kann man steuern, welche Eigenschaft eine über php geschriebene Datei haben soll?
Mit chmod.
das ist keine gute Lösung, weil man dann im Zweifelsfall die Daten erstmal mit zuviel Zugriffsrechten anlegt und diese dann nachher ändert; was, wenn beim erstellen ein Fehler auftritt und die Daten schon halb geschrieben sind ider ein Angreifer einfach schnell genug ist? Falls man nicht an der umask manipulieren möchte ist der Standardweg dann üblicherweise:
1. Datei leer erstellen
2. Dateirechte anpassen
3. Daten in Datei schreiben
mfg
Woodfighter
das ist keine gute Lösung, weil man dann im Zweifelsfall die Daten erstmal mit zuviel Zugriffsrechten anlegt und diese dann nachher ändert; was, wenn beim erstellen ein Fehler auftritt und die Daten schon halb geschrieben sind ider ein Angreifer einfach schnell genug ist?
Danke für die Erläuterung.
Tach,
Daher die Frage: Wie kann man steuern, welche Eigenschaft eine über php geschriebene Datei haben soll?
das steuert die umask, soweit ich mich entsinne gab es auch eine PHP-interne Funktion, um sie zu setzen.
mfg
Woodfighter
Tach!
Wie kann man steuern, welche Eigenschaft eine über php geschriebene Datei haben soll?
das steuert die umask, soweit ich mich entsinne gab es auch eine PHP-interne Funktion, um sie zu setzen.
Ja, es gibt eine PHP-Funktion umask(). Und genauer gesagt: umask steuert, welche Eigenschaften eine Datei oder Verzeichnis _nicht_ haben soll. Unabhängig von umask kann man immer noch mit chmod die Eigenschaften explizit nach eigenem Gusto setzen.
Ursache der Änderung kann eine Anpassung der umask für den Webserver (oder das Gesamtsystem oder auch nur die PHP-Prozesse) beim Hoster sein.
dedlfix.
Hallo,
Jens Holzkämper hat geschrieben:
> Mit chmod.
das ist keine gute Lösung, .....
jetzt habe ich zu umask() folgendes gefunden:
Sie sollten diese Funktion nicht in Multithreaded-Webservern nutzen. Der bessere Weg ist, die Dateiberechtigungen mit chmod() zu ändern nachdem die Datei erstellt wurde. Die Nutzung von umask() kann zu unerwartetem Verhalten von gleichzeitig ausgeführten Skripten und des Webservers führen, weil die gleiche umask genutzt wird.
Und Jens Holzkämper hat weiter geschrieben:
... ist der Standardweg dann üblicherweise:
1\. Datei leer erstellen
2\. Dateirechte anpassen
3\. Daten in Datei schreiben
Ist dies nicht recht kompliziert.
Auch da kann doch eine parallel laufende Anwendung Unheil anrichten.
Gibt es nicht den Königsweg, dass man im open-Kommando der Datei schon die gewünschten Eigenschaften mitgibt?
Hi,
Jens Holzkämper hat geschrieben:
Mit chmod. das ist keine gute Lösung, .....
bitte lass die Zitatmarkierungen so, wie sie sind. Du beeinträchtigst sonst massiv die Lesbarkeit für andere Forennutzer. Insbesondere ist nicht nachvollziehbar, wieso du ein Zitat als CSS-Code markierst.
Ciao,
Martin
--
Gibst du dem Opi Opium, haut Opium den Opi um.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
h,
Gibt es nicht den Königsweg, dass man im open-Kommando der Datei schon die gewünschten Eigenschaften mitgibt?
Hmm, mit Perl geht das ;)
Komm 'rüber, Gerhard ;)
Hotti
Tach,
Hmm, mit Perl geht das ;)
wie?
mfg
Woodfighter
Tach,
Hmm, mit Perl geht das ;)
wie?
Z.B. mit IO::File
open( FILENAME [,MODE [,PERMS]] )
my $fh = new IO::File;
$fh->open('myfile', O_CREAT, 0644);
Hotti
Tach,
Z.B. mit IO::File
open( FILENAME [,MODE [,PERMS]] )
was dann intern https://forum.selfhtml.org/?t=212013&m=1447535 ausführt; hinzu kommt übrigens noch, auch das, was du dort übergibst, wird erst noch mit der umask verundet, im konkreten Fall nicht schlimm, weil die umask zu klein ist.
mfg
Woodfighter
Hmm, mit Perl geht das ;)
Komm 'rüber, Gerhard ;)
Wieso habe ich mich nur überreden lassen, von Perl auf PHP umzusteigen?
Hi,
Hmm, mit Perl geht das ;)
Komm 'rüber, Gerhard ;)Wieso habe ich mich nur überreden lassen, von Perl auf PHP umzusteigen?
Vorschlag: Mach doch einfach Beides ;)
Hotti
Tach,
Mit chmod.
das ist keine gute Lösung, .....
ich erweitere das mal zu: das ist keine gute allgemeine Lösung; wenn es keine rolle spielt, dass jemand die Daten leesn/überschreiben könnte, bevor man die Rechte geändert hat, dann kann man das machen.
jetzt habe ich zu umask() folgendes gefunden:
"Sie sollten diese Funktion nicht in Multithreaded-Webservern nutzen. Der bessere Weg ist, die Dateiberechtigungen mit chmod() zu ändern nachdem die Datei erstellt wurde. Die Nutzung von umask() kann zu unerwartetem Verhalten von gleichzeitig ausgeführten Skripten und des Webservers führen, weil die gleiche umask genutzt wird."
Das ist nur die Warungn davor, dass nicht nur das aktuelle Script in dem die Funktion aufgerufen wird, sondern alle Scripte, die vom selben Prozess ausgeführt werden, davon betroffen sind
... ist der Standardweg dann üblicherweise:
- Datei leer erstellen
- Dateirechte anpassen
- Daten in Datei schreiben
Ist dies nicht recht kompliziert.
Auch da kann doch eine parallel laufende Anwendung Unheil anrichten.
Sie kann aber keinesfalls meine Daten überschreiben oder lesen; schlimmstenfalls kann ich meine Daten nicht mehr schreiben.
Gibt es nicht den Königsweg, dass man im open-Kommando der Datei schon die gewünschten Eigenschaften mitgibt?
Nein, dafür ist die umask ja da, es gibt dafür keinen weiteren Systemhandle.
In deinem Falle würde ich mich an den Provider wenden und ihn bitten diese offensichtliche Fehlkonfiguration rückgängig zu machen; die gewählte umask ergibt für den Einsatzzweck keinen Sinn.
mfg
Woodfighter
Tach!
jetzt habe ich zu umask() folgendes gefunden:
Sie sollten diese Funktion nicht in Multithreaded-Webservern nutzen. Der bessere Weg ist, die Dateiberechtigungen mit chmod() zu ändern nachdem die Datei erstellt wurde. Die Nutzung von umask() kann zu unerwartetem Verhalten von gleichzeitig ausgeführten Skripten und des Webservers führen, weil die gleiche umask genutzt wird.
Die Frage an der Stelle ist: Hast du PHP als Apache-Modul laufen? Nur dann betrifft es dich. Wenn PHP als (F)CGI läuft, sollte es so konfiguriert sein, dass jeder Request seinen eigenen Prozess bekommt. Und dann kommt sich die umask des einen nicht in die Quere mit dem anderen.
Nächste Frage wäre, wenn PHP als Apache-Modul läuft, dann hast du ein generelles Problem, wenn irgendein Mithostling in seinem Script die umask ändert, denn dann betrifft es dich auch. PHP als Apache-Modul ist in einer Massenhosting-Umgebung generell keine gute Idee. Wenn du hingegen einen eigenen Server hast, also das PHP-Apache-Modul nur für dich selbst hast, dann sollte das Problem dich auch nur dann stören, wenn du für mehrere Anwendungen (oder auch nur eine) unterschiedliche umask-Einstellungen benötigst. - Vermutlich muss man beim Apache-Modul auch noch in Betracht ziehen, welches Multi-Processing Module im Einsatz ist, denn diese trennen auch noch nach Prozessen auf oder auch nicht.
dedlfix.