Sim, você pode escrever uma regra do udev.
Em /etc/udev/rules.d
criar um arquivo 30-mydevice.rules
(o número deve ser de 0 a 99 e decide apenas sobre a ordem de execução do script; o nome realmente não importa, apenas o descritivo; a .rules
extensão é necessária)
Neste exemplo, estou assumindo que seu dispositivo é baseado em USB e você sabe que é fornecedor e ID do produto (pode ser verificado usando lsusb -v
), e você está usando o mydevice
grupo em que o usuário precisa estar para usar o dispositivo. Esse deve ser o conteúdo do arquivo nesse caso:
SUBSYSTEM=="usb", SYSFS{idVendor}=="0123", SYSFS{idProduct}=="4567", ACTION=="add", GROUP="mydevice", MODE="0664"
MODE
igual a 0664 permite que o dispositivo seja gravado por seu proprietário (provavelmente raiz) e pelo grupo definido.
30
no nome do arquivo?Uma maneira é adicionar o usuário ao "grupo de desvio" correspondente. Há toda uma gama de grupos para vários tipos de dispositivos (disco, disquete, tty, vídeo, cdrom, ...) no Linux, para que você possa adicionar o usuário ao grupo correspondente em / etc / group.
Outra maneira é criar um "pseudo-usuário" (por exemplo, o usuário dos jogos). Você adiciona esse usuário aos grupos de dispositivos que deveria ter. Finalmente, você altera o proprietário de certos programas (como um programa para digitalizar imagens) para esse usuário e define "chmod u + s". Isso fará com que o programa seja executado como pseudo-usuário - não como usuário real, tendo acesso aos dispositivos. Você pode usar o grupo de programas para limitar qual usuário pode executar o programa.
Por fim, você pode definir o grupo de programas que precisam de um dispositivo específico para o grupo de dispositivos e definir "chmod g + s". Isso fará com que o programa seja executado com os direitos do grupo (além do direito do usuário normal), permitindo assim o acesso estendido ao dispositivo.
fonte
Sim, você pode, mas primeiro precisa de permissão de root. Desde o linux 2.2, ele possui recursos, use permissões de root divididas. Com sob a lista, você pode usar:
setcap cap_net_raw,cap_net_admin=eip xxxx
xxxx é qualquer programa executável, você pode chamar a libpcap consigo mesmo.
fonte