Problemas com o SUID

3

Eu tenho um comando simples que desejo ser capaz de executar como usuário, mas requer permissões de root. Eu suspeito que este é um caso para o "SUID" -bit, mas eu nunca usei isso.

Isso é o que eu tentei:

aioobe@e6510:~/bin$ sudo -s
root@e6510:~/bin# cat -> spindown_baydrive
#!/bin/bash
/sbin/hdparm -Y /dev/sdb
root@e6510:~/bin# chmod +x spindown_baydrive 
root@e6510:~/bin# chmod ug+s spindown_baydrive 
root@e6510:~/bin# exit
aioobe@e6510:~/bin$ ./spindown_baydrive 
/dev/sdb: Permission denied
aioobe@e6510:~/bin$


aioobe@e6510:~/bin$ ls -la spindown_baydrive 
-rwsr-sr-x 1 root root 37 2011-01-31 09:59 spindown_baydrive

Alguma sugestão?

    
por aioobe 31.01.2011 / 10:01

3 respostas

7

Este é exatamente o tipo de coisa que sudo foi projetado para. use visudo para editar os sudoers para permitir que o usuário não privilegiado execute seu script como root.

visudo

adicione uma linha como esta

aioobe ALL=NOPASSWD: /path/to/spindown_baydrive

e salve o arquivo

agora você pode executar o arquivo como root usando o comando

sudo /path/to/spindown_baydrive

Se você quiser exigir que uma senha seja inserida para executar o script, altere a linha de sudoers acima para

aioobe ALL= /path/to/spindown_baydrive

    
por 31.01.2011 / 11:25
4

Você pode deixar o usuário executar o script como root via sudo, configurando-o em / etc / sudoers, sem forçar o usuário a digitar sua senha (veja a opção NOPASSWD).

Para suid bash scripts, leia mais aqui: (Ubuntu) setuid bash não funciona

    
por 31.01.2011 / 10:03
1

-rwsr-sr-x 1 root root 37 2011-01-31 09:59 spindown_baydrive

Em 37 bytes, estou supondo que este é um script de shell. Ao executar como setuid, o shell inicia novos processos como o uid original. Se você procurar por 'shell script setuid' você verá muitas explicações porque isso não funciona - e muitas maneiras de resolver o problema, as mais óbvias estão usando o sudo ou escrevendo um programa wrapper em C.

    
por 31.01.2011 / 11:17

Tags