
Ich durchsuche das /proc
Verzeichnis und kann als Benutzer ein Verzeichnis nicht auflisten, obwohl angezeigt wird, dass der Benutzer der Eigentümer ist.
Warum und wie passiert das?
Beispielsweise ls -l /proc/2323/map_files
steht in ls: reading directory '.': Permission denied
. Aber der Besitzer ist eindeutig der Benutzer. Der Benutzer kann mit cd in das Verzeichnis wechseln, aber nicht ls
. Dies als Root zu tun, ist jedoch kein Problem.
Hinzugefügte Hintergrundgeschichte:
Derzeit verwendet der Prozess Firejail, eine binäre Setuid-Datei, um Großbuchstaben zu setzen und Firefox durch Namespaces zu isolieren. Ohne Firejail funktioniert alles wie erwartet, d. h. der Benutzer kann …, ls map_files
aber mit Firejail kann der Benutzer nicht auf das Verzeichnis map_files zugreifen ls
, obwohl cd
das kein Problem ist. Es handelt sich nicht um ein Berechtigungsproblem, da das Verzeichnis vom Benutzer gelesen werden kann und die Dateien, die symbolische Links zu .so-Dateien sind, ebenfalls u+r anzeigen.
Antwort1
Sie können einer Datei, deren Eigentümer Sie sind, die Leseberechtigung entziehen. Anschließend können Sie die Datei nicht mehr lesen.
$ echo hello >foo
$ chmod u=w,go+r foo
$ ls -l foo
--w-rw-r-- 1 gilles gilles 6 Oct 20 15:13 foo
$ cat foo
cat: foo: Permission denied
Dies ist aus Sicherheitsgründen nicht sinnvoll, da der Eigentümer die Berechtigungen der Datei jederzeit ändern kann. Es ist nur eine Folge der Funktionsweise von Berechtigungen.
Dies erklärt jedoch nicht, was Sie in sehen /proc
. /proc
ist ein etwas spezielles Dateisystem. Bei „normalen“ Dateisystemen prüft der Kernel, wenn ein Prozess eine Datei öffnet (oder ein Verzeichnis auflistet oder das Ziel eines symbolischen Links liest), die Anmeldeinformationen des Prozesses (also, als welcher Benutzer er ausgeführt wird usw.), liest die Berechtigungen der Datei und prüft, ob die Anmeldeinformationen Zugriff auf die Datei gewähren. Aber /proc
so funktioniert es nicht. Der Kernel wendet spezielle Prüfungen an, die für verschiedene Dateien in unterschiedlich sind /proc
. Wenn ein Prozess ein Verzeichnis auflistet, generiert der Kernel außerdem Berechtigungen, die eine Annäherung an die Prüfungen darstellen, die beim Öffnen einer Datei durchgeführt werden.
Insbesondere wenn ein Prozess mit erhöhten Anmeldeinformationen ausgeführt wird oder wurde (normalerweisesetuid oder setgid, sind einige Informationen in /proc
nicht mehr für den Benutzer zugänglich, sondern nur für root. Dies wird nicht in den Berechtigungen widergespiegelt. Betrachten Sie beispielsweise einen Prozess, der setgid ausführt. Bei diesem Prozess gehören alle Dateien in dem /proc
erwarteten Benutzer und die Berechtigungen sind dieselben wie bei nicht privilegierten Prozessen. Da der Prozess jedoch möglicherweise Zugriff auf vertrauliche Informationen hatte, während er die zusätzlichen Gruppenberechtigungen hatte, erlaubt der Kernel dem Benutzer nicht mehr, Operationen auszuführen, die diese Informationen exfiltern könnten. Und so kann der Benutzer beispielsweise nicht sehen, worauf /proc/$pid/cwd
verweist, falls der Prozess in ein Verzeichnis gewechselt ist, auf das der Benutzer normalerweise nicht zugreifen kann. Der Benutzer kann den Speicher des Prozesses nicht über ausgeben /proc/$pid/mem
. Der Benutzer kann die Speicherzuordnungen des Prozesses über nicht sehen, /proc/$pid/map*
falls sie vertrauliche Informationen widerspiegeln (und auch umASLRwirksam). Und so weiter.
Antwort2
Das Festlegen einer Datei, die dem Benutzer gehört, für ihn aber nicht lesbar ist, ist eigentlich ganz einfach:
chmod u-r file
Wenn Sie das tun, besteht die einzige Möglichkeit zum Lesen der Datei darin, Ihre Berechtigungen zu erhöhen oder das Leseflag zurückzugeben ( u+r
).
Dasselbe gilt für Verzeichnisse. Entfernen Sie das Benutzerlese-Flag, und der Eigentümer des Verzeichnisses kann nicht mehr darauf zugreifen ls
. Entfernen Sie das Ausführbarkeits-Flag aus dem Verzeichnis ( u-x
), und der Eigentümer kann nicht mehr cd
auf das Verzeichnis zugreifen.
Gleichzeitig können diese Dateien und Verzeichnisse von anderen Personen aufgerufen werden ( o+r
und o+x
). Und natürlich sind sie immer zugänglich fürWurzelder Berechtigungsflags ignoriert.
Verzeichnisse und Dateien im /proc
Verzeichnis repräsentieren Prozesse, Threads und Shared-Memory-Objekte. Ihre Berechtigungen werden von der Anwendung festgelegt, wenn sie den Thread/Shared Memory erstellt. Sie reagieren also nicht auf chmod
Tools, und der Versuch, die Berechtigungen zu ändern, ist ein sicherer Weg, die laufende Anwendung zu unterbrechen. Beachten Sie jedoch ls
weiterhin cd
die Berechtigungsflags der Objekte in /proc
. Wenn Sie also wirklich etwas dort lesen müssen, müssen Sie sich auf Folgendes begeben:Wurzel.
Antwort3
Es liegt an den Benutzerrechten.
Beispiel:
[~] whoami
mm
[~] mkdir test
[~] echo "Hello World" > test/hello.txt
[~] ls -ld test
drwxr-xr-x 2 mm mm 4,0K 20. Okt 14:20 test
[~] chmod 111 test
[~] ls -ld test
d--x--x--x 2 mm mm 4,0K 20. Okt 14:20 test
[~] ls test
ls: cannot open directory 'test': Permission denied
[~, ERR:2] cat test/hello.txt
Hello World
[~] chmod 555 test
[~] ls -ld test
dr-xr-xr-x 2 mm mm 4,0K 20. Okt 14:20 test
[~] ls test
hello.txt
Die Ordnerrechte unterscheiden sich von den Dateirechten. Das x
bedeutet, dass Sie auf den Ordner zugreifen können, aber nicht hineinsehen können. Um in diesen Ordner hineinzusehen, müssen Sie r
auch … Und natürlich w
bedeutet das, dass Sie in diesen Ordner schreiben können.