Tak, możesz napisać regułę udev.
W /etc/udev/rules.d
stworzyć plik 30-mydevice.rules
(liczba musi być od 0 do 99 i decyduje tylko o skrypcie stanie gotowym do jazdy, nazwa nie ma znaczenia, ma tylko charakter opisowy; .rules
rozszerzenie jest konieczne, chociaż)
W tym przykładzie zakładam, że twoje urządzenie jest oparte na USB i wiesz, że to jego identyfikator dostawcy i produktu (można to sprawdzić za pomocą lsusb -v
), a ty używasz mydevice
grupy, w której użytkownik musi być, aby korzystać z urządzenia. W takim przypadku powinna to być zawartość pliku:
SUBSYSTEM=="usb", SYSFS{idVendor}=="0123", SYSFS{idProduct}=="4567", ACTION=="add", GROUP="mydevice", MODE="0664"
MODE
równa 0664 pozwala na zapisanie urządzenia przez jego właściciela (prawdopodobnie root) i zdefiniowaną grupę.
30
w nazwie pliku?Jednym ze sposobów jest dodanie użytkownika do odpowiedniej „grupy urządzeń”. Istnieje cała gama grup dla różnych rodzajów urządzeń (dysk, dyskietka, tty, wideo, cdrom, ...) pod Linuksem, więc możesz dodać użytkownika do odpowiedniej grupy w / etc / group.
Innym sposobem jest stworzenie „pseudo-użytkownika” (np. Użytkownika gry). Dodajesz tego użytkownika do grup urządzeń, które powinien mieć. Na koniec zmieniasz właściciela niektórych programów (np. Programu do skanowania obrazów) na tego użytkownika i ustawiasz „chmod u + s”. Spowoduje to, że program będzie działał jako pseudo-użytkownik - nie rzeczywisty użytkownik, dzięki czemu będzie miał dostęp do urządzeń. Możesz użyć grupy programów, aby ograniczyć, który użytkownik może uruchomić program.
Na koniec możesz ustawić grupę programów wymagających określonego urządzenia na grupę urządzeń i ustawić „chmod g + s”. Spowoduje to, że program będzie działał z prawami grupy (oprócz prawa zwykłego użytkownika, który go uruchamia), umożliwiając w ten sposób rozszerzony dostęp do urządzenia.
źródło
Tak, możesz, ale najpierw potrzebujesz uprawnień roota. Od Linuksa 2.2 ma on Możliwości, użyj go, podziel uprawnienia roota. Za pomocą tej listy możesz użyć:
setcap cap_net_raw,cap_net_admin=eip xxxx
xxxx to dowolny program wykonywalny, możesz sam wywołać libpcap.
źródło