Como retroativamente fazer um script rodar como root?

4

Estou escrevendo um script de shell, que precisa ser executado com privilégios de root.

Posso verificar se um usuário tem privilégios de root com sudo -nv || echo "no sudo" , mas isso não me ajuda, se as credenciais dele ainda estiverem armazenadas em cache por sudo , mas ele não chamou meu script com ele. Então não tenho como reagir a um usuário, não chamando meu script com sudo.

Eu poderia colocar sudo na frente de todos os comandos que precisam, então verificar se o usuário tem privilégios de root seria suficiente, mas parece-me que deveria haver uma solução melhor.

Estou procurando um comando, que eu possa colocar no meu script, que peça ao usuário privilégios de root e, se fornecido, execute o restante do script, como se o usuário o chamasse com privilégios de root no primeiro. lugar.

O que eu quero:

#!/bin/bash

if ! command; then        # what I'm looking for
    echo "This script needs root privileges."
    exit 1
fi

mv /bin/cmd1 /bin/cmd2    # requires root

Editado 2 vezes

    
por Minix 11.12.2014 / 14:31

2 respostas

6

Teste se você é root e, se não, reinicie com sudo , por exemplo:

#! /bin/bash

if [[ $EUID -ne 0 ]];
then
    exec sudo /bin/bash "$0" "$@"
fi
    
por 11.12.2014 / 15:38
1

Acredito que o que você está tentando realizar é garantir que o usuário execute um script como root.

Para fazer isso, você não deseja adicioná-lo ao script, mas apenas alterar a propriedade do arquivo e as permissões de execução. Isso pode ser feito com:

# chmod og-rx yourscript.sh
# chown root:root yourscript.sh

(por muru =])

ou

# chmod 750 yourscript.sh
# chown root:root yourscript.sh

(cremefraiche)

Agora que o arquivo pertence a root e as permissões estão definidas corretamente, ele não pode ser aberto por um usuário, a menos que ele sudo.

    
por 11.12.2014 / 14:40