Co robi uprawnienie x (wykonywanie) na gniazdach unix?

11

Z mojego doświadczenia wynika, że ​​nieuprzywilejowany użytkownik nie może uzyskać dostępu do gniazda unix, którego nie posiada bez zestawu bitów x. Co dokładnie robi ten bit? Dzięki

Владимир Тюхтин
źródło
Czy to uprawnienie do gniazd lub do katalogu?
Rui F Ribeiro
Na gnieździe. Katalog ma tryb 0755, więc użytkownik może obserwować zawartość. Socket ma tryb 0644, więc logicznie użytkownik (który należy do „innych”, ponieważ nie jest właścicielem gniazda należy do gniazda będącego właścicielem grupy) powinien móc zapisywać w gnieździe. Ale użytkownik otrzymuje komunikat odmowy uprawnień, chyba że do gniazda zostanie zastosowany tryb 0777.
Владимир Тюхтин
2
@ ВладимирТюхтин, 0644oznacza po prostu uprawnienia do odczytu dla członków grupy i „innych”, więc tylko właściciel będzie mógł uzyskać dostęp do gniazda (ponieważ uprawnienie do zapisu to kontroluje). 0666, lub tak 0222jak pozwolenie na odczyt nie jest potrzebne, wystarczyłoby, aby dać dostęp wszystkim. Ale zamiast dawać wszystkim uprawnienia, zastanowiłbym się nad użyciem grup, aby umożliwić dostęp.
ilkkachu

Odpowiedzi:

9

Nic, jak widzę.

Linux strona man UNIX (7) mówi, że uprawnienia katalogu zawierającym gniazdo stosuje się normalnie (czyli trzeba +xna /foocelu połączyć /foo/sock, a +wna /foocelu stworzenie /foo/sock) i że zapis Kontrola uprawnień łączące do samego gniazda:

W systemie Linux połączenie z obiektem gniazda strumienia wymaga uprawnień do zapisu w tym gnieździe; wysyłanie datagramu do gniazda datagramu również wymaga pozwolenia na zapis w tym gnieździe.

Najwyraźniej niektóre inne systemy zachowują się inaczej:

POSIX nie wypowiada się na temat wpływu uprawnień na plik gniazda, a w niektórych systemach (np. Starszych BSD) uprawnienia do gniazd są ignorowane. Programy przenośne nie powinny polegać na tej funkcji ze względów bezpieczeństwa.

unix(4)na FreeBSD opisuje podobne wymagania. Strona podręcznika systemu Linux nie powiedziała, czy dostęp do gniazd w niektórych systemach ignoruje również uprawnienia do katalogu .

Usunięcie xbitu z gniazda wydaje się dawać inny błąd przy próbie wykonania gniazda, ale nie jest to duża praktyczna różnica:

$ ls -l test.sock
srwxr-xr-x 1 user user 0 Jun 28 16:24 test.sock=
$ nc -U ./test.sock
Hello
$ ./test.sock
bash: ./test.sock: No such device or address
$ chmod a-x test.sock
$ nc -U ./test.sock
Hello
$ ./test.sock
bash: ./test.sock: Permission denied

( wTestowałem również, że rzeczywiście tylko ten bit wydaje się mieć znaczenie dla uzyskania dostępu do gniazda w Linuksie Debiana 4.9.0.)

Być może gniazda, które miałeś na myśli, usunęły wszystkie bity uprawnień od użytkownika, czy masz na myśli xbit w katalogu?

ilkkachu
źródło