2013-02-18 19:36:35 +0000 2013-02-18 19:36:35 +0000
108
108

¿Cómo puedo comprobar si tengo acceso a un sudo?

Recientemente me he metido en problemas por esto.

$sudo vim /etc/motd 
[sudo] password for bruce: 
bruce is not in the sudoers file. This incident will be reported.

¿Hay alguna manera de comprobar si tengo acceso a un sudo o no?

Respuestas (9)

123
123
123
2013-02-18 19:51:06 +0000

Corre sudo -v. Normalmente se usa para extender el tiempo de espera de su contraseña de sudo, pero puede usarse para determinar si tiene algún privilegio de sudo.

$ sudo -v
Sorry, user [username] may not run sudo on [hostname].

Extracto de la página de hombre:

Si se le da la opción -v (validar), el sudo actualizará la marca de tiempo del usuario, pidiendo la contraseña del usuario si es necesario. Esto extiende el tiempo de expiración de sudo por otros 5 minutos (o lo que sea que el tiempo de expiración esté establecido en sudoers) pero no ejecuta un comando.

Si su usuario sólo tiene permitido ejecutar comandos específicos, este comando funcionará, indicando que tiene permitido ejecutar algo con diferentes privilegios. Aunque el mensaje tiene un aspecto diferente cuando se intenta ejecutar un comando que no está permitido en este caso (y no se envía ningún correo a root ), sigue siendo posible que tenga problemas si los administradores leen /var/log/secure.

$ sudo ls
[sudo] password for [username]: 
Sorry, user [username] is not allowed to execute '/bin/ls' as root on [hostname].

Para averiguar qué se le permite ejecutar con diferentes privilegios, puede usar sudo -l. Ten en cuenta que este comando requiere que introduzcas tu contraseña.

43
43
43
2014-12-17 22:55:06 +0000

Esto es muy simple. Corre sudo -l. Esto listará cualquier privilegio de sudo que tenga.

12
12
12
2016-06-14 00:49:56 +0000

Aquí está la versión amigable del guión:

timeout 2 sudo id && echo Access granted || echo Access denied

ya que no se atascará en la entrada de la contraseña si no tienes el acceso a sudo.

También puedes configurarlo en una variable como:

timeout 2 sudo id && sudo="true" || sudo="false"
echo "$sudo"

Nota: En macOS, necesitas instalar coreutils, por ejemplo brew install coreutils.

9
9
9
2017-12-30 18:57:38 +0000

La respuesta de Gerald Schade aquí , aún puede ser mejorada!

Uso

prompt=$(sudo -nv 2>&1)
if [$? -eq 0]; then
  # exit code of sudo-command is 0
  echo "has_sudo__pass_set"
elif echo $prompt | grep -q '^sudo:'; then
  echo "has_sudo__needs_pass"
else
  echo "no_sudo"
fi

Aquí hay un ejemplo completo de uso en un script :

#!/usr/bin/env bash

is_root () {
    return $(id -u)
}

has_sudo() {
    local prompt

    prompt=$(sudo -nv 2>&1)
    if [$? -eq 0]; then
    echo "has_sudo__pass_set"
    elif echo $prompt | grep -q '^sudo:'; then
    echo "has_sudo__needs_pass"
    else
    echo "no_sudo"
    fi
}

elevate_cmd () {
    local cmd=$@

    HAS_SUDO=$(has_sudo)

    case "$HAS_SUDO" in
    has_sudo__pass_set)
        sudo $cmd
        ;;
    has_sudo__needs_pass)
        echo "Please supply sudo password for the following command: sudo $cmd"
        sudo $cmd
        ;;
    *)
        echo "Please supply root password for the following command: su -c \"$cmd\""
        su -c "$cmd"
        ;;
    esac
}

if is_root; then
    echo "Error: need to call this script as a normal user, not as root!"
    exit 1
fi

elevate_cmd which adduser
3
3
3
2017-02-28 02:27:06 +0000

Para mí, ‘sudo -v’ y ‘sudo -l’ no funcionaban en un guión porque a veces eran interactivos (pidiéndome una contraseña, como se mencionó anteriormente). “sudo -n -l” tampoco funcionó, dio el código de salida “1” aunque tengo permisos de sudo, debido a la falta de contraseña. Pero extender el comando a:

A=$(sudo -n -v 2>&1);test -z "$A" || echo $A|grep -q asswor

tuvo éxito para mí para el script. Esta expresión da 0 si el usuario actual puede llamar ‘sudo’ y 1 si no.

Explicación: El parámetro adicional -n a sudo impide la interactividad.
La salida $A del comando ‘sudo -n -v 2>&1’ puede ser: - vacío (en este caso, el usuario actual puede llamar a sudo), o: - una nota de que el usuario actual no está autorizado para sudo, o: - un texto de pregunta para la contraseña (en este caso, el usuario está autorizado). (“asswor” sirve tanto para una “contraseña” inglesa como para una “Passwort” alemana).

2
2
2
2017-10-01 22:31:29 +0000

Tengo un rango bajo para votar y comentar, pero quería votar a favor de la respuesta de Gerald Schade, ya que he encontrado que la única manera anteriormente, y pensé que nadie más lo sabe - hasta ahora :D

btw mi solución:

[["$(whereis sudo)" == *'/'* && "$(sudo -nv 2>&1)" != 'Sorry, user'*]]

(a partir de finales de 2015 mwhahaaa)

1
1
1
2020-02-11 09:15:13 +0000

Esto debería ser suficiente para decirle si tiene o no privilegios de root:

sudo whoami

Si sudo le pide la contraseña de root, o no funciona, también significa que no tiene privilegios de root (al menos no a través de sudo).

1
1
1
2016-08-30 17:58:05 +0000

“Acceso al sudo” viene en sabores. Dos sabores primarios: Primero usted, o un grupo del que es miembro, necesita estar configurado para el acceso a sudo en el archivo /etc/sudoers.

Segundo necesita saber su contraseña, o necesita haber hecho un comando de sudo recientemente. Lo suficientemente reciente como para que el tiempo de espera no haya expirado. (Dato curioso: puede hacer que el tiempo de espera sea muy largo en el archivo de sudo.)

A menudo quiero probar el segundo tipo de acceso en el prólogo de un script que necesitará hacer sudo algunos pasos. Cuando esta prueba falla puedo aconsejar al usuario que necesita habilitar el segundo tipo de acceso antes de ejecutar el script.

bash-3.2$ if sudo -S -p '' echo -n < /dev/null 2> /dev/null ; then echo 'Sudo is enabled.' ; else echo 'Sudo is not enabled' ; fi
Sudo is enabled.
bash-3.2$ sudo -K
bash-3.2$ if sudo -S -p '' echo -n < /dev/null 2> /dev/null ; then echo 'Sudo is enabled.' ; else echo 'Sudo is not enabled' ; fi
Sudo is not enabled

La -S le dice al sudo que lea la contraseña de stdin. La -p establece un prompt vacío. El -K borra el segundo tipo de acceso.

Como envía stderr a /dev/null, también comprobará si el usuario tiene el primer tipo de acceso de sudo.

-5
-5
-5
2013-02-18 19:41:36 +0000

Siga estos pasos para ver el archivo de los sudoers. Si estás ahí, tienes sudo. Si no, puedes añadirte a ti mismo.

  1. su
  2. visudo
  3. En la parte inferior del archivo, introduzca your_username_here ALL=(ALL) ALL
  4. Pulse ESC y escriba :wq
  5. Escriba exit
  6. 6. Vuelva a ejecutar el comando que necesitaba sudo
  7. Escriba su contraseña (no la contraseña de root)