пыптка нумбер 2.
Здравствуйте, Alexey_Mel, Вы писали:
A_M>Здравствуйте, aka50, Вы писали:
A_M><skip>
A_M>блин лисапед...((с) ваше) тебеж писали "А это решение не подходит т.к. требует логина под root-ом (или пользователем который может поменять права), но тогда и программа под этим пользователем отработает без проблем..." Я понял, что задача такова что бы под рутом не грузиться вообще, тогда максимум возможен ввод пароля root-а, как для sudo. Но sudo не делать "Потому что приложение представляет собой директорию, в которой хранятся ресурсы. И в консоли в эту директорию можно только войти, и я не знаю как сказать ей выполнится".
под рутом не надо грузится... есть su в консоли и в линухах/бсд (не знаю на счет маков, но вполне подозреваю, что так же) админские проги умеют менять свой euid на рута, но при этому пароль рутовых запрашивают...
A_M>Конечно можно перед запуском той проги попытаться под sudo выполнить скрипт настройки прав на нужные файлы... тоже решение.
Настройка прав требуется 1!!!! раз. Потом достаточно включать нужных пользователей в группу termuser (или какая там будет). Еще раз
не надо выполнять настройку прав при каждом запуске! Эта информация сохранятся в файловой системе!
A_M>>>А ioctl(...) в той же трубе может быть. Да и программы без багов писать можно и нужно.
A>>ioctl()? Ну ioctl трубы будет... ioctl девайса не будет ...
A_M>На счет трубы ты сам, кажется, не понял... В прогу-трубу предать интерфейс устройства (en0 допустим), а она уже откроет файл, забиндит интерфейс, настроит и т.д. Она же будет получать запросы и пихать в девайс, получать ответы и отсылать назад. Если не пнятно
... значит полохо объяснял
((с) ваше)
Ага.. значит передали мы этой прокси — проге интерефейс, она его типа настроила (хмм... а как ей это передать? Особенно если программа не знает ничего о таких прогах?). И какие еще запросы??? Пример из либы работающей с веб-камерой (libcam) посылается управляющая команда ccb:
int fd = open("/dev/xpt0", O_RDWR);
ioctl(fd, CAMIOCOMMAND, ccb));
Но весь прикол в том, что у трубы (pipe) нету таких ioctl()-ов как CAMIOCOMMAND!!!. И будет тебе ошибка — No such ioctl on device ... а перехватить это ioctl из user-space не реально.... может тогда предлагается еще и драйвер для это проги написать?
Здравствуйте, aka50, Вы писали:
A>пыптка нумбер 2.
Вот неугомонный...
<skip>
A>под рутом не надо грузится... есть su в консоли и в линухах/бсд (не знаю на счет маков, но вполне подозреваю, что так же) админские проги умеют менять свой euid на рута, но при этому пароль рутовых запрашивают...
Ну раз sudo не делать дык и su наверно не подходит... а если su можно, дык почему бы сразу и не sudo?...
A_M>>Конечно можно перед запуском той проги попытаться под sudo выполнить скрипт настройки прав на нужные файлы... тоже решение.
A>Настройка прав требуется 1!!!! раз. Потом достаточно включать нужных пользователей в группу termuser (или какая там будет). Еще раз не надо выполнять настройку прав при каждом запуске! Эта информация сохранятся в файловой системе!
Я это и имел ввиду
1!!! раз перед запуском. При следующих запусках
уже можно и не делать. Только это уже буквоедство...
A>Ага.. значит передали мы этой прокси — проге интерефейс, она его типа настроила (хмм... а как ей это передать? Особенно если программа не знает ничего о таких прогах?). И какие еще запросы??? Пример из либы работающей с веб-камерой (libcam) посылается управляющая команда ccb:
A>A>int fd = open("/dev/xpt0", O_RDWR);
A>ioctl(fd, CAMIOCOMMAND, ccb));
A>
A>Но весь прикол в том, что у трубы (pipe) нету таких ioctl()-ов как CAMIOCOMMAND!!!. И будет тебе ошибка — No such ioctl on device ... а перехватить это ioctl из user-space не реально.... может тогда предлагается еще и драйвер для это проги написать?
http://developer.apple.com/documentation/Security/Reference/authorization_ref/01authref_ref/function_group_5.html#//apple_ref/c/func/AuthorizationExecuteWithPrivileges
AuthorizationExecuteWithPrivileges запускает, скажем, мою "прокси — прогу". В параметрах ей передаем, допустим, "en0" и "/dev/bpf0" соответственно. "Прокси-прога" открывает /dev/bpf0, кофигурит под en0 (ведь она же нами и написана, чего сказали то и делает). Затем через communicationsPipe (последний параметр AuthorizationExecuteWithPrivileges) получает чего пихать в девайс. А то что получает от девайса обратно записывает в communicationsPipe. Вот такой была идея.
Но AuthorizationExecuteWithPrivileges только для MacOS 10.0 и выше. Вроди это и спрашивали...
Здравствуйте, Alexey_Mel, Вы писали:
A_M>Здравствуйте, aka50, Вы писали:
A>>пыптка нумбер 2.
A_M>Вот неугомонный... 
Дискуссию можно и прекратить...Обидно смотреть, когда народ начинает извращаться и писать супер проги, которые обычно глючат, да еще и потенциально дают выполнить код из под рута, вместо того, чтобы просто сделать chmod/chown, а потом удивлюятся, а чего это у них линух/бсд/макос/... сломали...
A_M>AuthorizationExecuteWithPrivileges запускает, скажем, мою "прокси — прогу". В параметрах ей передаем, допустим, "en0" и "/dev/bpf0" соответственно. "Прокси-прога" открывает /dev/bpf0, кофигурит под en0 (ведь она же нами и написана, чего сказали то и делает). Затем через communicationsPipe (последний параметр AuthorizationExecuteWithPrivileges) получает чего пихать в девайс. А то что получает от девайса обратно записывает в communicationsPipe. Вот такой была идея.
A_M>Но AuthorizationExecuteWithPrivileges только для MacOS 10.0 и выше. Вроди это и спрашивали...
Это просто связка seteuid/exec спецефичная для маков...
Это не то... это позволяет выполнить что-то типа cat /etc/passwd, но с девайсами работать не получится... (не со всем конечно... какой-нить /dev/speaker будет замечательно работать), но вот с bpf не получится... Потому что если запустить какой-нить tcpdump, который работает с bpf, а подсунуть ему pipe на прогу, то когда tcpdump попытается выполнить ioctl(pipe, BIOCSETIF, ..) получит ошибку и вывалится нафиг.
ЗЫ: В общем я понял, говорим о разных вещах. Я о возможности решить проблемы через права доступа, Вы через sudo. (только нужно учесть, что sudo еще сконфигурировать надо да и пользователя надо добавить в разрешенные пользователи... , но если юзеру только этот девайс нужен, зачем ему sudo? %))
А по поводу pipe, то здесь просто Вам надо написать программку, которая работает скакимнить /dev/bpf и все будет понятно сразу

.
Здравствуйте, aka50, Вы писали:
A>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, butcher, Вы писали:
B>>>Почему "само-собой не запускается"?
А>>Потому что приложение представляет собой директорию, в которой хранятся ресурсы. И в консоли в эту директорию можно только войти, и я не знаю как сказать ей выполнится.
open MyApp.app