Стандартный способ выставить файл устройства для пользовательских приложений, работающих на непривилегированной учетной записи пользователя?

Я только что закончил первую версию модуля ядра Linux, который я написал на C. Модуль создает файл устройства ( /dev/wn0 ), который управляет устройством USB с тремя светодиодами. Например, работая от имени root, я могу сделать это:

 echo "#ff0000" >/dev/wn0 

… и устройство будет светиться ярко-красным.

Моя проблема в том, что я хочу, чтобы непривилегированные пользователи имели доступ к устройству (путем записи данных в /dev/wn0 ). Есть ли стандартный способ сделать это? Это так же просто, как изменение разрешений в файле /dev/wn0 ? Это создает проблемы безопасности?

One Solution collect form web for “Стандартный способ выставить файл устройства для пользовательских приложений, работающих на непривилегированной учетной записи пользователя?”

Хорошо, я вижу некоторые возможности:

  • Самый быстрый способ, весь смысл разрешений и владения POSIX: вы хотите, чтобы кто-то мог читать и / или писать, вы соответствующим образом устанавливаете разрешения. Просто поместите этих людей в группу и измените право собственности на устройство на эту группу, предоставив разрешения на запись группы. Возможно, вам придется поместить это в правила udev , если ваш /dev управляется udev . Это то, что делают некоторые инструменты, например bluez делает это, чтобы пользователи могли использовать bluetooth, или, по крайней мере, это метод, используемый в моем дистрибутиве, если я не пытаюсь использовать «ConsoleKit».

  • Если устройство простое, и нет никаких проблем с тем, чтобы он использовался для всех, просто разрешите всем писать на нем.

  • Напишите демона, который запускается как некоторый пользователь, который может писать на устройстве, захватывает устройство и снижает его привилегии, меняя свой UID, а затем обрабатывает запросы от любого пользователя, например, через TCP.

  • Напишите маленькую двоичную запись для устройства, то есть setuid какой-то пользователь, который может писать на устройстве и использовать его для записи на устройство. Это то, что делает mount , это setuid root, так что обычные пользователи могут монтировать файловые системы, если /etc/fstab позволяет им это делать.

Это не создает никаких дополнительных проблем с безопасностью, поскольку вы в порядке, когда эти пользователи могут использовать это устройство. Конечно, любой, кто имеет доступ к устройству, может использовать любую уязвимость в модуле, но это было бы возможно независимо от того, как вы предоставляете людям доступ к нему. Если вы пишете демона, это может быть использовано. Может быть, лучше держать вещи простыми и убедиться, что ваш код не уязвим.

Я бы сказал, что нет единого стандартного способа сделать это – некоторые части UNIX-систем делают это, и каждая часть делает это наиболее удобным способом для решения той или иной проблемы.

  • crc8 undefined при компиляции модуля ядра Linux на Beaglebone black / Debian
  • Makefile: установка внешнего модуля ядра Linux
  • как установить модуль в правильном месте или сказать / lib / modules / `uname -r`
  • В черном списке modprobe.d всегда нужен префикс «черный список»?
  • Предпосылки создания модуля ядра Linux
  • Где я могу найти информацию о параметрах драйвера Linux?
  • rts5139 / rtsx_usb borked в 3.15+
  • Не удается перезагрузить локальные файловые системы для чтения-записи (RAID1)
  • Идентификация модулей ядра
  • Как создать собственное ядро ​​с localmodconfig, которое поддерживает аппаратное обеспечение нескольких машин?
  • Обнаружение изменений в состоянии гаджета usb
  • Linux и Unix - лучшая ОС в мире.