php N00b: ChMod Verständnis Frage

Hallo liebe Community,

beschäftige mich momentan mit chmod() auf einem Ubuntu Server, jedoch ist mir nicht ganz klar, was die einzelnen Stellen im Bezug auf den Oktalparameter beispielsweise 0755 bedeuten. Das mit den Zahlenwerten ist denk ich klar - also mir ist klar das 7 ausführen, schreiben und lesen bedeutet usw., ich verstehe nur nicht welche Stelle sich auf welchen Benutzer auswirken.

Ich weiß die erste Stelle muss immer 0 sein, die zweite betrifft (zumindest glaub ich dass aufgrund von try and error) den FTP User. Wozu sind die anderen zwei Parameter?

Ich würde gerne meinen Server so konfigurieren, dass alle Dateien außer die index.php beim Aufruf mit einer "Zugriff verweigert" Meldung aufgerufen werden (also bei manueller URL Eingabe im Browser), jedoch soll die index.php in der Lage sein die Dateien aus den Unterordnern zu inkludieren und auch bei Bedarf anzeigen zu können (bspweise Bilder).

Geht das so ohne Weiteres, oder muss ich dann bei Schreibvorgängen jedes mal den chmod ändern?

Vielen Dank für eure Hilfe,

mfG php-N00b

  1. Moin!

    Seiten 1 bis 4.

    Jörg Reinholz

    1. Moin!

      Seiten 1 bis 4.

      Jörg Reinholz

      Danke für das Infomaterial, das Prinzip ist mir an sich schon klar, jedoch wie lässt sich das auf einem PHP Server umsetzen? mit chmod($datei, 0755); kann ich nicht angeben wem die Datei zugeordnet wird und wem nicht?!

      Laut meinem Plesk Panel stehn die Parameterstellen bei bspweise Ordner für rwx für "Provider", rx für "Gruppe" und rx für "Andere". Aber wer ist denn die "Gruppe" und wer sind die "Anderen" ? Iwie versteh ich den Zusammenhang einfach nicht, sorry :-(

      1. Hallo,

        Laut meinem Plesk Panel stehn die Parameterstellen bei bspweise Ordner für rwx für "Provider", rx für "Gruppe" und rx für "Andere". Aber wer ist denn die "Gruppe" und wer sind die "Anderen" ? Iwie versteh ich den Zusammenhang einfach nicht, sorry :-(

        dann solltest du dich ein wenig über die Grundprinzipien des Rechtekonzepts unter Unix/Linux einlesen.
        Die wesentlichen Punkte kurz zusammengefasst:

        * Jede Datei hat einen Besitzer (Owner) und ist einer Gruppe (Group) zugeordnet.
           Die Gruppe ist in der Regel eine, der auch der Besitzer angehört, das muss aber
           nicht zwangsläufig so sein.
         * Die Zugriffsrechte r (Lesen), w (Schreiben) und x (Ausführen) sind getrennt für
           den Besitzer der Datei, die Mitglieder der Gruppe, und alle anderen Nutzer an-
           gegeben.

        Bei Verzeichnissen hat das x-Bit die Bedeutung "Betreten", also die Berechtigung ein 'cd' in dieses Verzeichnis zu machen ("ausführen" ergäbe ja keinen Sinn).

        Hat eine Datei also die Rechte rwxr-xr-- oder 0754, dann bedeutet das:

        rwx  Der Besiter des Datei darf lesen, schreiben und ausführen (z.B. Programm- oder
              Scriptdateien).
         r-x  Die anderen Gruppenmitglieder außer dem Besitzer dürfen lesen und ausführen.
         r--  Alle anderen Nutzer dürfen die Datei lesen, aber nicht ausführen.

        mit chmod($datei, 0755); kann ich nicht angeben wem die Datei zugeordnet wird und wem nicht?!

        Stimmt. Der Besitzer einer Datei ergibt sich normalerweise daraus, von welchem Benutzer sie angelegt wird. Sie gehört dann erstmal diesem Benutzer und ist seiner Gruppe zugeordnet. Mit den Kommandos 'chown' bzw. 'chgrp' kann man den Besitzer und die Gruppe einer Datei nachträglich ändern, wenn man das Recht dazu hat (das darf AFAIK nur der Besitzer selbst oder root).

        Bei einem Managed Server, den du ja betriebsfertig eingerichtet bekommst, ist das Gefüge normalerweise schon so voreingestellt, dass man nur gelegentlich mit 'chmod' rummachen muss, und sehr, sehr selten mit 'chown' oder 'chgrp'.

        Ich würde gerne meinen Server so konfigurieren, dass alle Dateien außer die index.php beim Aufruf mit einer "Zugriff verweigert" Meldung aufgerufen werden (also bei manueller URL Eingabe im Browser), jedoch soll die index.php in der Lage sein die Dateien aus den Unterordnern zu inkludieren und auch bei Bedarf anzeigen zu können (bspweise Bilder).

        Du sprichst hier von HTTP-Zugriffen, oder? Da würde ich die Zugriffskontrolle aber eher über eine .htaccess-Datei regeln als über die Unix-Dateirechte.

        So long,
         Martin

        --
        Der Sinn einer Behörde besteht in ihrer Existenz.
          (alte Beamtenweisheit)
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Tach!

          Du sprichst hier von HTTP-Zugriffen, oder? Da würde ich die Zugriffskontrolle aber eher über eine .htaccess-Datei regeln als über die Unix-Dateirechte.

          Zumal man letztere im Zusammenhang mit Plesk unangefasst lassen sollte.

          dedlfix.

        2. Soweit so gut, vielen Dank.

          Die Skripte bzw. Bilder werden ja von mir via FTP auf meinen Webserver upgeloadet, d.h. letzt endlich stelle ich (bzw. mein FTP-User Account) doch dann den Besitzer dar, oder? Ergo 2. Stelle im Oktalwert... Gruppenmitglieder wären dann andere FTP-User nach meiner Logik (also im Endeffekt 3. Stelle vom Oktalwert). Zählen dann die User die via HTTP auf meine Dateien zugreifen zu den Anderen, also sprich zum 4. Oktalwert? Dann wäre doch das Problem gelöst wenn ich meine zu schützende Ordner via chmod() auf 0751 bzw 0750 setze oder?

          Da ich mit .htaccess schon ein wenig Erfahrung gesammelt habe, werde ich dann versuchen damit eine passende Lösung zu finden, wenn ihr der Meinung seid dass das der beste Weg wäre.

          Trotzdem würde ich gerne das chmod()-Verhalten verstehen, tut mir leid dass ich mich da so "dumm" anstelle...

          Danke für die zahlreichen Beiträge,

          MFG

          1. Hallo,

            Die Skripte bzw. Bilder werden ja von mir via FTP auf meinen Webserver upgeloadet, d.h. letzt endlich stelle ich (bzw. mein FTP-User Account) doch dann den Besitzer dar, oder?

            ja, richtig.

            Ergo 2. Stelle im Oktalwert...

            Eigentlich die erste (die führende Null zählt man üblicherweise nicht mit).

            Gruppenmitglieder wären dann andere FTP-User nach meiner Logik

            Kommt drauf an. Der FTP-Server hat (theoretisch) seine eigene Benutzerverwaltung, die von den Unix-Benutzern unabhängig sein kann. Dann gäbe es auch Betriebssystem-Sicht nur einen einzigen FTP-User. Das hängt aber davon ab, wie das bei dir konkret eingerichtet ist.

            Zählen dann die User die via HTTP auf meine Dateien zugreifen zu den Anderen, also sprich zum 4. Oktalwert?

            Nein. Der Apache (bzw. die Benutzerkennung, unter der er läuft, z.B. wwwdata oder wwwrun) ist _der_ User, der beim HTTP-Zugriff zum Zuge kommt. Der Benutzer, der sich über irgendein Netzwerkprotokoll wie FTP, HTTP, POP3, IMAP oder auch Samba authentifiziert, muss nicht unbedingt etwas mit einem Linux-Benutzer zu tun haben. Das sind zwei Paar Stiefel.

            Dann wäre doch das Problem gelöst wenn ich meine zu schützende Ordner via chmod() auf 0751 bzw 0750 setze oder?

            Kommt drauf an. Wenn diese Verzeichnisse bzw. die Dateien darin dem Apache-User "gehören", ist das sinnlos, da er auf seine eigenen Dateien vollen Zugriff hat (und haben sollte). Wie gesagt: Die Dateirechte sind immer im Zusammenhang mit dem Besitzer zu sehen. Gib mal ein 'ls -la' in einem Verzeichnis, dann siehst du zu jeder Datei auch Besitzer, Gruppe und Zugriffsrechte. Erst in dieser Kombination ist das aussagekräftig.

            Ciao,
             Martin

            --
            Eine Nonne kommt in den Himmel. An der Pforte fragt Petrus: "Wer bist du?" - "Ich bin die Braut Jesu." Petrus stutzt einen Moment, ruft dann nach hinten: "He Freunde, habt ihr schon gehört? Der Juniorchef will heiraten!"
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  2. Ich weiß die erste Stelle muss immer 0 sein

    muss sie nicht, die erste Stelle ist für UID, GID und das Sticky Bit

    Die rechte bestehen aus 4 x 3 Werten die je 2 Zustände haben können.

    111 = alles gesetzt
    110 = die 2 ersten gesetzt
    101 = 1. und 3.
    100 usw.
    011
    010
    001
    000

    Das Muster der 0er und 1er kann auch als Binärzahl betrachtet werden und diese lässt sich in Oktal umrechnen, damits einfach kürzer und einfacher lesbar ist :)

    , die zweite betrifft (zumindest glaub ich dass aufgrund von try and error) den FTP User. Wozu sind die anderen zwei Parameter?

    Der User hat nichts damit zu tun - die ersten 3 (1 Stelle) ist die User, das 2. die Gruppe und das Dritte "alle" - da gehts um die Unix/POSIX-Dateisystemrechte.

    Ich würde gerne meinen Server so konfigurieren, dass alle Dateien außer die index.php beim Aufruf mit einer "Zugriff verweigert" Meldung aufgerufen werden (also bei manueller URL Eingabe im Browser), jedoch soll die index.php in der Lage sein die Dateien aus den Unterordnern zu inkludieren und auch bei Bedarf anzeigen zu können (bspweise Bilder).

    Das ist eine Sache, die sich mit den Datei- und Verzeichnisrechten etwas unhandlich bzw. garnicht lösen - das solltest du an eine andere Stelle verschieben, sprich das ist eine Aufgabe des Webservers.

    1. Vielen Dank für die schnellen Antworten, aber:

      Das ist eine Sache, die sich mit den Datei- und Verzeichnisrechten etwas unhandlich bzw. garnicht lösen - das solltest du an eine andere Stelle verschieben, sprich das ist eine Aufgabe des Webservers.

      Könnt ihr mir einen Tip geben wie man so ein Problem mehr oder weniger elegant lösen kann? Habe einen managed Server (Betriebssystem Ubuntu) mit einem Plesk Control Panel. Hat jemand Erfahrung damit?

      1. Könnt ihr mir einen Tip geben wie man so ein Problem mehr oder weniger elegant lösen kann? Habe einen managed Server (Betriebssystem Ubuntu) mit einem Plesk Control Panel. Hat jemand Erfahrung damit?

        Was ist deine genaue Anforderung?