Posso fazer um script sempre executar como root?

27

Como fazer um script ser executado como root, não importa quem o execute?

Eu li sobre setuid mas não sei como fazer isso.

Estou usando o Linux, o Ubuntu 12.04 LTS.

    
por HappyDeveloper 22.06.2012 / 21:29

2 respostas

29

Tenha muito cuidado: os scripts combinados com o setuid são perigosos!

Primeiro, dê uma olhada em esta pergunta / respostas , especialmente em esta resposta e aviso de segurança .

Se você ainda quiser executar o seu script com setuid set, então você pode escrever um programa C curto como wrapper e definir o setuid bit no binário compilado.

Exemplo de invólucro:

int main(void) {        
    setuid(0);
    clearenv();
    system("/absolute/path/to/your/script.sh");
}

Outra solução usando sudo (mencionado aqui ):

  1. Como root, impeça o acesso de gravação (e talvez outro) ao seu script:

    chown root /absolute/path/to/your/script.sh
    chmod 700 /absolute/path/to/your/script.sh
    
  2. Verifique se ninguém, exceto o root, pode substituir o script , por exemplo modificando os direitos de acesso da pasta pai:

    chown root /absolute/path/to/your/
    chmod 755 /absolute/path/to/your/
    
  3. Modifique os direitos de acesso do sudo em /etc/sudoers com visudo :

    ALL    ALL = (root) NOPASSWD: /absolute/path/to/your/script.sh
    

    Mais detalhes sobre as configurações (por exemplo, restringir o acesso a usuários ou grupos específicos) podem ser encontrados na página de manual do sudoers.

Depois, todos os usuários podem executar o script como root sem senha:

sudo /absolute/path/to/your/script.sh

Isso é semelhante ao uso da solução wrapper / setuid acima.

    
por 22.06.2012 / 23:06
4

A maneira mais fácil e segura é usar os bits SETUID nas permissões de arquivo. Dessa forma, as permissões de comando serão elevadas para as permissões do proprietário do arquivo.

para impedir que o script seja editado, não defina gravação para todos os bits.

    
por 01.11.2012 / 14:15