Является ли демон launchd лучшим путем для чтения / записи в привилегированные файлы в Какао? - PullRequest
1 голос
/ 13 июля 2009

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

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

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

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

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

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

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

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

  1. Кажется ли, что опция launchd daemon - лучший путь для этого, или есть куда более простой маршрут, который мне не хватает?

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

Ответы [ 2 ]

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

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

0 голосов
/ 17 сентября 2009

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

...