Como suid iwconfig no Debian wheezy?

2

Eu tenho um script em execução na minha própria conta de usuário que cuida de todos os tipos de interfaces sem fio. Ele (mais ou menos) inteligentemente liga e desliga a rede sem fio e assim por diante. No entanto, ele faz isso chamando ferramentas como iwconfig e hciconfig para trazer os dispositivos para cima e para baixo. Mas como eles exigem privilégios de superusuário, decidi criar uma cópia desses binários na minha pasta de script pessoal e definir o sinalizador suid (sou o único que pode ler e executar esse diretório). Portanto, as permissões desses binários parecem -rwsr-x--- e pertencem a root e meu próprio grupo primário.

No entanto, o bit suid parece ser completamente ignorado porque recebo o seguinte resultado ao executar esse binário:

me@host:~/scripts/suid$ stat iwconfig
  File: 'iwconfig'
  Size: 26968       Blocks: 72         IO Block: 4096   regular file
Device: 15h/21d Inode: 4194732     Links: 1
Access: (4750/-rwsr-x---)  Uid: (    0/    root)   Gid: ( 1000/   me)
Access: 2011-08-24 04:15:39.008148182 +0200
Modify: 2013-02-09 21:25:47.777488386 +0100
Change: 2013-03-12 15:55:20.765681857 +0100
 Birth: -
me@host:~/scripts/suid$ ./iwconfig wlan0 txpower off
Error for wireless request "Set Tx Power" (8B26) :
    SET failed on device wlan0 ; Operation not permitted.

Eu também tentei configurar o grupo para root, o bit guid e tornando o mundo dos binários executável e legível. Com o mesmo resultado.

Então, por que isso e como posso corrigi-lo?

    
por bitmask 12.03.2013 / 15:59

1 resposta

5

Seu diretório inicial provavelmente está montado com o sinalizador nosuid . Você pode verificar procurando em /proc/mounts . Se você não tiver certeza de qual sistema de arquivos contém seu diretório pessoal, df ~ dirá a você (e então você pode usar o grep para encontrá-lo facilmente em /proc/mounts ).

Uma alternativa melhor, no entanto, é usar o sudo com o sinalizador NOPASSWD . Por exemplo, execute (como root) visudo -f /etc/sudoers.d/local-iwconfig e adicione uma linha como:

your-user-name ALL=(root) NOPASSWD: /sbin/iwconfig

Você também pode bloquear mais as coisas com o sudo. Por exemplo, você pode especificar a linha de comando completa a ser executada, incluindo argumentos (e, em seguida, ter várias entradas, uma por linha de comando). Para mais detalhes, consulte a página de manual do sudoers (5) .

    
por 12.03.2013 / 20:30