.png)
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 $EUID
mostra 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 $EUID
conté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.