Kiedy próbuję biec ./script.sh
, mam, Permission denied
ale kiedy biegam, bash script.sh
wszystko jest w porządku.
Co zrobiłem źle?
bash
shell-script
permissions
mount
Piotr Stapp
źródło
źródło
getfacl script.sh
?Odpowiedzi:
Niepoprawne uprawnienia POSIX
Oznacza to, że nie masz ustawionego bitu uprawnień do wykonywania
script.sh
. Podczas działaniabash script.sh
potrzebujesz tylko uprawnienia do odczytu dlascript.sh
. Zobacz Jaka jest różnica między uruchomieniem „bash script.sh” i „./script.sh”? po więcej informacji.Możesz to sprawdzić, uruchamiając
ls -l script.sh
.Być może nawet nie będziesz musiał rozpocząć nowego procesu Bash. W wielu przypadkach możesz po prostu uruchomić
source script.sh
lub. script.sh
uruchomić polecenia skryptowe w bieżącej interaktywnej powłoce. Prawdopodobnie będziesz chciał rozpocząć nowy proces Bash, jeśli skrypt zmieni bieżący katalog lub w inny sposób zmodyfikuje środowisko bieżącego procesu.Listy kontroli dostępu
Jeśli bity uprawnień POSIX są ustawione poprawnie, być może lista kontroli dostępu (ACL) została skonfigurowana tak, aby uniemożliwić tobie lub twojej grupie wykonanie pliku. Np. Uprawnienia POSIX wskazują, że skrypt powłoki testowej jest wykonywalny.
Jednak próba wykonania pliku powoduje:
getfacl
Komenda pokazuje przyczynę:W tym przypadku moją podstawową grupą jest ta,
domain users
która ma uprawnienia do wykonania odwołane przez ograniczenie listy ACL za pomocąsudo setfacl -m 'g:domain\040users:rw-' t.sh
. To ograniczenie można znieść za pomocą jednego z następujących poleceń:Widzieć:
System plików zamontowany z opcją noexec
Wreszcie, w tym konkretnym przypadku niemożność uruchomienia skryptu polega na tym, że system plików, w którym znajduje się skrypt, został podłączony z
noexec
opcją. Ta opcja zastępuje uprawnienia POSIX, aby uniemożliwić wykonanie dowolnego pliku w tym systemie plików.Można to sprawdzić, uruchamiając,
mount
aby wyświetlić listę wszystkich zamontowanych systemów plików; opcje montowania są wymienione w nawiasach we wpisie odpowiadającym systemowi plików, npMożesz przenieść skrypt do innego zamontowanego systemu plików lub ponownie zamontować system plików, umożliwiając wykonanie:
Uwaga: Użyłem
/tmp
tutaj jako przykładu, ponieważ istnieją dobre powody bezpieczeństwa, aby trzymać/tmp
zamontowane znoexec,nodev,nosuid
zestawem opcji.źródło
Próbować
chmod 755 script.sh
dzięki temu plik będzie wykonywalny. Więc spróbuj,
./script.sh
Mam nadzieję, że to zadziała.
źródło
Na mojej win7 z adminem uruchomionym cmd; Mam pliki .sh związane z cygwin64 / bin / bash, ale zostało to zablokowane przez cmd. Żadna z powyższych sugestii nie pomogła (chmod, setfacl, mount).
Poniższe rozwiązanie zadziałało, jest to narzędzie administratora acl-fixer, gdy foldery / pliki stają się niedostępne dla administratora na win7, co często:
źródło