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ć?


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*

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


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).


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.


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ć.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.