Ejecutar sudo -v. Por lo general, se usa para extender el tiempo de espera de la contraseña de sudo, pero se puede usar para determinar si tiene algún sudoprivilegio.
$ sudo -v
Sorry, user [username] may not run sudo on [hostname].
Extracto de la página de manual:
Si se le da la opción -v (validar), sudo actualizará la marca de tiempo del usuario, solicitando la contraseña del usuario si es necesario. Esto extiende el tiempo de espera de sudo por otros 5 minutos (o lo que sea que se establezca en sudoers) pero no ejecuta un comando.
Si su usuario solo puede ejecutar comandos específicos , este comando funcionará, lo que indica que puede ejecutar algo con diferentes privilegios. Si bien el mensaje se ve diferente al intentar ejecutar un comando que no se le permite en este caso (y no se envía ningún correo a la raíz ), aún es 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é puede ejecutar con diferentes privilegios, puede usar sudo -l. Tenga en cuenta que este comando requiere que ingrese su contraseña.
Gracias. sudo -v funciona para mí. La página del manual dice que también puedo ejecutar sudo -l, pero eso me pide una contraseña. ¿Porqué es eso?
Bruce
2
@Bruce, supongo que aquí, pero de lo contrario, alguien (o un programa que ejecute) podría averiguar qué programas puede ejecutar su usuario actual (posiblemente sin ingresar la contraseña) e intentar usar esa información maliciosamente.
Daniel Beck
¿Qué supones que significa cuando recupere esto patrick@<host>:~$ sudo -v sudo: unable to resolve host <host>? Ingresé mi contraseña y no obtuve nada sobre personas no autorizadas. Sé que he sudoejecutado con éxito otros comandos, pero ese unable to resolve hostmensaje me ha preocupado de que algo más pueda ser extraño en el host.
Patrick M
@PatrickM Parece un problema con el sudoersarchivo. Allí puede especificar en qué host está autorizado un usuario para ejecutar un comando específico (esto es útil cuando se utiliza el mismo sudoersarchivo en varias máquinas). Posiblemente el nombre de host especificado en ese archivo no se pudo resolver. Intenta comprobarlo con el hostcomando, por ejemplo.
Ale
No funciona para mí en RHEL 6, sudo -vdado que "xx no está en el archivo sudoers. Este incidente será reportado".
79E09796
43
Esto es muy simple. Ejecutar sudo -l. Esto enumerará todos los privilegios de sudo que tenga.
Tal vez rechazado porque repite lo que dijo Daniel Beck hace casi dos años.
G-Man
1
O explica lo que sucede, es un comentario, en el mejor de los casos
Ramhound
2
@ Jonathan: si quisieras escribir en ubuntu rigt ahora, te sudo -lpide una contraseña si puedes sudo o no. sudo -vsolo pregunta si puedes, y "$(whoami)" != "root"nunca preguntarás nada en ningún linux.
bksunday
@bksunday Tienes razón. Probé ahora en un Debian Jessy limpio y confirme sus resultados. Mi comentario anterior (eliminado ahora) fue probablemente el resultado de probar en una máquina en la que tenía algunos sudoprivilegios.
Jonathan Ben-Avraham
@ G-Man, pero esta respuesta simple me ayudó más que probablemente la respuesta más precisa de Daniel, donde este comando es el final desafortunadamente ...
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 1fi
elevate_cmd which adduser
Para mí, ' sudo -v' y ' sudo -l' no funcionaban en un script porque a veces era interactivo (pidiéndome una contraseña, como se mencionó anteriormente). ' sudo -n -l' tampoco funcionó, le dio el código de salida '1' aunque tengo permisos de sudo, debido a la falta de contraseña. Pero extendiendo el comando a:
fue exitoso para mí para el guión. Esta expresión da 0si el usuario actual puede llamar a 'sudo' y 1si no.
Explicación:
El parámetro adicional -npara sudoevitar la interactividad.
El resultado $Adel 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 el contraseña (en este caso, el usuario está autorizado).
("asswor" se ajustará a una "contraseña" en inglés, así como a una "Passwort" en alemán).
Tengo un rango bajo para votar y comentar, pero quería votar a favor la respuesta de Gerald Schade, ya que descubrí que era la única forma anterior, y pensé que nadie más lo sabe, hasta ahora: D
El "acceso al sudo" viene en sabores. Dos tipos principales: Primero, usted o un grupo del que sea miembro, debe estar configurado para el acceso a sudo en el archivo / etc / sudoers.
En segundo lugar, necesita saber su contraseña, o debe haber hecho un comando sudo recientemente. Recientemente, el tiempo de espera no ha expirado. (Dato curioso: puede hacer que el tiempo de espera sea muy largo en el archivo de su sudoer).
A menudo quiero probar el segundo tipo de acceso en el prólogo de un script que necesitará sudo algunos pasos. Cuando esta verificación falla, puedo aconsejarle 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
El -S le dice a sudo que lea la contraseña de stdin. El -p establece una solicitud vacía. El -K borra la segunda vez de acceso.
Como envía stderr a / dev / null, también verificará si el usuario tiene el primer tipo de acceso a sudo.
El OP "se metió en problemas" por correr sudo, por lo que probablemente no sea el administrador del sistema, ni siquiera uno de los administradores de élite del sistema. Probablemente sea solo un usuario que pensó que se le podrían haber otorgado algunos poderes limitados. ¿Qué te hace sospechar que él puede ir su?
Respuestas:
Ejecutar
sudo -v
. Por lo general, se usa para extender el tiempo de espera de la contraseña de sudo, pero se puede usar para determinar si tiene algúnsudo
privilegio.Extracto de la página de manual:
Si su usuario solo puede ejecutar comandos específicos , este comando funcionará, lo que indica que puede ejecutar algo con diferentes privilegios. Si bien el mensaje se ve diferente al intentar ejecutar un comando que no se le permite en este caso (y no se envía ningún correo a la raíz ), aún es posible que tenga problemas si los administradores leen
/var/log/secure
.Para averiguar qué puede ejecutar con diferentes privilegios, puede usar
sudo -l
. Tenga en cuenta que este comando requiere que ingrese su contraseña.fuente
patrick@<host>:~$ sudo -v sudo: unable to resolve host <host>
? Ingresé mi contraseña y no obtuve nada sobre personas no autorizadas. Sé que hesudo
ejecutado con éxito otros comandos, pero eseunable to resolve host
mensaje me ha preocupado de que algo más pueda ser extraño en el host.sudoers
archivo. Allí puede especificar en qué host está autorizado un usuario para ejecutar un comando específico (esto es útil cuando se utiliza el mismosudoers
archivo en varias máquinas). Posiblemente el nombre de host especificado en ese archivo no se pudo resolver. Intenta comprobarlo con elhost
comando, por ejemplo.sudo -v
dado que "xx no está en el archivo sudoers. Este incidente será reportado".Esto es muy simple. Ejecutar
sudo -l
. Esto enumerará todos los privilegios de sudo que tenga.fuente
sudo -l
pide una contraseña si puedes sudo o no.sudo -v
solo pregunta si puedes, y"$(whoami)" != "root"
nunca preguntarás nada en ningún linux.sudo
privilegios.Aquí está la versión amigable para el script:
ya que no se atascará en la entrada de contraseña si no tiene
sudo
acceso.También puede configurarlo en una variable como:
Nota: en macOS, necesita instalar
coreutils
, por ejemplobrew install coreutils
.fuente
timeout
no está disponible de forma predeterminada, por ejemplo, en OS X?coreutils
, por ejemplobrew install coreutils
.La respuesta de Gerald Schade aquí , ¡todavía se puede mejorar!
Utilizar
Aquí hay un ejemplo completo de uso en un script :
fuente
Para mí, '
sudo -v
' y 'sudo -l
' no funcionaban en un script porque a veces era interactivo (pidiéndome una contraseña, como se mencionó anteriormente). 'sudo -n -l
' tampoco funcionó, le dio el código de salida '1' aunque tengo permisos de sudo, debido a la falta de contraseña. Pero extendiendo el comando a:fue exitoso para mí para el guión. Esta expresión da
0
si el usuario actual puede llamar a 'sudo' y1
si no.Explicación:
El parámetro adicional
-n
parasudo
evitar la interactividad.El resultado
$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 el contraseña (en este caso, el usuario está autorizado).
("asswor" se ajustará a una "contraseña" en inglés, así como a una "Passwort" en alemán).
fuente
Tengo un rango bajo para votar y comentar, pero quería votar a favor la respuesta de Gerald Schade, ya que descubrí que era la única forma anterior, y pensé que nadie más lo sabe, hasta ahora: D
por cierto mi solución:
(desde finales de 2015 mwhahaaa)
fuente
El "acceso al sudo" viene en sabores. Dos tipos principales: Primero, usted o un grupo del que sea miembro, debe estar configurado para el acceso a sudo en el archivo / etc / sudoers.
En segundo lugar, necesita saber su contraseña, o debe haber hecho un comando sudo recientemente. Recientemente, el tiempo de espera no ha expirado. (Dato curioso: puede hacer que el tiempo de espera sea muy largo en el archivo de su sudoer).
A menudo quiero probar el segundo tipo de acceso en el prólogo de un script que necesitará sudo algunos pasos. Cuando esta verificación falla, puedo aconsejarle al usuario que necesita habilitar el segundo tipo de acceso antes de ejecutar el script.
El -S le dice a sudo que lea la contraseña de stdin. El -p establece una solicitud vacía. El -K borra la segunda vez de acceso.
Como envía stderr a / dev / null, también verificará si el usuario tiene el primer tipo de acceso a sudo.
fuente
Siga estos pasos para ver el archivo sudoers. Si estás allí, tienes sudo. Si no, puede agregarse usted mismo.
su
visudo
your_username_here ALL=(ALL) ALL
:wq
exit
sudo
fuente
sudo
, por lo que probablemente no sea el administrador del sistema, ni siquiera uno de los administradores de élite del sistema. Probablemente sea solo un usuario que pensó que se le podrían haber otorgado algunos poderes limitados. ¿Qué te hace sospechar que él puede irsu
?