Co decyduje o uprawnieniach w / dev?

11

Mam błąd, w którym uprawnienia /dev/input/event*są nieprawidłowe, więc gdy korzystam z Mumble , aplikacja nie może wykryć naciśnięć klawiszy. Jeśli uruchomię następujące polecenie, „rozwiązuje” to problem, ale chciałbym naprawić na stałe.

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

Co decyduje o uprawnieniach /dev/input/event*i jak mogę je na stałe ustawić?

Popey
źródło
6
Pamiętaj, że jeśli dajesz „wszystkim” uprawnienia do czytania, /dev/input/event/*to zasadniczo dajesz wszystkim dostęp do wąchania klawiatury, na przykład wpisywanych haseł. W systemie z jednym użytkownikiem może to nie mieć większego znaczenia, ale nawet w systemie z jednym użytkownikiem zwykle używamy użytkowników systemu jako dodatkowej warstwy bezpieczeństwa na wypadek, gdyby jakiś komponent został naruszony, i na przykład dając nobodyużytkownikowi dostęp do klawiatury strumień wejściowy osłabiasz tę ochronę. Chociaż może to „naprawić” Mumble, nie jest to odpowiednie ogólne rozwiązanie twojego problemu. Powinien być lepszy sposób.
Robie Basak,
3
@popey Czy możesz powiedzieć więcej o tym, dlaczego uprawnienia do węzłów w /dev/inputsą nieprawidłowe i jakie są obecnie prawa własności i uprawnienia (być może z wynikiem ls -l)? Czy problem polega na tym, że inputgrupa nie ma uprawnień do odczytu (lub że nie jest jej właścicielem)? W moim systemie pliki zdarzeń mają root:inputwłasność i zarówno użytkownicy, jak i właściciele grup mogą je czytać. Jeśli tego nie masz, być może powinieneś spróbować skonfigurować to w ten sposób, zamiast pozwolić wszystkim na ich przeczytanie. Jeśli to masz, Mumble może wystartować z mocami inputgrupy.
Eliah Kagan
@EliahKagan co sądzisz o mojej odpowiedzi? czy możesz to przejrzeć?
Sergiy Kolodyazhnyy
tak, to źle. użyj ACL. patrz moja odpowiedź poniżej
solsTiCe 15.04.15
Czy możesz dać mi znać wersję dystrybucji lub wersję serwera xorg? ponieważ xorg-server 2: 1.9.99.902-2ubuntu1 rozwiązał problem.
Tohid Tamboli 16.04.15

Odpowiedzi:

4

Bardziej elastycznym sposobem zarządzania uprawnieniami do plików jest użycie ACL .

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

Jeśli naprawdę chcesz, aby to stało się trwałe, możesz użyć reguł udev, które ustawiają to dla twojego urządzenia wejściowego zdarzenia

dodaj plik /etc/udev/rules.d/99-userdev-input.rules z:

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

możesz sprawdzić uprawnienia ACL za pomocą

getfacl /dev/input/event*
przesilenie dnia z nocą
źródło
2

Nie wiem, co początkowo ustawia uprawnienia urządzeń znakowych / dev / input / event *

ale wiem, że możesz zmienić te uprawnienia za pomocą oprogramowania domyślnie zainstalowanego w systemie jako część coreutils. zobacz polecenie man mknod.

Uprawnienia moich urządzeń zdarzeń to:

crw-rw ---- 1 wejście root 13, 64 kwietnia 14 06:39 / dev / input / event0

oto kilka przykładów użycia:

~$ 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

jeśli potrzebujesz więcej informacji na temat decydowania o liczbach głównych i mniejszych, spójrz tutaj

Teraz mówisz, że uprawnienia są nieprawidłowe. Więc coś musi je źle ustawiać i to musi działać jako root. mknod może być użyty do stworzenia urządzenia, ale mkdev też. możesz przyjrzeć się uprawnieniom domyślnych akcji dla mkdev i mknod.

Jak w moich przykładach: / dev / input / event0 ma uprawnienia crw-rw, ale domyślne uprawnienia lolwat zostały ustawione na crw-r - r--

Mam pewną niepewność, czy typ urządzenia dyktuje oryginalne uprawnienia. Możesz się z tym eksperymentować, aby się dowiedzieć.

Oto kolejny link, aby uzyskać więcej informacji o mknod

j0h
źródło
mamrocze działa jako root?
j0h
1

Zasadniczo musisz dodać plik /etc/udev/rules.d/(możesz nazwać go jak 75-input-events.conf)

I dodaj wiersze KERNEL=="eventX" , SUBSYSTEM=="input", MODE="0777"dla każdego zdarzenia do tego pliku, gdzie x jest liczbą. Na przykład mam zdarzenia od 0 do 9, więc osobiście zrobiłbym dla każdego z nich. Ostatnia odpowiedź w tym wątku sugeruje, że mógłbyś również dodać KERNEL==event*(tj. Z użyciem dzikiej karty).

Sergiy Kolodyazhnyy
źródło
0

Moją sugestią jest zainstalowanie narzędzi wejściowych aplikacji

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

Jest to zbiór narzędzi przydatnych podczas pracy z warstwą wejściową jądra Linux (wersja 2.6 i nowsze). Zawarte są narzędzia do wyświetlania listy urządzeń wejściowych znanych w jądrze, wyświetlania zdarzeń wejściowych odbieranych przez urządzenie oraz sprawdzania lub modyfikowania map klawiatury.

Poleceniem zainteresowania jest:

sudo -i 
lsinput

Zrzuca wszystkie urządzenia wejściowe i powiązane szczegóły dotyczące urządzenia.

Za pomocą polecenia można obserwować zdarzenia wejściowe, określając N-ty numer urządzenia:

sudo -i
input-events <device number>

Następnie można zrzucić mapowanie klawiatury określonego urządzenia zdarzenia za pomocą polecenia, określając N-ty numer urządzenia:

sudo -i
input-kyb <device number>

Za pomocą tych narzędzi można debugować system, aby sprawdzić, czy dane wejściowe generują oczekiwane kody zdarzeń, a tym samym pomóc rozwiązać problemy, takie jak dlaczego klucze nie działają lub są niepoprawnie mapowane.

Udev jest menedżerem urządzeń dla jądra Linux. Zarządza węzłami urządzeń w / dev i obsługuje wszystkie działania w przestrzeni użytkownika podczas dodawania lub usuwania urządzeń.

Evdev to ogólny interfejs zdarzeń wejściowych w jądrze Linuksa, który uogólnia surowe zdarzenia wejściowe ze sterowników urządzeń i udostępnia je za pośrednictwem urządzeń znakowych w /dev/input/katalogu.

Za każdym razem, gdy nastąpi zmiana w strukturze urządzenia, jądro emituje uevent, który jest przechwytywany przez udev. udev następnie postępuje zgodnie z regułami zadeklarowanymi w katalogach /etc/udev/rules.d, /run/udev/rules.d i /lib/udev/rules.d.

Na podstawie informacji zawartych w zdarzeniu wyszukuje regułę lub reguły, które należy uruchomić, i wykonuje wymagane działania.

Działania te mogą polegać na tworzeniu lub usuwaniu plików urządzeń, ale mogą także powodować ładowanie określonych plików oprogramowania układowego do pamięci jądra.

Kyodake
źródło
0

W biegu terminalowym:

sudo nano -b /etc/rc.local

Zejdź do linii z napisem „exit 0”, a w linii powyżej wpisz:

sudo chmod a + r / dev / input / event

Naciśnij Ctrl + x, aby wyjść z tego. Zapyta Cię, czy chcesz zapisać. Hit y. Zapyta Cię, co zapisać jako. Po prostu naciśnij Enter.

Teraz to polecenie powinno się uruchamiać przy każdym uruchomieniu, a tym samym dać ci uprawnienia do tego folderu. Plik /etc/rc.local automatycznie ma uprawnienia roota, więc nie musisz wprowadzać hasła, aby to zrobić.

Pułkownik Trogdor
źródło