max: Anlegen von Verzeichnissen - Keine Zugriffsberechtigung

Hallo,

ich versuche, über ein PHP-Script ein Verzeichnis anzulegen, um darin Dateien anlegen zu lassen. Dazu habe ich ein ganz einfaches Beispielscript:

mkdir('../login/4', 0777);

Habe jedoch keine Zugriffsrechte auf das erstellte Verzeichnis und kann damit keine Dateien darin anlegen. Laut dem Supportforum meines Webspace-Providers soll ich ein chown durchführen. Also gut:

chown('../login/4', 'web9'); //web9 ist der Name des FTP-Users

Funktioniert allerdings nicht... weil das nur geht, wenn der aufrufende Benutzer "root" ist. Der Apache-Server läuft jedoch als User "wwwrun" und somit ist ein chown nicht möglich.

Es muss doch irgendeine Lösung für dieses Problem geben? Warum kann ich mit PHP keine Unterordner oder Dateien in dem erstellen Verzeichnis erstellen?

Es ist doch nichts ungewönliches, über ein PHP-Script Verzeichnisse und Dateien zu erstellen

Grüsse
max

  1. Hallo,

    ich versuche, über ein PHP-Script ein Verzeichnis anzulegen, um darin Dateien anlegen zu lassen. Dazu habe ich ein ganz einfaches Beispielscript:

    mkdir('../login/4', 0777);

    Habe jedoch keine Zugriffsrechte auf das erstellte Verzeichnis und kann damit keine Dateien darin anlegen. Laut dem Supportforum meines Webspace-Providers soll ich ein chown durchführen. Also gut:

    Schau mal bei
    http://www.php.net/manual/de/function.mkdir.php
    rein:

    The mode on your directory is affected by your current umask. It will end
    up having (<mkdir-mode> and (not <umask>)). If you want to create one
    that is publicly readable, do something like this:

    $oldumask = umask(0);
    mkdir('mydir', 0777); // or even 01777 so you get the sticky bit set
    umask($oldumask);

    Wars das?

    Gruß

    Axel

    1. $oldumask = umask(0);
      mkdir('mydir', 0777); // or even 01777 so you get the sticky bit set
      umask($oldumask);

      Wars das?

      Leider nicht... folgendes Script habe ich jetzt:

      88     $oldumask = umask(0);
      89     mkdir('../../login/test', 0777);
      90     mkdir('../../login/test/test2', 0777);
      91     umask($oldumask);

      Beim Ausführen des Scripts erscheint folgende Meldung:

      Warning: SAFE MODE Restriction in effect. The script whose uid is 864 is not allowed to access ../../login/test owned by uid 30 in /home/www/web115/html/admin/deutsch/add_kunden2.php on line 90

      1. Hallo Max,

        das ist doch ne Aussage.

        Das Script gehört Dir (User ID 8hundert&Quark)
        Der Ordner gehört dem wwwrun (Das ist der Apache/PHP-Deamon)
            [ich habe eben mal einige Spielserver Suse 7.2 durchgeschaut, da hat er immer die UserID 30]

        Du musst versuchen, das Script dem Deamon zu schenken. Dafür lommt chown in Frage.
        am Linux-Prompt (Telnet oder SSH)

        chown wwwrun scriptname

        Schon gibts ne Fehlermeldung, weil Du nicht root bist. So ein Mist.

        Wie bekommst Du denn überhaupt Scripte auf den Server rauf?

        Möglichkeit wäre da ein Upload mit hilfe von PHP durchzuführen, dann gehören die Scripte automatsich dem Deamon. Aber wenn Du von deinem Provider kein solches Upload-Script bekommen hast, dann sieht es schlecht aus.

        Sortier nochmal und melde dich wieder.

        Tom

  2. Hallo Max,

    das chown musst Du über einen SSH- oder FTP-Client durchführen, mit dem Du dich direkt auf dem Server einloggen kannst. Theoretisch geht es auch mit Telnet, aber das dürfte es (hoffentlich) nicht mehr geben bei Deinem Provider. Das wird aber auch nur gehen, wenn Du als root rankommst.

    Der PHP-Deamon hat keine Rechte für chown(), wenn er nicht unter root läuft. Sollte er auch nicht bekommen. Das wäre sehr gefährlich.

    Der PHP-Deamon ist vielleicht Mitglied einer Gruppe, auf die Du Einfluss hast. Dann mach ein chgrp für das Hauptverzeichnis, in dem Du mit php die Unterverzeichnisse anlegen willst. Und mit 0777 anzulegen ist genauso gefährlich. es reicht dann 0070 bzw 0770.

    Grüße

    Tom

    1. Ich möchte mich ja jetzt nicht an dem chown festbeissen. Es geht darum, dass das PHP-Script mehrere Verzeichnisse anlegen soll, aber bereits bei einem erstellten Verzeichnis keine Rechte mehr hat, dort ein weiteres Unterverzeichnis zu erstellen.

      Und da kommt es wieder zum Ausgangspunkt zurück: Es muss doch möglich sein, mit PHP eine Verzeichnisstruktur zu erstellen?

      Grüsse
      max

      1. Hallo Max,

        dann leifer doch mal eine vollwertige Fehlerbeschreibung.

        Du legst mit PHP ein Verzeichnis an.

        bitte hier den Code:

        Dann gibst Du auf der Konsole (ggf. SSH) ls -l ein und schaust, was da steht für das Verzeichnis

        Owner:
        Group:
        Rechte: ??? ??? ???

        Danach sehen wir weiter.

        Gruß

        Tom