Uruchamianie skryptu sh: «Odmowa dostępu» pomimo bitu wykonywalnego i praw root

17

Zainstalowałem Debiana w VirtualBox (dla różnych eksperymentów, które zwykle zepsuły mój system) i próbowałem uruchomić skrypt addonu VirtualBox dla gości. Zalogowałem się jako root i próbowałem uruchomić autorun.sh, ale otrzymałem „Odmowę zezwolenia”. ls -lpokazuje, że skrypt ma prawa do wykonywania.

Przepraszam, że nie mogę skopiować danych wyjściowych - VirtualBox absolutnie nie ma sensu bez dodatku, ponieważ ani współdzielony katalog, ani współdzielony schowek nie działają. Ale dla pewności skopiowałem prawa ręcznie:

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

Na początku myślałem, że może być tak, że skrypt wykonuje coś, co spowodowało błąd. Próbowałem zastąpić /bin/shczymś takim #/pathtorealsh/sh -xv, ale nie otrzymałem danych wyjściowych - wygląda na to, że skrypt nie może nawet zostać wykonany.

Nie mam nawet pojęcia, co może to spowodować.

Cześć aniele
źródło
2
Wygląda na to, że powinno działać. Spróbuj uruchomić go jawnie z bash: `bash -x ./autorun.sh". Może to da dodatkową wskazówkę.
nobar
2
Co to jest produkcja mount | grep noexec?
cuonglm
1
@Gnouc, masz rację, zamontowane «cdrom» mają noexeczestaw. Prawdopodobnie możesz to opublikować jako odpowiedź; tymczasem próbuję ponownie zamontować go z uprawnieniami do wykonywania. Hm, nawet nie wiedziałem, że system plików może mieć taki atrybut.
Cześć Anioł
A jeśli spróbujesz uruchomić to, sh ./autorun.shco się stanie?
naprawiono

Odpowiedzi:

29

Być może twój system plików jest zamontowany z noexeczestawem opcji, więc nie możesz uruchamiać żadnych plików wykonywalnych. Z dokumentacji montażu :

noexec

Nie zezwalaj na bezpośrednie wykonywanie jakichkolwiek plików binarnych w zamontowanym systemie plików. (Do niedawna można było mimo wszystko uruchamiać pliki binarne za pomocą polecenia takiego jak /lib/ld*.so / mnt / binary. Ta sztuczka kończy się niepowodzeniem od Linuksa 2.4.25 / 2.6.0.)

Próbować:

mount | grep noexec

Następnie sprawdź, czy twój system plików jest wymieniony na wyjściu.

Jeśli tak, możesz rozwiązać ten problem, ponownie instalując system plików z execopcją:

mount -o remount,exec filesystem
Cuonglm
źródło
To nie działało dla mnie. Musiałem odmontować, a następnie ponownie zamontować normalnie. Potem działało dobrze.
datakid
@datakid: Jaki jest twój FS?
cuonglm
Mam ten problem z debianem 9, niektóre pliki nie mają uprawnień, jeśli skrypty działają jako root, ale identyfikują się jako root ... jak zachowanie systemu Windows, jeśli usunę i skrypt zadziała! = [
Luciano Andress Martini
noexecOtrzymywałem bardzo dziwną wiadomość, która okazała się być następująca : „sh: 75: script.sh: Odmowa
dostępu
2

bash -x ./filename.filetypepowinno działać. Zadziałało, gdy odmówiono mi uprawnień jako użytkownik root.

Stephen Howe
źródło
Nie, ponieważ ostatecznie problem okazał się noexecopcją montowania, to nie zadziała, ponieważ może być więcej plików do wykonania; tzn. filename.filetypewstrzymałby się, próbując uruchomić inne pliki z tego samego systemu plików. Możesz to łatwo sprawdzić za pomocą uproszczonego testu: utwórz dwuwierszowy skrypt, który wypisuje „cześć”, a następnie po prostu wywołuje się ponownie, ale nie ustawia praw do plików wykonywalnych. Wykonanie go -xspowoduje wydrukowanie „cześć”, ale wówczas rekurencyjna linia wywołania spowoduje błąd.
Cześć Anioł
1

Moim rozwiązaniem tego problemu jest użycie źródła . Byłem na wolumenie bardzo ważnych danych. Ten wolumin jest montowany jako noexec. Mam prosty skrypt powłoki, który jest wykonywalny, ale mam problem z uprawnieniami.

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

source fixsamplesheet.sh # worked fine

Testowane tylko na moim Ubuntu.

Kemin Zhou
źródło