¿Cómo ejecutar una aplicación usando sudo sin contraseña?

40

... pero aún se requiere para aplicaciones que necesitan privilegios de administrador?

Para permitir lo siguiente:

$ apache2ctl restart
httpd not running, trying to start
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs

$ sudo !!
sudo apache2ctl restart             #no password asked
$                                   #works!

Como referencia, he visto esta configuración en instancias de Amazon e3

¿Alguna idea?

tutuca
fuente
Este es un gran tutorial en los foros que detalla la creación de un archivo separado para especificar los programas que utiliza habitualmente. Y es una buena idea por razones de seguridad.
Todd Partridge 'Gen2ly'

Respuestas:

51

Necesita editar el archivo sudoers. Tenga en cuenta que el éxito le brinda un sistema menos seguro y el fracaso puede romper sudo. SIEMPRE edite el archivo sudoers con sudo visudo, como visudo comprueba si hay errores y no guardará el archivo si se encuentra alguno.

Es una mala idea dar permiso a todo para que se ejecute como root sin una contraseña, por lo que simplemente debe dejar pasar el ejecutable que necesita (apache2ctl); agregue lo siguiente al final del archivo:

YOURNAME ALL = NOPASSWD: /usr/bin/apache2ctl

Si lo desea, puede reemplazar la ruta a un ejecutable con "TODO", lo que le proporciona un sudo sin contraseña completo.

Reemplace YOURNAME con su nombre de usuario y presione Ctrl+ Xpara guardar y salir. Si ocurrió un error, ofrecerá revertir, editar o guardar de todos modos.

Asegúrese de utilizar la ruta completa a un ejecutable:
es decir. /usr/bin/apache2ctlen lugar de sólo apache2ctl. Esto es importante porque sin indicar explícitamente la ruta sudo permitirá que cualquier programa llamado apachectl en la ruta actual del usuario se ejecute como root.

Mark Paskal
fuente
3
Tenga en cuenta que %YOURNAMEdará permiso al grupo nombrado como su usuario, lo que normalmente no es un problema, ya que cada usuario normal tiene un grupo con nombre similar en los sistemas Ubuntu. Para dar permiso a su usuario, especifique YOURNAMEsin el%.
Daniel Werner
¿Hay alguna manera de ser más restructivo? (solo algunas funciones del ejecutable)
3pic
1
Antiguo puesto, pero definitivamente completaría esa respuesta mediante la restricción de la entrada de los sudoers' a un nombre de host en particular (si es posible), y, o bien a los argumentos dados o para ningún argumento en absoluto (siguientes apache2ctl), así: YOURNAME YOUR-HOSTNAME = NOPASSWD: /usr/bin/apache2ctl <specific arg | "">. --- En todos los casos man 5 sudoerses la referencia para ir a.
Cbhihe
25

La respuesta real a esta pregunta puede ser complicada porque sudo es muy poderoso y puede configurarse para hacer cosas geniales. Esto se explica a fondo en la documentación .

La respuesta corta se ejecuta sudo visudoen una terminal. Si es la primera vez que ejecuta Visudo, le preguntará qué editor prefiere. Por lo general, se cree que nano es el más fácil de usar, pero elija el editor con el que se sienta más cómodo / familiarizado. Deberá decidir a quién desea dar acceso; podría ser ALLpara todos (una muy mala idea) , un usuario o un grupo de sistemas. Los grupos tienen el prefijo con un signo%. Por ejemplo, si desea otorgar steroid_usersprivilegios de root a todos los miembros del grupo sin la necesidad de una contraseña para todos los comandos, debe agregar:

%steroid_users ALL=(ALL) NOPASSWD: ALL

hasta el final del archivo, salga y guarde el archivo. Si todo va bien y usted es miembro del grupo steroid_users, podrá emitir sudo *some-command*sin la molestia de tener que ingresar su contraseña.

Tenga en cuenta que cualquiera que tenga acceso a su terminal mientras está conectado, o si tiene una configuración ssh para autenticación basada en clave, o (aún peor) ha habilitado inicios de sesión de sesión sin contraseña, acceso completo y sin restricciones a todo su sistema. Si tiene varios usuarios en su sistema, o si se trata de un servidor de archivos, ¡todos los archivos de los usuarios podrían estar en riesgo ya que la raíz puede hacer cualquier cosa!

Además, si comete un error, visudo generará un mensaje de error y no guardará los cambios en el archivo. Esto ayudará a evitar romper sudo por completo. Realmente deberías leer la documentación . Sudo está diseñado para dar a los usuarios el acceso suficiente para hacer su trabajo sin la necesidad de exponer todo su sistema. Puede ser ventajoso dar solo acceso sin contraseña para ciertos comandos.

Espero que esto ayude.

Chris
fuente
Eso funcionó, tomé esto y luego usé "sudo service sudo restart" de askubuntu.com/questions/192050/… y pude usar todo esto en mi sesión activa de Ubuntu. ¡Increíble!
Patrick
5

Deberá editar el archivo '/ etc / sudoers' (hay un comando 'visudo' para eso) para agregar NOPASSWD antes de la lista de comandos permitidos para su usuario o grupo. Si su usuario está en el grupo 'admin', necesita lo siguiente:

%admin ALL=(ALL) NOPASSWD: ALL

Verifique https://help.ubuntu.com/community/Sudoers , por cierto.

korjjj
fuente
3

PODRÍA agregar el indicador nopasswd a la lista de usuarios, pero eso no elimina todas las contraseñas formuladas. Solo se le preguntará al primero.

  1. Editar sudoers: sudo visudo(DEBE usar sudo. Este es un archivo de administración).
  2. Agregue su usuario con el indicador nopasswd después de la línea de administración (al final). Por ejemplo:
    cyrex ALL = NOPASSWD: ALLocyrex ALL = (ALL) NOPASSWD: ALL
Luis Alvarado
fuente
2
sudo visudo
%<GROUP> ALL = NOPASSWD: apache2ctl

o

sudo visudo
%<GROUP> ALL = NOPASSWD: /etc/init.d/apache2

Supongo que esto lo haría.

Pero tenga cuidado con la eliminación de contraseñas para sudo.

Alex
fuente
2
Debe especificar la ruta absoluta en el primer ejemplo, por razones de seguridad: un usuario sin escrúpulos podría cambiar $ PATH y robar el acceso a la raíz con un nombre de comando no calificado.
bgvaughan
0

Ahora para la respuesta simple! No hay forma posible de estropear nada o evitar su instalación.

¡Solo ingrese su contraseña un par de veces y luego nunca más tendrá que ingresarla! Esto le permitirá agregar una cuenta de administrador local al grupo "raíz", que luego no se comenta desde una plantilla que le permitirá a todo el grupo privilegios de superusuario "raíz". Puede leer mi problema / solución de seguridad para este procedimiento en la parte posterior de esta publicación.

% username & es la variable global para su nombre de usuario (reemplácelo con el nombre de usuario deseado)

Paso 1: abre una ventana de terminal y luego escribe " sudo usermod -a -G root %username%"

Paso 2: luego copie / pegue esto ...

sudo sed -i 's/# auth       sufficient pam_wheel.so trust/auth       sufficient pam_wheel.so trust/g' /etc/pam.d/su`

Paso 2 O escriba

sudo nano /etc/pam.d/su`

Pase a la línea 19 y elimine el "#" antes # auth sufficient pam_wheel.so trust(puede ser un número de línea diferente para algunos)

* El primer comando agrega su% username% al grupo "root"

El segundo / tercer comando permite a todos los miembros del grupo "root" ser superusuario sin contraseña, en lugar de solo permitir al usuario "root" su privilegios para las autenticaciones.


Nota final:

No te metas con /etc/sudoers... Hay muchas comprobaciones / equilibrios que la autenticación 'su' debe pasar. La autenticación de superusuario utiliza el mismo procedimiento pam.d que todas las demás autenticaciones de inicio de sesión. "/etc/security/access.conf" tiene el diseño para el control de acceso a través de la comunicación tcp / ip (192.168.0.1) y los servicios telnet (tty1 & tty2 & tty3 ... etc.) Esto permite un filtrado más preciso por aplicación a través del protocolo de transporte. Si la seguridad es su preocupación, entonces su preocupación debe dirigirse hacia amenazas remotas / código versus alguien que realmente toque su computadora cuando salga de la habitación.

Comida para paranoia (no escriba esta en solo revisarla):

sudo sed -i 's/#-:ALL EXCEPT (wheel) shutdown sync:LOCAL/-:ALL EXCEPT (wheel) shutdown sync:LOCAL/g' /etc/security/access.conf

^ Esto bloquea el acceso a la consola para cualquier persona que no sea miembro del sistema o root. ¡A veces los programas instalan nombres de usuario / grupos que son explotados!

Nathaniel F. Malm
fuente
2
No es un experto en seguridad, pero suena un poco intuitivo. Está deshabilitando las contraseñas de todo un grupo para permitir que un solo usuario ejecute una aplicación específica sin una contraseña para evitar la "complejidad" de refinar sudo para una aplicación en particular, ¿verdad? ¿Y todo esto en un servidor público? ¿El script deshabilitó tus instintos básicos de supervivencia? La seguridad es COMPLEJO POR DISEÑO. Recuerda, es como una cebolla. Tiene capas y te hace llorar ... La pérdida de datos en servidores comprometidos es solo una parte de la ecuación. Un ataque de hacker desde su sistema es igualmente grave, pero a menudo se pasa por alto
hmayag
2
Es contrario a la intuición y al sentido común: abrir todo el tarro de cookies para un usuario que solo necesita una cookie es bastante irresponsable. Agregaría usuarios a la lista de sudoers y eliminaría la necesidad de ingresar contraseñas en lugar de editar el archivo / archivos de sudoers. "Si una pistola no es segura para los niños, no les dé un canon". -me
John