Является ли демон launchd лучшим способом чтения/записи привилегированных файлов в Cocoa?

StackOverflow https://stackoverflow.com/questions/1121253

Вопрос

У меня есть приложение, которое должно иметь возможность записывать файлы настроек любого пользователя/текущего хоста (для чего требуются права администратора в соответствии со справочником по утилитам настроек), а также включать/отключать агент запуска через его plist (доступен для записи только root).

я использую SFAuthorizationView требовать от пользователей аутентификации в качестве администратора перед изменением этих значений.

Я пытаюсь решить, как лучше всего изменить эти значения.

Дешевый хакерский вариант, похоже, заключается в использовании AuthorizationExecuteWithPrivileges() и mv или defaults, либо через BLAuthentication, либо создав что-то подобное самостоятельно.Обратной стороной этого является отсутствие возвращаемого значения любого приложения командной строки, которое я запускаю, а также некоторые странные эзотерические ошибки, с которыми я столкнулся (например, получение ошибки -60008 в определенных ситуациях).Apple, очевидно, настоятельно не рекомендует этого делать, но люди, похоже, делают это и добиваются определенного успеха.

Второй наиболее хакерский вариант — создать вспомогательное приложение с установленным битом suid и --self-repair вариант, обсуждаемый в разных местах.Это кажется возможным, но вроде это не намного хлопотнее, чем третий вариант.

Третий вариант – создать полноценную launchd демон, который будет работать от имени пользователя root и взаимодействовать с моим приложением через сокет.Чтение и запись некоторых файлов plist кажется излишним, но возможно, что в будущем я найду для него другие применения, и это не будет единственный демон для моего приложения, поэтому не кажется неразумным просто добавьте еще один.

Я думаю изменить это образец кода для моих целей.

Мои два вопроса:

  1. Вариант запуска демона launchd кажется лучшим путем для этого, или мне не хватает гораздо более простого пути?

  2. Кто-нибудь еще успешно использовал этот код в качестве основы для чего-то подобного, и видит ли кто-нибудь какие-либо явные проблемы с ним, которые мне не хватает?Я успешно использовал его в тестовом приложении, но мне было бы интересно услышать ваше мнение по этому поводу.

Это было полезно?

Решение

  1. launchd это определенно лучший и самый безопасный способ:вам понадобится установочный пакет, чтобы установить помощника на место.Убедитесь, что ваш помощник не делает и не может делать абсолютно ничего, кроме редактирования файлов, которые вы хотите использовать.

  2. Нет опыта работы с кодом, но он основан на BetterAuthorizationSample, так что это хорошее начало.

Другие советы

Также есть openauth API, который позволяет открывать файлы, требующие root-прав.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top