Я работаю над написанием демона, который общается с другими демонами в том же проекте через сокеты UNIX. В целях безопасности очень важно, чтобы эти демоны общались только между собой (и не могли, например, быть подключены к другим процессам).
Я планировал ограничить этот доступ через стандартные права собственности на файлы и режимы UNIX. Но я не могу найти нигде в документации launchd.plist о том, как ими управлять!
Глядя на существующие службы, вы можете указать SockPathMode
ключ, принимающий десятичный режим; здорово. Но как мне указать фактического пользователя и группу созданного сокета? Я заметил, что некоторые сокеты, которыми управляет launchd в моей системе, принадлежат root:daemon
, некоторые по root:wheel
, а некоторые (например, ssh-agent) stouset:wheel
. И все же я хоть убей не могу определить, как и где указаны эти владения.
Вот вопрос, связанный с этим: https://stackoverflow.com/questions/7984657/run-daemon-as-another-user-on-mac-os-x Если демон запускается как выделенный пользователь, то все файловые дескрипторы и сокеты будут принадлежать этому пользователю. Затем просто добавьте к этим дескрипторам ограничительные права доступа.