Моя цель - создать концепцию для демонов, которые взаимодействуют локально (т. Е. Не через сеть) с другими процессами, все с разными идентификаторами/правами пользователя.Как передать файл filedescriptor по именованному каналу
Чтобы ограничить доступ к демонам процессам с нужными уровнями доступа, я Повсеместно следующей концепции:
- Каждый демон открывает именованный канал для чтения в
/foo/{daemon-name}
- доступ к этому имени трубы можно легко управлять с помощью обычных прав доступа к файлам, поэтому другие процессы, не входящие в правильную группу пользователей, не будут иметь права на запись в трубу
- Изменение прав доступа к демону позже легко выполняется без необходимости перекомпилирования
- процесса, который хочет общаться с демоном посылает один конец
socketpair()
через именованный канал и связь продолжается через эту ссылку
Таким образом, каждый Dameon может реализовать свой собственный API или пакетный формат для общения через socketpair , Но не было бы необходимости в аутентификации и так, потому что права доступа к именованному каналу уже позаботились о том, чтобы только конкретная группа могла отправлять сокет-пару для связи.
Теперь единственная проблема, с которой я сталкиваюсь, заключается в том, что я не могу получить передачу файлового дескриптора socketpair()
для работы над именованным каналом. sendmsg()
, по-видимому, не работает на именованных каналах.
Как я могу отправить один из 0dsfds через именованный канал, чтобы демон мог получить доступ к соединению и начать общение?
Вы можете передавать файловые дескрипторы через сокеты, но я не думаю, что это возможно, используя именованный канал. Рассмотрите возможность использования сокета для связи с вашим dæmon. – fuz