2010-06-10 23 views
12

Así que quiero ser capaz de limitar: implementar sin tener que escribir ninguna contraseña. Configuré todas las claves privadas para poder acceder a los servidores remotos, y ahora estoy usando svn en ssh, así que no tengo contraseñas allí.¿Reiniciar nginx sin sudo?

Tengo un último problema, necesito poder reiniciar nginx. Ahora mismo tengo sudo /etc/init.d/nginx recarga. Ese es un problema b/c usa la contraseña capistrano, la que acabo de eliminar b/c Estoy usando claves. ¿Alguna idea sobre cómo reiniciar nginx tendrá una contraseña?

+0

Este tipo de pregunta sería una mejor dirección en http://www.serverfault.com. Además, consulte http://courtesan.com/sudo/man/sudoers.html#nopasswd_and_passwd para obtener información sobre cómo eliminar contraseñas de ciertos comandos mediante sudo. – randombits

+0

¿De verdad necesitas reiniciar Nginx? Si está utilizando Passenger para servir una aplicación de Rack como Rails, ejecutar 'touch tmp/restart.txt' en el directorio de versiones debe indicarle a Passenger que necesita reiniciarse. – Leo

Respuesta

38

Acabo de pasar una buena hora mirando comodines sudoer y similares tratando de resolver este problema exacto. En verdad, todo lo que realmente necesita es un script ejecutable de raíz que reinicie nginx.

Esto, unido al/etc/sudoers archivo

username hostname ALL=NOPASSWD: /path/to/script 

write script como root

#! /bin/bash 
/bin/kill -HUP `cat /var/run/nginx.pid` 

Haga el script ejecutable

prueba.

sudo /path/to/script 
+1

Eso es ... hermoso! ¡Qué solución tan increíble! He estado usando capistrano durante dos años, y no me di cuenta de que esto era posible. – ndbroadbent

+0

@ nathan.f77 eso es exactamente para lo que lo necesitaba. – phoolish

+3

Si alguien ha puesto en peligro la cuenta que ejecuta la aplicación, ¿podría editar esta secuencia de comandos y ejecutar comandos arbitrarios como raíz? –

2

Hay una better answer on Stack Overflow que no implica escribir un script personalizado:

La mejor práctica es utilizar /etc/sudoers.d/myuser

La carpeta /etc/sudoers.d/ puede contener múltiples archivos que permiten a los usuarios para llamar cosas usando sudo sin ser root

El archivo generalmente contiene un usuario y una lista de comandos que el usuario puede ejecutar sin tener que especificar una contraseña.

Instrucciones:

En todos los comandos, reemplazan miUsuario con el nombre de su usuario que desea utilizar para reiniciar nginx sin sudo.

  1. sudoers abierto para el usuario:

    $ sudo visudo -f /etc/sudoers.d/myuser 
    
  2. Editor se abrirá. Ahí pegue la siguiente línea. Esto permitirá que el usuario ejecute inicio nginx, reiniciar y detener:

    $ myusername ALL=(ALL) NOPASSWD: /usr/sbin/service nginx start,/usr/sbin/service nginx stop,/usr/sbin/service nginx restart 
    
  3. Guardar golpeando ctrl +o. Le preguntará dónde desea guardar, simplemente presione ingrese para confirmar el valor predeterminado. A continuación, salga del editor con ctrl + x.

Ahora puede reiniciar (e iniciar y detener) nginx sin contraseña.Vamos a intentarlo.

  1. Abrir nueva sesión (de lo contrario, es posible que simplemente no se le pedirá su contraseña sudo porque no se ha agotado el tiempo):

    $ ssh [email protected] 
    
  2. parada nginx

    $ sudo /usr/sbin/service nginx stop 
    
  3. Confirme que nginx se ha detenido consultando su sitio web o ejecutando ps aux | grep nginx

  4. inicio nginx

    $ sudo /usr/sbin/service nginx start 
    
  5. Confirmar que Nginx ha comenzado por el control de su sitio web o correr ps aux | grep nginx

PS: Asegúrese de utilizar sudo /usr/sbin/service nginx start|restart|stop y no sudo service nginx start|restart|stop.

+0

Gran solución. Sin embargo, parece que puedes omitir '/ usr/sbin /'. Al menos funciona en mi entorno sin. –