Marc: Zugrifsrechte bei hochgeladenen Dateien

Ich habe einen User-Bereich, in dem die Leute eigene Bilder hochladen und gegebenenfalls auch überschreiben und löschen können.

Dazu soll für jedem User beim ersten Mal, falls noch nicht geschehen, ein Ordner erstellt werden. Leider habe ich nirgends die konkrete Lösung dafür gefunden:

-Welche Zugriffsrechte muss der Ordner haben?

-welche Zugriffsrechte müssen die Bilder haben?

Vielen Dank

  1. Hello,

    -Welche Zugriffsrechte muss der Ordner haben?

    -welche Zugriffsrechte müssen die Bilder haben?

    Das Verzeichnis sollte mittels PHP-Script angelegt werden, dann hat es automatisch den Owner des Webservers (bei der Modulversion von PHP). Die Rechte für Gruppe und Others kanns Du alle auf --- (0) setzen. Es kann aber sein, dass Du dann mittels FTP nicht mehr an die Dateien herankommst, aber Du hast ja PHP.

    Die Dateien, die mittels Script hochgeladen werden, gehören dann automatisch dem Webserver. Gruppe Wird auch der Webserver sein, Others wird vermutlich automatisch auf (0) stehen.

    Du musst allerdings dafür sorgen, dass weder ausführbare Dateien noch Scripte hochgeladen werden können. Das würde nämlich eine Riesenlücke in Dein System reißen.

    Außerdem sollte man Fantasienamen für die Datein vergeben. Man könnte

    B0001-dateiname-abcdef1234567890abcdef1234567890.jpg

    User  auf dem   Zufallszahl
            Client

    vergeben. Dann könntest Du z.B. alle Files des Users mittels glob() filtern oder alle jpg-Dateien filtern. Die Methode sorgt auch dafür, dass keine Files versehentlich überschrieben werden können.

    Den Dateinamen, der vom Client kommt, solltest Du auf jeden Fall mit basename() behandeln.

    Harzliche Grüße vom Berg
    esst mehr http://www.harte-harzer.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. Für den Ordner:

      Muss der Owner dann nur lesen können oder schreiben oder ausführen? Oder alles zusammen?

      1. der owner muss Schreibrechte für den Ordner haben um Dateien hineinkopieren und überschreiben bzw. löschen zu können.

        Ausführen nur falls du irgendwelche Scripte in dem Ordner hast.

        1. Hello,

          der owner muss Schreibrechte für den Ordner haben um Dateien hineinkopieren und überschreiben bzw. löschen zu können.

          Ausführen nur falls du irgendwelche Scripte in dem Ordner hast.

          Nein, das x-Recht ist zwingend erforderlich, wenn man mit dem Inhalt des Verzsichnisses arbeiten will.

          Wenn also Dateien im Verzeichnis abgelegt werden sollen oder verändert, dann ist das x-Recht für das Verzeichnis notwendig. Anderenfalls darf das OS dieses Verzeichnis nicht in den aktiven Pfad aufnehmen.

          Harzliche Grüße vom Berg
          esst mehr http://www.harte-harzer.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
      2. Hello,

        Für den Ordner:

        Muss der Owner dann nur lesen können oder schreiben oder ausführen? Oder alles zusammen?

        Harzliche Grüße vom Berg

        Der Owner sollte der Webserver sein.
        Der muss lesen können, um das Verzeichnis aufzulisten
        Der muss schreiben können, um Dateien im Verzeihnis anlegen zu können
        Der muss das active-Recht (x) haben, um die Dateien im Verzeichnis "benutzen" zu können
            Benutzen bezieht sich dann auf das Recht, das bei der Datei selbst gewährt wurde.

        Die Dateien benötigen nur das rw- Recht für den Owner bzw. den PHP-Prozess

        esst mehr http://www.harte-harzer.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
  2. Ich mache irgendwas falsch:

    Die Rechte sind auf 777 gesetzt, aber mit rmdir() lässt sich das Verzeichnis nicht löschen.

    Es kommt immer die Meldung "unable to access <verzeichnis>"

    und dann "RmDir failed (No such file or directory)"

    1. Hello,

      Ich mache irgendwas falsch:

      Die Rechte sind auf 777 gesetzt, aber mit rmdir() lässt sich das Verzeichnis nicht löschen.

      Wer führt denn das rmdir() aus? Darf der das?
      Liegt das Verzeichnis denn überhaupt dort, wo Du annimmst?
      Wie lautet denn der realpath()?

      Es kommt immer die Meldung "unable to access <verzeichnis>"

      und dann "RmDir failed (No such file or directory)"

      Dann ist ja klar, dass für den ausführenden User kein Verzeichnis vorhanden ist.

      Harzliche Grüße vom Berg
      esst mehr http://www.harte-harzer.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      1. Das ist jetzt zuviel auf einmal:

        Das rmdir() wird vom PHP-Skript ausgeführt.

        Der Ordnername heißt einfach "1" und liegt im selben Verzeichnis wie das Skript.

        Der aufruf lautet:

        rmdir("1");

        Vielleicht stelle ich mich auch nur zu doof an...

        1. Hello,

          Das rmdir() wird vom PHP-Skript ausgeführt.

          Der Ordnername heißt einfach "1" und liegt im selben Verzeichnis wie das Skript.

          Der aufruf lautet:

          rmdir("1");

          Und wer hat das Verzeichnis angelegt?
          Enthält es ggf. schon Daten, wobei das für die beschrieben Fehlermeldung nicht relevant ist?

          Wird das Verzeichnis vielelicht vom selben Script angelegt, dass es dann wieder löschen soll? Also von derselben Instanz!?

          Harzliche Grüße vom Berg
          esst mehr http://www.harte-harzer.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          1. Dasselbe Skript hat es auch angelegt. Es ist nur ein Test-Skript:

            Ist der Ordner nicht da: Verzeichnis anlegen (funktioniert)
            Ist der Ordner breits da: Verzeichnis löschen (funktioniert nicht)

            Das (hier wieder das ursprüngliche) Skript funktioniert ohne äußere Eingaben:

            if (!(chdir("../objekte/ordner")))
                      {
                        mkdir("../objekte/ordner", 777);
                      }
                      else
                      {
                        rmdir("../objekte/ordner");
                      }

            1. Hello,

              Dasselbe Skript hat es auch angelegt. Es ist nur ein Test-Skript:

              Abr eine andere Instanz. DAS wollte ich wissen :-)

              Ist der Ordner nicht da: Verzeichnis anlegen (funktioniert)
              Ist der Ordner breits da: Verzeichnis löschen (funktioniert nicht)

              Das (hier wieder das ursprüngliche) Skript funktioniert ohne äußere Eingaben:

              if (!(chdir("../objekte/ordner")))
                        {
                          mkdir("../objekte/ordner", 777);
                        }
                        else
                        {
                          rmdir("../objekte/ordner");
                        }

              Wie soll das funktionieren, wenn Du nicht schummeslt?
              Du fragst, ob Du das aktuelle Verzeichnis in ../objekte/ordner wechseln hannst.
              Wenn es nicht klappt, legst Du das Verzeichnis an.
              Wenn es klappt, stehst Du jetzt in ../objekte/ordner und versuchst dort ../objekte/ordner zu löschen, also ./objekte/objekte/ordner. Oder?

              Warum benutzt Du nicht vorher http://de.php.net/manual/en/function.file-exists.php und is_dir() [http://de.php.net/manual/en/function.is-dir.php], um festzustellen, ob der Pfad existiert und ob es sich dabei um ein Directory handelt.

              Harzliche Grüße vom Berg
              esst mehr http://www.harte-harzer.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
              1. Ich Danke Dir!!!

                Die Funktion kannte ich nicht - Ich hab woanders gelesen, dass man mit chdir auch ein Verzeichnis auf Existenz hin überprüfen kann..aber das hätte ich wissen müssen...naja, hauptsache, es geht