2009-10-29 14 views
11

Tengo un script bash que instala algún software. Quiero fallar lo antes posible si no está siendo ejecutado por root. ¿Cómo puedo hacer eso?bash: error si el script no está siendo ejecutado por root

+1

Aunque me gustaría general * * considerar este comportamiento tonto: * Vamos a funcionar hasta que fallan permisos *; el sistema puede configurarse de modo que la operación se pueda realizar con éxito como el usuario actual y al forzar la eliminación de esta opción se eliminó [He tenido que corregir scripts que han hecho suposiciones similares antes]. Por otro lado, soy mucho más un caso para * prevenir * el acceso o mostrar una gran advertencia si se ejecuta como root. –

+0

Deberías intentar usar sudo. En Linux, cuando instale cualquier cosa, debe ser root para evitar que los usuarios normales instalen algo que pueda dañar el sistema. – masterLoki

+1

Quiere que su script tenga en cuenta que algunas personas pueden olvidar o desconocer sudo (u otros medios de escalada de privilegios).) Es una buena práctica verificar la cordura del tiempo de ejecución antes de intentar hacer cualquier otra cosa. –

Respuesta

27
#!/bin/bash 
if [ "$(id -u)" != "0" ]; then 
    echo "This script must be run as root" 1>&2 
    exit 1 
fi 

Fuente: http://www.cyberciti.biz/tips/shell-root-user-check-script.html

+0

o, para mantenerlo más corto, verifique el UID env: si [[$ UID -ne 0]]; luego – zlack

+1

@zlack $ UID dará el UID del usuario original si el script se ejecuta mediante 'sudo', mientras que David considerará que el script se ejecuta como root. Dependiendo de lo que estés haciendo, David probablemente sea mejor. – pr1001

+0

Como dice pr1001, el UID no funcionará si el usuario ejecuta el script usando sudo, pero EUID funcionará bien. – Tom

5

Después de cavar en torno a esto, el consenso parece ser que no hay necesidad de utilizar id -u en bash, como se establecerá el (a partir del identificador de usuario) Variable EUID. A diferencia de UID, el EUID será 0 cuando el usuario es root o usando sudo. Al parecer, esto es alrededor de 100 veces más rápido que ejecutar id -u:

#!/bin/bash 
if ((EUID != 0)); then 
    echo "You must be root to do this." 1>&2 
    exit 1 
fi 

Fuente: https://askubuntu.com/questions/30148/how-can-i-determine-whether-a-shellscript-runs-as-root-or-not

+2

esto no funciona en el shell Bourne sin embargo. ¿Tiene alguna solución estrictamente compatible con POSIX? –

Cuestiones relacionadas