Как распространить программу OSX с битом suid, установленным через DMG?
У меня есть небольшая диагностическая OSX-программа - небольшое приложение в виде панели меню, которое мне нужно доставить клиенту. Программа использует dtrace. Таким образом, у него есть вспомогательный исполняемый файл в каталоге MacOS с установленным битом suid и владельцем: root:wheel. Единственная роль помощника состоит в том, чтобы немедленно выполнить exec() для трассировки с помощью включенного скрипта dtrace.
Моя проблема в том, что я не могу найти хороший способ донести это до клиента. Наивно положить его в архив.zip уничтожили все специальные разрешения.
Когда я попытался поместить его в DMG, владелец root:wheel получил сброс на мой (ted:staff). Я обнаружил, что должен был использовать diskutil
в enableOwnership
на DMG, чтобы заставить его начать уважать настройки владения файловым объектом. Итак, теперь я вижу, что внутри DMG моя вспомогательная программа имеет требуемые права root:wheel и + sid suid.
Однако теперь я обнаружил, что когда я перетаскиваю комплект приложений из DMG на рабочий стол, разрешения снова сбрасываются. Более того, когда я пытаюсь запустить приложение из DMG, оно ведет себя так, как будто вспомогательная программа не имеет установленного бита suid.
Отступая немного назад, я не понимаю, почему это должно работать вообще. Похоже, что это будет неприятная и действительно очевидная дыра в безопасности, позволяющая разработчикам распространять пакеты приложений с таким набором битов suid, как этот.
Так как это вообще делается? Нужен ли мне установщик пакетов? Это сохранит бит suid? Может ли кто-нибудь научить меня, как это должно работать?
2 ответа
Вы правы в том, что (если бы был простой способ сделать это), это была бы неприятная дыра в безопасности. Вы никогда не сможете создать / установить исполняемый файл setuid root без прохождения некоторого шага авторизации администратора. В самом деле, вы даже не сможете создать / установить файл с владельцем, установленным для любого пользователя, кроме вашего.
(На самом деле в 10.9 есть исключение: App Store позволит вам устанавливать приложения без прав администратора. Но это считается относительно безопасным, потому что Apple проверяет приложения, прежде чем они будут разрешены в магазине.)
"Правильный" способ сделать это с помощью установщика пакета. Можно установить запрос на авторизацию администратора для установки и использовать его для установки файлов с любым владельцем и разрешениями (включая бит setuid).
Возможно, используя .tar
файл будет работать. Они очень хороши для хранения всего специфического багажа UNIX, такого как право собственности, к папкам и файлам внутри них.