Linux: come autorizzare un utente a riavviare apache?


35

Ho uno script in esecuzione con un utente non root che, in determinate condizioni, dovrebbe riavviare apache httpd.

Quale sarebbe il modo più semplice per me per consentire all'utente di farlo?

Sto usando Ubuntu Server 8.04 LTS.

Risposte:


84

Risposta breve:

Utilizzando visudo, aggiungi quanto segue al tuo file sudoers, sostituendo il nome utente con il nome utente corretto:

username ALL = /etc/init.d/apache2 

Se non si desidera digitare una password prima di eseguire questa operazione, utilizzare quanto segue:

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

Successivamente, l'utente "username" può eseguire sudo /etc/init.d/apache2 start(o arrestare, riavviare, ecc.)

Risposta lunga: Probabilmente vorrai impostare un utente separato per questo se non l'hai già fatto, e quindi configurare il file / etc / sudoers per consentire a un utente o gruppo di eseguire il comando che desideri.

Ad esempio, per consentire all'utente "ben" di eseguire tutti i comandi come prompt di root per una password, eseguire le seguenti operazioni:

ben ALL= ALL

Per consentire a "ben" di eseguire solo un comando (come dire, rm), si dovrebbe fare quanto segue:

ben ALL= /bin/rm 

Se stai eseguendo uno script come utente e non vuoi richiedere una password, ti consigliamo di utilizzare l'opzione 'NOPASSWD' in questo modo:

ben ALL=NOPASSWD: /bin/commandname options

Puoi fare la stessa cosa per i gruppi prefissando i nomi dei gruppi con un segno di percentuale, in questo modo:

%supportstaff          ALL= NOPASSWD: /bin/commandname 

2
Può usernameessere limitato a un sottoinsieme di parametri? Dire start restartma no stop?
ThorSummoner,

il visudocomando esegue controlli di sicurezza sulle modifiche in modo da non interrompere accidentalmente il comando sudo/ su: unix.stackexchange.com/a/27595/61349
ThorSummoner,

1

Risposta breve: sudo.

La chiamata sarebbe simile alla seguente: sudo /etc/init.d/apache2 restart

Il più semplice è usare visudo per impostare il file / etc / sudoers. Vedi man sudoerse man visudoper i dettagli.


OP ha detto di farlo attraverso uno script: lo script non sarà in grado di inserire una password, quindi questa risposta non avrà alcun senso.
Matt Fletcher,

@MattFletcher a meno che non usi NOPASSWD
Robin Kanters il

0

Puoi anche farlo scrivendo un wrapper su apache2ctl, assegnando la proprietà del gruppo a un gruppo di amministrazione web e impostando il bit di suid. Questa è una soluzione meno generale rispetto a visudo, ma consente limitazioni personalizzate sulle capacità dell'utente e sul controllo degli errori.

Ho scritto questo strumento per le mie esigenze e l'ho condiviso su github: https://github.com/josiahjohnston/ltd_apache2ctl

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.