Linux: Wie kann man einem Benutzer die Erlaubnis geben, Apache neu zu starten?

35

Ich habe ein Skript, das unter einem Nicht-Root-Benutzer ausgeführt wird, der unter bestimmten Bedingungen Apache httpd neu starten sollte.

Was wäre für mich die einfachste Möglichkeit, dem Benutzer dies zu ermöglichen?

Ich benutze Ubuntu Server 8.04 LTS.

itsadok
quelle

Antworten:

84

Kurze Antwort:

visudoFügen Sie Ihrer sudoers-Datei unter Verwendung von Folgendes hinzu, und ersetzen Sie den Benutzernamen durch den richtigen Benutzernamen:

username ALL = /etc/init.d/apache2 

Wenn Sie dazu kein Kennwort eingeben müssen, verwenden Sie Folgendes:

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

Danach kann der Benutzer 'Benutzername' ausführen sudo /etc/init.d/apache2 start(oder stoppen, neu starten usw.)

Lange Antwort: Wenn Sie dies noch nicht getan haben, möchten Sie wahrscheinlich einen separaten Benutzer einrichten und dann die Datei / etc / sudoers so konfigurieren, dass ein Benutzer oder eine Gruppe den gewünschten Befehl ausführen kann.

Um es dem Benutzer 'ben' beispielsweise zu ermöglichen, alle Befehle als root auszuführen und zur Eingabe eines Kennworts aufzufordern, gehen Sie wie folgt vor:

ben ALL= ALL

Um zuzulassen, dass 'ben' nur einen Befehl ausführt (wie zum Beispiel, rm), würden Sie Folgendes tun:

ben ALL= /bin/rm 

Wenn Sie als Benutzer ein Skript ausführen und nicht zur Eingabe eines Kennworts auffordern möchten, sollten Sie die Option 'NOPASSWD' wie folgt verwenden:

ben ALL=NOPASSWD: /bin/commandname options

Sie können das Gleiche für Gruppen tun, indem Sie den Gruppennamen ein Prozentzeichen voranstellen.

%supportstaff          ALL= NOPASSWD: /bin/commandname 
epic9x
quelle
2
Kann usernameauf eine Untermenge von Parametern beschränkt werden? Sag start restartdoch nicht stop?
ThorSummoner
Der visudoBefehl führt Sicherheitsprüfungen für Ihre Änderungen durch, damit Sie den Befehl sudo/ nicht suversehentlich unterbrechen
ThorSummoner
1

Kurze Antwort: sudo.

Der Aufruf würde ungefähr so ​​aussehen: sudo /etc/init.d/apache2 restart

Am einfachsten ist es, die visudoDatei / etc / sudoers einzurichten. Siehe man sudoersund man visudofür Details.

Zayne S. Halsall
quelle
OP hat gesagt, dass dies über ein Skript geschehen soll - das Skript kann kein Kennwort eingeben, daher ergibt diese Antwort keinen Sinn.
Matt Fletcher
@ MattFletcher, es sei denn, Sie verwenden NOPASSWD
Robin Kanters
0

Sie können dies auch erreichen, indem Sie einen Wrapper für apache2ctl schreiben, einer Webadministrationsgruppe den Gruppeneigentum zuweisen und das suid-Bit setzen. Dies ist eine weniger allgemeine Lösung als visudo, ermöglicht jedoch benutzerdefinierte Einschränkungen der Benutzerfähigkeiten und der Fehlerprüfung.

Ich habe dieses Tool für meine eigenen Bedürfnisse geschrieben und es auf github geteilt: https://github.com/josiahjohnston/ltd_apache2ctl

JosiahJohnston
quelle