
(Publicado originalmente en Stack Overflow). Me sugirieron que intentara aquí. Aquí está la publicación original:
Ver título. Quiero un comando que me permita consultar sudo. Idealmente, devolvería éxito si todavía tengo sudo y falso si sudo ha caducado. Obtener el tiempo restante también podría ser útil (aunque si estuviera preocupado, podría sudo -v
revalidar). Ah, y no debería tener que solicitar una contraseña.
Lo más parecido que encontré es sudo -n true
, pero la -n
opción solo está presente en mi máquina Centos 5 en el trabajo. -n
falla si tiene que solicitar una contraseña. ¿Existe alguna otra forma de obtener esta funcionalidad? Supongamos que en realidad no tengo root en todas las máquinas con las que trabajo, por lo que no puedo instalar nuevas versiones de Sudo a mi gusto.
Por si sirve de algo, estoy haciendo esto para poder recibir un mensaje que indique el estado de sudo. Me gusta saber qué terminales tienen capacidad sudo activa. También tengo un mensaje que cambia de color cuando soy root, pero no uso root muy a menudo, por lo que es de uso limitado.
Respuesta1
La -n
opción está disponible en versiones más nuevas de sudo
, pero como usted dijo, no es una opción. No hay una forma real de hacer lo que estás buscando, salvo intentarlo sudo
y ver si aparece un mensaje que te solicita una contraseña. Si lo que le preocupa es que desea una indicación visual, ¿por qué no iniciar sudo /bin/bash
una sesión de root bash? Tenga en cuenta que esto es inseguro, pero también es algo inseguro si alguien se da cuenta de sus cambios en sudo.
Respuesta2
Sé que esta es una pregunta muy antigua, pero aquí la hice hoy en un guión. Suponiendo que ser sudo significa poder ejecutar cualquier comando como sudo (o, al menos, tiempo de actividad)
CAN_I_RUN_SUDO=$(sudo -n uptime 2>&1 | grep "cargar" | wc -l) si [ ${CAN_I_RUN_SUDO} -gt 0 ] entonces echo "Puedo ejecutar el comando sudo" demás echo "No puedo ejecutar el comando Sudo" fi
Sin embargo, si su usuario tiene restricciones en el archivo visudo
, esta verificación no será suficiente, por ejemplo, si su usuario solo puede usar el comando make. Intente ejecutar algún comando que sepa que funcionará.
Puede agregar el filtro grep -v Sorry
, por ejemplo:
$(sudo -n uptime 2>&1 | grep "load" | grep -v Sorry | wc -l)
por evitar esos falsos positivos.
Respuesta3
Para simplificar la respuesta dada por @ wags007
if sudo -n true
then
sudo id
else
echo "sorry, but did not want to bother you"
fi
Sin embargo, si en suhttps://www.sudo.ws/man/1.8.15/sudoers.man.htmlconfiguración que tenga, defaults mail_badpass
se enviará un correo por cada prueba que resulte falsa (lo habría solicitado). Para evitar tales molestias, cambie esa parte de su archivo sudoers a
Defaults mail_badpass
Defaults! /bin/true !mail_badpass
Como resultado, se envían correos electrónicos de alerta de seguridad para todos los comandos excepto /bin/true. Bueno, sí, ahora alguien podría intentar forzar una contraseña mediante fuerza bruta llamando sudo true
un número ilimitado de veces sin que se envíe ningún correo de alerta de seguridad.
Nota: Utilice siempre visudo
en lugar de su editor favorito para editar el archivo sudoers. Si no lo hace, corre el riesgo de quedar excluido.
Respuesta4
Según el manual de sudo, la sesión de sudo se determina según el archivo de marca de tiempo ( /usr/lib/sudo/<username>
), por lo que es posible que pueda calcular cuánto tiempo queda verificando la fecha/hora del archivo de marca de tiempo. Sin embargo, en mi sistema, el archivo de marca de tiempo es de hecho un directorio, y hay tres archivos con contenido críptico (y también algunas marcas de tiempo extrañas, pero /usr/lib/sudo/<username>
parecía tener una marca de tiempo que coincidía con el momento en que le di a sudo mi contraseña). Creo que /usr/lib/sudo/<username>/0
tiene la marca de tiempo de la ejecución más reciente sudo
.