Um usuário root não precisa ser nomeado "root". whoami
retorna o primeiro nome de usuário com o ID do usuário 0
. $USER
conté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 -u
para o ID do usuário efetivo , não -r
para o ID do usuário real . As permissões são determinadas pelo ID do usuário efetivo , não o real .
Testes
/etc/passwd
contém os seguintes nomes de usuário com o ID do usuário 0
na 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 -u
aprovados.
O script atualizado ficaria assim:
#!/bin/bash
if ! [ $(id -u) = 0 ]; then
echo "I am not root!"
exit 1
fi