Un usuario root no tiene que llamarse "root". whoami
devuelve el primer nombre de usuario con ID de usuario 0
. $USER
contiene 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 -u
para la identificación de usuario efectiva , no -r
para la identificación de usuario real . Los permisos están determinados por la identificación de usuario efectiva , no por la real .
Pruebas
/etc/passwd
contiene los siguientes nombres de usuario con ID de usuario 0
en 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 -u
pasaron.
El script actualizado se vería así:
#!/bin/bash
if ! [ $(id -u) = 0 ]; then
echo "I am not root!"
exit 1
fi