Zugriff auf Dateien in einem Verzeichnis ohne x-Berechtigung?


19

Ich habe ein bisschen Probleme zu verstehen, was die Ausführungsberechtigung für Verzeichnisse bedeutet. Verstehe ich es richtig, dass auf alles in einem Verzeichnis, für das ein Benutzer keine x-Rechte besitzt, nicht zugegriffen werden kann, selbst wenn die Dinge im Verzeichnis dem Benutzer bestimmte Rechte verleihen?

Oder hat der Benutzer immer noch direkten Zugriff auf die Objekte im Verzeichnis, kann aber einfach nicht auflisten, was sich im Verzeichnis befindet?

(Ich versuche wirklich zu verstehen, wie sicher ein Verzeichnis vor dem Zugriff anderer Benutzer ist, wenn sie keine x-Berechtigung dafür haben.)

Antworten:


20

x-Bit für Verzeichnis wird auch als Suchbit bezeichnet. Tatsächlich können Sie auf die Inodes der im Ordner aufgelisteten Dateien zugreifen. Wenn Sie also auf /home/user/foo/bar.txt zugreifen möchten, müssen Sie Suchzugriff auf alle Vorfahren von bar.txt haben

Zitat von der Seite

Da Verzeichnisse nicht wie normale Dateien verwendet werden, funktionieren die Berechtigungen geringfügig (aber nur geringfügig) anders. Der Versuch, die Dateien in einem Verzeichnis aufzulisten, erfordert eine Leseberechtigung für das Verzeichnis, jedoch nicht für die darin enthaltenen Dateien. Für den Versuch, eine Datei zu einem Verzeichnis hinzuzufügen, eine Datei aus einem Verzeichnis zu löschen oder eine Datei umzubenennen, ist eine Schreibberechtigung für das Verzeichnis erforderlich, jedoch (möglicherweise überraschenderweise) nicht für die darin enthaltenen Dateien. Die Ausführungsberechtigung gilt nicht für Verzeichnisse (ein Verzeichnis kann nicht auch ein Programm sein). Dieses Berechtigungsbit wird jedoch für Verzeichnisse für andere Zwecke wiederverwendet.

Für ein Verzeichnis ist eine Ausführungsberechtigung erforderlich, um darin eine CD zu erstellen (d. H., Um ein Verzeichnis zu Ihrem aktuellen Arbeitsverzeichnis zu machen).

Execute ist für ein Verzeichnis erforderlich, um auf die Inode-Informationen der darin enthaltenen Dateien zuzugreifen. Sie benötigen dies, um ein Verzeichnis zu durchsuchen und die Inodes der darin enthaltenen Dateien zu lesen. Aus diesem Grund wird die Ausführungsberechtigung für ein Verzeichnis häufig als Suchberechtigung bezeichnet.

In vielen Situationen ist eine Suchberechtigung erforderlich. Betrachten Sie den Befehl cat / home / user / foo. Dieser Befehl erfordert eindeutig eine Leseberechtigung für die Datei foo. Aber wenn Sie keine Suchberechtigung für die Verzeichnisse /, / home und / home / user haben, kann cat die Inode von foo nicht finden und kann sie daher nicht lesen! Sie benötigen eine Suchberechtigung für jedes Vorgängerverzeichnis, um auf den Inode einer Datei (oder eines Verzeichnisses) zuzugreifen. Sie können eine Datei nur lesen, wenn Sie zu ihrem Inode gelangen.

Weitere Informationen finden Sie im Abschnitt zum Dateiberechtigungsverzeichnis.

Update: Leo hat eine sehr gute Frage aufgeworfen. Wenn wir den Inode kennen, können wir dann von einem Verzeichnis aus auf eine Datei zugreifen, dessen x-Bit nicht gesetzt ist? Ich glaube, wir sollten das nicht können. Ich habe es nicht mit dem Programm c getestet, sondern einige nützliche Bash-Befehle verwendet, um es zu bestätigen.

user@user-desktop:~/test$ ls -lart
total 12
drwxr-xr-x 49 user user 4096 2011-11-30 22:37 ..
drwxr-xr-x  3 user user 4096 2011-11-30 22:37 .
drwxr-xr-x  2 user user 4096 2011-11-30 22:38 level1
user@user-desktop:~/test$ ls -lart level1/
total 12
drwxr-xr-x 3 user user 4096 2011-11-30 22:37 ..
drwxr-xr-x 2 user user 4096 2011-11-30 22:38 .
-rw-r--r-- 1 user user    8 2011-11-30 22:38 file1
user@user-desktop:~/test$ stat level1
  File: `level1'
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 808h/2056d  Inode: 95494       Links: 2
Access: (0755/drwxr-xr-x)  Uid: ( 1000/    user)   Gid: ( 1000/    user)
Access: 2011-11-30 22:46:16.576702105 +0530
Modify: 2011-11-30 22:38:12.386701913 +0530
Change: 2011-11-30 22:46:08.876702102 +0530
user@user-desktop:~/test$ stat level1/file1 
  File: `level1/file1'
  Size: 8           Blocks: 8          IO Block: 4096   regular file
Device: 808h/2056d  Inode: 60775       Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/    user)   Gid: ( 1000/    user)
Access: 2011-11-30 22:38:19.846701917 +0530
Modify: 2011-11-30 22:38:16.366701915 +0530
Change: 2011-11-30 22:38:16.366701915 +0530
user@user-desktop:~/test$ chmod -x level1
user@user-desktop:~/test$ stat level1/file1 
stat: cannot stat `level1/file1': Permission denied
user@user-desktop:~/test$ ls -lart level1/
ls: cannot access level1/..: Permission denied
ls: cannot access level1/.: Permission denied
ls: cannot access level1/file1: Permission denied
total 0
-????????? ? ? ? ?                ? file1
d????????? ? ? ? ?                ? ..
d????????? ? ? ? ?                ? .
user@user-desktop:~/test$ cat level1/file1
cat: level1/file1: Permission denied
user@user-desktop:~/test$ find . -inum 95494
./level1
user@user-desktop:~/test$ find . -inum 60775
user@user-desktop:~/test$ find ./level -inum 60775
find: `./level': No such file or directory
user@user-desktop:~/test$ find ./level1 -inum 60775

2
Wenn ich also die Inode-Nummer einer Datei / eines Verzeichnisses in einem Verzeichnis ohne Suchrechte habe, kann ich darauf zugreifen, solange die Berechtigungen dies zulassen. (Die Inode-Nummer zu bekommen, ohne in der Lage zu sein, stat zu machen, ist ziemlich schwierig, obwohl ich annehme.)
Leo

@Leo Ich glaube, wir sollten das nicht können. Ich habe die Antwort aktualisiert. Wenn Sie einen kleinen C-Stummel haben, überprüfen Sie diesen bitte und lassen Sie es uns wissen.
Amey Jah

1
@ AmeyJah, ich wette, Sie können. Überlegen Sie, was passiert, wenn Sie eine Datei fest mit einem anderen Verzeichnis verknüpfen, für das Sie die Berechtigung haben. Gleiche Inode, aber Sie können es dann lesen. Mit anderen Worten, die Leseberechtigung hängt nicht davon ab, ob das System alle Ordner durchsucht, zu denen die Inode gehören könnte, und ob sie das x-Bit haben. Tolle Antwort. Vielen Dank.
user1477

@AmeyJah ls , stat etc. benutze stat (2) etc. Nur für den Fall, dass du es noch nicht wusstest . Ich könnte ein C-Programm schreiben, aber Ihr Test macht alles, was das Programm zeigen würde, obwohl Sie sicher sind, dass es mehr kann. Der Punkt ist der gleiche: Es benutzt die syscalls (Abschnitt 2). Die Bibliotheksaufrufe (Abschnitt 3) sind höher als die Syscalls, aber das ändert nichts (zB remove (3) verwendet rmdir (2) für Verzeichnisse und unlink (2) für Dateien).
Pryftan,

5

Da Sie nach Verzeichnissen fragen:

lesen heißt: Inhalt lesen, dh mit ls auflisten.

Schreiben heißt: Schreiben in den Regisseur. dh Erstellen von Dateien oder Unterverzeichnissen.

Ausführen bedeutet: In dieses Verzeichnis eintreten.

Lese- und Ausführungsberechtigungen können für Verzeichnisse etwas schwierig sein.

Wenn Sie zum Beispiel über Leseberechtigungen verfügen, diese jedoch nicht ausführen, können Sie den Inhalt des Verzeichnisses auflisten, aber nicht darin ablegen. Außerdem können Sie bestimmte Dateien oder Verzeichnisse nicht auflisten, obwohl Sie deren Namen kennen.

Wenn Sie die Berechtigung zum Ausführen haben, aber nicht lesen, können Sie darauf zugreifen, die Dateien jedoch nicht direkt auflisten. Wenn Sie jedoch die Namen der Dateien oder Verzeichnisse kennen, können Sie diese auflisten.


2
Wenn Sie Leseberechtigung haben, aber nicht ausführen, können Sie den Inhalt des Verzeichnisses auflisten (ls), aber nicht auf die darin enthaltenen Dateien zugreifen (cat). Wenn Sie die Ausführungsberechtigung haben, diese aber nicht lesen und die Namen der Dateien kennen, können Sie darauf zugreifen (cat).
Dash17291

2

Die Ausführungsberechtigung für Verzeichnisse bedeutet:

Die Möglichkeit, in dieses Verzeichnis zu cden und auf die Dateien in diesem Verzeichnis zuzugreifen.

Wenn Sie nicht das xRecht auf Ihr Verzeichnis haben, können Sie nicht:

  • Geben Sie in das Verzeichnis (zB: cd)
  • Kann auf keine Datei in diesem Verzeichnis zugreifen (auch wenn Sie den Namen kennen).

Beispiel:

$ ls -ld testdir
drw------- 2 xxxxxx xxxxxx 14 2011-11-29 19:38 testdir

$ cd testdir
bash: cd: testdir: Permission denied

$ cat testdir/a
cat: testdir/a: Permission denied

$ chmod 700 testdir
$ cat testdir/a
Some text.

Lesen Sie Linux File Permission Confusion Teil 2, um eine gute Einführung in das Thema zu erhalten.

Das einzige, was die xBerechtigung nicht zu verhindern scheint, ist der Zugriff auf die Namen der Dateien in diesem Verzeichnis.

Beispiel:

$ ls -ld testdir
drw------- 2 xxxxxx xxxxxx 14 2011-11-29 19:38 testdir

$ ls testdir
ls: cannot access testdir/a: Permission denied
ls: cannot access testdir/b: Permission denied
a  b
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.