Ich kann scheinen, Indexe (.sh) mit und ohne sie laufen zu lassen, die als ausführbar eingestellt werden. Wo genau ist das wichtig?
Angenommen, Sie haben die Datei myscript
, die Folgendes enthält:
#!/bin/bash
echo "Hello, World!"
Wenn Sie diese Datei ausführbar machen und mit ausführen ./myscript
, erkennt der Kernel, dass die ersten beiden Bytes vorhanden sind #!
, was bedeutet, dass es sich um eine Skriptdatei handelt. Der Kernel verwendet dann den Rest der Zeile als Interpreter und übergibt die Datei als erstes Argument. So läuft es:
/bin/bash myscript
und bash liest die Datei und führt die darin enthaltenen Befehle aus.
Damit bash (oder welcher Interpreter auch immer Ihr Skript benötigt) das Skript "ausführen" kann, muss es nur in der Lage sein, die Datei zu lesen.
Bei Skripten erleichtert das Ausführungsbit die Ausführung. Solange bash ausführbar ist, können Sie bash immer mit der Skriptdatei als Argument ausführen oder bash interaktiv ausführen und das Skript Zeile für Zeile in Ihr Terminal kopieren, um die Befehle ausführen zu lassen.
Stellen Sie sicher, dass Sie "Ausführen des Shell-Skripts" nicht mit "Ausführen eines Shell-Skripts mit sh" verwechseln.
Dies wird nicht durch Dateiberechtigungen beeinflusst auf
file.sh
:Sie führen aus
sh
(was in das Programm aufgelöst wird/bin/sh
), wasfile.sh
den Code liest und ausführt.Dateiberechtigungen werden wirksam, wenn Sie das Skript selbst ausführen :
Beachten Sie, dass Dateiberechtigungen von Nicht-Linux-Dateisystemen wie FAT nicht unterstützt werden. Selbst wenn Sie eine
chmod -x file.sh
Datei ausführen , hat diese die vorherigen Berechtigungen.Die Ausführungsberechtigung wird vom Dateisystem erzwungen. Programme können den Code aber auch "ausführen", indem sie den Dateiinhalt lesen, wodurch die Dateisystemberechtigungen bei "Ausführen" umgangen werden.
quelle
bash
) aufrufen , um die Ausführung durchzuführen - um zu blockieren, dass Sie auch ihreread
Erlaubnis entziehen müssten .If you set the executable permission, the script can be run directly by users who have that permission - whether they have it on a group, world or owner basis
Aber wie wird die Berechtigung verschiedenen Benutzern durch Überprüfen der ausführbaren Berechtigung erteilt? Und ich habe deinen zweiten Punkt. Sie wollen damit die Leseberechtigung für das Skript entfernen, damit sie es nicht einmal durch Bash verarbeiten können. Recht?sudo chmod g+x myfile.sh
im Terminal aufrufen , um Ausführungsberechtigungen für die Dateigruppe hinzuzufügen. Siehe Tutorial zu Dateiberechtigungen . Um Berechtigungen für mehrere Benutzer gleichzeitig zu verwalten, würden Sie Gruppen verwenden, siehe zum Beispiel Gruppen verwalten .Denk nicht so darüber nach. Kann ich diese Datei ausführen? Stellen Sie sich das folgendermaßen vor: Wer kann diese Datei ausführen?
Wenn der Computer Ihnen gehört und die Datei Ihnen gehört, können Sie sie sicher ausführen. Vielleicht möchten Sie Befehle wie chmod und chown sowie Dateiberechtigungen genauer untersuchen.
Ich hoffe das hilft.
quelle
Der
exec
Systemaufruf des Linux-Kernels schlägt fehl,EACCES
wenn die Datei nicht ausführbar istWährend Sie dies tun können
sh myprog.sh
(was nur das Lesen der Dateien und Interpretationen betrifft), kann der Versuch, das Programm so auszuführen,./myprog.sh
nicht funktionieren, da Sie dies tun:exec
Systemaufruf auf./myprog.sh
exec
Systemaufruf des Linux-Kernels wie folgt interpretiert : https://stackoverflow.com/questions/2429511/why-do-people-write-the-usr-bin-env-python-shebang-on -die-erste-zeile-eines-pyt / 40938801 # 40938801Dies kann überprüft werden mit
main.c
:und
myprog.sh
:Wenn
myprog.sh
nicht ausführbar,main
schlägt fehl mit:Getestet in Ubuntu 17.10
gcc -std=c99
.POSIX 7 erwähnt, dass bei:
Weitere Gründe finden Sie unter: https://security.stackexchange.com/questions/66550/unix-execute-permission-can-easly-bypassed-is-it-superfluous-or-whats-the
quelle