Ich versuche, das NOEXEC-Flag beim Mounten zu verstehen.
Ich habe ein Ausführungsproblem im Verzeichnis / tmp auf einem anderen Computer, auf das ich nicht zugreifen kann, wenn das Verzeichnis / tmp auf einem anderen Laufwerk als '/' bereitgestellt ist und NOEXEC vorhanden ist. Ich wollte versuchen, dieses Szenario auf meinem Computer neu zu erstellen, habe aber keine zweite Festplatte. Ich habe versucht, den folgenden Befehl auszuführen:
mount --bind /test1 /test2
Ich habe dann die bind
Flagge entfernt und NOEXEC
in / etc / fstab hinzugefügt . Dann habe ich in / test2 eine Datei namens test.sh erstellt, in der nur "Hallo Welt" wiedergegeben wird. Ich versuche es auszuführen und es stand "Erlaubnis verweigert". Ich lief dann chmod 777 test.sh
und konnte die Datei ganz gut ausführen. Ich dachte, dass das NOEXEC-Flag mir nicht erlauben sollte, etwas auszuführen?
Ist das mount --bind /test1 /test2
nicht dasselbe wie das Mounten von einem völlig anderen physischen Laufwerk? Wie in / test1 und / test2 befinden sich auf unterschiedlichen Laufwerken?
quelle
Antworten:
Das Optionsflag 'NOEXEC' im
mount
Befehl erlaubt nicht die Ausführung von ausführbaren Binärdateien im gemounteten Dateisystem 1 . Wenn jedoch ein Skript (eine Textdatei, die mit der She-Bang-Zeile beginnt, dh eine Zeile, die mit beginnt#!
) einigen Shells (Bash) zugewiesen wird, führt es die in dieser Zeile genannte ausführbare Datei aus (z. B./usr/bin/perl
) und übergibt die Pfad des Shell-Skripts als erstes Argument. Der eigentliche Interpreter befindet sich möglicherweise nicht auf diesem Mountpoint.__________
1 Der
mount
Befehl stellt normalerweise ein Dateisystem bereit . (Loopback oderbind
Mounts können möglicherweise als Ausnahme von dieser Allgemeinheit angesehen werden.) In einigen Fällen (z. B./tmp
) enthält dieses Dateisystem nur ein Verzeichnis.quelle
#!/bin/sh
oben stehen. Ich weiß nicht, wie das Shell-Skript ausgeführt wird, außer dass es Java und Referenzen / bin / sh durchläuft. Wenn es auf / bin / sh verweist und das bin-Verzeichnis über Ausführungsberechtigungen verfügt, warum werden die Shell-Skripte dann nicht wie in meinem Test ausgeführt?