Bash Scripting: Requer que o script seja executado como root (ou com sudo)

24

Estou tentando escrever um script bash (no Ubuntu) que fará backup de um diretório usando o tar.

Como posso fazer uma verificação no script para que ele possa ser executado apenas como root (ou com o sudo)?

Por exemplo, se um usuário executar o script, ele deverá dizer que esse script deve ser executado com privilégios sudo e, em seguida, encerrado. Se o script for executado como root, ele continuará após a verificação.

Eu sei que tem que haver uma solução fácil, eu só não consegui encontrá-lo pesquisando.

    
por Cory Plastek 08.07.2009 / 17:30

7 respostas

35

Para puxar o uid efetivo use este comando:

id -u

Se o resultado for "0", o script será executado como root ou usando sudo. Você pode executar o cheque fazendo algo como:

if [[ $(/usr/bin/id -u) -ne 0 ]]; then
    echo "Not running as root"
    exit
fi
    
por 08.07.2009 / 17:36
16

Suponho que você saiba disso alterando a propriedade para raiz

chown root:root file

e definindo as permissões para 700

chmod 700 file

você realizará a mesma coisa - sem a sugestão de ser executado como sudo.

Mas vou postar esta resposta para completar.

    
por 08.07.2009 / 17:43
2

Qual é o seu objetivo aqui, informar ao usuário que ele deve executar o script como root ou como algum tipo de precaução de segurança?

Se você quiser apenas informar o usuário do que qualquer uma das sugestões de uid, tudo bem, mas elas são tão úteis quanto os pneus em um cavalo como precaução de segurança - não há nada que impeça que um usuário copie o script, tirando o se declaração, e executá-lo de qualquer maneira.

Se este for um problema de segurança, o script deve ser definido como 700, de propriedade root: root, para que não seja legível ou executável por qualquer outro usuário.

    
por 08.07.2009 / 18:02
2

Você também pode usar o comando whoami.

if [ ! "'whoami'" = "root" ]
then
    echo "\nPlease run script as root."
    exit 1
fi
    
por 22.07.2009 / 09:12
1

A variável bash $EUID mostra o UID efetivo no qual o script está sendo executado, se você quiser garantir que o script seja executado como root, verifique se $EUID contém o valor 0 ou não:

if [ $EUID -ne 0 ]; then
    echo "$0 is not running as root. Aborting."
    exit 2
fi

Isso é melhor que a solução com /usr/bin/id (para scripts bash!) porque não requer um comando externo.

    
por 24.03.2015 / 13:56
0

Uma maneira simples de tornar o script somente executável pelo root é iniciar o script com a linha:% #!/bin/su root

    
por 13.08.2016 / 20:55
-1

"#! / bin / su root" permite que os usuários no modo de superusuário executem o script sem usar a senha de root. Se você quiser que os superusuários executem o script com resultados de root, isso acontece.

    
por 15.05.2017 / 18:12