Sí, puedes escribir una regla de udev.
En /etc/udev/rules.d
hacer un archivo 30-mydevice.rules
(el número debe ser de 0 a 99 y decide solo sobre el orden de ejecución del script; el nombre realmente no importa, solo tiene que ser descriptivo; .rules
sin embargo, se requiere extensión)
En este ejemplo, supongo que su dispositivo está basado en USB y sabe que es el proveedor y la identificación del producto (se puede verificar usando lsusb -v
), y está usando el mydevice
grupo en el que debe estar su usuario para usar el dispositivo. Este debería ser el contenido del archivo en ese caso:
SUBSYSTEM=="usb", SYSFS{idVendor}=="0123", SYSFS{idProduct}=="4567", ACTION=="add", GROUP="mydevice", MODE="0664"
MODE
igual a 0664 permite que el dispositivo sea escrito por su propietario (probablemente root) y el grupo definido.
30
en el nombre del archivo?Una forma es agregar al usuario al "grupo de dispositivos" correspondiente. Hay una amplia gama de grupos para varios tipos de dispositivos (disco, disquete, tty, video, cdrom, ...) en Linux, por lo que puede agregar el usuario al grupo correspondiente en / etc / group.
Otra forma es hacer un "pseudousuario" (por ejemplo, el usuario de los juegos). Agrega este usuario a los grupos de dispositivos que debería tener. Finalmente, cambia el propietario de ciertos programas (como un programa para escanear imágenes) a este usuario y establece "chmod u + s". Esto hará que el programa se ejecute como el pseudousuario, no como el usuario real, por lo que tendrá acceso a los dispositivos. Puede usar el grupo de programas para limitar qué usuario puede ejecutar el programa.
Finalmente, puede configurar el grupo de programas que necesitan un dispositivo específico para el grupo de dispositivos y configurar "chmod g + s". Esto hará que el programa se ejecute con los derechos del grupo (además del derecho del usuario normal que lo ejecuta), lo que permite un acceso extendido al dispositivo.
fuente
Sí, puedes, pero necesitas permiso de root al principio. Desde linux 2.2, tiene capacidades, utilícelo dividiendo permisos de root. Con debajo de la lista, puede usar:
setcap cap_net_raw,cap_net_admin=eip xxxx
xxxx es cualquier programa ejecutable, puedes llamar a libpcap contigo mismo.
fuente