Come posso eseguire specifici comandi sudo senza password?


211

Su una macchina particolare ho spesso bisogno di eseguire sudocomandi di tanto in tanto. Sto bene inserendo la password sudonella maggior parte dei casi.

Tuttavia, ci sono tre sudocomandi che voglio eseguire senza inserire la password :

  • sudo reboot
  • sudo shutdown -r now
  • sudo shutdown -P now

Come posso escludere questi comandi dalla protezione con password a sudo?


Risposte:


283

Usa la NOPASSWDdirettiva

Puoi usare la NOPASSWDdirettiva nel tuo /etc/sudoersfile .

Se viene chiamato il tuo utente e viene chiamato il usertuo host, hostpuoi aggiungere queste righe a /etc/sudoers:

user host = (root) NOPASSWD: /sbin/shutdown
user host = (root) NOPASSWD: /sbin/reboot

Ciò consentirà all'utente userdi eseguire i comandi desiderati hostsenza immettere una password. Tutti gli altri sudocomandi ed richiedono comunque una password.

I comandi specificati nel sudoersfile devono essere pienamente qualificati (ovvero utilizzando il percorso assoluto del comando per l'esecuzione) come descritto nella sudoerspagina man . Fornire un percorso relativo è considerato un errore di sintassi.

Se il comando termina con un /carattere finale e punta a una directory, l'utente sarà in grado di eseguire qualsiasi comando in quella directory (ma non in alcuna sottodirectory). Nel seguente esempio, l'utente userpuò eseguire qualsiasi comando nella directory /home/someuser/bin/:

user host = (root) NOPASSWD: /home/someuser/bin/

Nota: utilizzare sempre il comando visudoper modificare il sudoersfile per assicurarsi di non bloccarsi fuori dal sistema, nel caso in cui si scriva accidentalmente qualcosa di errato nel sudoersfile. visudosalverà il file modificato in una posizione temporanea e sovrascriverà il file reale solosudoers se il file modificato può essere analizzato senza errori.

Usando /etc/sudoers.dinvece di modificare/etc/sudoers

In alternativa alla modifica del /etc/sudoersfile, è possibile aggiungere le due righe a un nuovo file, ad /etc/sudoers.des /etc/sudoers.d/shutdown. Questo è un modo elegante di separare diverse modifiche ai sudodiritti e lascia sudoersintatto il file originale per aggiornamenti più facili.

Nota: ancora una volta, è necessario utilizzare il comando visudoper modificare il file per assicurarsi di non bloccarsi fuori dal sistema:

sudo visudo -f /etc/sudoers.d/shutdown 

Ciò garantisce inoltre automaticamente che il proprietario e le autorizzazioni del nuovo file siano impostati correttamente.

Se sudoersè incasinato

Se non hai usato visudoper modificare i tuoi file e poi hai incasinato /etc/sudoerso incasinato un file per errore, /etc/sudoers.dverrai bloccato sudo.

La soluzione potrebbe essere quella di riparare i file usando pkexecquale è un'alternativa a sudo.

Per risolvere /etc/sudoers:

pkexec visudo

Per risolvere /etc/sudoers.d/shutdown:

pkexec visudo -f /etc/sudoers.d/shutdown

Se la proprietà e / o le autorizzazioni non sono corrette per qualsiasi sudoersfile, il file verrà ignorato, sudoquindi potresti anche ritrovarti bloccato in questa situazione. Ancora una volta, è possibile utilizzare pkexecper risolvere questo problema.

Le autorizzazioni corrette dovrebbero essere così:

$ ls -l /etc/sudoers.d/shutdown 
-r--r----- 1 root root 86 Jul 16 15:37 /etc/sudoers.d/shutdown

Utilizzare in pkexecquesto modo per correggere la proprietà e le autorizzazioni :

pkexec chown root:root /etc/sudoers.d/shutdown
pkexec chmod 0440 /etc/sudoers.d/shutdown

2
Le due righe si riferiscono specificamente a questi due comandi. Se userin altri modi non vengono concessi sudodiritti, nessun altro comando può essere annullato da questo utente. Dai un'occhiata a man sudoe man sudoers.
mgd,

4
@StanKurdziel Ho provato con questa linea su Mac OS X Yosemite e ha funzionato bene: mgd ALL=(root) NOPASSWD: /var/root/test. Sono un utente mgde ALLsignifica "da tutti gli host" . /var/root/testè un semplice "Ciao Mondo" script di shell con permesso: -rwx------ 1 root wheel 27 12 Jun 09:54 /var/root/test. Ho fatto non altre modifiche al sistema.
mgd,

2
Cosa c'è hostnel file sudoers?
user106563,

1
Non è una risposta, è una guida quasi completa sulla direttiva NOPASSWD. Grazie.
Eray

1
@Michael, per favore, leggi la pagina man. È tutto scritto lì. Per citarlo: tuttavia, è anche possibile specificare argomenti da riga di comando (inclusi caratteri jolly). In alternativa, è possibile specificare "" per indicare che il comando può essere eseguito solo senza argomenti della riga di comando.
mgd

3

Scusate ma c'è così tanta confusione su questo e alcune risposte davvero complicate, che sento di dover soppesare qui prima che qualcuno fraintenda e faccia qualcosa di folle.

Usando visudo !!

Aggiungi le seguenti righe alla configurazione:

ALL ALL=NOPASSWD: /sbin/reboot,/sbin/shutdown

Ciò consente ai comandi, al riavvio e allo spegnimento con qualsiasi parametro di essere eseguito da qualsiasi utente.

Si prega di stackexchange, basta dare risposte semplici e concise.

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.