Що робить дозвіл x (виконувати) на unix-сокетах?


11

За моїм досвідом непривілейований користувач не може отримати доступ до unix-сокета, яким він / вона не володіє без встановленого x біта. Що саме робить цей біт? Дякую


Це дозвіл на розетки чи на каталог?
Rui F Ribeiro

На розетці. Каталог має режим 0755, тому користувач може спостерігати вміст. Сокет має режим 0644, тому логічно користувач (який належить до "інших", оскільки він / вона не володіє сокетом, належить до групи, що володіє сокетом) повинен мати можливість записувати в сокет. Але користувач отримує повідомлення про заборону дозволу, якщо режим 0777 не застосовано до сокета.
Володимир Тюхтин

2
@ ВладимирТюхтин 0644означає просто дозвіл на читання для членів групи та "інших", тому лише власник мав би доступ до сокета (оскільки дозвіл на запис керує ним). 0666, або так 0222як дозвіл на читання не потрібен, буде достатньо, щоб надати доступ усім. Але замість того, щоб давати дозволи всім, я б розглядав можливості використання груп, щоб дозволити доступ.
ilkkachu

Відповіді:


9

Нічого, як я бачу.

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

У Linux для підключення до об'єкта socket потоку потрібен дозвіл на запис у цей сокет; надсилання дейтаграми в розетку дейтаграми також вимагає дозволу на запис у цей сокет.

Мабуть, деякі інші системи поводяться інакше:

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.