Warum kann root nicht ausgeführt werden, wenn keine ausführbaren Bits gesetzt sind?

26

rootDer Benutzer kann in eine Datei schreiben, auch wenn seine writeBerechtigungen nicht festgelegt sind.

rootBenutzer kann eine Datei lesen, auch wenn ihre readBerechtigungen nicht festgelegt sind.

rootBenutzer kann cd in ein Verzeichnis, auch wenn seine executeBerechtigungen nicht festgelegt sind.

rootBenutzer kann eine Datei nicht ausführen, wenn ihre executeBerechtigungen nicht festgelegt sind.

Warum?

user$ echo '#!'$(which bash) > file
user$ chmod 000 file
user$ ls -l file
---------- 1 user user 12 Jul 17 11:11 file
user$ cat file                      # Normal user cannot read
cat: file: Permission denied
user$ su
root$ echo 'echo hello' >> file     # root can write
root$ cat file                      # root can read
#!/bin/bash
echo hello
root$ ./file                        # root cannot execute
bash: ./file: Permission denied
musa
quelle

Antworten:

25

Kurz gesagt, weil das Ausführungsbit als speziell betrachtet wird; wenn es nicht gesetzt ist überhaupt , dann wird die Datei als nicht ausführbar sein und somit nicht ausgeführt werden kann.

Wenn jedoch nur EINES der Ausführungsbits gesetzt ist, kann und wird root es ausführen.

Beobachten:

caleburn: ~/ >cat hello.sh
#!/bin/sh

echo "Hello!"

caleburn: ~/ >chmod 000 hello.sh
caleburn: ~/ >./hello.sh
-bash: ./hello.sh: Permission denied
caleburn: ~/ >sudo ./hello.sh 
sudo: ./hello.sh: command not found

caleburn: ~/ >chmod 100 hello.sh
caleburn: ~/ >./hello.sh
/bin/sh: ./hello.sh: Permission denied
caleburn: ~/ >sudo ./hello.sh 
Hello!
Shadur
quelle
0

In den alten Tagen lebten Systemverwaltungsprogramme in /etcwie /etc/restore, /etc/rrestore, /etc/init, /etc/haltetc. Stellen Sie sich vor , was passieren würde , wenn root‚s PATHwurde auf /etc:/binund rootranpasswd .

Es würde nicht richtig funktionieren.

Um die Sache noch schlimmer zu machen, hatten ausführbare Binärdateien in früheren Zeiten keine magischen Header, so dass die Prüfung, ob es sich bei der Binärdatei um eine ausführbare Datei handelt, nur durch Überprüfen der Berechtigungsbits möglich war. Also machten sie Dateien zu ungültigen Zielen vonexec * gemacht, es sei denn, es handelt sich tatsächlich um Dateien (keine Verzeichnisse usw.), und mindestens ein Ausführungsbit wurde gesetzt.

* Die Prüfung wurde möglicherweise in execvp durchgeführt, einer Benutzermodus-Funktion.

Es ist immer noch eine nützliche Überprüfung, da theoretisch alles ein Shell-Skript sein könnte. Warum sollte man es also rausnehmen?

Joshua
quelle