¿Cómo puedo forzar a sudo a que siempre solicite una contraseña después de despertar de la suspensión?

15

Digamos que ejecuto un comando con sudo, luego, si lo uso sudodentro de los próximos 15/5 minutos (no estoy seguro de cuánto tiempo me recuerda) no me pedirá una contraseña. Solo me volverá a preguntar si no lo he usado durante al menos ese tiempo.

Sin embargo, si suspendo mi máquina, la despierto y me conecto antes de que finalice ese período de tiempo, puedo ejecutar un sudocomando nuevamente y no me pedirá mi contraseña porque no la he dejado por esa cantidad. de tiempo.

Entonces, ¿cómo puedo hacerlo para que, sin importar cuánto tiempo no haya usado sudo, definitivamente me pedirá una contraseña después de la suspensión una vez que haya iniciado sesión nuevamente, incluso si todavía estoy dentro de ese período de tiempo donde el ¿No sudohan pasado 15/5 minutos sin usar ?

Lo más probable que funcionará es lograr que ejecute un comando para eliminar todos los cachés de identidad para sudola ejecución de un determinado comando que se ejecuta al despertar.

Estoy ejecutando Ubuntu GNOME 15.10 con GNOME 3.18.


fuente
1
buena pregunta, pero ¿por qué eres paranoico? porque si la persona que no es usted conoce su contraseña de inicio de sesión no se puede detener su usosudo
Edward Torvalds
Si acaba de salir de esa ventana de terminal, deberá volver a escribir su contraseña cuando abra una nueva ventana de terminal, sin importar qué tan rápido lo haga. Si está ejecutando algo en una ventana de terminal, agregue `; exit` y la ventana se cerrará cuando se complete el comando.
Marc
@Marc: Lo sé, pero no siempre es conveniente salir, ni hacer una sudopregunta manualmente la próxima vez. Se preferiría una solución automática.
@edwardtorvalds: Bueno, podría volver a iniciar sesión y luego irme (no es que lo haga muy a menudo), y luego, cuando venga alguien, sería malo si pudieran usarlo sudo. Sé que eso suena un poco extraño para mi propia computadora, pero podría haber estado haciendo algunos trabajos de mantenimiento en otra computadora Ubuntu, y luego, cuando vuelva a iniciar sesión en el usuario, podría ser un inconveniente cerrar la Terminal, pero no lo hago. quiero que tengan sudoderechos.
1
Anexando `; exit` (siete pulsaciones de teclas) me parece bastante fácil. De qué tipo de mantenimiento se aleja, porque no puedo pensar en mucho, me arriesgaría a suspenderlo en el medio.
Marc

Respuestas:

19

De man sudo:

     -K, --remove-timestamp
                 Similar to the -k option, except that it removes the user's
                 cached credentials entirely and may not be used in conjunc‐
                 tion with a command or other option.  This option does not
                 require a password.  Not all security policies support cre‐
                 dential caching.

Entonces, lo que desea es que su usuario se ejecute sudo -Kcada vez que el sistema se suspende.

Ubuntu 15.04+ (systemd)

Esto se puede hacer en Ubuntu 15.04+ colocando un script /lib/systemd/system-sleep/.

  1. Ejecutar sudo nano /lib/systemd/system-sleep/disable_sudo_user(reemplazar usercon el nombre de usuario de su usuario por conveniencia);
  2. Pegue el siguiente script (reemplace usercon el nombre de usuario de su usuario):
#!/bin/sh
case $1/$2 in
    pre/suspend)
        su user -c 'sudo -K'
        ;;
esac
  1. Hit CTRL+ O, ENTERy CTRL+ X;

  2. Correr sudo chmod o+x /lib/systemd/system-sleep/disable_sudo_user;


Para habilitar esto también para hibernación / hibridación-sueño, use este script en su lugar:

#!/bin/sh
case $1 in
    pre)
        su user -c 'sudo -K'
        ;;
esac

Versiones anteriores de Ubuntu (Upstart)

Esto se puede hacer en versiones anteriores de Ubuntu colocando un script en /etc/pm/sleep.d/.

  1. Ejecutar sudo nano /etc/pm/sleep.d/disable_sudo_user(reemplazar usercon el nombre de usuario de su usuario por conveniencia);
  2. Pegue el siguiente script (reemplace usercon el nombre de usuario de su usuario):
#!/bin/sh
case $1 in
    suspend)
        su user -c 'sudo -K'
        ;;
esac
  1. Hit CTRL+ O, ENTERy CTRL+ X;

  2. Correr sudo chmod o+x /etc/pm/sleep.d/disable_sudo_user;


Para habilitar esto también para la hibernación, use este script en su lugar:

#!/bin/sh
case $1 in
    suspend|hybernate)
        su user -c 'sudo -K'
        ;;
esac
kos
fuente
2
Hubiera sido más divertido si lo usaras sudo -u user sudo -k. : D
muru
@muru Pensó lo mismo pero por alguna razón parecía un poco tonto: D
kos
Lo sentimos, no he escrito ningún código de shell por un tiempo, ¿qué hace esto exactamente pre/*)? :)
@ParanoidPanda Se ha ido, mira la actualización. Ver aquí (Descripción, segundo párrafo): systemd-suspend.servicellama a los scripts al /lib/systemd/system-sleep/pasar dos argumentos; $1es prepara eventos previos al sueño o postpara eventos posteriores al sueño, y $2es suspend, hybernateo hybrid-sleep; pre/*estaba destinado a atrapar todas las combinaciones de pre/y cualquiera de suspend, hybernateo hybrid-sleep, pero como solicitó explícitamente la suspensión, lo cambié a pre/suspend.
kos
1
Vale la pena señalar que también puede hacer esto en ubuntu anterior, es solo el mecanismo que es diferente, es decir, el uso de /etc/pm/sleep.dscripts.
hobbs
3

¡Solo si eres tan paranoico! Puedes usar la -Kopción de sudo.

-K, --reset-timestamp
       When used without a command, invalidates the user's cached credentials.  
       In other words, the next time sudo is run a password will be required.  
       This option does not require a password and was added to allow a user to revoke
       sudo permissions from a .logout file.

       When used in conjunction with a command or an option that may require a 
       password, this option will cause sudo to ignore the user's cached credentials.  
       As a result, sudo will prompt for a password (if one is required by the 
       security policy) and will not update the user's cached credentials.

       Not all security policies support credential caching.

por ejemplo,

sudo -K <command>

O simplemente podría dejar su computadora en una caja metálica protegida por robots :)

Edward Torvalds
fuente
Hmm ... Aunque no exactamente como quiero, ¿no hay forma de automatizar esto? Debido a que esto sugiere que definitivamente sé que estoy a punto de suspenderlo, ¿qué sucede si se está ejecutando un comando sudoy tengo que ir a algún lado? Entonces suspendo la máquina, luego, cuando regrese y desactive la máquina, tendré que esperar para el comando o el tiempo para terminar antes de que pueda pedirme una contraseña la próxima vez? Sería mucho más útil por muchas razones (incluido el hecho de que cuando lo estoy ejecutando con una GUI en un nivel de ejecución diferente no solicita una contraseña después de la suspensión) para que se automatice.
Además, creo que quieres decir -Ky no -k.
Bueno, podría ser más útil de todos modos.
1

Otro método

Escriba 'sudo visudo'

Vaya a la línea que dice: 'Por defecto env_reset'

y cambiar a:

'Por defecto env_reset, timestamp_timeout = 0

Luego guarda el archivo.

Al establecer el tiempo de espera en 0, el sistema le pedirá la contraseña cada vez.

Edgar Naser
fuente
Si bien esto hace (técnicamente hablando) cumplir con lo que el PO está pidiendo, es excesivo para la mayoría de las situaciones. Dicho esto, si eres realmente paranoico (o simplemente quieres un paso adicional para la pausa y la contemplación cada vez que haces algo potencialmente peligroso), esta podría ser una alternativa viable.
un CVn