Cómo hacer que sudo no nos pida contraseña y otros trucos relacionados

Antes de empezar a tocar nada hay que entender que lo que se explica en este artículo es un riesgo para la seguridad de nuestra máquina; en un mundo perfecto las distros obligarían al usuario a introducir la contraseña cada vez que ejecutara un simple ls.

Y ahora, de acuerdo, comencemos a editar /etc/sudoers escribiendo en la consola:

sudo visudo

que abrirá una instancia de nano (o vi, o lo que sea que esté configurado en la variable de entorno EDITOR) con las peculiaridades de que se comprobará la sintaxis de lo escrito y se impedirá a más de un administrador editar el archivo a la vez, evitando que metamos la pata y la caguemos con nuestra incompetencia (cosa que por otra parte, tampoco importaría mucho, porque podríamos usar el modo de recuperación o un live cd para arreglarlo).

Lo que nos interesa es la línea que comienza con Defaults. A continuación encontramos una lista de valores separados por comas que funcionan al estilo de variables booleanas: si encontramos el nombre de una opción es que está activada, si tiene un ! delante del nombre, es que está negada (en realidad también tenemos enteros, cadenas y listas, pero no viene al caso).

No nos interesa para los propósitos de esta entrada, pero lecture sirve para que antes de pedir la contraseña al usuario se le muestre información sobre el uso de sudo y las implicaciones de lo que está haciendo; como aparece un signo de exclamación delante de él, significa que por defecto está desactivado. El mensaje que se muestra es el siguiente:

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

Como curiosidad el último de los puntos es un guiño a Spiderman, el personaje de Stan Lee que todos conoceréis ;-)

Uno de los valores que si nos interesan es tty_tickets. Por defecto está activado, indicando que es necesario introducir la contraseña una vez por cada terminal. Digamos que escribo un comando cualquiera con sudo en una terminal o que ejecuto un comando de forma visual con gksudo, si ahora abriera una nueva terminal y escribiera un comando con sudo, o bien si volviera a usar gksudo, tendría que volver a introducir la contraseña, aunque fuera inmediatamente, dado que las contraseñas se recuerdan durante un cierto tiempo, pero sólo para la terminal en la que se introdujo.

Si introducimos un signo de exclamación (!) delante de tty_tickets, este comportamiento se verá modificado, y la contraseña se recordará para todas las terminales.

Otro valor interesante es timestamp_timeout, que es el tiempo en minutos que se recordará la contraseña antes de volver a pedirla. Por defecto es de 15 minutos. Si queréis que sea media hora, por ejemplo, bastaría añadir timestamp_timeout=30. Si queréis que os pregunte siempre, timestamp_timeout=0.

Por último, nos puede interesar saber cómo dar permisos a un usuario para que ejecute ciertos comandos sin necesidad de que sudo le pida contraseña (por ejemplo aptitude o gedit). Esto se haría añadiendo una línea de este estilo:

zootropo ALL=(ALL) NOPASSWD:/usr/bin/gedit

donde la primera palabra es el usuario, la segunda la máquina y la última el comando a ejecutar (todos se pueden sustituir por ALL para indicar respectivamente todos los usuarios, todas las máquinas y cualquier comando).

O más sencillo aún, y con más posibilidades de desatar la ira y el fuego: podemos añadir una nueva opción !authenticate a Defaults indicando que los usuarios no necesitan identificarse con una contraseña antes de poder ejecutar los comandos. De esta forma aunque tendremos que escribir sudo delante de todas formas para obtener permisos de root, no se nos pedirá contraseña.

Para más información:

man sudo
man sudoers

Comentarios
  1. Peligroso en manos de usuarios inexpertos, pero muy útil en determinados casos. Gracias Zootropo. :)

    Responder

  2. De nada, para eso estamos ;)

    Responder

  3. Martín

    Qué raro, agregué el programa dosemu en sudoers para que se pueda ejecutar con privilegios de root (para usar IPX es necesario). Al cargarlo con
    sudo /home/user/dosemu/dosemu

    dice:
    odd environment, you don’t have $HOME, giving up

    Sin embargo si no está el usuario en sudoers, pide el password y funciona todo bien…

    Responder

  4. [...] En mundo-Geek explican paso a paso como hacer que sudo no nos pida contraseña [...]

    Responder

  5. marce

    Disculpen soy nuevo en esto, y en realidad me interesa mucho… quisiera saber a que contrasenha se refiere como la obtengo… si alguien puede explicarme!!!

    Responder

  6. Linuxero

    ¿Y cómo hago para que vuelva a pedirme la contraseña?

    Responder

  7. Erick Camacho Plata

    Intenté esto porque cada vez que quiero instalar algo, me pide contraseña y cuando intento teclear algo, no me lo permite. Simplemente no aparece ningún caracter.
    Soy nuevo en esto de Ubuntu, jaja.

    Responder

Deja un comentario