The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Как правильно запускать программу-сервис, требующую права 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*, а также клиентское приложение, запускаемое каждым
        >> пользователем индивидуально и общающееся с сервисом. Как-то вот так...
        > Вроде-как нет возможности определить какой пользователь нажал клавишу...

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




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

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