Как запустить приложение от имени пользователя root без запроса пароля администратора? - PullRequest
2 голосов
/ 06 апреля 2010

Я пишу программу на Objective-C (Xcode 3.2, на Snow Leopard), которая способна либо выборочно блокировать определенные сайты на длительность, либо разрешать только определенные сайты (и, таким образом, блокировать все остальные) на длительность. Обоснование этой программы довольно простое. Я склонен отвлекаться, когда у меня есть полный доступ к Интернету, но мне нужен доступ к Интернету в рабочее время, чтобы попасть на ряд сайтов, связанных с работой. Ясно, что это не постоянный блок, а только помогает мне сосредоточиться, когда я обнаруживаю, что слишком много брожу.

В настоящее время я использую сценарий Unix, который вызывается через AppleScript для получения разрешений администратора. Затем он активирует ряд правил ipfw и очищает их через определенное время для восстановления полного доступа в Интернет. Простой и эффективный, но, поскольку я работаю как обычный пользователь, вводить пароль администратора каждый раз, когда я хочу перейти в автономный режим, становится неудобно. Кроме того, это отличная возможность научиться работать с XCode и Objective-C. На данный момент все работает как положено, за исключением фактической блокировки. Я могу добавить несколько сайтов в список, указать, хочу ли я блокировать или разрешить эти сайты, и я могу «начать» блокировку, указав время, до которого я хочу оставаться «в автономном режиме».

Однако мне трудно получить четкую информацию о том, как я могу запустить привилегированную команду Unix из Objective-C. В идеале я хотел бы иметь возможность хранить информацию об учетной записи администратора в связке ключей, чтобы использовать ее позже, чтобы я мог просто перейти в «автономный» режим с удобством нажатия кнопки. Более того, в Objective-C может существовать некоторый класс, с помощью которого я могу заблокировать доступ к некоторым / всем веб-сайтам для этого конкретного пользователя без необходимости полагаться на привилегированные команды Unix. Третья возможность заключается в запуске этой программы с правами root и уменьшением разрешений до тех пор, пока они мне не понадобятся, но, поскольку это приложение с графическим интерфейсом, которое вложено в строку меню OS X, результаты довольно неудобны и заставляют его запускать каждый и каждый раз с правами суперпользователя задача не из легких.

Кто-нибудь, кто может предложить мне несколько советов или советов? Пожалуйста, никаких предупреждений безопасности, я полностью осознаю, что то, что я хочу сделать, - это потенциальная угроза безопасности.

Ответы [ 2 ]

2 голосов
/ 06 апреля 2010

Вы должны создать отдельный процесс, который запускается с более высокими привилегиями. Посмотрите BetterAuthorizationSample о том, как запускать такие вспомогательные приложения с помощью launchd.

2 голосов
/ 06 апреля 2010

Если вы хотите что-то сделать с правами администратора, и вам не нужно каждый раз проходить аутентификацию, похоже, вам нужно взглянуть на setuid.изменение правила, а затем установите владельца этого инструмента в root.Затем установите бит setuid.Теперь вы можете запустить его от имени пользователя, и он будет работать от имени пользователя root.

Подробнее см. Здесь: http://en.wikipedia.org/wiki/Setuid

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...