Linux: ¿cómo dar permiso a un usuario para reiniciar apache?

35

Tengo un script que se ejecuta bajo un usuario no root que, bajo ciertas condiciones, debería reiniciar apache httpd.

¿Cuál sería la forma más sencilla para que yo permita al usuario hacer eso?

Estoy usando Ubuntu Server 8.04 LTS.

itsadok
fuente

Respuestas:

84

Respuesta corta:

Utilizando visudo, agregue lo siguiente a su archivo sudoers, reemplazando el nombre de usuario con el nombre de usuario apropiado:

username ALL = /etc/init.d/apache2 

Si desea no tener que escribir una contraseña antes de hacer esto, use lo siguiente:

username ALL = NOPASSWD: /etc/init.d/apache2 

Después de esto, el usuario 'nombre de usuario' puede ejecutar sudo /etc/init.d/apache2 start(o detener, reiniciar, etc.)

Respuesta larga: es probable que desee configurar un usuario separado para esto si aún no lo ha hecho, y luego configurar el archivo / etc / sudoers para permitir que un usuario o grupo ejecute el comando que desea.

Por ejemplo, para permitir que el usuario 'ben' ejecute todos los comandos como root solicitando una contraseña, debe hacer lo siguiente:

ben ALL= ALL

Para permitir que 'ben' ejecute solo un comando (como say, rm), debe hacer lo siguiente:

ben ALL= /bin/rm 

Si está ejecutando un script como usuario y no desea solicitar una contraseña, deberá usar la opción 'NOPASSWD' de esta manera:

ben ALL=NOPASSWD: /bin/commandname options

Puede hacer lo mismo para los grupos con el prefijo de los nombres de los grupos con un signo de porcentaje, así:

%supportstaff          ALL= NOPASSWD: /bin/commandname 
epic9x
fuente
2
¿Se usernamepuede restringir a un subconjunto de parámetros? Decir start restartpero no stop?
ThorSummoner
el visudocomando realiza comprobaciones de seguridad en sus ediciones para que no rompa el comando sudo/ supor accidente: unix.stackexchange.com/a/27595/61349
ThorSummoner
1

Respuesta corta: sudo.

La llamada sería similar a la siguiente: sudo /etc/init.d/apache2 restart

Lo más fácil es usarlo visudopara configurar el archivo / etc / sudoers. Ver man sudoersy man visudopara más detalles.

Zayne S Halsall
fuente
OP dijo sobre hacerlo a través de un script: el script no podrá ingresar una contraseña, por lo que esta respuesta no tendrá ningún sentido.
Matt Fletcher
@MattFletcher a menos que use NOPASSWD
Robin Kanters
0

También puede lograr esto escribiendo un contenedor en apache2ctl, asignando la propiedad del grupo a un grupo de administración web y configurando el bit suid. Esta es una solución menos general que visudo, pero permite limitaciones personalizadas en las capacidades del usuario y la verificación de errores.

Escribí esta herramienta para mis propias necesidades y la he compartido en github: https://github.com/josiahjohnston/ltd_apache2ctl

JosiahJohnston
fuente