Здравствуйте, butcher, Вы писали:
B>Почему "само-собой не запускается"?
Потому что приложение представляет собой директорию, в которой хранятся ресурсы. И в консоли в эту директорию можно только войти, и я не знаю как сказать ей выполнится.
B>aka50 ведь сказал, выставляете правильные права на файл девайса и вперёд.
А это решение не подходит т.к. требует логина под root-ом (или пользователем который может поменять права), но тогда и программа под этим пользователем отработает без проблем...
Здравствуйте, Alhim, Вы писали:
A>При попытке под обычным пользоватлем открывать файл порта выдаётся сообщение о недостатке прав. Как это можно обойти?
Например, поставить SUID на прогу, которой открываете и права владения на root'а
Здравствуйте, Alhim, Вы писали:
A>При попытке под обычным пользоватлем открывать файл порта выдаётся сообщение о недостатке прав. Как это можно обойти?
права на нем поменять... например дать ему группу termuser и всех, кому надо в эту группу... а suid не есть хорошо.
Здравствуйте, aka50, Вы писали:
A>после этого все пользователи из группы termuser могут делать че угодно с этим девайсом
Все что в /dev вотчина root-a и кому попало права на эти файлы дать нельзя. А можно, я думаю, сделать следующее: сделать неболшую программу, которая будет открывать нужный файл в /dev, а в программе сделать AuthorizationExecuteWithPrivileges на ту программу с правами root-а и через получившуюся трубу общаться с девайсом.
Здравствуйте, Alexey_Mel, Вы писали:
A_M>Здравствуйте, butcher, Вы писали:
A_M>Все что в /dev вотчина root-a и кому попало права на эти файлы дать нельзя. А можно, я думаю, сделать следующее: сделать неболшую программу, которая будет открывать нужный файл в /dev, а в программе сделать AuthorizationExecuteWithPrivileges на ту программу с правами root-а и через получившуюся трубу общаться с девайсом.
Народ, ну почитайте что-ли по юниксовым правам чтонить? !!! Какие права? Какие "кому попало"? Зачем же тогда их придумывали? Видно непонимание юниксовых прав... в корне.
Итого:
Если у файла есть владелец, например root, то только он может чето-то сделать с этим файлом (например поменять права, ну и еще кто имеет права записи в директорию могут его удалить, переименовать).
Если юзер не является владельцем, но является членом группы, имеющей доступ к файлу, то он сможет выполнять разрешенные действия с этим файлом (rwx).
Таким образом команда: chown root:termuser /dev/file делает так, что все кто входит в группу termuser имеют rw доступ к файлу (после комманды chmod g+rw). Но ни перименовать, ни удалить (директория принадлежить руту и права на ней dr-xr-xr-x) не могут.
B>>Помоему, это очень сильно смахивает на SUID, или я не так понял?
A_M>Ну, в общем, похоже. Только не из терминала а полностью программно.
A_M>Runs an executable tool with root privileges.
skip
A_M>);
блин... лисапед... ну есть же sudo! и зачем такой изврат. (особенно прикольно посмотреть как ты будешь ioctl() транслировать). Да и баги в программе возможны... и как будешь от них защищаться? Мда...
Далее... не понял что означает "Только не из терминала а полностью программно"? Это как?
Здравствуйте, aka50, Вы писали:
A>>При попытке под обычным пользоватлем открывать файл порта выдаётся сообщение о недостатке прав. Как это можно обойти? A>права на нем поменять... например дать ему группу termuser и всех, кому надо в эту группу... а suid не есть хорошо.
Понятно, что не хорошо, но часто так и делают..
A>>... а suid не есть хорошо. B>Понятно, что не хорошо, A sachem togda predlogat'
Aaaaa, tak eto s suid prikol byl?
B>..но часто так и делают..
Esli napered ne snajut, kakie resursy programma ispol'suet.
Sdes' ved' rech idet o konkretnom "device"
Здравствуйте, raskolnikov, Вы писали:
A>>>... а suid не есть хорошо. B>>Понятно, что не хорошо, R> A sachem togda predlogat'
один из рабочих и часто используемых вариантов
R>Aaaaa, tak eto s suid prikol byl?
ну, можно и так сказать
R>Kstati luchsche vmesto suid-bita paket "sudo" ispol'sovat'.
Здравствуйте, <Аноним>, Вы писали:
А>А как эту проблему можно обойти под MacOS X для application package? С sudo или su из командной строки это, само-собой, не запускается.
Почему "само-собой не запускается"?
aka50 ведь сказал, выставляете правильные права на файл девайса и вперёд.
Здравствуйте, butcher, Вы писали:
B>Здравствуйте, aka50, Вы писали:
A>>к стати о sudo. Я тут наткнулся на такую весч, что sudo не хочет выполняться из под рута:
A>>
A>>station# sudo -u someuser test
A>>You are already root, you don't need to use sudo.
A>>
A>>вот такая петрушка. Можно конечно в исходники слазить, но вдруг есть решение A>>(мое решение, просто тупая прога на 10 строчек специально для рута)
B>Попробуйте так: B>
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, butcher, Вы писали:
B>>Почему "само-собой не запускается"? А>Потому что приложение представляет собой директорию, в которой хранятся ресурсы. И в консоли в эту директорию можно только войти, и я не знаю как сказать ей выполнится.
B>>aka50 ведь сказал, выставляете правильные права на файл девайса и вперёд. А>А это решение не подходит т.к. требует логина под root-ом (или пользователем который может поменять права), но тогда и программа под этим пользователем отработает без проблем...
в смысле под рутом? под рутом надо сделать 2 комнды и добавить юзера в группу termuser (ну и создать ее если еще нету такой)
Здравствуйте, Alexey_Mel, Вы писали:
A_M>Все что в /dev вотчина root-a и кому попало права на эти файлы дать нельзя. А можно, я думаю, сделать следующее: сделать неболшую программу, которая будет открывать нужный файл в /dev, а в программе сделать AuthorizationExecuteWithPrivileges на ту программу с правами root-а и через получившуюся трубу общаться с девайсом.
Помоему, это очень сильно смахивает на SUID, или я не так понял?
<skip>
A>блин... лисапед... ну есть же sudo! и зачем такой изврат. (особенно прикольно посмотреть как ты будешь ioctl() транслировать). Да и баги в программе возможны... и как будешь от них защищаться? Мда...
Ну дык может подскажешь как MacOS X application package под sudo запустить? А ioctl(...) в той же трубе может быть. Да и программы без багов писать можно и нужно.
Здравствуйте, Alexey_Mel, Вы писали:
A_M>Здравствуйте, aka50, Вы писали:
A_M><skip>
A>>блин... лисапед... ну есть же sudo! и зачем такой изврат. (особенно прикольно посмотреть как ты будешь ioctl() транслировать). Да и баги в программе возможны... и как будешь от них защищаться? Мда...
A_M>Ну дык может подскажешь как MacOS X application package под sudo запустить? А ioctl(...) в той же трубе может быть. Да и программы без багов писать можно и нужно.
зачем тебе package под sudo пускать? Далее, я так подзреваю, всегда есть бинарный файл, который собсвенно делается exec(). Вот его и надо из под sudo запускать. А то что из под гуи это выглядит, как запуск "директории"... ну значить надо читать и разбираться... но правами это решается на раз.. Если не пнятно ... значит полохо объяснял .
A_M>А ioctl(...) в той же трубе может быть. Да и программы без багов писать можно и нужно.
ioctl()? Ну ioctl трубы будет... ioctl девайса не будет ...
Вывод: читам google и много думаем. Темы:
unix permissions
ioctl devices internals
<skip>
A>зачем тебе package под sudo пускать? Далее, я так подзреваю, всегда есть бинарный файл, который собсвенно делается exec(). Вот его и надо из под sudo запускать. А то что из под гуи это выглядит, как запуск "директории"... ну значить надо читать и разбираться... но правами это решается на раз.. Если не пнятно ... значит полохо объяснял .
блин лисапед...((с) ваше) тебеж писали "А это решение не подходит т.к. требует логина под root-ом (или пользователем который может поменять права), но тогда и программа под этим пользователем отработает без проблем..." Я понял, что задача такова что бы под рутом не грузиться вообще, тогда максимум возможен ввод пароля root-а, как для sudo. Но sudo не делать "Потому что приложение представляет собой директорию, в которой хранятся ресурсы. И в консоли в эту директорию можно только войти, и я не знаю как сказать ей выполнится".
Конечно можно перед запуском той проги попытаться под sudo выполнить скрипт настройки прав на нужные файлы... тоже решение.
A_M>>А ioctl(...) в той же трубе может быть. Да и программы без багов писать можно и нужно. A>ioctl()? Ну ioctl трубы будет... ioctl девайса не будет ...
На счет трубы ты сам, кажется, не понял... В прогу-трубу предать интерфейс устройства (en0 допустим), а она уже откроет файл, забиндит интерфейс, настроит и т.д. Она же будет получать запросы и пихать в девайс, получать ответы и отсылать назад. Если не пнятно ... значит полохо объяснял ((с) ваше)
Здравствуйте, 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 не реально.... может тогда предлагается еще и драйвер для это проги написать?
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