copy/fopen auf cifs-Mount

copy/fopen auf cifs-Mount

am 12.06.2007 10:00:19 von Claudio Lanzi

Hallo allerseits!

Beiß mir jetzt hier schon seit ein paar Tagen die Zähne an einem
Berechtigungsproblem aus... Situation ist wie folgt:

Auf einem Windows 2003 R2-Server hab ich eine Freigabe, die ich über
CIFS auf unserem Webserver (Linux) gemountet habe. Vom Verzeichnis des
Webservers aus führt ein Softlink zu dem gemounteten Verzeichnis
/mnt/dingsbums. Hierin befinden sich ein input-Ordner mit u. a.
Templates und ein output-Ordner.

Das PHP-Script generiert eine HTML-Datei, indem es ein Header-Template
aus im input-Ordner in den output-Ordner kopiert (copy) und noch den
eigentlichen Inhalt anhängt (fopen).

Das Problem ist: Beim copy wird eine Datei mit der Berechtigung 644
root:root angelegt (ist ja eigentlich irgendwie sinnfrei weil die Datei
auf einem NTFS-Volume liegt..?). Der Webserver läuft als apache, hat
also leider keine Berechtigung, die vom ihm gerade selbst kopierte Datei
zum weiteren Schreiben zu öffnen. Die Berechtigung der Quelldatei ist
.... ähm ... gute Frage. Angezeigt wird rwxrwSrwt, naja jedenfalls rw für
alle.

fopen meldet "failed to open stream: Permission denied"; ein versuchtes
chmod meldet "Operation not permitted". Hab ich aber auch nicht anders
erwartet.

Der für's Mount verwendete User hat natürlich vollen Zugriff auf die
Dateien, die Berechtigung des Zielordners zum schreiben ist 777
root:root. Ich schätze, irgendwo in der "Vererbung" liegt auch das
Problem ...

Wenn ich mit fopen eine neue Datei anlege wird die Berechtigung übrigens
auch auf 644 gesetzt.

Mir ist zwar gerade als Workaround eingefallen, das Template selbst zu
lesen und in die Zieldatei zu schreiben anstatt copy zu nutzen und so
die Datei nur ein Mal öffnen zu müssen, aber wirklich schön ist das nicht.

Frage: Wie bewege ich PHP dazu, die Datei mit der richtigen Berechtigung
zu kopieren, so dass ich anschließend noch etwas anhängen kann?

Fröhliches Köpferauchen & Danke

Claudio

Re: copy/fopen auf cifs-Mount

am 12.06.2007 10:54:11 von Ulf Kadner

Claudio Lanzi wrote:

> Beiß mir jetzt hier schon seit ein paar Tagen die Zähne an einem
> Berechtigungsproblem aus...

Zahnprotesen sind teuer. ;-)

>
> Auf einem Windows 2003 R2-Server hab ich eine Freigabe, die ich über
> CIFS auf unserem Webserver (Linux) gemountet habe.
>
> Das Problem ist: Beim copy wird eine Datei mit der Berechtigung 644
> root:root angelegt (ist ja eigentlich irgendwie sinnfrei weil die Datei
> auf einem NTFS-Volume liegt..?).

Das klingt alles sehr seltsam. Ein Webserver sollte *niemals*
*irgendwas* mit Root-rechten erledigen dürfen!

Die Samba Erweiterung (oder meinst Du mit CIFS was anderes?) wird wohl
hier auf irgend eine Weise die Finger mit im Spiel haben.

Du schreibst auch nirgends wie Du was machst. (CODE)

> Der Webserver läuft als apache

Welchen Webserver verwendest Du denn der sich mit fremden Federn
schmücken kann? Oder wolltest Du sagen der Webserver ist ein Apache?

> also leider keine Berechtigung, die vom ihm gerade selbst kopierte Datei
> zum weiteren Schreiben zu öffnen. Die Berechtigung der Quelldatei ist
> ... ähm ... gute Frage. Angezeigt wird rwxrwSrwt, naja jedenfalls rw für
> alle.

Alles sehr wirr. Schreib doch mal nachvollziehbar auf was wo wie gemacht
wird.

> Der für's Mount verwendete User hat natürlich vollen Zugriff auf die
> Dateien, die Berechtigung des Zielordners zum schreiben ist 777
> root:root. Ich schätze, irgendwo in der "Vererbung" liegt auch das
> Problem ...

Was denn für ne Vererbung? Du schreibst nirgendwo auf welche Objekte
sich das bezieht.

Wenn es Dir einzig um Dateirechte geht frag in ner Linuxgruppe.

> Wenn ich mit fopen eine neue Datei anlege wird die Berechtigung übrigens
> auch auf 644 gesetzt.

Ich denk fopen erzeugt ne Fehlermeldung?

> Frage: Wie bewege ich PHP dazu, die Datei mit der richtigen Berechtigung
> zu kopieren, so dass ich anschließend noch etwas anhängen kann?

In dem Du den Webserver erst mal korrekt und passend zu Deiner Umgebung
konfigurierst und die Umgebung muß natürlich für den Webservereinsatz
angepast werden. (Hat auch nix mit PHP zu tun)

PHP verwendet:

a.) Die Rechte die Ihm der Webserver gibt. Das sind dann meist die
des Webservers selbst. Diese werden in der httpd.conf oder einer
dort eingebunden Config-Datei definiert
oder
b) Die Rechte die ihm spezielle Apache-Module geben.

Also alles kein PHP Zeugs...

MfG, Ulf

Re: copy/fopen auf cifs-Mount

am 12.06.2007 11:54:22 von Claudio Lanzi

Hm, der erste Erklärungsansatz war wohl zu komplex formuliert, hier der
zweite Versuch:

Ich kann mit copy eine Datei zwar kopieren, habe dann allerdings keine
Berechtigung, die neue Datei zum schreiben zu öffnen.

Frage: Woher erhält die neu erstellte Datei ihre Berechtigung?

Re: copy/fopen auf cifs-Mount

am 12.06.2007 12:41:35 von Ulf Kadner

Claudio Lanzi wrote:

> Ich kann mit copy eine Datei zwar kopieren, habe dann allerdings keine
> Berechtigung, die neue Datei zum schreiben zu öffnen.

Beantworte doch erst mal die Fragen. Ansonsten solltest Du dich um einen
Hellseher bemühen.

> Frage: Woher erhält die neu erstellte Datei ihre Berechtigung?

Wie wird erstellt? Wo wird erstellt? In welchen zusammenhang steht das
angesproche Programm dazu? Was macht es? Ich glaub ich wiederhole mich.

MfG, Ulf

Re: copy/fopen auf cifs-Mount

am 12.06.2007 12:53:06 von Claudio Lanzi

Ich glaube, wir zwei kommen da auf keinen grünen Zweig ;)

Ulf Kadner schrieb:
> Claudio Lanzi wrote:
>
>> Ich kann mit copy eine Datei zwar kopieren, habe dann allerdings keine
>> Berechtigung, die neue Datei zum schreiben zu öffnen.
>
> Beantworte doch erst mal die Fragen. Ansonsten solltest Du dich um einen
> Hellseher bemühen.
>
>> Frage: Woher erhält die neu erstellte Datei ihre Berechtigung?
>
> Wie wird erstellt? Wo wird erstellt? In welchen zusammenhang steht das
> angesproche Programm dazu? Was macht es? Ich glaub ich wiederhole mich.
>
> MfG, Ulf

Re: copy/fopen auf cifs-Mount

am 12.06.2007 13:12:03 von Claus Reibenstein

Claudio Lanzi schrieb:

> Ich glaube, wir zwei kommen da auf keinen grünen Zweig ;)

Der einzige, der hier auf keinen grünen Zweig kommen wird, bist Du, wenn
Du Dich weiterhin so beharrlich weigerst, uns die notwendigen
Informationen zu liefern. Wir helfen gerne. Dazu müssen wir aber erst
einmal genau wissen, worum es geht.

> Ulf Kadner schrieb:

Du produzierst TOFU. Bitte stell das ab. hilft
Dir dabei.

Gruß. Claus

Re: copy/fopen auf cifs-Mount

am 12.06.2007 13:32:16 von h.schroeck

Hi,

Claudio Lanzi schrieb am Dienstag, 12. Juni 2007 10:00:
> Das Problem ist: Beim copy wird eine Datei mit der Berechtigung 644
> root:root angelegt
[...]
> Der Webserver läuft als apache, hat also leider keine Berechtigung,
> die vom ihm gerade selbst kopierte Datei zum weiteren Schreiben zu
> öffnen.
[...]
> Der für's Mount verwendete User
[...]

das klingt, wie Ulf schon vermutet hat, mehr nach einem CIFS Problem;
genauer gesagt, wer welche Freigaben wie mountet und wie die Berechtigungen
dazu aussehen. (Schlimmstenfalls pfuschen hier 3 Benutzeraccounts rein)

> Frage: Wie bewege ich PHP dazu, die Datei mit der richtigen Berechtigung
> zu kopieren, so dass ich anschließend noch etwas anhängen kann?

Gegenfragen: was verhindert, dass apache die Datei zum Schreiben öffnen
darf? Wer mountet die Freigabe unter welchem Benutzeraccount und hat
dieser Benutzeraccount auch auf dem Windows-Server auch alle nötigen
Schreibrechte? Dann solltest Du auch prüfen, wie es apache selbst
sieht; Tipp: "su - apache" als root

Da das aber kein PHP-Problem ist, solltest Du das in einer Samba Gruppe
diskutieren und Dir überlegen, ob es überhaupt Sinn macht, solche
Verrenkungen übers Netzwerk zu machen, wenn es auch lokal auf dem
Webserver funktionieren würde...

Grüße,
Holger

Re: copy/fopen auf cifs-Mount

am 12.06.2007 13:33:42 von dev-null-use-reply-adress

Claudio Lanzi schrieb:
> Auf einem Windows 2003 R2-Server hab ich eine Freigabe, die ich über
> CIFS auf unserem Webserver (Linux) gemountet habe. Vom Verzeichnis des
> Webservers aus führt ein Softlink zu dem gemounteten Verzeichnis
> /mnt/dingsbums. Hierin befinden sich ein input-Ordner mit u. a.
> Templates und ein output-Ordner.
[..]
> Das Problem ist: Beim copy wird eine Datei mit der Berechtigung 644
> root:root angelegt (ist ja eigentlich irgendwie sinnfrei weil die Datei
> auf einem NTFS-Volume liegt..?). Der Webserver läuft als apache, hat
> also leider keine Berechtigung, die vom ihm gerade selbst kopierte Datei
> zum weiteren Schreiben zu öffnen. Die Berechtigung der Quelldatei ist
> ... ähm ... gute Frage. Angezeigt wird rwxrwSrwt, naja jedenfalls rw für
> alle.
[..]
> Der für's Mount verwendete User hat natürlich vollen Zugriff auf die
> Dateien, die Berechtigung des Zielordners zum schreiben ist 777
> root:root. Ich schätze, irgendwo in der "Vererbung" liegt auch das
> Problem ...

Alles sehr wirr, wie die anderen schon schrieben. Mit PHP hat das auf jeden
Fall nichts zu tun. Du solltest vielleicht die Windows-Freigabe nicht
als root mounten, sondern als der Benutzer, unter dem auch der apache
läuft und natürlich unter Windows selber dazu passende Berechtigungen
anlegen.
Aber nochmal: Mit PHP hat das nichts zu tun.


Gruß
JPM

Re: copy/fopen auf cifs-Mount

am 12.06.2007 13:49:30 von Claudio Lanzi

Claus Reibenstein schrieb:
> Der einzige, der hier auf keinen grünen Zweig kommen wird, bist Du, wenn
> Du Dich weiterhin so beharrlich weigerst, uns die notwendigen
> Informationen zu liefern. Wir helfen gerne. Dazu müssen wir aber erst
> einmal genau wissen, worum es geht.

Ich tret hier deswegen ein bisschen auf die Bremse weil ich denke, dass
das Problem wesentlich simpler ist und hier manche Lösungsansätze zu
weit ausholen. Aus nackter Bösartigkeit verschweige ich sicher nichts ;)

Weiterhin denke ich, dass Ulf und ich sehr verschiedene Arbeitsweisen
haben und das auch ein Hindernis sein mag. Will aber keineswegs sagen,
dass ich zwangsläufig Recht habe mit meiner Methodik und würde mich
freuen, wenn das auch andersherum gelten würde ;)

Das die Lösung des Problem nicht beim PHP liegt mag gut sein, aber ich
habe gehofft zunächst mal einen besseren Einblick in die Arbeitsweise
von PHP bei Dateizugriffen zu kriegen weil im Manual in diesem
Zusammenhang oftmals von Problemen mit entfernten Dateisystem die Rede ist.

Holger und Jens-Peter haben mir ein paar gute Ideen gebracht, da mach
ich mich jetzt mal dran, danke schonmal derweil allen ...

Re: copy/fopen auf cifs-Mount

am 12.06.2007 14:18:16 von Ulf Kadner

Claudio Lanzi wrote:

> Ich glaube, wir zwei kommen da auf keinen grünen Zweig ;)

?

Hast Du ein Problem damit, das ich versuche Dir mein Wissen anzubieten?
OK. Lass ichs halt.

MfG, Ulf

Re: copy/fopen auf cifs-Mount

am 12.06.2007 14:27:28 von Claudio Lanzi

Ulf Kadner schrieb:
> Claudio Lanzi wrote:
>
>> Ich glaube, wir zwei kommen da auf keinen grünen Zweig ;)
>
> ?
>
> Hast Du ein Problem damit, das ich versuche Dir mein Wissen anzubieten?
> OK. Lass ichs halt.

Habe eigentlich sehr bewusst "wir zwei" geschrieben weil ich niemandem
irgendetwas anlasten wollte! Guten Willen verurteile ich mit Sicherheit
nicht, genausowenig will ich jemandem auf die Füße treten, bist immerhin
freiwillig hier ...

Re: copy/fopen auf cifs-Mount

am 12.06.2007 14:29:39 von Claudio Lanzi

> [...] und Dir überlegen, ob es überhaupt Sinn macht, solche
> Verrenkungen übers Netzwerk zu machen, wenn es auch lokal auf dem
> Webserver funktionieren würde...

Lokal funktioniert es auch einwandfrei, nur dummerweise brauche ich die
erstellten Dateien auf unserem Gruppenlaufwerk ... ;)

Ich werde nochmal in die CIFS-Richtung ermitteln, muss ja irgendwie
machbar sein. Der Vorschlag mit dem Userwechsel hat mich auf eine kleine
Unregelmäßigkeit in der Prozessliste gestoßen, aber da hake ich an
andere Stelle mal nach, danke für den nützlichen Hinweis!

Re: copy/fopen auf cifs-Mount

am 12.06.2007 14:48:53 von Claudio Lanzi

> Alles sehr wirr, wie die anderen schon schrieben. Mit PHP hat das auf jeden
> Fall nichts zu tun. Du solltest vielleicht die Windows-Freigabe nicht
> als root mounten, sondern als der Benutzer, unter dem auch der apache
> läuft

And the Oscar goes to ... ;)

In der /etc/fstab einen zusätzlichen Mount-Parameter
uid=apache
eingefügt und schon ging's weil der apache damit zum "Besitzer" der
Dateien im CIFS-Mount wurde.

Besten Dank - auch im Namen der Kollegin in der Dokumentation :)

[LÖSUNG] Re: copy/fopen auf cifs-Mount

am 12.06.2007 15:08:58 von Claudio Lanzi

> Alles sehr wirr, wie die anderen schon schrieben. Mit PHP hat das auf jeden
> Fall nichts zu tun. Du solltest vielleicht die Windows-Freigabe nicht
> als root mounten, sondern als der Benutzer, unter dem auch der apache
> läuft

And the Oscar goes to ... ;)

In der /etc/fstab einen zusätzlichen Mount-Parameter
uid=apache
eingefügt und schon ging's weil der apache damit zum "Besitzer" der
Dateien im CIFS-Mount wurde.

Besten Dank - auch im Namen der Kollegin in der Dokumentation :)