Wie werden Dateiberechtigungen berechnet?

7

Mit chmodkönnte ich die Berechtigungen für eine Datei festlegen, aber ..was würde passieren , wenn das Verzeichnis parent ( ) widersprüchliche Berechtigungen hätte?

Und wenn ich eine neue Datei mit touchoder ähnlichem erstelle , wie werden die anfänglichen Berechtigungen berechnet? Werden Berechtigungen davon geerbt ..?

Und warum kann ich im Verzeichnis nichts tun, wenn ich das executableBerechtigungsflag entfernt habe ?

$ mkdir temp;
$ chmod -x temp;
$ touch temp/a;
$ ls temp;
touch: cannot touch `temp/a': Permission denied
Stefan
quelle

Antworten:

15
  1. Genau genommen gibt es in UNIX keine "widersprüchlichen Berechtigungen": Zugriffsberechtigungen für einen Dateisystemeintrag (Verzeichnis, Datei usw.) bestimmen, was Sie für dieses Objekt tun können oder nicht. Berechtigungen für andere Dateisystemeinträge werden nicht in das Bild eingegeben, mit Ausnahme des Bits "x" für alle Ahnenverzeichnisse im Pfad zu einer Datei (bis zu /) - siehe 3.

  2. Die Standardberechtigung für eine neu erstellte Datei wird durch die Berechtigungen bestimmt, die das Erstellungsprogramm zulässt (das modeArgument für die openoder creatSystemaufrufe) und den aktuellen Prozess umask. Insbesondere wird jedes Bit, das in der "umask" gesetzt (1) ist, in den neu erstellten Dateiberechtigungen zurückgesetzt (0): in C-ähnlicher Notation : file_permissions = open_mode & ! umask. Lesen Sie man 2 creat(suchen Sie nach O_CREAT) und man umaskfür die Details.

  3. Das „x“ (ausführbare Datei) Bit auf einem Verzeichnis steuert , ob Sie durchqueren das Verzeichnis: ein Verzeichnis Traversiereinrichtungen zu der Möglichkeit , cdin sie und Zugriff auf Dateien darin enthalten ist . Beachten Sie, dass die Möglichkeit, den Inhalt des Verzeichnisses aufzulisten, durch das "r" -Bit gesteuert wird.

Weiterführende Literatur:

Riccardo Murri
quelle
So hilfreich. Ich würde dies +5 (informativ) tun, wenn ich könnte.
Kevin M
1
Leichter Nitpick zu Punkt 1: Der Kernel überprüft die Berechtigungen für den Pfad, den Sie an ihn übergeben, auch wenn er relativ ist. Sie können also in einem Verzeichnis arbeiten, in das Sie nicht chdirüber den vollständigen Pfad gelangen konnten (versuchen Sie es mit mkdir foo/bar; cd foo/bar; chmod 000 ..; cd ..; ls -ld . ..; touch yes_I_can_write_here; chmod 755 ..; cd ..). Dies kommt nicht oft vor (es wird gelegentlich in einigen Prozessbeschränkungsszenarien verwendet).
Gilles 'SO - hör auf böse zu sein'
3

Zuallererst ... unter Linux ist alles eine Datei. Mit allem meine ich alles ... Ihre Ordner, Maus oder Tastatur ... alles ist eine Datei.

Beantworten wir nun Ihre Fragen:

  1. Es gibt keine Konflikte zwischen Ordner und enthaltener Datei. Wenn Sie einen Ordner haben, der nur über Leserechte verfügt, in diesem Ordner jedoch eine Datei mit Schreibberechtigungen vorhanden ist, können Sie in diese Datei schreiben. Sie können jedoch keine Dateien in diesem Ordner erstellen / löschen. Mach dir also keine Sorgen um Konflikte. Sie können auch den Inhalt des Ordners lesen (den Ordner auflisten).

  2. Standardberechtigungen sind normalerweise 644 (dh: rw für Benutzer, r für Gruppe und andere)

  3. Das "ausführbare" Bit für ein Verzeichnis bedeutet "Auflisten" des Verzeichnisses. Mit anderen Worten, wenn Sie einen Ordner -xa haben, können Sie dessen Inhalt nicht kennen, das heißt, Sie können nichts darin anfassen.

Patkos Csaba
quelle
1
Wenn es ausführbar ist, können Sie etwas darin lesen oder was sich in einem Unterverzeichnis befindet, aber Sie müssen den Dateinamen kennen. Sie können den Verzeichnisinhalt nicht auflisten (Leseberechtigung). Um dies zu testen, erstellen Sie ein Verzeichnis mit einer Datei darin, entfernen Sie alle Leseberechtigungen aus dem Verzeichnis, cdaus dem Verzeichnis und aus catder Datei.
Kevin M
(2) Standard-Dateiberechtigungen werden durch die umask(grob gesagt, es werden ausgeschlossene Bits angegeben) und die von der Anwendung, die die Datei erstellt, angeforderten Berechtigungen gegeben. Das umaskist oft 022, was zu Berechtigungen 755 , wenn das Programm fordert eine ausführbare Datei (Argument 777), 644 , wenn die Anwendung eine öffentliche Datei (Argument 666) anfordert, und 600 , wenn die Anwendung eine private Datei (Argument 600) anfordert. (3) Wie Kevin sagt, haben Sie hier die Ausführungs- und Leseberechtigungen für ein Verzeichnis verwechselt.
Gilles 'SO - hör auf böse zu sein'
OK, danke für die zusätzlichen Informationen zu meiner Antwort ... Ich habe nur versucht, sie so einfach wie möglich ohne übermäßige Informationen zu erklären.
Patkos Csaba
Betreff "unter Linux ist alles eine Datei": Nicht ganz korrekt. Für /devGeräte wie z. B. mein Bluetooth-Radio oder meine Ethernet-Karte ist kein Knoten vorhanden . Übergeordnete Konzepte wie X11-Fenster werden ebenfalls nicht als Dateien angezeigt (Ausnahme :) wmii. (Übrigens, die Aussage kann auf Plan9 OS angewendet werden.)
user1686