Pruebe si un usuario tiene privilegios de sudo sin requerir la entrada del usuario

12

Tengo un script de shell local que realiza una serie de pruebas en un host remoto, antes de entregar la carga útil; Una de estas pruebas es si el usuario tiene privilegios de sudo, se verificó simplemente con, sudo -vsin embargo, esto requiere que el usuario ingrese su contraseña. Además, el host remoto parece tener un tiempo de espera de sudo instantáneo, por lo que se requiere la entrada de contraseña en cada conexión nueva, y esto es algo que no tengo permiso para cambiar (como política).

Por supuesto, puedo probar si el usuario es parte de ciertos grupos, pero esto no sería independiente de la configuración del host remoto, por lo que esperaba que haya un método que pueda verificar que no sea necesario asumir los grupos del usuario, también. como no necesita entrada del usuario?

¡Gracias!

ACTUALIZACIÓN: para hacerme eco de mis comentarios, solo quiero probar si un usuario podría sudo, sin requerir la interacción del usuario para esa prueba.

DanH
fuente
¿necesita verificar si el usuario tiene la posibilidad de usar sudo o si está ejecutando el script de shell a través de sudo?
Niko SP
Solo si tiene la posibilidad. La secuencia de comandos local requerirá que la contraseña de sudo se ingrese más adelante, por lo que solo quiero verificar desde el principio que el usuario en el host remoto sea incluso un sudoer.
DanH
una comprobación rápida en mi cuadro de ubuntu me dio sudo -l, devuelve los comandos que el usuario puede ejecutar, si (ALL) ALL es parte de ellos, el usuario puede usar sudo para cualquier comando. Tal vez ese es el ángulo correcto?
Niko SP
1
sudo -lme pide mi contraseña
ThatGraemeGuy
1
Sudo almacena en caché basado en tty, por lo que si una nueva sesión le ofrece el mismo tty, es posible que no se le solicite. Intenta ejecutar sudo -kprimero.
Mark Wagner

Respuestas:

13

Me temo que lo único que puede probar es si el usuario tiene privilegios de sudo sin una contraseña.

Ejecutar

sudo -n true

Si $? es 0, el usuario tiene acceso a sudo sin contraseña, si $? es 1, el usuario necesita una contraseña.

Si necesita verificación para un programa específico, cambie truecon su programa, de manera que el programa no haga nada, comochmod --help

erickzetta
fuente
1
Tenga en cuenta que esto no ayuda a la detección preliminar de si el comando Xes sudocapaz sin introducir una contraseña y sin accidentalmente ejecutarlo
try-catch-finally
3

Si tiene un usuario con acceso a sudo, como "root", puede usarlo para verificar otros inicios de sesión. A medida que el usuario con acceso ejecuta:

sudo -n -l -U foo 2> & 1 | egrep -c -i "no está permitido ejecutar sudo | usuario desconocido"

Si devuelve cero, "foo" tiene acceso. De lo contrario, no tiene acceso a sudo.

Todd Moyer
fuente
3
Simplemente sudo -n -l cmdy se le informará si el usuario actual tiene acceso sudo a cmd. Si quieres probar el resultado.
Philippe A.
1

sudo -l

Eso debería darle suficiente para decidir si tiene los privilegios que desea / necesita.

dmourati
fuente
1
Esto todavía pide una contraseña en mi sistema (Ubuntu 16.04).
Mario Vilas
1

Sé que esta es una pregunta muy antigua, pero encontré suerte con el -nindicador (no interactivo) y -v/ -l. Pero, tienes que inspeccionar la salida:

$ sudo -vn && sudo -ln  #User with cached credentials
User adminuser may run the following commands on computername:
    (ALL) ALL
$ sudo -vn && sudo -ln  #User who _can_ sudo but isn't cached
sudo: a password is required
$ sudo -vn && sudo -ln  #User who can't at all
Sorry, user nonadmin may not run sudo on computername.

Algunos redireccionamientos de salida y grepping lo llevarán allí, probablemente:

if (sudo -vn && sudo -ln) 2>&1 | grep -v 'may not' > /dev/null; then
  #they're cool
  exit 0 #Or, whatever
fi
Matt Moretti
fuente