Kann eine ausführbare Datei gelesen werden?

9

Wenn eine Datei über Berechtigungen verfügt, -rwx-wx-wxkann sie von anderen Benutzern und Gruppenbenutzern gelesen oder nur ausgeführt und geschrieben werden? Gibt es eine Möglichkeit, eine ausführbare Datei durch Ausführen zu lesen?

Tom
quelle
Kein Standardweg, den ich sagen kann.
Tim

Antworten:

18

Eine Datei mit -rwx-wx-wxBerechtigungen verfügt über Lese- / Schreib- / Ausführungsberechtigungen für den Eigentümer und Schreib- / Ausführungsberechtigungen (jedoch keine Leseberechtigungen) für alle anderen.

Wenn es sich um ein Skript handelt (normalerweise eine Textdatei mit einem #!in der ersten Zeile), kann es nicht von anderen ausgeführt werden, da beim Ausführen eines Skripts der Interpreter wirklich ausgeführt wird, der das Skript lesen kann. (Der Interpreter muss eine Binärdatei sein, kein anderes Skript.) (Dies gilt eigentlich nicht für alle Systeme. Ubuntu mit einem Linux-Kernel 3.2.0 ermöglicht es dem Interpreter selbst, ein interpretiertes Skript zu sein. Es scheint eine Grenze von zu geben ungefähr 4 Ebenen. Das ist wahrscheinlich nicht relevant für diese Frage.)

Wenn es sich um eine ausführbare Binärdatei handelt, kann sie direkt ausgeführt werden, ihr Inhalt kann jedoch nicht gelesen werden. Dies bedeutet beispielsweise, dass eine andere Person als der Eigentümer den Befehl ausführen kann, jedoch keine Kopie der ausführbaren Datei abrufen kann.

Natürlich erfordert die Ausführung das Lesen, aber es wird vom Kernel gelesen, nicht vom Benutzer. Möglicherweise können Sie einige Informationen zum Inhalt der ausführbaren Datei abrufen, indem Sie den Speicher des laufenden Prozesses untersuchen. Ich bezweifle jedoch, dass Sie die ausführbare Binärdatei rekonstruieren können. Und wenn die ausführbare Datei setuid ist, können Sie den Speicher des Prozesses nicht untersuchen (es sei denn, Sie haben Zugriff auf das Konto, unter dem er ausgeführt wird).

Übrigens -rwx-wx-wxist eine sehr seltsame Reihe von Berechtigungen; Es schützt die Datei vor dem Lesen durch andere Personen als den Eigentümer, ermöglicht es jedoch jedem, sie zu ändern. Ich kann mir keinen Fall vorstellen, in dem das Sinn machen würde.

Keith Thompson
quelle
Nur eine abstrakte zufällige Frage: Würden Profiling- / Debugging-Tools für Execs mit nur ausführbaren Berechtigungen funktionieren?
Sairam
@Sairam: Experiment sagt nein: chmod 111 hello ; gdb ./hellosagt ./hello: Permission denied.; rsagtNo executable file specified.
Keith Thompson
Für eine nicht ausführbare Datei kann etwas wie -rw - w - w- nützlich sein für etwas wie eine Protokolldatei, in der Benutzer Informationen in das Protokoll schreiben sollen, ohne sie lesen zu können. Natürlich könnten sie die Datei einfach leeren, aber das ist ein separates Problem.
Dave
6

Mit diesen Berechtigungen kann nur der Eigentümer der Datei sie ausführen.

Andere Benutzer können darauf schreiben, es aber nicht ausführen (da die Ausführung in diesem Fall impliziert, dass sie es lesen können), aber sie können als eine Art Black Box darauf schreiben:

user1:~$ cd /tmp
user1:/tmp$ echo "hostname" > testfile.sh
user1:/tmp$ chmod +x testfile.sh 
user1:/tmp$ ./testfile.sh  
server.example.com

user1:/tmp$ chmod 733 testfile.sh 
user1:/tmp$ ls -l testfile.sh 
-rwx-wx-wx 1 user1 user1 9 Jan 19 21:09 testfile.sh

user1:/tmp$ sudo su - user2
user2:~$ cd /tmp
user2:/tmp$ ./testfile.sh  
./testfile.sh: Permission denied
user2:/tmp$ cat testfile.sh 
cat: testfile.sh: Permission denied

user2:/tmp$ echo 'echo hello' >> testfile.sh 
user2:/tmp$ ./testfile.sh  
./testfile.sh: Permission denied

user2:/tmp$ logout

user1:/tmp$ ./testfile.sh
server.example.com
hello
cjc
quelle
4
Ein Shell-Skript erfordert zum Ausführen sowohl READ- als auch EXECUTE-Zugriff. Eine kompilierte Binärdatei funktioniert jedoch NICHT. Somit könnte eine kompilierte Binärdatei mit den oben genannten Berechtigungen von jedem ausgeführt werden!
Mdpc
1
Ich nehme an, dies wirft die Frage auf, was das OP zu erreichen versucht, dh warum sollte die kompilierte Binärdatei beschreibbar sein? Die Berechtigungen (733) brauchten tatsächlich einen Moment, um herauszufinden, da sie so nicht dem Standard entsprechen.
CJC
2

Die einfache Antwort lautet Nein : Nur execSyscall darf eine Datei lesen, ohne dass ein Lesezugriff erforderlich ist (obwohl der Ausführungszugriff vorgeschrieben ist ). Ein openmit O_RDONLYoder O_RDWRsoll scheitern.

Jahr
quelle
1

Natürlich kann jede Datei vom Root-Benutzer gelesen werden.

Außerdem liest der Systemlader, die Speicherverwaltung, der Swapper usw. eine Datei mit der Berechtigung 'x', da sie sonst nicht ausgeführt werden könnte.

Mögliche Lücken bei der Offenlegung ausführbarer Inhalte können die / proc-Datei für den Prozess, Kerndateien oder die Verwendung eines Debuggers sein.

mdpc
quelle
Dies gilt nur, wenn a chmod| chownwurde durchgeführt
Warren