2010-06-10 16 views
12

Also ich möchte in der Lage sein zu decken: zu implementieren, ohne irgendwelche Passwörter eingeben. Ich habe alle privaten Schlüssel eingerichtet, so dass ich auf die Remote-Server in Ordnung komme, und verwende jetzt Svn über ssh, also keine Passwörter dort.Nginx ohne Sudo neu starten?

Ich habe ein letztes Problem, ich muss in der Lage sein, nginx neu zu starten. Im Moment habe ich sudo /etc/init.d/nginx nachladen. Das ist ein Problem b/c verwendet das capistrano Passwort, das ich gerade entfernt habe b/c Ich benutze Schlüssel. Irgendwelche Ideen, wie man nginx mit einem Passwort neu startet?

+0

Diese Art von Frage wäre besser Adresse auf http://www.serverfault.com. Sehen Sie sich auch http://courtesan.com/sudo/man/sudoers.html#nopasswd_and_passwd an, um zu erfahren, wie Sie Passwörter für bestimmte Befehle mit sudo entfernen können. – randombits

+0

Müssen Sie Nginx unbedingt neu starten? Wenn Sie Passener zum Bereitstellen einer Rack-App wie Rails verwenden, sollte Passage tmp/restart.txt im Veröffentlichungsverzeichnis Passenger mitteilen, dass ein Neustart erforderlich ist. – Leo

Antwort

38

Ich verbrachte gerade eine gute Stunde mit Blick auf Sudoer Wildcards und dergleichen versuchen, dieses genaue Problem zu lösen. In Wahrheit benötigen Sie lediglich ein root ausführbares Skript, das nginx neu startet.

Fügen Sie diese auf die/etc/sudoers

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

schreiben Skript als root

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

Machen Sie das Skript ausführbar

Testdatei.

sudo /path/to/script 
+1

Das ist ... schön! Was für eine erstaunliche Lösung! Ich benutze seit zwei Jahren Capistrano und wusste nicht, dass das möglich ist. – ndbroadbent

+0

@ nathan.f77 das ist genau das, wofür ich es gebraucht habe. – phoolish

+3

Wenn jemand den Account kompromittiert hat, der die App ausführt, wären sie in der Lage, dieses Skript zu bearbeiten und beliebige Befehle als root auszuführen? –

2

Es gibt eine better answer on Stack Overflow, die beinhaltet nicht ein eigenes Skript schreiben:

Die beste Praxis ist /etc/sudoers.d/myuser

Der /etc/sudoers.d/ Ordner verwenden können mehrere Dateien enthalten, die Benutzern erlauben, anrufen Sachen, die sudo verwenden, ohne root zu sein. Die Datei enthält normalerweise einen Benutzer und eine Liste von Befehlen, die der Benutzer ausführen kann, ohne ein Kennwort angeben zu müssen.

Anleitung:

In allen Befehlen ersetzen myuser mit dem Namen Ihres Benutzer, den Sie ohne sudo nginx neu zu starten, verwenden möchten.

  1. öffnen sudoers-Datei für Ihre Benutzer:

    $ sudo visudo -f /etc/sudoers.d/myuser 
    
  2. Editor geöffnet. Dort fügen Sie die folgende Zeile ein. Dies ermöglicht es, dass Benutzer nginx Start, Neustart und Stopp laufen:

    $ myusername ALL=(ALL) NOPASSWD: /usr/sbin/service nginx start,/usr/sbin/service nginx stop,/usr/sbin/service nginx restart 
    
  3. Speicher durch Schlagen ctrl + o. Sie werden gefragt, wo Sie speichern möchten. Drücken Sie einfach , geben Sie ein, um den Standardwert zu bestätigen. Dann verlassen Sie den Editor mit ctrl + x.

Jetzt können Sie neu starten (und Start und Stopp) nginx ohne Passwort.Lass es uns versuchen.

  1. öffnen neue Sitzung (sonst könnte man einfach nicht für Ihr sudo Passwort gefragt werden, weil es nicht abgelaufen ist):

    $ ssh [email protected] 
    
  2. Stopp nginx

    $ sudo /usr/sbin/service nginx stop 
    
  3. Bestätigen Sie, dass nginx gestoppt wurde, indem Sie Ihre Website überprüfen oder

  4. ausführen
  5. starten nginx

    $ sudo /usr/sbin/service nginx start 
    
  6. bestätigen, dass nginx indem Sie Ihre Website oder Laufen ps aux | grep nginx

PS begonnen hat: Stellen Sie sicher verwenden sudo /usr/sbin/service nginx start|restart|stop und nicht sudo service nginx start|restart|stop.

+0

Große Lösung. Sieht so aus, als könntest du '/ usr/sbin /' weglassen. Zumindest funktioniert es in meiner Umgebung ohne. –