Re[3]: Как не root'у пользоваться /dev/ttyS0
От: Аноним  
Дата: 18.06.04 10:52
Оценка: :))
Здравствуйте, butcher, Вы писали:

B>Почему "само-собой не запускается"?

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

B>aka50 ведь сказал, выставляете правильные права на файл девайса и вперёд.

А это решение не подходит т.к. требует логина под root-ом (или пользователем который может поменять права), но тогда и программа под этим пользователем отработает без проблем...
Re[5]: Как не root'у пользоваться /dev/ttyS0
От: butcher Россия http://bu7cher.blogspot.com
Дата: 17.06.04 12:24
Оценка: 1 (1)
Здравствуйте, 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 строчек специально для рута)

Попробуйте так:
 # su -l someuser -c test

Нет ничего невозможного..
Re: Как не root'у пользоваться /dev/ttyS0
От: butcher Россия http://bu7cher.blogspot.com
Дата: 17.06.04 09:56
Оценка: -1
Здравствуйте, Alhim, Вы писали:

A>При попытке под обычным пользоватлем открывать файл порта выдаётся сообщение о недостатке прав. Как это можно обойти?


Например, поставить SUID на прогу, которой открываете и права владения на root'а

Нет ничего невозможного..
Re: Как не root'у пользоваться /dev/ttyS0
От: aka50 Россия  
Дата: 17.06.04 10:33
Оценка: +1
Здравствуйте, Alhim, Вы писали:

A>При попытке под обычным пользоватлем открывать файл порта выдаётся сообщение о недостатке прав. Как это можно обойти?


права на нем поменять... например дать ему группу termuser и всех, кому надо в эту группу... а suid не есть хорошо.
Re[5]: Как не root'у пользоваться /dev/ttyS0
От: Alexey_Mel  
Дата: 18.06.04 16:02
Оценка: -1
Здравствуйте, aka50, Вы писали:

A>после этого все пользователи из группы termuser могут делать че угодно с этим девайсом


Все что в /dev вотчина root-a и кому попало права на эти файлы дать нельзя. А можно, я думаю, сделать следующее: сделать неболшую программу, которая будет открывать нужный файл в /dev, а в программе сделать AuthorizationExecuteWithPrivileges на ту программу с правами root-а и через получившуюся трубу общаться с девайсом.
Re[8]: Как не root'у пользоваться /dev/ttyS0
От: aka50 Россия  
Дата: 18.06.04 18:37
Оценка: +1
Здравствуйте, 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() транслировать). Да и баги в программе возможны... и как будешь от них защищаться? Мда...

Далее... не понял что означает "Только не из терминала а полностью программно"? Это как?
Как не root'у пользоваться /dev/ttyS0
От: Alhim Украина  
Дата: 17.06.04 09:54
Оценка:
При попытке под обычным пользоватлем открывать файл порта выдаётся сообщение о недостатке прав. Как это можно обойти?
Re[2]: Как не root'у пользоваться /dev/ttyS0
От: butcher Россия http://bu7cher.blogspot.com
Дата: 17.06.04 10:57
Оценка:
Здравствуйте, aka50, Вы писали:

A>>При попытке под обычным пользоватлем открывать файл порта выдаётся сообщение о недостатке прав. Как это можно обойти?

A>права на нем поменять... например дать ему группу termuser и всех, кому надо в эту группу... а suid не есть хорошо.
Понятно, что не хорошо, но часто так и делают..

Нет ничего невозможного..
Re[3]: Как не root'у пользоваться /dev/ttyS0
От: raskolnikov  
Дата: 17.06.04 12:04
Оценка:
Здравствуйте, butcher, Вы писали:


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"

Kstati luchsche vmesto suid-bita paket "sudo" ispol'sovat'.
Re[4]: Как не root'у пользоваться /dev/ttyS0
От: butcher Россия http://bu7cher.blogspot.com
Дата: 17.06.04 12:18
Оценка:
Здравствуйте, 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'.


да, тоже вариант

Нет ничего невозможного..
Re[4]: Как не root'у пользоваться /dev/ttyS0
От: aka50 Россия  
Дата: 17.06.04 12:18
Оценка:
Здравствуйте, raskolnikov, Вы писали:

R>Kstati luchsche vmesto suid-bita paket "sudo" ispol'sovat'.


к стати о sudo. Я тут наткнулся на такую весч, что sudo не хочет выполняться из под рута:

station# sudo -u someuser test
You are already root, you don't need to use sudo.


вот такая петрушка. Можно конечно в исходники слазить, но вдруг есть решение
(мое решение, просто тупая прога на 10 строчек специально для рута)
Re: Как не root'у пользоваться /dev/ttyS0
От: Аноним  
Дата: 18.06.04 10:06
Оценка:
A>При попытке под обычным пользоватлем открывать файл порта выдаётся сообщение о недостатке прав. Как это можно обойти?

А как эту проблему можно обойти под MacOS X для application package? С sudo или su из командной строки это, само-собой, не запускается.
Re[2]: Как не root'у пользоваться /dev/ttyS0
От: butcher Россия http://bu7cher.blogspot.com
Дата: 18.06.04 10:13
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>А как эту проблему можно обойти под MacOS X для application package? С sudo или su из командной строки это, само-собой, не запускается.

Почему "само-собой не запускается"?

aka50 ведь сказал, выставляете правильные права на файл девайса и вперёд.

Нет ничего невозможного..
Re[6]: Как не root'у пользоваться /dev/ttyS0
От: aka50 Россия  
Дата: 18.06.04 11:25
Оценка:
Здравствуйте, 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>
B> # su -l someuser -c test
B>


оо... как все просто . thnx
Re[4]: Как не root'у пользоваться /dev/ttyS0
От: aka50 Россия  
Дата: 18.06.04 11:28
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, butcher, Вы писали:


B>>Почему "само-собой не запускается"?

А>Потому что приложение представляет собой директорию, в которой хранятся ресурсы. И в консоли в эту директорию можно только войти, и я не знаю как сказать ей выполнится.

B>>aka50 ведь сказал, выставляете правильные права на файл девайса и вперёд.

А>А это решение не подходит т.к. требует логина под root-ом (или пользователем который может поменять права), но тогда и программа под этим пользователем отработает без проблем...

в смысле под рутом? под рутом надо сделать 2 комнды и добавить юзера в группу termuser (ну и создать ее если еще нету такой)

chown root:termuser /dev/ttyp0
chmod g+rw /dev/ttyp0

после этого все пользователи из группы termuser могут делать че угодно с этим девайсом
Re[6]: Как не root'у пользоваться /dev/ttyS0
От: butcher Россия http://bu7cher.blogspot.com
Дата: 18.06.04 16:13
Оценка:
Здравствуйте, Alexey_Mel, Вы писали:

A_M>Все что в /dev вотчина root-a и кому попало права на эти файлы дать нельзя. А можно, я думаю, сделать следующее: сделать неболшую программу, которая будет открывать нужный файл в /dev, а в программе сделать AuthorizationExecuteWithPrivileges на ту программу с правами root-а и через получившуюся трубу общаться с девайсом.


Помоему, это очень сильно смахивает на SUID, или я не так понял?

Нет ничего невозможного..
Re[7]: Как не root'у пользоваться /dev/ttyS0
От: Alexey_Mel  
Дата: 18.06.04 16:26
Оценка:
Здравствуйте, butcher, Вы писали:


B>Помоему, это очень сильно смахивает на SUID, или я не так понял?


Ну, в общем, похоже. Только не из терминала а полностью программно.

Runs an executable tool with root privileges.
OSStatus AuthorizationExecuteWithPrivileges (
AuthorizationRef authorization,
const char *pathToTool,
AuthorizationFlags options,
const * char *arguments,
FILE **communicationsPipe
);
Re[9]: Как не root'у пользоваться /dev/ttyS0
От: Alexey_Mel  
Дата: 20.06.04 16:24
Оценка:
Здравствуйте, aka50, Вы писали:

<skip>

A>блин... лисапед... ну есть же sudo! и зачем такой изврат. (особенно прикольно посмотреть как ты будешь ioctl() транслировать). Да и баги в программе возможны... и как будешь от них защищаться? Мда...


Ну дык может подскажешь как MacOS X application package под sudo запустить? А ioctl(...) в той же трубе может быть. Да и программы без багов писать можно и нужно.
Re[10]: Как не root'у пользоваться /dev/ttyS0
От: aka50 Россия  
Дата: 21.06.04 06:24
Оценка:
Здравствуйте, 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

потом можно о чем то говорить...
Re[11]: Как не root'у пользоваться /dev/ttyS0
От: Alexey_Mel  
Дата: 21.06.04 07:17
Оценка:
Здравствуйте, aka50, Вы писали:

<skip>

A>зачем тебе package под sudo пускать? Далее, я так подзреваю, всегда есть бинарный файл, который собсвенно делается exec(). Вот его и надо из под sudo запускать. А то что из под гуи это выглядит, как запуск "директории"... ну значить надо читать и разбираться... но правами это решается на раз.. Если не пнятно ... значит полохо объяснял .


блин лисапед...((с) ваше) тебеж писали "А это решение не подходит т.к. требует логина под root-ом (или пользователем который может поменять права), но тогда и программа под этим пользователем отработает без проблем..." Я понял, что задача такова что бы под рутом не грузиться вообще, тогда максимум возможен ввод пароля root-а, как для sudo. Но sudo не делать "Потому что приложение представляет собой директорию, в которой хранятся ресурсы. И в консоли в эту директорию можно только войти, и я не знаю как сказать ей выполнится".

Конечно можно перед запуском той проги попытаться под sudo выполнить скрипт настройки прав на нужные файлы... тоже решение.

A_M>>А ioctl(...) в той же трубе может быть. Да и программы без багов писать можно и нужно.

A>ioctl()? Ну ioctl трубы будет... ioctl девайса не будет ...
На счет трубы ты сам, кажется, не понял... В прогу-трубу предать интерфейс устройства (en0 допустим), а она уже откроет файл, забиндит интерфейс, настроит и т.д. Она же будет получать запросы и пихать в девайс, получать ответы и отсылать назад. Если не пнятно ... значит полохо объяснял ((с) ваше)
Re[12]: Как не root'у пользоваться /dev/ttyS0
От: aka50 Россия  
Дата: 21.06.04 09:08
Оценка:
пыптка нумбер 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 не реально.... может тогда предлагается еще и драйвер для это проги написать?
Re[13]: Как не root'у пользоваться /dev/ttyS0
От: Alexey_Mel  
Дата: 21.06.04 11:22
Оценка:
Здравствуйте, 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 и выше. Вроди это и спрашивали...
Re[14]: Как не root'у пользоваться /dev/ttyS0
От: aka50 Россия  
Дата: 21.06.04 11:44
Оценка:
Здравствуйте, 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 и все будет понятно сразу .
Re[5]: Как не root'у пользоваться /dev/ttyS0
От: _wqwa США  
Дата: 03.07.04 14:33
Оценка:
Здравствуйте, aka50, Вы писали:

A>Здравствуйте, Аноним, Вы писали:


А>>Здравствуйте, butcher, Вы писали:


B>>>Почему "само-собой не запускается"?

А>>Потому что приложение представляет собой директорию, в которой хранятся ресурсы. И в консоли в эту директорию можно только войти, и я не знаю как сказать ей выполнится.
open MyApp.app
Кто здесь?!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.