Что делает разрешение x (execute) для сокетов unix?


11

По моему опыту непривилегированный пользователь не может получить доступ к сокету unix, которому он / она не владеет без установленного x-битного бита. Что именно делает этот бит? Спасибо


Это разрешение на сокеты или на каталог?
Руи Ф Рибейро

На розетке. Каталог имеет режим 0755, поэтому пользователь может наблюдать за содержимым. Сокет имеет режим 0644, поэтому логически пользователь (который принадлежит «другим», потому что он / она не владеет сокетом a, принадлежит к сокету, владеющему группой) должен иметь возможность записи в сокет. Но пользователь получает сообщение об отказе в разрешении, если к сокету не применен режим 0777.
Владимир Тюхтин

2
@ ВладимирТюхтин, 0644означает просто разрешение на чтение для членов группы и «других», поэтому только владелец сможет получить доступ к сокету (так как разрешение на запись управляет им). 0666или, так 0222как разрешение на чтение не требуется, этого будет достаточно, чтобы предоставить доступ каждому. Но вместо того, чтобы давать разрешения всем, я бы рассмотрел использование групп для предоставления доступа.
ilkkachu

Ответы:


9

Ничего, как я вижу.

Linux человек страница UNIX (7) говорит о том , что права доступа к директории , содержащие сокет обычно применяются (т.е. вам нужно +xна /fooподключение к /foo/sock, и +wна /fooсоздание /foo/sock) , и что записи управления разрешения при подключении к самой розетке:

В Linux для подключения к объекту сокета потока требуется разрешение на запись в этот сокет; отправка дейтаграммы в сокет дейтаграммы также требует разрешения на запись в этот сокет.

Видимо, некоторые другие системы ведут себя по-другому:

POSIX не делает никаких заявлений о влиянии разрешений на файл сокета, а в некоторых системах (например, старых BSD) разрешения сокета игнорируются. Переносимые программы не должны полагаться на эту функцию в целях безопасности.

unix(4)на FreeBSD описаны аналогичные требования. В справочной странице Linux не сказано, игнорирует ли доступ к сокетам в некоторых системах права доступа к каталогу .

Удаление xбита из сокета, по-видимому, приводит к другой ошибке при попытке выполнить сокет, но это не так много практического различия:

$ 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

(Я также проверил, что действительно только wбит имеет значение для доступа к сокету в Linux 4.9.0 Debian.)

Возможно, у сокетов, которые вы имели в виду, были удалены все биты прав доступа пользователя, или вы имели в виду xбит в каталоге?

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.