Что определяет права доступа в / dev?

11

У меня есть ошибка, когда права доступа /dev/input/event*неверны, поэтому, когда я использую Mumble , приложение не может обнаружить нажатия клавиш. Если я запускаю следующую команду, это «исправляет» проблему, но я бы хотел исправить ее навсегда.

sudo chmod a+r /dev/input/event/*

От чего зависят разрешения /dev/input/event*и как их постоянно устанавливать?

попей
источник
6
Обратите внимание, что если вы даете «все» разрешение на чтение, /dev/input/event/*вы, по сути, предоставляете всем доступ к прослушиванию клавиатуры, например, к набираемым вами паролям. В однопользовательской системе это может не иметь большого значения, но даже в однопользовательской системе мы обычно используем системных пользователей в качестве дополнительного уровня безопасности в случае взлома какого-либо компонента и, например, предоставляя nobodyпользователю доступ к вашей клавиатуре. На входном потоке вы ослабляете эту защиту. Хотя это может «исправить» Mumble, это не является общим решением вашей проблемы. Должен быть лучший способ.
Роби Басак
3
@popey Можете ли вы рассказать больше о том, почему разрешения на узлах в /dev/inputних неправильные, и каковы права собственности и разрешения (возможно, с выводом ls -l)? Проблема в том, что у inputгруппы нет прав на чтение (или она не является владельцем группы)? В моей системе файлы событий имеют root:inputправо собственности, и как пользователь, так и владелец группы могут читать из них. Если у вас этого нет, возможно, вам следует попытаться настроить это таким образом, чтобы не позволить всем прочитать их. Если вы делаете у этого может быть достаточно для Mumble , чтобы работать с полномочиями inputгруппы.
Элия ​​Каган
@EliahKagan, что ты думаешь о моем ответе? Можете ли вы рассмотреть это?
Сергей Колодяжный
да это плохо используйте ACL. смотрите мой ответ ниже
solsTiCe
Можете ли вы сообщить мне версию дистрибутива или версию сервера xorg? потому что xorg-server 2: 1.9.99.902-2ubuntu1 решил проблему.
Тохид Тамболи

Ответы:

4

Более гибкий способ управления разрешениями на файлы - это использование ACL .

sudo setfacl -m u:popey:rw /dev/input/eventx

Если вам действительно нужно сделать это постоянным, то вы можете использовать правила udev, которые устанавливают его для вашего устройства ввода событий

добавьте файл /etc/udev/rules.d/99-userdev-input.rules с:

KERNEL=="event*", SUBSYSTEM=="input", RUN+="/usr/bin/setfacl -m u:popey:rw $env{DEVNAME}"

Вы можете проверить разрешение ACL с

getfacl /dev/input/event*
солнцестояние
источник
2

Я не знаю, что изначально устанавливает разрешения для символьных устройств / dev / input / event *

но я знаю, что вы можете изменить эти разрешения с помощью программного обеспечения, которое установлено в вашей системе по умолчанию как часть coreutils. см команды man mknod.

Права доступа к моим устройствам событий:

crw-rw ---- 1 root input 13, 64 Apr 14 06:39 / dev / input / event0

Вот несколько примеров использования:

~$ sudo mknod lolwat c 4 64 
~$ sudo mknod lolwatnow c 4 64  -m 777
~$ ls -l lolwat*
crw-r--r-- 1 root root 4, 64 Apr 14 08:07 lolwat
crwxrwxrwx 1 root root 4, 64 Apr 14 08:08 lolwatnow

если вам нужна дополнительная информация для определения старших и младших номеров, посмотрите здесь

Теперь вы говорите, что разрешения неверны. Итак, что-то должно быть неправильно их настроено, и эта вещь должна запускаться с правами root. mknod может быть использован для создания устройства, но mkdev также может. Возможно, вы захотите взглянуть на разрешения любых действий по умолчанию для mkdev и mknod.

Как в моих примерах: / dev / input / event0 имеет разрешения crw-rw, но разрешения по умолчанию для lolwat были установлены на crw-r - r--

У меня есть некоторая неуверенность, диктует ли тип устройства оригинальные разрешения. Вы можете поэкспериментировать с этим, чтобы узнать.

Вот еще одна ссылка для получения дополнительной информации о mknod

j0h
источник
бормотает как root?
j0h
1

По сути, вам нужно добавить файл в /etc/udev/rules.d/(вы можете назвать его как-то так 75-input-events.conf)

И добавьте строки KERNEL=="eventX" , SUBSYSTEM=="input", MODE="0777"для каждого события в этот файл, где х это число. Например, у меня есть события от 0 до 9, так что я лично сделал бы для каждого из них. Последний ответ на эту тему предполагает, что вы могли бы добавить KERNEL==event*(то есть, с подстановочным знаком), тоже.

Сергей Колодяжный
источник
0

Я предлагаю вам установить приложение input-utils

sudo -i
apt-get update
apt-get install input-utils

Это набор утилит, которые полезны при работе со входным слоем ядра Linux (версия 2.6 и новее). Включены утилиты для вывода списка устройств ввода, известных ядру, отображения событий ввода, полученных устройством, а также запроса или изменения раскладок клавиатуры.

Интересующая команда:

sudo -i 
lsinput

Он выводит все устройства ввода и связанные сведения об устройстве.

Наблюдать за входными событиями можно с помощью команды, указав номер N-го устройства:

sudo -i
input-events <device number>

Затем можно вывести раскладку клавиатуры конкретного устройства события с помощью команды, указав номер N-го устройства:

sudo -i
input-kyb <device number>

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

Udev - менеджер устройств для ядра Linux. Он управляет узлами устройств в / dev и обрабатывает все действия в пользовательском пространстве при добавлении или удалении устройств.

Evdev - это общий интерфейс событий ввода в ядре Linux. Он обобщает необработанные события ввода от драйверов устройств и делает их доступными через символьные устройства в /dev/input/каталоге.

Каждый раз, когда происходит изменение в структуре устройства, ядро ​​испускает событие, которое получает udev. Затем udev следует правилам, указанным в каталогах /etc/udev/rules.d, /run/udev/rules.d и /lib/udev/rules.d.

На основе информации, содержащейся в событии, он находит правило или правила, которые ему необходимо вызвать, и выполняет необходимые действия.

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

kyodake
источник
0

В терминале запустить:

sudo nano -b /etc/rc.local

Перейдите к строке с надписью «exit 0» и введите строку над ней:

sudo chmod a + r / dev / input / event

Нажмите Ctrl + x, чтобы выйти. Он спросит вас, хотите ли вы сохранить. Хит у. Он спросит вас, что сохранить как. Просто нажмите Enter.

Теперь эта команда должна запускаться при каждой загрузке и, таким образом, давать вам разрешения для этой папки. Файл /etc/rc.local автоматически имеет права суперпользователя, поэтому вам не нужно вводить пароль для этого.

Полковник Трогдор
источник