Bash Scripting: requiere que el script se ejecute como root (o con sudo)

Bash Scripting: requiere que el script se ejecute como root (o con sudo)

Estoy intentando escribir un script bash (en Ubuntu) que haga una copia de seguridad de un directorio usando tar.

¿Cómo puedo verificar el script para que solo se pueda ejecutar como root (o con sudo)?

Por ejemplo, si un usuario ejecuta el script, debería decir que este script debe ejecutarse con privilegios sudo y luego salir. Si el script se ejecuta como root, continuará después de la verificación.

Sé que tiene que haber una solución fácil, pero no he podido encontrarla buscando en Google.

Respuesta1

Para extraer el uid efectivo use este comando:

id -u

Si el resultado es '0', entonces el script se ejecuta como root o usa sudo. Puede ejecutar la verificación haciendo algo como:

if [[ $(/usr/bin/id -u) -ne 0 ]]; then
    echo "Not running as root"
    exit
fi

Respuesta2

Supongo que sabes que al cambiar la propiedad a root

chown root:root file

y estableciendo los permisos a 700

chmod 700 file

logrará lo mismo, sin la sugerencia de ejecutar como sudo.

Pero publicaré esta respuesta para que esté completa.

Respuesta3

La variable bash $EUIDmuestra el UID efectivo en el que se ejecuta el script. Si desea asegurarse de que el script se ejecute como root, verifique si $EUIDcontiene el valor 0 o no:

if [[ $EUID -ne 0 ]]; then
    echo "$0 is not running as root. Try using sudo."
    exit 2
fi

Esto es mejor que la solución con /usr/bin/id(¡para scripts bash!) porque no requiere un comando externo.

Respuesta4

¿Cuál es su objetivo aquí, informar al usuario que debe ejecutar el script como root o como algún tipo de precaución de seguridad?

Si solo desea informar al usuario que cualquiera de las sugerencias de uid está bien, pero son tan útiles como neumáticos en un caballo como medida de seguridad: no hay nada que impida que un usuario copie el script, elimine la declaración if, y ejecutarlo de todos modos.

Si se trata de un problema de seguridad, entonces el script debe configurarse en 700, propiedad de root:root, para que ningún otro usuario pueda leerlo ni ejecutarlo.

información relacionada