Mogę wydawać się uruchamiać skrypty (.sh) z ustawieniami plików wykonywalnych i bez nich. Więc gdzie to właściwie ma znaczenie?
Załóżmy, że masz plik myscript
zawierający następujące elementy:
#!/bin/bash
echo "Hello, World!"
Jeśli uczynisz ten plik wykonywalnym i uruchomisz go ./myscript
, jądro zobaczy, że pierwsze dwa bajty to #!
, co oznacza, że jest to plik skryptowy. Jądro wykorzysta resztę wiersza jako interpreter i przekaże plik jako pierwszy argument. Działa więc:
/bin/bash myscript
a bash czyta plik i wykonuje zawarte w nim polecenia.
Tak więc, aby bash (lub jakikolwiek interpreter wymagany przez twój skrypt) „wykonał” skrypt, musi tylko móc odczytać plik.
W przypadku skryptów bit wykonania po prostu sprawia, że jego wykonanie jest nieco wygodniejsze. Tak długo, jak bash jest wykonywalny, zawsze możesz uruchomić bash z plikiem skryptu jako argumentem lub uruchomić bash interaktywnie i skopiować wklej skrypt wiersz po wierszu do terminala, aby wykonać polecenia.
Upewnij się, że nie mylisz „wykonywania skryptu powłoki” z „uruchom skrypt powłoki za pomocą sh”.
Uprawnienia do plików nie będą miały wpływu na
file.sh
:Wykonujesz
sh
(co powoduje przejście do programu/bin/sh
), który czytafile.sh
i wykonuje jego kod.Uprawnienia do plików będą obowiązywać, jeśli naprawdę wykonasz sam skrypt :
Pamiętaj, że uprawnienia do plików nie są obsługiwane przez systemy plików inne niż Linux, takie jak FAT. Więc nawet jeśli uruchomisz
chmod -x file.sh
, plik nadal będzie miał swoje wcześniejsze uprawnienia.Uprawnienia do wykonywania są wymuszane przez system plików. Ale programy mogą również „wykonać” kod, odczytując zawartość pliku, co pomija uprawnienia systemu plików podczas „wykonywania”.
źródło
bash
) W celu wykonania - aby zablokować, że będziesz musiał również odebrać imread
pozwolenie.If you set the executable permission, the script can be run directly by users who have that permission - whether they have it on a group, world or owner basis
Ale w jaki sposób uprawnienia są przyznawane różnym użytkownikom poprzez sprawdzenie uprawnień do plików wykonywalnych? I dostałem twój drugi punkt. Masz na myśli odebranie im pozwolenia na odczyt skryptu, aby nie mogli go nawet przetworzyć przez bash. Dobrze?sudo chmod g+x myfile.sh
w terminalu, aby dodać uprawnienia do wykonywania dla grupy plików. Zobacz samouczek uprawnień do plików . Aby zarządzać uprawnieniami dla kilku użytkowników jednocześnie, należy użyć grup, patrz na przykład Zarządzanie grupami .Nie myśl o tym w ten sposób. Czy mogę wykonać ten plik? Pomyśl o tym w następujący sposób: Kto może wykonać ten plik?
Jeśli komputer należy do Ciebie, a plik należy do Ciebie, jestem pewien, że możesz go wykonać. Możesz przyjrzeć się bliżej takim poleceniom jak chmod i chown oraz uprawnienia do plików.
Mam nadzieję że to pomogło.
źródło
exec
Syscall jądra Linux nie zeEACCES
jeśli plik nie jest wykonywalnyChociaż możesz to zrobić
sh myprog.sh
(co tylko czyta pliki i interpretuje), próba uruchomienia programu./myprog.sh
jest niemożliwa, ponieważ kiedy to zrobisz:exec
wywołania systemowego./myprog.sh
exec
wywołanie systemowe jądra systemu Linux, jak wyjaśniono na stronie : /programming/2429511/why-do-people-write-the-usr-bin-env-python-shebang-on -the-first-line-of-a-pyt / 40938801 # 40938801Można to zweryfikować za pomocą
main.c
:i
myprog.sh
:Jeśli
myprog.sh
nie jest wykonywalny,main
kończy się niepowodzeniem z:Testowane w Ubuntu 17.10,
gcc -std=c99
.POSIX 7 wspomina, że w:
Dalsze uzasadnienie można znaleźć na stronie : /security/66550/unix-execute-permission-can-be-easily-bypassed-is-it-superfluous-or-whats-the
źródło