2010-06-10 2 views
12

Quindi voglio essere in grado di limitare: distribuire senza dover digitare alcuna password. Ho installato tutte le chiavi private in modo da poter accedere ai server remoti e ora sto usando svn su ssh, quindi non ci sono password.Riavvia nginx senza sudo?

Ho un ultimo problema, devo essere in grado di riavviare nginx. In questo momento ho sudo /etc/init.d/nginx reload. Questo è un problema b/c utilizza la password capistrano, quella che ho appena rimosso b/c sto usando le chiavi. Qualche idea su come riavviare nginx senza una password?

+0

Questo tipo di domanda sarebbe l'indirizzo migliore su http://www.serverfault.com. Inoltre, dai un'occhiata a http://courtesan.com/sudo/man/sudoers.html#nopasswd_and_passwd per imparare come rimuovere le password per alcuni comandi usando sudo. – randombits

+0

Hai sicuramente bisogno di riavviare Nginx? Se si utilizza Passenger per servire un'app Rack come Rails, l'esecuzione di 'touch tmp/restart.txt' nella directory di rilascio dovrebbe consentire a Passenger di sapere che è necessario riavviare. – Leo

risposta

38

Ho appena trascorso una buona ora guardando i caratteri jolly sudoer e simili cercando di risolvere questo problema esatto. In realtà, tutto ciò di cui hai veramente bisogno è uno script eseguibile di root che riavvii nginx.

Aggiungere questo al file/etc/sudoers file di

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

Scrivi script come radice

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

Rendere lo script eseguibile

test.

sudo /path/to/script 
+1

Questo è ... bellissimo! Che incredibile soluzione! Ho usato capistrano per due anni e non mi ero reso conto che fosse possibile. – ndbroadbent

+0

@ nathan.f77 è esattamente ciò di cui avevo bisogno. – phoolish

+3

Se qualcuno ha compromesso l'account che esegue l'app, sarebbe in grado di modificare questo script ed eseguire comandi arbitrari come root? –

2

C'è una better answer on Stack Overflow che non coinvolge la scrittura di uno script personalizzato:

La pratica migliore è quella di utilizzare /etc/sudoers.d/myuser

La cartella /etc/sudoers.d/ può contenere più file che consentono agli utenti di chiamare roba che usa sudo senza essere root.

Il file contiene in genere un utente e un elenco di comandi che l'utente può eseguire senza dover specificare una password.

Istruzioni:

In tutti i comandi, sostituire myuser con il nome del vostro utente che si desidera utilizzare per riavviare nginx, senza sudo.

  1. Aprire file sudoers per l'utente:

    $ sudo visudo -f /etc/sudoers.d/myuser 
    
  2. Editor si aprirà. Lì si incolla la seguente riga. Questo permetterà che all'utente di eseguire inizio nginx, riavvio, e stop:

    $ myusername ALL=(ALL) NOPASSWD: /usr/sbin/service nginx start,/usr/sbin/service nginx stop,/usr/sbin/service nginx restart 
    
  3. Salva colpendo Ctrl +o. Chiederà dove si desidera salvare, semplicemente premere immettere per confermare l'impostazione predefinita. Quindi uscire dall'editor con ctrl + x.

Ora è possibile riavviare (e avvio e arresto) nginx, senza password.Proviamolo.

  1. Aprire nuova sessione (in caso contrario, si potrebbe semplicemente non verrà chiesta la password di sudo perché non è scaduta):

    $ ssh [email protected] 
    
  2. arresto nginx

    $ sudo /usr/sbin/service nginx stop 
    
  3. Conferma che nginx si è fermato controllando il tuo sito web o eseguendo ps aux | grep nginx

  4. Inizio nginx

    $ sudo /usr/sbin/service nginx start 
    
  5. Verificare che nginx ha iniziato controllando il vostro sito web o in esecuzione ps aux | grep nginx

PS: Assicurarsi di utilizzare sudo /usr/sbin/service nginx start|restart|stop, e non sudo service nginx start|restart|stop.

+0

Ottima soluzione. Sembra che tu possa omettere '/ usr/sbin /'. Almeno funziona nel mio ambiente senza. –