Kann Dateiattribute nicht merh ändern
Martin Hein
- webserver
0 Jonathan
Hallo Forum,
ich habe auf einem Webserver ein Verzeichnis voller Bilder
kopieren müssen. Statt das ganze Verzeichnis erst per FTP
runterzuladen um es dann wieder in ein anders Verzeichnis
auf dem Server hochzuladen, habe ich eben ein PHP-Script
geschrieben, dass das Verzeichnis ausliesst und alle Dateien
per php:copy() kopiert.
Das hat auch gut funktioniert und ging verblüffend schnell!
Jetzt habe ich versucht, die Dateirechte mit meinem FTP-CLient zu
ändern und erhalte folgende Fehlermeldung:
Kann Attribute von entfernten Dateien nicht ändern
Ich kann mir vorstellen, dass ich als FTP-User nicht mehr
Eigentümer bin, sondern dass jetzt PHP ist, oder so. Kann
das so sein ? Was muss ich tun, damit ich die Dateiattribute
ändern kann ?
danke für einen Tipp und
beste greusse,
martin
Hallo Martin,
Ich kann mir vorstellen, dass ich als FTP-User nicht mehr
Eigentümer bin, sondern dass jetzt PHP ist, oder so. Kann
das so sein ?
ja, das wird wohl das Problem sein.
Was muss ich tun, damit ich die Dateiattribute
ändern kann ?
Du kannst z.B. dein PHP die Dateiendungen wieder zurückändern lassen. Entweder indem du chown ausführen lässt, oder vielleicht (weiß nicht, obs sowas gibt) mit einer eingebauten PHP-Funktion.
Jonathan
Hallo Jonathan,
Was muss ich tun, damit ich die Dateiattribute
ändern kann ?Du kannst z.B. dein PHP die Dateiendungen wieder zurückändern lassen. Entweder indem du chown ausführen lässt, oder vielleicht (weiß nicht, obs sowas gibt) mit einer eingebauten PHP-Funktion.
klingt logisch. Jedoch ist mir 'zurückändern' in dem Zusammenhang
nicht ganz klar: Du meinst, zurück zum Besitzer des Originals,
also dem FTP-User.
danke, ich versuch mal, was dazu zu finden.
martin
Hello,
Was muss ich tun, damit ich die Dateiattribute
ändern kann ?
Einfach mit einem weiteren PHP Script und chmod() und chgrp() die Rechte und die Gruppe der Datei ändern. Rechte darf der Owner alle ändern, Gruppe darf er als Ziel nur diejenige angeben, der er selber angehört. Da wird meistens auch nicht viel drin sein bei einer Standardinstallation beim Hoster. Manche sind aber so schlau, und haben dem Webserver als Supplemental Group auch die des (FTP-)Users gegeben.
Du hättest es natürlich auch gleich in Dein Kopierscript einbauen können.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Tag Tom,
jo, ich hab ein chmod(0777) in das Kopierskript eingebaut:
copy ($src, dst);
chmod ($dst, '0777');
... hat prompt funktioniert. Ich kann's nach wie vor nicht
mit dem FTP-Client ändern, aber ich bin einen kleinen Schritt
weiter, weil mir der Zusammenhang klar geworden ist:
php ist der owner, darf insofern die recht ändern, ftp nicht.
Was nicht funktioniert hat ist:
mkdir ($dst);
chmod ($dst, '0777');
... und hat nach dem, was ich dazu herausgefunden habe, die
Ursache, dass ein durch php:mkdir() angelegtes Vereichnis nicht
PHP 'gehört', sondern dem Webserver.
http://www.umsu.de/beta-blogger/simple/single.php?date=1131368040
Was ich nun probieren wollen würde, ist per PHP:chown() den
Besitzer zu ändern:
1. Für die per Script erstellten Verzeichnisse PHP als
Besitzer einsetzen.
2. Für die per Script erstellten Verzeichnisse und Dateien
die Rechte auf '0777' setzen.
3. Für die per Script erstellten Verzeichnisse und Dateien
FTP als Besitzer einsetzen.
Save_mode steht laut phpinfo() auf 'OFF'. Von daher glube ich
nicht, dass ich bei T-Systems anrufen muss sondern noch was
dazu lernen kann ;)
danke für Deine Hilfe,
schöne gruesse,
martin
Harzliche Grüße vom Berg
Tom
Hello Martin,
... hat prompt funktioniert. Ich kann's nach wie vor nicht
mit dem FTP-Client ändern, aber ich bin einen kleinen Schritt
weiter, weil mir der Zusammenhang klar geworden ist:
Weil der FTP-User weder der Owner ist, noch der eingestellten Gruppe angehört.
Prüfe mal, ob es eine Überschneidung gibt bei den Gruppen von PHP (Webserver) und FTP-User.
Was nicht funktioniert hat ist:
mkdir ($dst);
chmod ($dst, '0777');
Das liegt daran, dass der "PHP-User" zwar Schreibrechte im übergeordneten Verzeichnis besitzt, aber wieder nicht der Owner ist und auch vermutlich nicht der eingestellten Gruppe angehört.
... und hat nach dem, was ich dazu herausgefunden habe, die
Ursache, dass ein durch php:mkdir() angelegtes Vereichnis nicht
PHP 'gehört', sondern dem Webserver.
Die Dateien und Verzeichnisse sollten i.d.R. demjenigen gehören, der sie angelegt hat.
Wenn also mittels PHP eine Datei oder ein Verzeichnis angelegt wird, sollte es demjenigen User gehören, unter dessen Namen PHP ausgeführt wird. Ich sag das deshalb so überwändlich, weil es Unterschiede zwischen PHP als Modul und PHP als CGI gibt. Wenn der Webserver PHP als CGI ausführen lässt, kann er das im Namen des CGI-User tun, der nicht identisch mit dem Webserver-User sein muss. Deshalb nehmen die Provider so gerne PHP als CGI.
Was ich nun probieren wollen würde, ist per PHP:chown() den
Besitzer zu ändern:
Da wirst Du keine Chance haben, wenn Du keine Root-Shell bekommen hast.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hello,
Was nicht funktioniert hat ist:
mkdir ($dst);
chmod ($dst, '0777');Das liegt daran, dass der "PHP-User" zwar Schreibrechte im übergeordneten Verzeichnis besitzt, aber wieder nicht der Owner ist und auch vermutlich nicht der eingestellten Gruppe angehört.
Das habe ich etwas missverständlich ausgedrückt.
Er ist nicht Owner des übergeordneten Verzeichnisses, deshalb kann er in dessen Tabelle nur diejenigen Änderungen vornehmen, die in der Rechteeinstellung des Verzeichnisses festgelegt sind. Er kann diese nutzen, sie aber nicht verändern.
Für den Inhalt der Verzeichnistabelle hat er aber Schreibrechte. Das bedeutet, dass er darin einen Verweis auf ein neues Verzeichnis oder eine neue Datei ablegen darf. Con diesm neuen Objekt ist er dann Owner, wehalb er dann auch Objektrechte besitzt, es also ändern darf.
Bitte nicht das Objekt selbst mit dessen Inhalt verwechseln. Was man mit dem Inhalt eines Objektes anstellen darf, ist im Objekt eingetragen. Was man mit dem Objekt anstellen darf, ist im übergeordneten Objekt eingetragen.
Ich hoffe, dass es jetzt nicht noch verschlimmbessert habe :-)
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hallo Tom,
Ich hoffe, dass es jetzt nicht noch verschlimmbessert habe :-)
Doch, hast Du ;)
Mir ist noch ein Aspekt eingefallen:
------------------------------------
Auf dem Webserver läuft eine Webanwendung mit Frontend und
selbstgestricketem CMS. Darin habe ich für grosse Teile
TinyMCE verbaut. Das ist ein Javascript-Editor, für den es
verscheidene Plugins gibt. Ich hab ein Plugin 'Filemanager'
verbaut. Der ist, soweit ich das sehen kann, Javascript und
PHP. Mit diesem Filemanager kann ein Redakteur des CMS Dateien
hochladen (kopieren, verschieben, umbenennen, löschen usw.) und
Verzeichnisse anlegen (kopieren, verschieben, umbenenenen,
löschen usw.) UND darauf kann ich dann immernoch per FTP
zugreifen und Änderungen daran vornehmen.
Was ich damit sagen will ist dass das Script 'Filemanager'
genau das machen kann, was mein Kopierscript nicht kann.
Es geht also grundsätzlich schon. Die Frage ist nur wie.
beste gruesse,
martin
Hallo Jonathan,
Du kannst z.B. dein PHP die Dateiendungen wieder zurückändern lassen.
Was meinst du mit "Dateiendungen"?
Entweder indem du chown ausführen lässt, oder vielleicht (weiß nicht, obs sowas gibt) mit einer eingebauten PHP-Funktion.
Es gibt zwar die PHP-Funktion chown(), das wird Martin aber nicht viel helfen, da nur root den Besitzer einer Datei ändern darf - die einzige Möglichkeit (neben Löschen und neu Hochladen) ist die Dateirechte per PHP (Funktion: chmod()) zu ändern.
Grüße aus Nürnberg
Tobias
Hallo Tobias,
Du kannst z.B. dein PHP die Dateiendungen wieder zurückändern lassen.
Was meinst du mit "Dateiendungen"?
Keine Ahnung was ich mir dabei gedacht habe. (Wahrscheinlich garnichts.) Sollte wohl Dateibesitzer oder sowas werden.
Es gibt zwar die PHP-Funktion chown(), das wird Martin aber nicht viel helfen, da nur root den Besitzer einer Datei ändern darf
Mhh, man doch seine eigenen Dateien jemandem "schenken", wenn ich micht nicht total irre.
Jonathan