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

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

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

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

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

Eu sei que deve haver uma solução fácil, só não consegui encontrá-la pesquisando no Google.

Responder1

Para obter o uid efetivo, use este comando:

id -u

Se o resultado for '0', o script está sendo executado como root ou usando sudo. Você pode executar a verificação fazendo algo como:

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

Responder2

Presumo que você saiba disso alterando a propriedade para root

chown root:root file

e definindo as permissões para 700

chmod 700 file

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

Mas vou postar esta resposta para completar.

Responder3

A variável bash $EUIDmostra o UID efetivo em que o script está sendo executado. Se você quiser ter certeza de que o script será executado como root, verifique se $EUIDcontém o valor 0 ou não:

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

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

Responder4

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ê deseja apenas informar ao usuário que qualquer uma das sugestões de uid está bem, mas elas são tão úteis quanto pneus de cavalo como precaução de segurança - não há nada que impeça um usuário de copiar o script, retirando a instrução if, e executá-lo de qualquer maneira.

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

informação relacionada