Was ist der Zweck von Linux-Berechtigungen wie 111 oder 333 (dh der Benutzer kann die Datei ausführen , aber nicht lesen ), wenn die Fähigkeit zur Ausführung nicht automatisch die Fähigkeit zum Lesen impliziert?
Was ist der Zweck von Linux-Berechtigungen wie 111 oder 333 (dh der Benutzer kann die Datei ausführen , aber nicht lesen ), wenn die Fähigkeit zur Ausführung nicht automatisch die Fähigkeit zum Lesen impliziert?
Antworten:
Ich habe damit gespielt und anscheinend implizieren Exec-Berechtigungen keine Leseberechtigungen. Binärdateien können ausführbar sein, ohne dass sie lesbar sind:
$ echo 'int main(){ puts("hello world"); }' > hw.c
$ make hw
$ ./hw
hello world
$ chmod 111 hw
$ ./hw
hello world
$ cat hw
/bin/cat: hw: Permission denied
Ich kann jedoch keine Skripte ausführen, es sei denn, sie haben sowohl Lese- als auch Ausführungsberechtigungsbits für:
$ cat > hw.sh
#!/bin/bash
echo hello world from bash
^D
$ chmod +x ./hw.sh
$ ./hw.sh
hello world from bash
$ chmod 111 ./hw.sh
$ ./hw.sh
/bin/bash: ./hw.sh: Permission denied
/bin/bash hw.sh
und dann versucht bash hw.sh
zum Lesen zu öffnen (und schlägt fehl).
Für Verzeichnisse ist es sinnvoll, wenn Sie beispielsweise (geheime) ausführbare Dateien in einem bestimmten Verzeichnis speichern und dann zulassen, dass Benutzer diese Dateien aufrufen, ohne den Verzeichnisinhalt sehen zu können (aber zu wissen, dass eine bestimmte Datei vorhanden ist, nachdem Sie sie informiert haben!). 333 im Vergleich zu 111 ermöglicht das Schreiben / Löschen von Dateien in / aus diesen Verzeichnissen, ohne den Inhalt des Verzeichnisses sehen zu können.
Natürlich sind nicht alle Kombinationen so nützlich, aber um die speziell von Ihnen erwähnte zu nehmen ... Sie benötigen tatsächlich keine read
Berechtigung zum Ausführen einer Datei - nur eine execute
Berechtigung - es sei denn, es handelt sich bei der fraglichen Datei um ein Skript (z. B. ein Shell-Skript) ( .sh
), perl-script ( .pl
) und so weiter). Normale Binärdateien können nur mit execute
Erlaubnis ausgeführt werden. Auf * BSD-Systemen erteilen mehrere ausführbare Dateien die execute
Erlaubnis ohne read
Erlaubnis, insbesondere auf "sicherheitsrelevanten" Befehlen - z su
.
Warum also nicht Benutzer read
-permission (und nur execute
-permisson) geben? Weil eine Datei, die von einem Benutzer nicht gelesen werden kann, auch von diesem Benutzer nicht kopiert werden kann ! Durch das Entfernen der read
Berechtigung wird verhindert, dass Benutzer ihre eigenen "persönlichen" Kopien von ausführbaren Dateien erstellen, die sie später möglicherweise missbrauchen können (z SUID=root on
. B. abrufen ).
write
Wenn Sie nicht über die Berechtigung -permission verfügen, wird verhindert, dass eine Datei versehentlich gelöscht wird.
Allerdings ist es etwas ungewöhnlich, dem Besitzer weder read
-noch write
-Erlaubnis zu erteilen, aber manchmal kann es eine gute Idee sein, selbst das owner
Löschen einer Datei zu verhindern . Natürlich kann der owner
- ganz zu schweigen von root
- solche Maßnahmen immer umgehen, wenn nicht auf andere Weise, dann einfach durch chmod
die Erlaubnis in der Akte.
owner
Löschen einer Datei zu verhindern ." - Mit der Ausnahme, dass Sie keine Berechtigung für eine Datei (Lesen, Schreiben oder Ausführen) benötigen, um sie zu löschen.
/proc/${PID}/maps
und dann die relevanten Speicherbereiche liest /proc/${PID}/mem
? Oder schränkt das Einschränken der Berechtigungen für die Datei der ausführbaren Datei auch die Leseberechtigungen für die relevanten Abschnitte im Speicher während der Ausführung ein? (Letzteres scheint unwahrscheinlich, IMO.)