Un usuario root no tiene que llamarse "root". whoamidevuelve el primer nombre de usuario con ID de usuario 0. $USERcontiene el nombre del usuario conectado, que puede tener ID de usuario 0, pero tener un nombre diferente.
El único programa confiable para verificar si la cuenta ha iniciado sesión como root o no:
id -u
Lo uso -upara la identificación de usuario efectiva , no -rpara la identificación de usuario real . Los permisos están determinados por la identificación de usuario efectiva , no por la real .
Pruebas
/etc/passwdcontiene los siguientes nombres de usuario con ID de usuario 0en el orden dado:
rootx
root2
Conectado como root2, da los siguientes resultados:
whoami: rootx
echo $USER: root2(esto devuelve una cadena vacía si el programa se inició en un entorno vacío, por ejemplo env -i sh -c 'echo $USER')
id -u: 0
Como puede ver, los otros programas fallaron en esta verificación, solo id -upasaron.
El script actualizado se vería así:
#!/bin/bash
if ! [ $(id -u) = 0 ]; then
echo "I am not root!"
exit 1
fi