2010-12-09 3 views
4

Я написал приложение Cocoa, которое использует libpcap для мониторинга сетевого трафика. Поскольку libpcap требует привилегий root, мне было интересно, что лучший способ предоставить ему привилегии root (например, с помощью Package Maker?). Смогу ли я развернуть его с помощью установщика перетаскивания и перетащить или установить Package Maker только для меня?Развертывание приложения с правами root

Кроме того, я хотел бы узнать о рисках безопасности, связанных с предоставлением прав доступа к корневому каталогу. Приложение также записывает на диск (база данных sqlite), и я читал, что предоставление приложения, которое записывает в привилегии на root, не является хорошей идеей.

+0

Интересно. Приложение для сканирования безопасности? – EarlyPoster 2010-12-09 08:34:57

+1

Возможно, вы могли бы разделить его на два исполняемых файла: один setuid (или что-то еще делает на OSX), который делает абсолютно ничего, кроме как получить пакетные данные и сделать его доступным каким-то образом (pipe, socket,?), А другой, который работает с обычным пользователем разрешений, которые делают все остальное, включая запись в файлы. – 2010-12-09 09:00:35

ответ

8

Рекомендованный Apple, способ сделать то, что вы хотите, заключается в следующем:

  • фактор из материала, который требует привилегированной операции в отдельный исполняемый файл (это материал, который использует Libpcap для вас).
  • Когда приложение должно запустить привилегированный exe, оно создает ссылку на авторизацию и проверяет, может ли пользователь авторизовать (известный как предварительная авторизация) и передает внешнюю ссылку на авторизацию привилегированного exe.
  • При первом запуске привилегированный exe получает авторизацию снова, прежде чем пытаться делать привилегированные вещи.

Для выполнения вышеуказанных действий привилегированный exe должен быть установлен как принадлежащий root с установленным битом setuid. Вы можете сделать это с помощью производителя пакетов, или вы можете создать то, что Apple означает self repairing helper tool. Это инструмент, который проверяет, запущен ли он как root, и если он не вызывает себя через AuthorizationExecuteWithPrivileges, чтобы восстановить бит setuid и право собственности. Затем он выполняет авторизацию для операции и выполняет операцию.

Если вы используете инструмент самообучения, вы можете связать его с вашим приложением и использовать процесс перетаскивания.

Настоятельно рекомендую вам ознакомиться с полным текстом Authorization Programming Guide. Он рассказывает обо всех этих вещах более подробно и включает в себя примерный код.

Смежные вопросы