Indagamos por distintos espacios para brindarte la solución para tu dilema, si tienes alguna inquietud puedes dejarnos tu duda y responderemos con gusto, porque estamos para servirte.
Solución:
#!/bin/bash
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root"
exit 1
fi
Un usuario raíz no tiene que llamarse “raíz”. 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 tienen un nombre diferente.
El único programa confiable para verificar si la cuenta está registrada como root o no:
id -u
yo suelo -u
Para el eficaz ID de usuario, no -r
Para el real identificación de usuario Los permisos están determinados por el eficaz ID de usuario, no el real una.
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 un vacío string si el programa se inició en un entorno vacío, por ejemploenv -i sh -c 'echo $USER'
)id -u
:0
Como puede ver, los otros programas fallaron en esta verificación, soloid -u
pasó.
El script actualizado se vería así:
#!/bin/bash
if ! [ $(id -u) = 0 ]; then
echo "I am not root!"
exit 1
fi
Como dijo @Lekensteyn, debe usar una identificación de usuario efectiva. no necesitas llamar id -u
en bash:
#!/bin/bash
if [[ $EUID -ne 0 ]]; then
echo "You must be root to do this." 1>&2
exit 100
fi
La sugerencia de @geirha de los comentarios usa evaluación aritmética:
#!/bin/bash
if (( EUID != 0 )); then
echo "You must be root to do this." 1>&2
exit 100
fi
Eres capaz de añadir valor a nuestra información cooperando tu experiencia en las críticas.