Um usuário root não precisa ser nomeado "root". whoamiretorna o primeiro nome de usuário com o ID do usuário 0. $USERcontém o nome do usuário conectado, que pode ter um ID de usuário 0, mas um nome diferente.
O único programa confiável para verificar se a conta está logada como root ou não:
id -u
Eu uso -upara o ID do usuário efetivo , não -rpara o ID do usuário real . As permissões são determinadas pelo ID do usuário efetivo , não o real .
Testes
/etc/passwdcontém os seguintes nomes de usuário com o ID do usuário 0na ordem especificada:
rootx
root2
Conectado como root2, fornece os próximos resultados:
whoami: rootx
echo $USER: root2(isso retorna uma string vazia se o programa foi iniciado em um ambiente vazio, por exemplo env -i sh -c 'echo $USER')
id -u: 0
Como você pode ver, os outros programas falharam nessa verificação, somente foram id -uaprovados.
O script atualizado ficaria assim:
#!/bin/bash
if ! [ $(id -u) = 0 ]; then
echo "I am not root!"
exit 1
fi