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ć.


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

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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.