The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Как правильно запускать программу-сервис, требующую права root?"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Демоны, Сигналы)
Изначальное сообщение [ Отслеживать ]

"Как правильно запускать программу-сервис, требующую права root?"  +/
Сообщение от xintrea email(ok) on 30-Авг-11, 14:53 
Здравствуйте!


Пишу сейчас кастомный переключатель клавиатуры. Это обычная программа, которая в бесконечном цикле следит за файлом устройства клавиатуры, и переключает язык при определенных действиях пользователя.

Проблема в том, что для доступа к файлу устройства клавиатуры (/dev/input/event0) нужны права рута.

Вопрос. Как правильно запускать эту программу так, чтобы она имела права рута, и при этом знала рабочую директорию пользователя чтобы из нее считать пользовательский конфиг?

Я могу конечно прописать программу в /etc/sudoers, и потом стартовать ее через sudo myprogram. Но это как-то неправильно. Назначать файлу устройства права доступа "всем" тоже как-то неправильно.

Программу планируется распространять как OpenSource, поэтому нужно выбрать сразу правильный метод. Какой?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Как правильно запускать программу-сервис, требующую права root?"  +/
Сообщение от allez (ok) on 02-Сен-11, 12:02 
> Я могу конечно прописать программу в /etc/sudoers, и потом стартовать ее через
> sudo myprogram. Но это как-то неправильно.

Можно еще, например, установить в атрибутах исполняемого файла бит SUID, но это тоже
не всем нравится. :-)

>Назначать файлу устройства права доступа "всем" тоже как-то неправильно.

Так права доступа разные бывают. Что плохого в том, что все получат права на чтение из
файла устройства? Подчеркну: не на запись или исполнение, а только на чтение.

P. S. А вообще вам можно попробовать разделить вашу программу на две части:
собственно сервис, запускаемый с правами root и непосредственно работающий с
файлами /dev/input/event*, а также клиентское приложение, запускаемое каждым
пользователем индивидуально и общающееся с сервисом. Как-то вот так...

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Как правильно запускать программу-сервис, требующую права root?"  +/
Сообщение от guest email(??) on 02-Сен-11, 12:33 
> Так права доступа разные бывают. Что плохого в том, что все получат
> права на чтение из
> файла устройства? Подчеркну: не на запись или исполнение, а только а чтение.

Например пользователь vasya зайдя по ssh спокойно прочитает пароль root'а который кто-то вводит с клавиатуры...

> P. S. А вообще вам можно попробовать разделить вашу программу на две
> части:
> собственно сервис, запускаемый с правами root и непосредственно работающий с
> файлами /dev/input/event*, а также клиентское приложение, запускаемое каждым
> пользователем индивидуально и общающееся с сервисом. Как-то вот так...

Вроде-как нет возможности определить какой пользователь нажал клавишу...


Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Как правильно запускать программу-сервис, требующую права root?"  +/
Сообщение от allez (ok) on 02-Сен-11, 13:58 
>> Так права доступа разные бывают. Что плохого в том, что все получат
>> права на чтение из
>> файла устройства? Подчеркну: не на запись или исполнение, а только а чтение.
> Например пользователь vasya зайдя по ssh спокойно прочитает пароль root'а который кто-то
> вводит с клавиатуры...

Согласен, но по замыслу автора темы получается, что пользователи, запускающие его
программу, изначально подвергают себя такой опасности. Я предположил, что эта фича
ему нужна осознанно и просто решил уточнить, какая разница, чем пробивать дырку в
безопасности - кувалдой или отбойным молотком? :-)

Правда, если предположить, что не все пользователи компьютера будут использовать
программу автора темы, то тогда логичнее было бы поменять группу-владельца файла
/dev/input/event0 с root на myprogramuser, например и добавить пользователей программы
в эту группу.

>> P. S. А вообще вам можно попробовать разделить вашу программу на две
>> части:
>> собственно сервис, запускаемый с правами root и непосредственно работающий с
>> файлами /dev/input/event*, а также клиентское приложение, запускаемое каждым
>> пользователем индивидуально и общающееся с сервисом. Как-то вот так...
> Вроде-как нет возможности определить какой пользователь нажал клавишу...

А вот тут, честно признаться, у меня нет ни опыта, ни знаний, поэтому больше догадок
строить не стану. :-)

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру