2015-02-28 4 views
2

Я изучаю tutorial на соке домена unix. У меня вопрос о части приемника.гнездо для подключения unix - защитный приемник

Если процесс использует слушать() и ожидание входящих запросов:

  • какие варианты у него есть, чтобы сделать себя в безопасности? Есть ли способ определить, кто отправил запрос? Может ли он применить какое-то ограничение, кто может отправить запрос?

  • Есть ли ситуация, когда нет возможности обеспечения безопасности, и если процесс использует listen(), он полностью открыт для любого запроса?

ответ

4

Общая мысль Linux заключается в том, что безопасность обеспечивается файловыми разрешениями на «файл» сокета UNIX в файловой системе. Процесс должен иметь доступ для чтения/записи к специальному файлу сокета.

unix(7) man page указывает:

В реализации Linux, розетки, которые видны в файловой честь права доступа к каталогу они находятся в владельца, группы и права доступа могут быть изменены.. Создание нового сокета приведет к сбою, если процесс не имеет записи и поиска (выполнить) разрешение на каталог, в котором создан сокет. Подключение к объекту сокета требует разрешения на чтение/запись. Это поведение отличается от многих BSD-производных систем, которые игнорируют разрешения для сокетов домена UNIX. Портативные программы не должны полагаться на эту функцию для обеспечения безопасности.

кажется, что разрешения каталога поисковых являются честь повсюду, хотя. Таким образом, ваш сокет может быть только connect() ed для пользователей, у которых есть доступ на весь путь к вашему специальному файлу сокета - это верно для всех ОС.

Связанный:

+0

Так файл должен принадлежать приемник и отправитель получает подвергается ACL при подключении? – Jake

+0

@ Джейк Да. Сейчас я ищу источник, но я уверен, что он работает так, как можно было бы ожидать. –

+0

@ Jake On linux и многие другие системы, биты разрешения файлов соблюдены (см. [Здесь] (http://man7.org/linux/man-pages/man7/unix.7.html#NOTES)). Для процесса требуется r/w-доступ для подключения к сокету unix, с которым вы можете управлять обычным способом с правами пользователя/группы/других или с помощью [posix acls] (http://man7.org/linux/man-pages/ man1/setfacl.1.html) – nos

Смежные вопросы