2011-06-15 23 views
11

Tengo un script que deseo que se ejecute con privilegios su, pero el comando de script interesante que fallará llega muy tarde en el script, por lo que me gustaría una prueba limpia para determinar si el script fallará sin capacidades SU.¿Cómo puedo determinar si un script de shell se está ejecutando con permisos de raíz?

¿Cuál es una buena manera de hacer esto para bash, sh y/o csh?

+3

Ha intentado http: // www.cyberciti.biz/tips/shell-root-user-check-script.html? –

+0

Eso se ve bastante bien. ¿Por qué no le diste esto como una respuesta? :-) –

Respuesta

12

bash/sh:

#!/bin/bash 
# (Use #!/bin/sh for sh) 
if [ `id -u` = 0 ] ; then 
     echo "I AM ROOT, HEAR ME ROAR" 
fi 

CSH:

#!/bin/csh 
if (`id -u` == "0") then 
     echo "I AM ROOT, HEAR ME ROAR" 
endif 
+3

Este código no funcionará en un shell POSIX ('/ bin/sh'). El comando '[[' y la variable 'EUID' son específicos de bash; no están definidos en la especificación POSIX. –

+1

También #!/Bin/bash casi siempre está mal. Si debe usar bash (que en realidad no es el preferido) use/usr/bin/env bash –

+1

Parece que bash ** es ** preferido por las personas que mencionan específicamente bash en sus preguntas. – jwg

7

podría añadir algo así como que, al comienzo de su script:

#!/bin/sh 

ROOTUID="0" 

if [ "$(id -u)" -ne "$ROOTUID" ] ; then 
    echo "This script must be executed with root privileges." 
    exit 1 
fi 
Cuestiones relacionadas