Как правильно запускать программу-сервис, требующую права root?, xintrea, 30-Авг-11, 14:53 [смотреть все]Здравствуйте! Пишу сейчас кастомный переключатель клавиатуры. Это обычная программа, которая в бесконечном цикле следит за файлом устройства клавиатуры, и переключает язык при определенных действиях пользователя.
Проблема в том, что для доступа к файлу устройства клавиатуры (/dev/input/event0) нужны права рута. Вопрос. Как правильно запускать эту программу так, чтобы она имела права рута, и при этом знала рабочую директорию пользователя чтобы из нее считать пользовательский конфиг? Я могу конечно прописать программу в /etc/sudoers, и потом стартовать ее через sudo myprogram. Но это как-то неправильно. Назначать файлу устройства права доступа "всем" тоже как-то неправильно. Программу планируется распространять как OpenSource, поэтому нужно выбрать сразу правильный метод. Какой?
|
- Как правильно запускать программу-сервис, требующую права root?, allez, 12:02 , 02-Сен-11 (1)
> Я могу конечно прописать программу в /etc/sudoers, и потом стартовать ее через > sudo myprogram. Но это как-то неправильно. Можно еще, например, установить в атрибутах исполняемого файла бит SUID, но это тоже не всем нравится. :-) >Назначать файлу устройства права доступа "всем" тоже как-то неправильно. Так права доступа разные бывают. Что плохого в том, что все получат права на чтение из файла устройства? Подчеркну: не на запись или исполнение, а только на чтение. P. S. А вообще вам можно попробовать разделить вашу программу на две части: собственно сервис, запускаемый с правами root и непосредственно работающий с файлами /dev/input/event*, а также клиентское приложение, запускаемое каждым пользователем индивидуально и общающееся с сервисом. Как-то вот так...
- Как правильно запускать программу-сервис, требующую права root?, guest, 12:33 , 02-Сен-11 (2)
> Так права доступа разные бывают. Что плохого в том, что все получат > права на чтение из > файла устройства? Подчеркну: не на запись или исполнение, а только а чтение. Например пользователь vasya зайдя по ssh спокойно прочитает пароль root'а который кто-то вводит с клавиатуры... > P. S. А вообще вам можно попробовать разделить вашу программу на две > части: > собственно сервис, запускаемый с правами root и непосредственно работающий с > файлами /dev/input/event*, а также клиентское приложение, запускаемое каждым > пользователем индивидуально и общающееся с сервисом. Как-то вот так... Вроде-как нет возможности определить какой пользователь нажал клавишу...
- Как правильно запускать программу-сервис, требующую права root?, allez, 13:58 , 02-Сен-11 (3)
>> Так права доступа разные бывают. Что плохого в том, что все получат >> права на чтение из >> файла устройства? Подчеркну: не на запись или исполнение, а только а чтение. > Например пользователь vasya зайдя по ssh спокойно прочитает пароль root'а который кто-то > вводит с клавиатуры...Согласен, но по замыслу автора темы получается, что пользователи, запускающие его программу, изначально подвергают себя такой опасности. Я предположил, что эта фича ему нужна осознанно и просто решил уточнить, какая разница, чем пробивать дырку в безопасности - кувалдой или отбойным молотком? :-) Правда, если предположить, что не все пользователи компьютера будут использовать программу автора темы, то тогда логичнее было бы поменять группу-владельца файла /dev/input/event0 с root на myprogramuser, например и добавить пользователей программы в эту группу. >> P. S. А вообще вам можно попробовать разделить вашу программу на две >> части: >> собственно сервис, запускаемый с правами root и непосредственно работающий с >> файлами /dev/input/event*, а также клиентское приложение, запускаемое каждым >> пользователем индивидуально и общающееся с сервисом. Как-то вот так... > Вроде-как нет возможности определить какой пользователь нажал клавишу... А вот тут, честно признаться, у меня нет ни опыта, ни знаний, поэтому больше догадок строить не стану. :-)
|