Laufendes sh-Skript: «Berechtigung verweigert» trotz ausführbarem Bit und Root-Rechten

17

Ich habe Debian in VirtualBox installiert (für verschiedene Experimente, die normalerweise mein System kaputt machten) und versucht, das VirtualBox-Gast-Addon-Skript zu starten. Ich habe mich als root angemeldet und versucht zu starten autorun.sh, habe aber die Meldung «Erlaubnis verweigert» erhalten. ls -lzeigt an, dass das Skript über ausführbare Rechte verfügt.

Leider kann ich die Ausgabe nicht kopieren - VirtualBox hat ohne das Addon absolut keinen Sinn, da weder ein freigegebenes Verzeichnis noch eine freigegebene Zwischenablage funktionieren. Aber damit Sie sicher sind, habe ich die Rechte von Hand kopiert:

#ls -l ./autorun.sh
-r-xr-xr-x 1 root root 6966 Mar 26 13:56 ./autorun.sh

Zuerst dachte ich, dass es sein könnte, dass das Skript etwas ausführt, das den Fehler verursacht hat. Ich habe versucht, durch so /bin/shetwas zu ersetzen #/pathtorealsh/sh -xv, aber ich habe keine Ausgabe bekommen - es scheint, dass das Skript nicht einmal ausgeführt werden kann.

Ich habe nicht einmal eine Idee, woran es liegen könnte.

Hallo Engel
quelle
2
Sieht so aus, als sollte es funktionieren. Versuchen Sie es explizit mit bash: `bash -x ./autorun.sh". Vielleicht gibt dies einen zusätzlichen Hinweis.
Nobar
2
Wovon wird ausgegeben mount | grep noexec?
Dienstag,
1
@ Gnouc, du hast recht, die gemountete «CD-ROM» hat das noexecSet. Wahrscheinlich können Sie es als Antwort posten; In der Zwischenzeit versuche ich, es mit Exec-Rechten wieder einzubauen. Hm, ich wusste nicht einmal, dass das Dateisystem ein solches Attribut haben könnte.
Hi-Angel
Und wenn Sie versuchen, es über go auszuführen, sh ./autorun.shwas passiert dann?
hinzugefügt am

Antworten:

29

Möglicherweise ist Ihr Dateisystem mit festgelegten noexecOptionen aktiviert, sodass Sie keine ausführbaren Dateien ausführen können. Aus der Mount- Dokumentation:

noexec

Lassen Sie die direkte Ausführung von Binärdateien auf dem bereitgestellten Dateisystem nicht zu. (Bis vor kurzem war es ohnehin möglich, Binärdateien mit einem Befehl wie /lib/ld*.so / mnt / binary auszuführen. Dieser Trick schlägt seit Linux 2.4.25 / 2.6.0 fehl.)

Versuchen:

mount | grep noexec

Überprüfen Sie anschließend, ob Ihr Dateisystem in der Ausgabe aufgeführt ist.

Wenn ja, können Sie dieses Problem lösen, indem Sie das Dateisystem mit neu laden exec Option :

mount -o remount,exec filesystem
cuonglm
quelle
Das hat bei mir nicht funktioniert. Ich musste absteigen und dann normal wieder einsteigen. Dann hat es gut funktioniert.
Datum
@datakid: Was ist dein fs?
Donnerstag,
Ich habe dieses Problem mit Debian 9, einigen Dateien wird die Erlaubnis verweigert, wenn die Skripte als root ausgeführt werden, aber sie identifizieren sich als root ... wie ein Windows-Verhalten, wenn ich entferne und das Skript funktionierte! = [
Luciano Andress Martini
Ich bekam eine sehr seltsame Nachricht, die sich herausstellte, weil noexec: "sh: 75: script.sh: Erlaubnis verweigert"
tmm1
2

bash -x ./filename.filetypesollte arbeiten. Es hat bei mir funktioniert, als mir als Root-Benutzer die Erlaubnis verweigert wurde.

Stephen Howe
quelle
Nein, da sich am Ende herausstellte, dass das Problem die noexecMount-Option ist, funktioniert dies nicht, da möglicherweise mehr Dateien ausgeführt werden müssen. Das heißt, die filename.filetypewürden nach Luft schnappen, wenn sie versuchen würden, andere Dateien aus demselben Dateisystem auszuführen. Sie können dies einfach mit einem vereinfachten Test überprüfen: Erstellen Sie ein zweizeiliges Skript, das "Hallo" ausgibt und sich dann erneut aufruft, aber keine ausführbaren Rechte festlegt. Wenn Sie es mit ausführen -x, würde es "Hallo" ausgeben, aber dann würde die rekursive Aufrufzeile einen Fehler auslösen.
Hallo-Engel
1

Meine Lösung für dieses Problem ist die Verwendung von Source . Ich befand mich auf einem Speichervolumen mit sehr wichtigen Daten. Dieses Volume ist als noexec gemountet. Ich habe ein einfaches Shell-Skript, das ausführbar ist, aber ein Berechtigungsproblem hat.

./fixsamplesheet.sh # this guy is executable
-bash: ./fixsamplesheet.sh: Permission denied

source fixsamplesheet.sh # worked fine

Nur auf meinem Ubuntu getestet.

Kemin Zhou
quelle