Jörg: Falscher Owner für einen durch PHP-Script erstellten Ordner

Hallo Leute

folgendes Problem:
Ein PHP-Script legt einen neuen Ordner an. Danach versucht das Script, Dateien in diesem Ordner abzulegen. Das funktioniert nicht. Liegt wahrscheinlich daran, dass als Owner für diesen neuen Ordner wwwrun eingetragen wird. Alle anderen Ordner und Dateien, die ich per FTP hochgeladen habe, haben einen anderen Owner. Mein Webspaceanbieter sagt, es liege am safe_mode und man könne die Server-Einstellungen nicht so einfach dahingehend abändern, dass es funktioniert.

Hat jemand Lösungsvorschläge?

Danke euch

Jürgen

  1. Moin

    Ein PHP-Script legt einen neuen Ordner an. Danach versucht das Script, Dateien in diesem Ordner abzulegen. Das funktioniert nicht. Liegt wahrscheinlich daran, dass als Owner für diesen neuen Ordner wwwrun eingetragen wird. Alle anderen Ordner und Dateien, die ich

    Wenn das PHP Script, welches den Ordner anlegt, das gleiche ist wie das script welches den Ordner befüllt, dann sollte der owner der gleiche sein.

    • Wird der Ordner erstellt?
    • Hast du direkt nach dem erstellen des Ordners einen "chmod" ?

    Gruß
    Mike

    --
    Murphy: "Wenn etwas schiefgehen kann, dann wird es auch schiefgehen."
    1. Ein PHP-Script legt einen neuen Ordner an. Danach versucht das Script, Dateien in diesem Ordner abzulegen. Das funktioniert nicht. Liegt wahrscheinlich daran, dass als Owner für diesen neuen Ordner wwwrun eingetragen wird. Alle anderen Ordner und Dateien, die ich

      Wenn das PHP Script, welches den Ordner anlegt, das gleiche ist wie das script welches den Ordner befüllt, dann sollte der owner der gleiche sein.

      Ja, es ist dasselbe Script. Der Owner des PHP-Script sollte der gleiche wie der des Ordners sein?

      • Wird der Ordner erstellt?

      Ja.

      • Hast du direkt nach dem erstellen des Ordners einen "chmod" ?

      Nein, aber es liegt doch auch am Owner, oder nicht? Kann ich diesen eventuell per PHP ändern?

      1. Moin

        Nein, aber es liegt doch auch am Owner, oder nicht? Kann ich diesen eventuell per PHP ändern?

        Wer soll in diesen Ordner schreiben können? Das PHP Script?
        Dann nützt dir ja change owner nichts.

        Du kannst den Owner ändern:
        http://de.php.net/manual/de/function.chown.php

        Allerdings wäre es wohl besser direkt nach dem Erstellen des Ordners dessen Rechte zu ändern.

        chmod($Ordner, 0777);

        Gruß
        Mike

        --
        Murphy: "Wenn etwas schiefgehen kann, dann wird es auch schiefgehen."
        1. Wer soll in diesen Ordner schreiben können? Das PHP Script?
          Dann nützt dir ja change owner nichts.

          Du kannst den Owner ändern:
          http://de.php.net/manual/de/function.chown.php

          Owner per chown ändern habe ich versucht, es erscheint eine Fehlermeldung: Operation not permitted. Es ist also nicht möglich.

          Allerdings wäre es wohl besser direkt nach dem Erstellen des Ordners dessen Rechte zu ändern.

          chmod($Ordner, 0777);

          Habe ich gemacht, die Zugriffsrechte werden nun auf 0777 geändert, allerdings ist das Dateien-Ablegen in dem neu erstellten Ordner immer noch nicht möglich.
          Ein anderes meiner PHP-Scripts schreibt nur eine neue Datei in einem schon existierenden Ordner, das ist möglich.
          Es scheint irgendwie am safe_mode zu liegen, aber wie kann man es safe_mode-kompatibel machen?

          Folgende Fehlermeldung wird übrigens ausgegeben:
          SAFE MODE Restriction in effect. The script whose uid is 1789 is not allowed to access /xxx/xxx/xxx/NeuerOrdner owned by uid 30.

          1. Moin

            Folgende Fehlermeldung wird übrigens ausgegeben:
            SAFE MODE Restriction in effect. The script whose uid is 1789 is not allowed to access /xxx/xxx/xxx/NeuerOrdner owned by uid 30.

            Zum SAFE Mode kann ich leider nichts sagen :-(

            Wie sehen denn die Rechte der Ordner über dem neu erstellten Ordner aus?

            Wenn diese Schreibrechte zulassen, dann brauchen wir an dieser Stelle
            andere Forumsteilnehmer.

            Gruß
            Mike

            --
            Murphy: "Wenn etwas schiefgehen kann, dann wird es auch schiefgehen."
            1. Hello,

              Mann, seid Ihr faul!

              Suche im Forum:
              http://selfsuche.teamone.de/cgi-bin/such.pl?suchausdruck=safe+mode+author%3Atom&lang=on&feld=alle&index_5=on&hits=100

              Ausführliche Ergebnisse:
              http://forum.de.selfhtml.org/archiv/2004/4/78166/#m451767
              http://forum.de.selfhtml.org/archiv/2004/4/78875/#m456473

              Wer jetzt nochmal nachfragt, wird erschossen. ;-)

              Liebe Grüße aus http://www.braunschweig.de

              Tom

              --
              [ Computer-Camp für PHP-Anwender in den Sommerferien. Programmieren,
                Sport, Fun, Fete. Teilnehmermindestalter Gruppe 1: 14 Jahre
                Mindestalter Gruppe 2+3 18 Jahre, Info bei mir ]
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        2. Hello,

          Wer soll in diesen Ordner schreiben können? Das PHP Script?
          Dann nützt dir ja change owner nichts.

          chown ist ein Root-Kommando, also nicht vom Webserver durchführbar, wenn er denn vernünftig installiert wurde.

          Liebe Grüße aus http://www.braunschweig.de

          Tom

          --
          [ Computer-Camp für PHP-Anwender in den Sommerferien. Programmieren,
            Sport, Fun, Fete. Teilnehmermindestalter Gruppe 1: 14 Jahre
            Mindestalter Gruppe 2+3 18 Jahre, Info bei mir ]
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    2. Hello,

      Wenn das PHP Script, welches den Ordner anlegt, das gleiche ist wie das script welches den Ordner befüllt, dann sollte der owner der gleiche sein.

      Nein. Das ist nicht so.
      Das Script, dass Mike gehört, darf durchaus ein Verzeichnis anlegen. Dieses Verzeichnis gehört dann aber dem APACHE-User (oder WWWRUN oder wie der auch immer heißt). Dasselebe Script darf dann mit diesem Ordner nichts mehr machen, weil Script-Owner und Verzeichnis-Owner nicht mehr übereinstimmen.

      Wenn Ihr nicht so faul wärt, hättet ihr schon den etwas länglichen Thread gefunden, in dem wir das mal ausführlich durchgespielt haben. Es gibt eine saubere Lösung!

      Liebe Grüße aus http://www.braunschweig.de

      Tom

      --
      [ Computer-Camp für PHP-Anwender in den Sommerferien. Programmieren,
        Sport, Fun, Fete. Teilnehmermindestalter Gruppe 1: 14 Jahre
        Mindestalter Gruppe 2+3 18 Jahre, Info bei mir ]
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
  2. Hallo Jörg,

    Ein PHP-Script legt einen neuen Ordner an. Danach versucht das Script, Dateien in diesem Ordner abzulegen. Das funktioniert nicht. Liegt wahrscheinlich daran, dass als Owner für diesen neuen Ordner wwwrun eingetragen wird.

    Ja, Du tappst da leider in eine Falle, die Dir der safe_mode stellt.
    PHP ueberprueft im safe_mode beim Erstellen des Ordners mit mkdir(), ob das darueberliegende Verzeichnis die gleiche UID hat, wie das ausgefuehrte Skript. Ist dies der Fall, wird der Ordner angelegt. Da PHP in Deinem Fall wohl als Apache-Modul laeuft, erstellt PHP den Ordner mit der UID des Webservers (hier also "wwwrun").
    Wenn Du nun versuchst, in dieses Verzeichnis Dateien zu kopieren (copy(), move_uploaded_file()), wird die gleiche Ueberpruefung vorgenommen - nur sind die UID des Ordners und die des Skripts ja nun unterschiedlich. Das quittiert PHP mit einer Fehlermeldung.

    • Du koenntest den Ordner von Hand anlegen und dann die Dateien per PHP-Skript hineinkopieren - Unterverzeichnisse kannst Du dadurch aber natuerlich nicht erstellen.

    • chown() ist leider auch keine Moeglichkeit, da auch hier diese Ueberpruefung stattfindet (die Datei/das Verzeichnis, auf das chown() angewendet wird, muss ebenfalls die gleiche UID wie das Skript haben).

    • Dein Hoster koennte in der php.ini "safe_mode_gid"  auf "true" setzen, dann wuerde die Ueberpruefung nicht mehr die UID, sondern die GID betreffen. Wenn Du Dein Skript dann per chgrp() der Webserver-Gruppe zugehoerig machst, koennte das Anlegen von Ordnern und das hineinkopieren von Dateien auch vom PHP-Skript aus funktionieren - das haengt aber wiederum von der Umgebung bei Deinem Hoster ab.

    Mehr faellt mir dazu auch nicht ein.

    Beste Gruesse

    Jan

    1. Hallo nochmal,

      Wenn Du Dein Skript dann per chgrp() der Webserver-Gruppe zugehoerig machst, koennte das Anlegen von Ordnern und das hineinkopieren von Dateien auch vom PHP-Skript aus funktionieren - das haengt aber wiederum von der Umgebung bei Deinem Hoster ab.

      Das Zufuegen zu dieser Gruppe muss natuerlich Dein Hoster uebernehmen, weil Du auch hierfuer keine Rechte haben duerftest - in dem Fall koennte  Dein Hoster aber auch auf "safe_mode_gid" verzichten und einfach dem Skript die UID "wwwrun" zuweisen. Wenn das Skript Gruppen-Schreibrechte besitzt (664), kannst Du es auch weiterhin bearbeiten, sofern es die gleiche GID besitzt, der auch Du angehoerst.

      Beste Gruesse

      Jan

      1. Erstmal danke, dass du ausführlich und gut verständlich geantwortet hast!

        Das Zufuegen zu dieser Gruppe muss natuerlich Dein Hoster uebernehmen, weil Du auch hierfuer keine Rechte haben duerftest - in dem Fall koennte  Dein Hoster aber auch auf "safe_mode_gid" verzichten und einfach dem Skript die UID "wwwrun" zuweisen. Wenn das Skript Gruppen-Schreibrechte besitzt (664), kannst Du es auch weiterhin bearbeiten, sofern es die gleiche GID besitzt, der auch Du angehoerst.

        Ich habe also vollen Zugriff auf das PHP-Script (per FTP, also löschen, Zugriffsrechte setzen, usw.), auch wenn die UID auf wwwrun geändert wird? Dann wäre es doch am einfachsten, wenn ich allen Dateien und Ordnern die UID wwwrun zuweisen lasse, oder hat dies auch Nachteile?

        Mir stellen sich jetzt noch folgende allgemeine Fragen:
        1. Wenn ich per PHP-Script Dateien anlege, dann haben diese die Zugriffsrechte 0644, und PHP-Script kann die Dateien bearbeiten. Wenn ich per FTP Dateien hochlade, dann brauchen diese die Rechte 0666, um bearbeitet werden zu können? Woran liegt das?
        Auch kann ich die Zugriffsrechte von per PHP-Script angelegten Dateien nicht per FTP ändern, das Löschen geht aber!?
        2. Was ist der Sinn von safe_mode? Dateien können per PHP-Script angelegt und verändert werden, Unterordner in per FTP angelegten Ordnern anlegen ist auch erlaubt. Dateien und Ordner in per PHP-Script angelegten Ordner ist allerdings nicht erlaubt...

        1. Hallo Joerg,

          Ich habe also vollen Zugriff auf das PHP-Script (per FTP, also löschen, Zugriffsrechte setzen, usw.), auch wenn die UID auf wwwrun geändert wird? Dann wäre es doch am einfachsten, wenn ich allen Dateien und Ordnern die UID wwwrun zuweisen lasse, oder hat dies auch Nachteile?

          Es hat zum Beispiel den Nachteil, dass fuer alle Dateien die Gruppenschreibrechte gesetzt sein muessen. Das ist nicht in jedem Fall sinnvoll oder erwuenscht.
          Desweiteren muss schlimmstenfalls fuer jede Datei, die Du neu anlegst, Dein Hoster konsultiert werden, um die UID zu aendern.

          1. Wenn ich per PHP-Script Dateien anlege, dann haben diese die Zugriffsrechte 0644, und PHP-Script kann die Dateien bearbeiten. Wenn ich per FTP Dateien hochlade, dann brauchen diese die Rechte 0666, um bearbeitet werden zu können? Woran liegt das?

          Hat die Datei nach dem Hochladen per FTP Deine UID, oder vielleicht die des FTP-Servers, oder hat Dein FTP-User eine andere UID als Dein Systemuser?

          1. Was ist der Sinn von safe_mode? Dateien können per PHP-Script angelegt und verändert werden, Unterordner in per FTP angelegten Ordnern anlegen ist auch erlaubt. Dateien und Ordner in per PHP-Script angelegten Ordner ist allerdings nicht erlaubt...

          Der eigentliche Sinn ist, dass auf einem Server, der von mehreren Usern benutzt wird, kein Benutzer Dateien eines anderen Benutzers ueberschreiben oder veraendern kann.

          Beste Gruesse

          Jan

          1. Danke für die Antworten!

            Ich werde mal sehen, ob ich dem PHP-Script vom Hoster eine andere UID zuweisen lassen. Die Alternative wäre ja nur, den Ordner manuell anzulegen, sodass das PHP-Script die Dateien dort hineinschreiben kann.

            Grüße

            Jörg

  3. Moin!

    Ein PHP-Script legt einen neuen Ordner an. Danach versucht das Script, Dateien in diesem Ordner abzulegen. Das funktioniert nicht. Liegt wahrscheinlich daran, dass als Owner für diesen neuen Ordner wwwrun eingetragen wird. Alle anderen Ordner und Dateien, die ich per FTP hochgeladen habe, haben einen anderen Owner. Mein Webspaceanbieter sagt, es liege am safe_mode und man könne die Server-Einstellungen nicht so einfach dahingehend abändern, dass es funktioniert.

    Logge dich mit PHP über FTP als du selbst ein und erstelle den Ordner. Der kriegt dann automatisch die richtigen Rechte.

    - Sven Rautenberg

  4. Hello,

    ich habe hir in der letzten Zeit bereits zwei mal ausführliich erläutert, wie man das umschiffen kann. Da musst Du nun mal das Archiv bemühen. Irgendwann wird es sicherlich auch enen Feature-Artikel dazu geben. Abwer dazu muss ich mir erstmal einen Format-Genarator bauen. Denn das Ausfüllen des Templates "zu Fuß" ist mir zu doof.

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    [ Computer-Camp für PHP-Anwender in den Sommerferien. Programmieren,
      Sport, Fun, Fete. Teilnehmermindestalter Gruppe 1: 14 Jahre
      Mindestalter Gruppe 2+3 18 Jahre, Info bei mir ]
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen