Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Правильный доступ к файлу  (Прочитано 65826 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн freemind

  • Автор темы
  • Участник
  • *
  • Сообщений: 177
    • Просмотр профиля
Правильный доступ к файлу
« : 13 Марта 2023, 22:43:20 »
Пишу программку-демон который должен уметь писать данные в /dev/uinput
Доступ к этому файлу для пользователя закрыт, писать могут только root и группа root.
Запускать демона от рута возможно, но пишут что это плохая практика.
Просматривая список процессов, вижу что некоторые демоны создают своих пользователей,
и запускаются под ними.
Как это работает?
Как грамотно дать доступ демону к файлу /dev/uinput, не запуская его от root?

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28358
    • Просмотр профиля
Re: Правильный доступ к файлу
« Ответ #1 : 14 Марта 2023, 00:30:50 »
Грамотно - запустить демона от рута, сделать от рута то, что нужно сделать от рута, дропнуть привилегии до обычного пользователя и форкнуться. После чего можно работать с созданным через uinput устройством от обычного пользователя.

Ref: https://stackoverflow.com/questions/881388/what-is-the-reason-for-performing-a-double-fork-when-creating-a-daemon
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн freemind

  • Автор темы
  • Участник
  • *
  • Сообщений: 177
    • Просмотр профиля
Re: Правильный доступ к файлу
« Ответ #2 : 14 Марта 2023, 11:59:33 »
работать с созданным через uinput устройством от обычного пользователя.
Как? Доступ закрыт и на чтение и на запись. Chmod делать для системного файла? Плохое решение.
Изменения можно сделать на этапе установки, она под рутом проходит. Только вот какие изменения? Добавить отдельного системного пользователя, группу, стартовать демона под этим пользователем - это понятно, но как сделать чтобы он читал uinput не будучи рутом?

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28358
    • Просмотр профиля
Re: Правильный доступ к файлу
« Ответ #3 : 14 Марта 2023, 13:50:39 »
Вы вообще читали, что такое uinput и для чего оно нужно?…
Вы вообще в курсе про наследование хэндлов, наконец?…
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн freemind

  • Автор темы
  • Участник
  • *
  • Сообщений: 177
    • Просмотр профиля
Re: Правильный доступ к файлу
« Ответ #4 : 14 Марта 2023, 16:34:54 »
что такое uinput
Это да
наследование хэндлов
А это нет пока)
Поразбираюсь

Пользователь добавил сообщение 14 Марта 2023, 19:07:15:
Почитал, не понятно честно говоря для чего эти дескрипторы...
У меня пользователи не хотят программу от рута запускать.
А тут получается, стартовать-то все равно от рута нужно, а дальше-то уже не важно под каким пользователем дочерний процесс работает.
Или я не разобрался?
« Последнее редактирование: 14 Марта 2023, 19:07:15 от freemind »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28358
    • Просмотр профиля
Re: Правильный доступ к файлу
« Ответ #5 : 14 Марта 2023, 21:55:38 »
Да, если вы хотите делать рутовые операции, стартовать всё равно придётся от рута.
Либо писать сервис, который вам сдлеает то, что нужно, по запросу.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн Peter_I

  • Старожил
  • *
  • Сообщений: 3026
    • Просмотр профиля
Re: Правильный доступ к файлу
« Ответ #6 : 14 Марта 2023, 22:47:45 »
Не обязательно для получения прав root запускать программу непосредственно от root.
Для этого есть вызов setuid(), а на исполнимый файл программы командой setcap()
должна быть установлена capabilities CAP_SETUID или ещё CAP_SETGID,
т.е. root действительно нужен хотя бы раз.
Пётр.

 

Страница сгенерирована за 0.042 секунд. Запросов: 22.