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.shund dann versucht bash hw.shzum 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 readBerechtigung zum Ausführen einer Datei - nur eine executeBerechtigung - 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 executeErlaubnis ausgeführt werden. Auf * BSD-Systemen erteilen mehrere ausführbare Dateien die executeErlaubnis ohne readErlaubnis, 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 readBerechtigung 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 ).
writeWenn 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 ownerLö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 chmoddie Erlaubnis in der Akte.
ownerLö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}/mapsund 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.)