Saltar al contenido

¿Cómo puede un script verificar si se está ejecutando como root?

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 0pero 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 root2da 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 ejemplo env -i sh -c 'echo $USER')
  • id -u: 0
    Como puede ver, los otros programas fallaron en esta verificación, solo id -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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *