¿Ejecutar sudo sin contraseña?

292

Inspirado por esta pregunta ...

Soy la única persona que usa mi sistema con 12.04.
Cada vez que emito un sudocomando; el sistema solicita la contraseña de usuario (que es buena a su manera).
Sin embargo estaba pensando; sin activar la cuenta raíz ; ¿Cómo puedo ejecutar los comandos sudo que no solicitarán la contraseña de usuario para autenticar?

NOTA: Quiero ejecutar el comando sudo sin autenticarme mediante contraseña; solo cuando se ejecutan vía terminal.
No quiero eliminar esta capa adicional de seguridad de otras funciones, como cuando uso 'Centro de software de Ubuntu' o ejecuto un script bash arrastrando y soltando el archivo something.sh al terminal.

Bhavesh Diwan
fuente
2
¿entonces solo quiere que se le pida la contraseña en la terminal y otras cosas que no, o al revés? en ambos sentidos, creo que es una violación de alta seguridad
Dr_Bunsen
Quiero que el sistema no solicite la contraseña solo cuando esté en la terminal ... para cualquier otro propósito, el sistema debe solicitar una contraseña. Este requisito es solo temporal, y se debe usar al configurar e instalar nuevos servidores ... durante las nuevas instalaciones del servidor, realmente toma horas configurarlo con los comandos sudo ... emitir una contraseña cada 15 minutos. es dolor de cabeza No quiero usar la cuenta raíz.
Bhavesh Diwan
Debe
david6
1
Seguro que puede prolongar el tiempo de espera. Además, si frecuentemente realiza nuevas configuraciones de servidor, debería pensar en automatizar el proceso. No se le paga por escribir, se le paga por resolver problemas y hacer sh * t.
MauganRa

Respuestas:

82

sudo -i es el camino a seguir si no desea escribir una contraseña cada 10 minutos mientras realiza modificaciones en su sistema (u otros sistemas), y no desea modificar ningún archivo del sistema.

Lo cambiará a root usando su sudocontraseña de usuario, cuando cierre la consola o escriba exit, volverá a su usuario normal.

Bruno Pereira
fuente
2
¿Será esto cierto si ingreso la contraseña solo una vez ... y hasta el momento en que no salga? tiempo 5 hrs. o 15 .... el sistema no solicitará autenticación por contraseña cuando se emita un comando sudo.
Bhavesh Diwan
2
@ Z9iT hasta que escriba exito hasta que cierre la ventana del emulador de terminal.
Bruno Pereira
2
Gracias. Acepté esta respuesta porque tiene el propósito de emitir comandos sudo sin autenticación de contraseña durante n horas hasta el momento en que no salgamos. No modificar los archivos del sistema es una ventaja.
Bhavesh Diwan
3
Esto realmente no responde a la pregunta, porque aún necesita ingresar la contraseña para convertirse en root en ese punto.
Adam F
2
No, si está ejecutando una máquina virtual en un entorno seguro y solo desea que la cosa haga algo de inmediato y no desea lidiar con las contraseñas. Esta respuesta no responde la pregunta, mientras que podría decirse que es información útil. Estoy de acuerdo con Adam F
Jonathan Komar
573

Puede configurar sudopara nunca solicitar su contraseña.

Abra una ventana de Terminal y escriba:

sudo visudo

En la parte inferior del archivo, agregue la siguiente línea:

$USER ALL=(ALL) NOPASSWD: ALL

¿Dónde $USERestá tu nombre de usuario en tu sistema? Guarde y cierre el archivo sudoers (si no ha cambiado su editor de terminal predeterminado (sabrá si lo ha hecho), presione ctl + x para salir nanoy le pedirá que guarde).

A partir de Ubuntu 19.04, el archivo ahora debería verse como

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults    env_reset
Defaults    mail_badpass
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

YOUR_USERNAME_HERE ALL=(ALL) NOPASSWD: ALL

Después de esto, puede escribir sudo <whatever you want>en una ventana de Terminal sin que se le solicite la contraseña.

Esto solo se aplica al uso del sudocomando en la terminal. Aún se le pedirá su contraseña si (por ejemplo) intenta instalar un paquete desde el centro de software

solicitud de contraseña de gui

Octávio Filipe Gonçalves
fuente
15
Se recomienda usar en sudo visudolugar de editarlo directamente. También cambiar los permisos de los sudoers puede bloquearse. Al editar con vim, use :wq!para escribir en archivos de solo lectura y salga del editor. De esa manera, los permisos 644 no son necesarios.
Lekensteyn
8
Este es un grave riesgo de seguridad, cualquiera que se haga cargo de cualquier cuenta con derechos de sudo puede tomar el control del sistema completo y bloquear cualquier otro acceso a esta computadora, lo que no se recomienda.
Bruno Pereira
66
@ wil93 se está perdiendo el punto: un script que solicita sudo install crapwareno solicitará una contraseña en este caso y puede estropear todo lo que tiene, y no necesita estar físicamente al lado de una máquina para distribuir los scripts la última vez que lo revisé. .. Esto es solo un ejemplo.
Bruno Pereira
12
@BrunoPereira Si planea ejecutar scripts no confiables, entonces ese es el riesgo de seguridad (incluso si sudo solicita una contraseña, un script malicioso siempre podría rm -rf ~estropear algunas cosas). En general, no llamaría «riesgo de seguridad grave» a la simple eliminación de la solicitud de contraseña de sudo.
wil93
55
De acuerdo con @ wil93. Cuando se ejecuta un script no confiable, ingresar una contraseña no es más que una oportunidad para cancelar el proceso, aunque dudo que sea inútil para la mayoría de las personas. El punto es que sabes de dónde proviene el guión y qué hace.
Chad
36

Los tiempos de espera de sudo raíz son la forma más fácil y segura de hacerlo. Presentaré todos los ejemplos, pero tenga en cuenta que es muy arriesgado de cualquier manera que haga esto, aunque de esta manera es mucho más seguro:

sudo visudo

Esto abre un editor y lo apunta al archivo sudoers: Ubuntu por defecto es nano, otros sistemas usan Vi. Ahora eres un súper usuario que edita uno de los archivos más importantes de tu sistema. ¡Sin estrés!

(Vi instrucciones específicas anotadas con (vi!) . Ignore estas si está usando nano.

Use las teclas de flecha para moverse al final de la Defaultslínea.

(vi!) presione la tecla A ("a" mayúscula) para moverse al final de la línea actual e ingresar al modo de edición (agregar después del último carácter en la línea).

Ahora escriba:

,timestamp_timeout=X

donde X es la caducidad del tiempo de espera en minutos. Si especifica 0, siempre se le pedirá la contraseña. Si especifica un valor negativo, el tiempo de espera nunca caducará. Por ej Defaults env_reset,timestamp_timeout=5.

(vi!) pulsa Escape para volver al modo de comando. Ahora, si está satisfecho con su edición, escriba :w Enterpara escribir el archivo y :q Entersalir de vi. Si cometió un error, quizás la forma más fácil es rehacer desde el inicio, salir sin guardar (presione Escapepara ingresar al modo de comando) y luego escriba: q! Enter.

Presiona Ctrl+ X, luego Y, luego Enterpara guardar tu archivo y salir de nano.

Es posible que desee leer las páginas del manual de sudoers y vi para obtener información adicional.

man sudoers
man vi

Restablecer el valor de tiempo de espera usando:

sudo -k

Estas instrucciones son para eliminar la solicitud de contraseña cuando se usa el comando sudo. Sin embargo, el comando sudo aún deberá usarse para el acceso raíz.

Edite el archivo sudoers

Abre una ventana de Terminal. Teclear sudo visudo. Agregue la siguiente línea al FIN del archivo (si no al final puede ser anulado por entradas posteriores):

<username> ALL=NOPASSWD: ALL

Reemplace <username>con su nombre de usuario (sin el <>). Esto supone que Ubuntu ha creado un grupo con el mismo nombre que su nombre de usuario, lo cual es típico. Puede usar alternativamente los usuarios del grupo o cualquier otro grupo en el que se encuentre. Solo asegúrese de estar en ese grupo. Esto se puede verificar yendo a Sistema -> Administración -> Usuarios y grupos.

Ejemplo:

michael ALL=NOPASSWD: ALL

Escriba ^ X ( Ctrl+ X) para salir. Esto debería solicitar una opción para guardar el archivo, escriba Y para guardar.

Cierre la sesión y vuelva a iniciarla. Esto debería permitirle ejecutar el comando sudo sin que se le solicite una contraseña.

La cuenta raíz

Habilitar la cuenta raíz

Habilitar la cuenta raíz rara vez es necesario. Casi todo lo que necesita hacer como administrador de un sistema Ubuntu se puede hacer a través de sudo o gksudo. Si realmente necesita un inicio de sesión root persistente, la mejor alternativa es simular un shell de inicio de sesión Root con el siguiente comando:

sudo -i

Sin embargo, si debe habilitar los inicios de sesión raíz, puede hacerlo así:

sudo passwd root

Rehabilitar su cuenta raíz

Si por alguna razón ha habilitado su cuenta raíz y desea deshabilitarla nuevamente, use el siguiente comando en el terminal:

sudo passwd -dl root

Sudo grupal en todo el sistema

root$ echo "%sudo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

Cerrar sesión y luego volver a ingresar.

Restablecer sudo timeout

Puede asegurarse de que sudo solicite la contraseña la próxima vez ejecutando:

sudo -k
usuario209328
fuente
Publiqué esto antes de agregar, para una forma amplia de hacer esto en el sistema y otros leen aquí:
user209328
Esta fue una respuesta tardía, pero es la más completa en términos de las opciones que le ofrece.
jenming
1
Hmm, en Ubuntu 18.04 MATE esto funciona perfectamente, mientras que hacer lo mismo en Ubuntu 18.04 GNOME me causó arrugas con el problema "nombre de usuario no está en el archivo sudoers ...". Ahora, esta es la razón por la cual tanta gente simplemente odia a Linux, porque rara vez es "causal": D Solo en caso de que U se encuentre con lo mismo ... Así es como soluciona el problema: tecmint.com/…
Peter
La variable de entorno EDITOR puede configurar el editor utilizado ... por ejemplo, sudo env EDITOR=/bin/nano visudopara editar de manera confiable sudoersen nano. (las alternativas de actualización también se pueden usar para configurar el editor)
Gert van den Berg
29

La forma preferida de otorgar permisos individuales (o grupales) sería agregar archivos en /etc/sudoers.d

Esto separa los cambios locales de la política predeterminada y ahorra tiempo en caso de que cambie el archivo de sudoers de distribución.

Para hacer que el usuario actualmente conectado sea un sudoer y sudono pedirle una contraseña, use

echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/$USER

esto creará un archivo llamado /etc/sudoers.d/$USER(donde $USERestá el nombre de usuario del usuario con el que inició sesión como cuando ejecutó ese comando), dejando en claro qué usuarios tienen permiso.

Si desea hacer eso para un usuario diferente, simplemente reemplace ambas instancias $USERcon algún otro nombre de usuario en el comando anterior.

echo "otheruser ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/otheruser

Del mismo modo, un archivo se puede usar para administrar múltiples directivas:

echo "username ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers.d/local

Ver /etc/sudoers.d/READMEy man sudoerspara más información.

usuario1656671
fuente
el comando echo falló, aunque soy root. pero, he añadido el archivo y lo editó directamente y esto trabajé en última ubuntu (mientras que la adición de que el usuario los sudoers directamente no!)
escapar
1
La forma correcta es hacerlo con teecomando.
woto
1
Esta es una mejor manera que funciona:, sudo sh -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/$(logname)'seguido porsudo chmod 440 /etc/sudoers.d/$(logname)
paradroid
En sudo ... >fileshell, la redirección se ejecuta en el shell original, por lo que podría funcionar solo en el shell raíz.
Konstantin Pelepelin
el método tee, sin problemas de permisos:echo "username ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/username
Carson Ip
7

Una línea agradable para eliminar las indicaciones de sudo para el usuario actual

sudo bash -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" | (EDITOR="tee -a" visudo)'
Eric Landry
fuente
2
Creo que podría hacer: echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo env EDITOR="tee -a" visudosolo visudonecesita sudodespués de todo (e incluso envno será necesario en la configuración predeterminada, IIRC).
muru
hay tantas cosas que podrían salir mal aquí (todo error de usuario, por supuesto), que es preferible, en mi muy humilde opinión, editar el archivo sudoer directamente ( sudo visudo), mientras se prueba el resultado (con el editor aún abierto), para aquellos usuarios nuevos que podrían verse tentados a probar este "one-liner".
michael
¡Gracias por la respuesta! Simplemente estaba tratando rápidamente de eliminar la solicitud de contraseña de sudo en mis máquinas virtuales de prueba volátiles. Siéntase libre de sugerir mejoras :)
Eric Landry
Aún necesita sudo chmod 440 /etc/sudoers.d/$(logname)corregir los permisos de archivo como se indica en el archivo README en ese directorio.
Paradroid
6

Por supuesto, lo que quieres hacer no es recomendable. Después de un tiempo, aunque entrar se sudovuelve tan automático que disminuye su utilidad.

Otro enfoque es dejar su archivo de sudoers tal como está y, mientras hace algo complicado para sus miles de servidores, ingrese sudo bash. Eso le dará un shell que se autenticará como root hasta que salga de él.

John S Gruber
fuente
12
sudo -so sudo -ison probablemente ambas mejores ideas que sudo bash, porque aseguran que el medio ambiente es sano y las cosas
Darael
2
"cuerdo y cosas" generalmente no está en el ámbito de las "mejores ideas", ¿alguien podría dar una explicación técnica de por qué sudo -s o sudo -i es mejor que sudo bash? (Editar: Aquí hay una pregunta relevante askubuntu.com/questions/376199/… )
Nuzzolilo
2
una serie de sudocomandos (pensando especialmente en sudo pip ...) requieren sudo -H(establecer HOME) para que el comando se ejecute correctamente. En otros casos, sudo -E(preservar env) puede ser requerido. La ejecución sudo bashprobablemente funcionará en la mayoría de los casos, pero no en todos, y cuando no lo haga, no estará claro por qué.
michael
1
sudo su es la forma tradicional de cambiar de roles y comenzar a actuar como administrador del sistema.
user1656671
3

De Super User viene una buena respuesta:

Use el modificador -S que lee la contraseña de STDIN:

echo <password> | sudo -S <command>

Reemplace <password>con su contraseña.

WinEunuuchs2Unix
fuente
2
Esto no se sugiere, porque la contraseña permanece en cleartype en el archivo de historial de shell. Aplique cualquiera de las otras soluciones en su lugar.
HappyCactus
1
@HappyCactus, ¿puedes colocar una vez el espacio delante echopara que no aparezca en la historia?
WinEunuuchs2Unix
Sí, esto evitará exponer la contraseña de texto sin cifrar al archivo de historial. ¿Pero siempre recuerdas agregarlo? :-)
HappyCactus
@HappyCactus Tiendo a agregar espacios iniciales por accidente y luego me molesto cuando no se puede recordar el historial :) De todos modos, el Súper Usuario tiene 129 votos a favor, así que creo que es una buena respuesta para salir de aquí. La gente leerá nuestros comentarios y conocerá los riesgos y los pasos de aversión al riesgo.
WinEunuuchs2Unix
Estoy totalmente de acuerdo. ¡Que tengas un buen día!
HappyCactus
2

Un trazador de líneas

sudo sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g'

upteryx
fuente
2

Esta es una solución de una línea que también cambia los permisos de los archivos como se indica en /etc/sudoer.d/README:

sudo sh -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/$(logname)' & sudo chmod 440 /etc/sudoers.d/$(logname)
paradroid
fuente
0
  • Ampliando la idea de @upteryx.

  • Así es como he implementado el usuario no root, sin contraseña en una imagen efímera de Docker para usar en una tubería CICD:

RUN \
    groupadd -g 999 foo && useradd -u 999 -g foo -G sudo -m -s /bin/bash foo && \
    sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^root.*/root ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^#includedir.*/## **Removed the include directive** ##"/g' && \
    echo "foo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
    echo "Customized the sudoers file for passwordless access to the foo user!" && \
    echo "foo user:";  su - foo -c id
Seth Bergman
fuente