Estoy trabajando en un script que ejecuta un comando como sudo y hace eco de una línea de texto SOLO si mis privilegios de sudo se han agotado, por lo que solo si ejecutar un comando con sudo requeriría que mi usuario (no root) vuelva a escribir su contraseña.
¿Cómo verifico eso? Tenga en cuenta que $(id -u)
incluso cuando se ejecuta como sudo devolverá mi identificación de usuario actual, por lo que no se puede verificar que coincida con 0 ...
Necesito un método que verifique esto en silencio.
sudo -n true
y usarlos realmente": la documentación es un poco vaga en este punto, pero creo que ejecutar unsudo
comando, incluso solosudo -n true
, restablecerá el tiempo de espera reloj. De cualquier manera,-v
está documentado explícitamente como tal y, de todos modos ,sudo -n -v
es probablemente más apropiado quesudo -n true
para este propósito.hostname sudo[8870]: username : a password is required ; TTY=pts/0 ; PWD=/home/username ; USER=root ; COMMAND=/usr/bin/true
. Si lo usa en bash prompt, por ejemplo, generará muchos mensajes de error.Correr:
Si sus privilegios de sudo han expirado, esto saldrá con un código de salida de 1 y generará:
Si tiene credenciales en caché válidas, este comando tendrá éxito y no generará nada.
Entonces, para ponerlo todo junto, aquí hay un scriptlet que comprobará en silencio si tiene credenciales válidas en caché:
Como se mencionó en otras respuestas / comentarios, la
-v
opción ("validar") para sudo renueva silenciosamente las credenciales almacenadas en caché si hay alguna otra solicitud de autenticación para generar credenciales almacenadas en caché, y la-n
opción ("no interactiva") evita que sudo genere cualquier solicitud interactiva, como la solicitud de autenticación.fuente
sudo -nv
funciona bien, pero contamina los registros del sistema con errores de sudo e información de autenticación de pam. Necesitaba verificar los privilegios de sudo para mi solicitud de bash, por lo que se ejecutó con bastante frecuencia y mis registros consistían casi solo en este ruido.Es posible analizar el archivo de marca de tiempo de sudo directamente: escribí una pequeña utilidad C para él:
fuente