Wie sollen r - Verzeichnisberechtigungen unter Linux funktionieren?

11

Ich habe ein Verzeichnis erstellt, das erstellt wurde und über diese Berechtigungen verfügt - der andere Benutzer hat

drwxr - r-- 5 user user 4096 2012-09-15 19:30 sites

Wann machen Sie ein ls -l im Verzeichnis als ein anderer Benutzer

ls -l / home / user / sites

Dies ist die Verzeichnisausgabe. Ich dachte, ohne das in diesem Verzeichnis gesetzte x-Bit würden die Dateinamen überhaupt nicht angezeigt.

d????????? ? ? ? ?                ? dev.user.com  
-????????? ? ? ? ?                ? user.20120914_082804.sql.gz   
d????????? ? ? ? ?                ? shared  
-????????? ? ? ? ?                ? shared.tar.gz  
-????????? ? ? ? ?                ? www.20120914_083256.tar.gz
d????????? ? ? ? ?                ? www.user.com

Gibt es hier eine Inkonsistenz?

vfclists
quelle

Antworten:

16

xgibt Ihnen die Erlaubnis, sich tatsächlich im Verzeichnis zu befinden und auf die Dateien im Verzeichnis zuzugreifen, rgibt Ihnen die Erlaubnis, den Inhalt des Verzeichnisses anzuzeigen.

Wenn Sie die Situation umgekehrt haben, indem Sie dem Verzeichnis das xBit gegeben und das rBit entfernt haben, kann der Benutzer öffnen shared.tar.gz(unter der Annahme der richtigen Berechtigungen für die Datei selbst), jedoch nur, wenn er den Dateinamen im Voraus kennt, da er lsdie Dateien im Verzeichnis nicht auflisten kann .

DerfK
quelle
1
Ich werde dies testen und mich bei Ihnen melden. Ich fand diesen Aspekt der Linux-Dateifreigabe immer verwirrend.
vfclists
Dieses Verhalten gilt nicht nur für Linux. Es stammt aus den frühesten Tagen von UNIX - Linux, ein UNIX-kompatibles System, funktioniert auf diese Weise - und Windows NT-ACL-Einträge haben ähnliche Berechtigungsbits.
2

Diese Interpretation der Berechtigungen geht auf frühe Unix-Dateisysteme zurück. Am Anfang gab es nur Dateien. (Nun, und Geräte und Pipes und ... aber ich versuche hier eine Geschichte zu erzählen, nicht 100% genau zu sein; außerdem gilt alles für Geräte und Pipes und alles andere, weil alles sogar eine Datei ist Verzeichnisse).

Verzeichnisse sind nur Dateien, die das Dateisystem verwendet, um die Metadaten, die den Verzeichnisbaum beschreiben, und die darin enthaltenen Dateien zu speichern. Jede Datei in einem Verzeichnis wurde durch eine einfache Datenstruktur beschrieben, die Platz für einen Dateinamen (ursprünglich 14 Zeichen, IIRC) sowie die Inode-Nummer, in der die Daten gespeichert waren, die Größe der Datei, Zeitstempel und das Berechtigungswort enthielt . Jedes Verzeichnis begann mit zwei Einträgen mit dem Namen .und .., wobei der erste auf den Inode dieses Verzeichnisses und der zweite auf den Inode des übergeordneten Verzeichnisses zeigte.

Das Berechtigungswort hatte neun Bits, um die Behandlung des Besitzers, anderer Mitglieder derselben Gruppe und der Welt zu beschreiben. Die drei Bits für jedes Flag, ob der betreffende Benutzer die Datei lesen, schreiben oder ausführen kann. (Möglicherweise stellen Sie fest, dass das 16-Bit-Berechtigungswort fünf weitere Bits enthält, die ich ignoriere. Diese wurden schließlich mit Bedeutungen versehen, aber das ist für diesen Teil der Geschichte nicht relevant.) (Auch diese Interpretation der neun Bits ist in allen Nachkommen des frühen Unix, einschließlich Linux, ziemlich gleich geblieben.)

Wenn ein Verzeichnis also wirklich nur eine spezielle Art von Datei ist und durch einen Eintrag in einem Verzeichnis beschrieben wird, hat es offensichtlich auch Berechtigungsbits, und diese Bits bedeuten wahrscheinlich etwas. Aber die Frage ist was genau. Der einfachste Weg, diesen Bits eine Bedeutung zuzuweisen, besteht darin, ihre Bedeutung überhaupt nicht zu ändern. Und genau das wurde getan.

Das Lesebit bedeutet also, dass der Benutzer das Verzeichnis selbst lesen kann. Dadurch erhält der Leser klassisch Zugriff auf den Dateinamen, die Zeitstempel, die Größe und die Inode-Nummer der Daten jeder Datei. Insbesondere mit rset können Sie lsdie Namen aller Dateien im Verzeichnis anzeigen, dies reicht jedoch nicht aus, um eine der aufgelisteten Dateien zu öffnen (oder in irgendeiner Weise zu verwenden).

Das Ausführungsbit bedeutet, dass der Benutzer das Verzeichnis "ausführen" kann. Da Verzeichnisse etwas Besonderes sind, bedeutet Ausführen wirklich, einen Eintrag nach Namen zu suchen und ihn zu verwenden. Das bedeutet, dass Sie versuchen können, die Dateien zu öffnen, wenn dies festgelegt xist, ohne dass rSie deren Namen nicht ermitteln können. Natürlich wirken sich die Berechtigungen der angeforderten Datei auch auf den Zugriff aus. Selbst xwenn Sie sich im Verzeichnis befinden, können Sie eine Datei nur lesen, wenn sie Ihnen auch diese bietet r.

Das Schreibbit bedeutet, dass der Benutzer in das Verzeichnis schreiben kann, aber natürlich nur durch das Dateisystem selbst vermittelt wird. Das bedeutet, dass Sie mit wset neue Dateien in diesem Verzeichnis erstellen oder die Verzeichniseinträge vorhandener Dateien bearbeiten können. Aber ohne xSet können Sie keine Dateien verwenden und ohne rsie auch nicht sehen.

Da sich in Unix und seinen Nachkommen kompliziertere Modelle der Benutzeridentität entwickelt haben, konnten dieselben grundlegenden Beschreibungen bemerkenswert unverändert bleiben.

Kurz gesagt rbedeutet dies , dass Sie den Inhalt sehen können, xdass Sie ihn verwenden können und wdass Sie ihn sogar für Verzeichnisse ändern können.

RBerteig
quelle
Ich nehme an, Sie können mode_tetwas mehr erklären (insbesondere, wo Berechtigungen und Dateityp in demselben 32-Bit-Feld gespeichert sind)
SaveTheRbtz
1
Ich war in den 80ern aktiv ein Unix-Benutzer und Entwickler. Ich habe nicht versucht, die komplette Geschichte über das, was heute wahr ist, zu erzählen, sondern sie in einen historischen Kontext zu stellen und meine Belustigung zu entlarven, dass das gleiche Rätsel, mit dem ich beim ersten Erlernen von Unix konfrontiert war, heute sowohl gestellt als auch von im Wesentlichen beantwortet werden kann
Dieselbe