Domanda Come posso eseguire comandi sudo specifici senza password?


Spesso su una macchina particolare devo correre sudo comandi ogni tanto. Sto bene con l'inserimento della password sudo nella maggior parte dei casi.

Tuttavia ci sono tre sudo comandi voglio correre 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?


187
2017-07-03 08:31


origine


Simile a Come consentire l'esecuzione senza usare sudo? - fouric


risposte:


Usa il NOPASSWD direttiva

Puoi usare il NOPASSWD direttiva nel tuo /etc/sudoers file.

Se il tuo utente è chiamato user e il tuo ospite è chiamato host potresti aggiungere queste linee a /etc/sudoers:

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

Questo permetterà all'utente user per eseguire i comandi desiderati host senza inserire una password. Tutti gli altri sudoi comandi ed avranno ancora bisogno di una password.

I comandi specificati in sudoers file dovere essere pienamente qualificato (cioè utilizzando il percorso assoluto del comando da eseguire) come descritto in sudoers pagina man. Fornire un percorso relativo è considerato un errore di sintassi.

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

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

Nota: Usa sempre il comando visudo per modificare il sudoers file per essere sicuro di non bloccarti dal sistema, nel caso in cui tu abbia accidentalmente scritto qualcosa di non corretto sudoers file. visudo salverà il tuo file modificato in una posizione temporanea e lo farà solo sovrascrivere il reale sudoers file se il file modificato può essere analizzato senza errori.

utilizzando /etc/sudoers.d invece di modificare /etc/sudoers

In alternativa alla modifica del /etc/sudoers file, è possibile aggiungere le due linee a un nuovo file in /etc/sudoers.d per esempio. /etc/sudoers.d/shutdown. Questo è un modo elegante per separare diverse modifiche al sudo diritti e lascia anche l'originale sudoers file intatto per aggiornamenti più facili.

Nota: Di nuovo, dovresti usare il comando visudo per modificare il file per assicurarti di non bloccarti dal sistema:

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

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

Se sudoers è incasinato

Se non l'hai usato visudo per modificare i file e poi incidentalmente incasinato /etc/sudoers o incasinato un file in /etc/sudoers.d allora sarai bloccato fuori da sudo.

La soluzione potrebbe essere quella di correggere i file usando pkexec che è un'alternativa a sudo.

Aggiustare /etc/sudoers:

pkexec visudo

Aggiustare /etc/sudoers.d/shutdown:

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

Se la proprietà e / o le autorizzazioni non sono corretti per nessuno sudoers file, il file verrà ignorato da sudo quindi potresti trovarti bloccato in questa situazione. Di nuovo, puoi usare pkexec per risolvere questo.

Le autorizzazioni corrette dovrebbero essere come questa:

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

Uso pkexec come questo per risolvere proprietà e permessi:

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

253
2017-07-03 08:43



spero che questo si applichi solo a questi 2 comandi, e non mi preoccuperò del resto del sistema o di qualsiasi altro comando? - Z9iT
Le due linee si riferiscono specificamente a questi due comandi. Se user non è dato in altri modi sudo diritti nessun altro comando può essere aggiunto da questo utente. Dai un'occhiata a man sudo e man sudoers. - mgd
Inizialmente ho affrontato un problema chmod .. ha aggiunto un allenamento a questo nella risposta .. thanx @mgd - Z9iT
@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 mgd e ALL si intende "da tutti gli ospiti". /var/root/test è un semplice script di shell "Hello World" con autorizzazioni: -rwx------ 1 root wheel 27 12 Jun 09:54 /var/root/test. ho fatto no altre modifiche al sistema. - mgd
@ Michael, per favore leggi la pagina man. È tutto scritto lì. Per citarla: tuttavia, è possibile specificare anche argomenti della riga di comando (inclusi i caratteri jolly). In alternativa, è possibile specificare "" per indicare che il comando può essere eseguito solo senza argomenti della riga di comando. - mgd