Portál AbcLinuxu, 10. května 2025 22:22
Přepsal jsem program, který byl původně napsán pro windows a používal ovladače z windows tak, aby šel přeložit a spustit pod linuxem. Program pracuje se zařízením připojeným na USB. Pod windows na to byl ovladač a knihovna pro ovládání přímo od výrobce, ale pod linuxem na to používám knihovnu libusb (nebudu psát modul do jádra), která umožnuje pracovat obyčejným programům se zařízením připojeným na USB.
Problém je v tom, že pokud se volají funkce z libusb musí program běžet s právy roota, aby to celé fungovalo (alespoň se domnívám že to tak je, protože jinak některé funkce z libusb vrací chybu místo úspěšného provedení funkce). Z toho tedy plyne potenciální nebezpečí. Chci se zeptat, jak co nejjednodušeji a nejefektivněji zařídit to, aby program pracoval s právy roota pouze pokud volá funkce z libusb. Napadlo mě používat fce getuid, geteuid, seteuid a setuid, programu nastavit suid bit, vlastníka a skupinu root.
Nikdy jsem nic podobného neprogramoval, tak potřebuji poradit jak na to a hlavně jak to udělat správně. Případně jak to celé vyřešit jinak. Díky.
Možná mi něco uniká nebo nechápu podstatu něčeho základního :(Ano, evidentně.
No, problém je právě v tom, že nepoužívám pro komunikaci se zařízením žádný ovladač z jádraTo bude asi ono, není mi jasné z čeho vzniká tento názor. Přeci se používá ovladač na USB, ne? Nebo něco nechápu a ono záhadné zařízení je řadič USB?
$ echo 'nejaky_nazev 0x0003 vendor product'\ ' 0x0000 0x0000 0x00 0x00 '\ '0x00 0x00 0x00 0x00'\ ' 0x00000000' > /etc/hotplug/usb/nejaky_nazev.usermap $ cat > /etc/hotplug/usb/nejaky_nazev <<EOT #!/bin/bash GROUP=skupina if [ "$ACTION" = "add" ] && [ -f "$DEVICE" ] then # check if $GROUP really exists if getent group $GROUP > /dev/null; then chmod 660 "$DEVICE" chown root.$GROUP "$DEVICE" fi fi EOT $ chmod +x /etc/hotplug/usb/nejaky_nazev
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.