Jaki jest cel uprawnień Linuksa, takich jak 111 lub 333 (tzn. Użytkownik może wykonać , ale nie może odczytać pliku), jeśli zdolność do wykonania nie oznacza automatycznie możliwości odczytu?
Jaki jest cel uprawnień Linuksa, takich jak 111 lub 333 (tzn. Użytkownik może wykonać , ale nie może odczytać pliku), jeśli zdolność do wykonania nie oznacza automatycznie możliwości odczytu?
Odpowiedzi:
Grałem z nim i najwyraźniej uprawnienia do wykonywania nie oznaczają uprawnień do odczytu. Pliki binarne mogą być wykonywalne bez możliwości odczytu:
$ echo 'int main(){ puts("hello world"); }' > hw.c
$ make hw
$ ./hw
hello world
$ chmod 111 hw
$ ./hw
hello world
$ cat hw
/bin/cat: hw: Permission denied
Nie mogę jednak wykonywać skryptów, chyba że mają one zarówno bity uprawnień do odczytu, jak i wykonywania:
$ cat > hw.sh
#!/bin/bash
echo hello world from bash
^D
$ chmod +x ./hw.sh
$ ./hw.sh
hello world from bash
$ chmod 111 ./hw.sh
$ ./hw.sh
/bin/bash: ./hw.sh: Permission denied
/bin/bash hw.sh
, a następnie bash próbuje otworzyć się hw.sh
do odczytu (i kończy się niepowodzeniem).
ma to sens w przypadku katalogów, na przykład, jeśli trzymasz (tajne) pliki wykonywalne w określonym katalogu, a następnie pozwalasz użytkownikom wywoływać te pliki bez możliwości zobaczenia zawartości katalogu (ale wiedząc, że określony plik istnieje po ich poinformowaniu!). 333 w porównaniu do 111 pozwala na zapisywanie / usuwanie plików do / z tych katalogów bez możliwości zobaczenia zawartości katalogu.
Oczywiście nie wszystkie kombinacje są tak przydatne, ale biorąc pod uwagę tę, o której wspominałeś ... W rzeczywistości nie potrzebujesz read
pozwolenia na wykonanie pliku - tylko execute
uprawnienie - chyba że dany plik jest skryptem (np. Skryptem powłoki ( .sh
), perl-script ( .pl
) i tak dalej). Normalne pliki binarne można uruchamiać tylko za execute
zgodą. W systemach * BSD kilka plików wykonywalnych daje execute
pozwolenie bez zezwolenia read
, szczególnie na polecenia „ważne dla bezpieczeństwa” - np su
.
Dlaczego więc nie dać użytkownikom read
uprawnień (i po prostu- execute
uprawnień)? Stwórz plik, którego użytkownik nie może odczytać, nie może go również skopiować ! Usunięcie read
uprawnienia uniemożliwia użytkownikom tworzenie własnych „osobistych” kopii plików wykonywalnych - które później mogą być w stanie nadużyć (np. Uzyskać SUID=root on
).
Brak opcji write
-permission uniemożliwia dostęp do pliku.
Pamiętaj, nie dając ani read
-nor write
-permission do właściciela jest nieco rzadko, ale czasami może to być dobry pomysł, aby zapobiec nawet owner
z tylko usunięcie pliku. Oczywiście owner
- nie wspominając root
- zawsze może obejść takie środki, jeśli nie w inny sposób, to po prostu za chmod
pozwoleniem na plik.
owner
usunięcie pliku”. - z tym wyjątkiem, że nie potrzebujesz żadnego zezwolenia na plik (odczyt, zapis lub wykonanie), aby go usunąć.
/proc/${PID}/maps
a następnie czytanie odpowiednich sekcji pamięci /proc/${PID}/mem
? Czy też ograniczenie uprawnień do pliku wykonywalnego ogranicza również uprawnienia do odczytu jego odpowiednich sekcji w pamięci podczas wykonywania? (To ostatnie wydaje się mało prawdopodobne, IMO.)