Ankündigung

Einklappen
Keine Ankündigung bisher.

Php upload warum chmod 777?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Php upload warum chmod 777?

    Hallo Gemeinde,

    folgendes verstehe ich nicht ...

    ich habe hier ein uploadscript zum testen

    upload.html
    <html> <body> <form action="upload.php" method="post"
    enctype="multipart/form-data"> <input type="file" name="datei"><br>
    <input type="submit" value="Hochladen"> </form> </body> </html>

    upload.php
    <?php move_uploaded_file($_FILES['datei']['tmp_name'],
    "upz/datei.txt");
    ?>

    das funkioert auch wenn die chmod rechte von upz auf 777 stehen

    nun wollte ich ein wenig risiko eleminieren indem ich 622 bzw 620 gebe
    doch schreibrechte genuegen scheinbar nicht, denn die datei.txt wird nicht erstellt. Ich verstehe nicht warum. Es waere nett wenn mir das jemand naeher bringen koennte.

    mfg

    ps. es ist ein "Test"!!-uploadscript

    Loesung : "Write bit = If set, you can modify this list i.e. you can {add,rename,delete} names on it. But! You can actually do it only if the execute bit is set too."

    Also mit 633 laeufts ... finde ich unschoen und verwirrend, aber es ist halt so.
    Danke fuer die hilfe.


  • #2
    Genau erklären kann ich es auch nicht, aber du scheinst für Verzeichnisse x zu benötigen, damit w greift.

    - http://unix.stackexchange.com/a/21263

    Kommentar


    • #3
      Verzeichnisse mit chmod 7 dürfen gelesen, beschrieben und (durch das AusführungsFlag) betreten werden.

      Ohne nun deinen Server zu kennen, aber Lese/Schreibrechte nur für den Eigentümer sind immer problematisch, gehören die Dateien nach einem FTP-Upload z.B. nicht dem Webserver sondern dem User, der sie hochgeladen hat.
      Erzeuge die Datei doch mit dem Script, dann sollte idealer Weise sogar 700 reichen.

      ob move_uploaded_file() in das Verzeichnis wechseln möchte weiss ich aber auch nicht.
      gruss sys

      Kommentar


      • #4
        Meinst du die Dateien oder das Verzeichnis, in dem die Dateien liegen? Es ging zumindest ursprünglich um das Verzeichnis. (Ich sage es nur, um Verwirrung vorzubeugen.)

        Kommentar


        • #5
          Uups...Ich meine das Verzeichnis.

          Ich bin nicht sicher, ob move_uploaded_file() versucht in das Verzeichnis zu wechseln, in das geschrieben werden soll, das würde zumindest erklären, wieso man das Verzeichnis chmod 7 (also Erlaubnis zum Betreten) stellen muss.

          Hier lokal schnell getestet, habe ich das selbe Problem wie der Themenersteller, was aber auch an irgend einem Parameter in der php.ini liegen könnte ??

          Meine erweiterteAusführung bezog sich auf ein Verzeichnis, dass per FTP hochgelden wurde, auch das gehört den User, nicht dem Webserver...
          gruss sys

          Kommentar


          • #6
            Der Upload-Ordner selbst sollte einschließlich aller Unterordner auch vom Server angelegt werden, damit es keine Konflikte wegen der Eigentümerrechte gibt. Da hilft dann auch chown() nichts mehr. Dadurch entstehen dann Probleme wie dass z.B. in upz/user1/datei.xx der Unterordner nicht angelegt oder die Datei nicht geschrieben werden kann.

            Ganz einfach per explode() den Dateipfad nach den Slashes aufteilen und per Schleife schauen, ob der (Unter)Ordner existiert. Wenn nicht anlegen lassen. Danach erst die Datei schreiben. Angefangen beim Hauptverzeichnis des Servers, das gehört dem ja sowieso.

            Kommentar


            • #7
              Da hilft dann auch chown() nichts mehr.
              no.

              @TE: zum anlegen einer datei innerhalb eines verzeichnisses brauchst du welche rechte auf dem verzeichniss?
              schreiben und ausführen, lesen ist auch gut.
              wer braucht die ? der user der das vorhat, also mindestens 700, 755 ist meistens üblich(umask per default).

              Kommentar


              • #8
                @moma: Mein Ubuntu root konnte nicht einmal per sudo chown-Befehl Den Besitzer ändern, nachdem er von Win8.1 erstellt und per FTP hochgeladen wurde, ich denk mir das doch nicht aus. Zwar liefert Windows die mächtigeren Werkzeuge im Umgang mit Dateien und Dateisystemen, jedoch ist es dabei dermaßen zickig, dass es nerven kann. Also: Ordner löschen, neu anlegen (unter Linux über PHP oder zumindest den Benutzer, der PHP ausführt, versteht sich), und siehe da auf einmal funktioniert's.
                Am besten im Anschluss noch den Windows Dreck von der Platte schmeißen, aber das ist ein persönlicher Eindruck von mir, den muss man nicht für bare Münze nehmen.

                Kommentar


                • #9
                  @Donevan2:
                  achso, klickibunti.
                  bei seriösen *nix systemmen ist es
                  1.) völlig unnötig unter uid 0 sudo zu nehmen
                  2.)kann man da als uid 0 einiges, fast so viel wie der kernel.

                  eine ausnahme bilden die four-eyes-only geschichten.

                  windows die mächtigeren werkzeuge? ich kenn windows nicht, halte diese aussage aber für tendeziell bedenklich.

                  Kommentar


                  • #10
                    Zitat von sysop Beitrag anzeigen
                    Ich meine das Verzeichnis.

                    Ich bin nicht sicher, ob move_uploaded_file() versucht in das Verzeichnis zu wechseln, in das geschrieben werden soll, das würde zumindest erklären, wieso man das Verzeichnis chmod 7 (also Erlaubnis zum Betreten) stellen muss.
                    Meine Kenntnisse sind da eher rudimentär. Was ich gerade gelesen/probiert habe: Das Fehlen von x („cd ins Verzeichnis“) blockt so einige Sachen.

                    Code:
                    $ mkdir tmp
                    $ chmod 600 tmp
                    
                    $ ls -l | grep tmp
                    drw-------  2 marc marc      4096 Jan 27 11:47 tmp
                    
                    $ touch tmp/foo
                    touch: cannot touch ‘tmp/foo’: Permission denied
                    
                    $ cd tmp
                    bash: cd: tmp: Permission denied
                    
                    $ chmod 700 tmp && touch tmp/foo && chmod 600 tmp
                    
                    $ cat tmp/foo
                    cat: tmp/foo: Permission denied
                    
                    $ ls -l tmp
                    ls: cannot access tmp/foo: Permission denied
                    total 0
                    -????????? ? ? ? ?            ? foo
                    Das dient wohl schon dazu, das Verzeichnis dichtzumachen.

                    Kommentar


                    • #11
                      Zitat von sysop Beitrag anzeigen
                      Uups...Ich meine das Verzeichnis.

                      Ich bin nicht sicher, ob move_uploaded_file() versucht in das Verzeichnis zu wechseln, in das geschrieben werden soll, das würde zumindest erklären, wieso man das Verzeichnis chmod 7 (also Erlaubnis zum Betreten) stellen muss. [...]
                      Wenn wir das hier präzisieren dürfen: 7 ist nicht die Erlaubnis zum Betreten. Das wäre wenn schon das +x (also +1). Du kannst auch nur 1 geben, dann darf jedoch nicht gelesen und nicht geschrieben werden (macht auch keinen Sinn, ich weiss). Je nach dem reicht bei dir also wx, du benötigst kein r. Ein r benötigt nur das Skript, dass die Uploads wieder auslesen soll.
                      GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

                      Kommentar

                      Lädt...
                      X