Wie legt man eine Datei fest, die einem Benutzer gehört, für den Eigentümer jedoch nicht lesbar ist?

Wie legt man eine Datei fest, die einem Benutzer gehört, für den Eigentümer jedoch nicht lesbar ist?

Ich durchsuche das /procVerzeichnis 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_filessteht 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_filesaber mit Firejail kann der Benutzer nicht auf das Verzeichnis map_files zugreifen ls, obwohl cddas 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. /procist 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 /procso 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 /procnicht 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 /procerwarteten 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/cwdverweist, 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 cdauf das Verzeichnis zugreifen.

Gleichzeitig können diese Dateien und Verzeichnisse von anderen Personen aufgerufen werden ( o+rund o+x). Und natürlich sind sie immer zugänglich fürWurzelder Berechtigungsflags ignoriert.

Verzeichnisse und Dateien im /procVerzeichnis 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 chmodTools, und der Versuch, die Berechtigungen zu ändern, ist ein sicherer Weg, die laufende Anwendung zu unterbrechen. Beachten Sie jedoch lsweiterhin cddie 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 xbedeutet, dass Sie auf den Ordner zugreifen können, aber nicht hineinsehen können. Um in diesen Ordner hineinzusehen, müssen Sie rauch … Und natürlich wbedeutet das, dass Sie in diesen Ordner schreiben können.

verwandte Informationen