Является ли демон launchd лучшим способом чтения/записи привилегированных файлов в Cocoa?
-
13-09-2019 - |
Вопрос
У меня есть приложение, которое должно иметь возможность записывать файлы настроек любого пользователя/текущего хоста (для чего требуются права администратора в соответствии со справочником по утилитам настроек), а также включать/отключать агент запуска через его plist (доступен для записи только root).
я использую SFAuthorizationView
требовать от пользователей аутентификации в качестве администратора перед изменением этих значений.
Я пытаюсь решить, как лучше всего изменить эти значения.
Дешевый хакерский вариант, похоже, заключается в использовании AuthorizationExecuteWithPrivileges()
и mv
или defaults
, либо через BLAuthentication, либо создав что-то подобное самостоятельно.Обратной стороной этого является отсутствие возвращаемого значения любого приложения командной строки, которое я запускаю, а также некоторые странные эзотерические ошибки, с которыми я столкнулся (например, получение ошибки -60008 в определенных ситуациях).Apple, очевидно, настоятельно не рекомендует этого делать, но люди, похоже, делают это и добиваются определенного успеха.
Второй наиболее хакерский вариант — создать вспомогательное приложение с установленным битом suid и --self-repair
вариант, обсуждаемый в разных местах.Это кажется возможным, но вроде это не намного хлопотнее, чем третий вариант.
Третий вариант – создать полноценную launchd
демон, который будет работать от имени пользователя root и взаимодействовать с моим приложением через сокет.Чтение и запись некоторых файлов plist кажется излишним, но возможно, что в будущем я найду для него другие применения, и это не будет единственный демон для моего приложения, поэтому не кажется неразумным просто добавьте еще один.
Я думаю изменить это образец кода для моих целей.
Мои два вопроса:
Вариант запуска демона launchd кажется лучшим путем для этого, или мне не хватает гораздо более простого пути?
Кто-нибудь еще успешно использовал этот код в качестве основы для чего-то подобного, и видит ли кто-нибудь какие-либо явные проблемы с ним, которые мне не хватает?Я успешно использовал его в тестовом приложении, но мне было бы интересно услышать ваше мнение по этому поводу.
Решение
launchd
это определенно лучший и самый безопасный способ:вам понадобится установочный пакет, чтобы установить помощника на место.Убедитесь, что ваш помощник не делает и не может делать абсолютно ничего, кроме редактирования файлов, которые вы хотите использовать.Нет опыта работы с кодом, но он основан на BetterAuthorizationSample, так что это хорошее начало.
Другие советы
Также есть openauth
API, который позволяет открывать файлы, требующие root-прав.