Questa è una domanda abbastanza complessa relativa al file Sudoers e al comando sudo in generale.
NOTA: Ho fatto queste modifiche su una macchina dedicata che esegue Ubuntu Desktop 13.04, che uso puramente per scopi di apprendimento. Ho capito che è un enorme rischio per la sicurezza abilitare NOPASSWD sudo.
Inizialmente, la mia unica modifica al file sudoers (/etc/sudoers) era una linea, una specifica utente che avrebbe dovuto abilitare 'nicholsonjf' per eseguire tutti i comandi con sudo senza dover inserire una password (vedi la linea che inizia con 'nicholsonjf'):
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
nicholsonjf ALL=NOPASSWD: ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
Tuttavia, questo non ha funzionato, e mi veniva ancora richiesta la password ogni volta che eseguivo un comando come 'nicholsonjf'. Sono stato in grado di iniziare ad eseguire comandi sudo come 'nicholsonjf' solo dopo aver rimosso 'nicholsonjf' dai gruppi sudo e admin.
Qualcuno può spiegare perché questo ha funzionato?
E' perché l'utente 'nicholsonjf' stava ereditando i diritti di sudo dalle due specifiche di gruppo di 'admin' e 'sudo' (viste sotto nel file sudoers), che stavano sovrascrivendo la specifica 'nicholsonjf' utente perché erano più in basso nel file di configurazione?
La linea che hai aggiunto è stata sovrascritta. Da man sudoers
:
Quando più voci corrispondono per un utente, sono applicate in ordine. Dove ci sono più corrispondenze, viene usata l'ultima corrispondenza (che non è necessariamente la più specifica).
Nel tuo caso nicholsonjf
era un membro del gruppo sudo
quindi per lui viene applicata questa linea:
%sudo ALL=(ALL:ALL) ALL
Se vuoi sovrascrivere le voci in /etc/sudoers
metti semplicemente le nuove voci dopo di esse.
La nuova voce dovrebbe assomigliare a
myuser ALL=(ALL) NOPASSWD: ALL
per un singolo utente, oppure
%sudo ALL=(ALL) NOPASSWD: ALL
per un gruppo.
Per un singolo utente, aggiungete questa linea alla fine del vostro file sudoers
usando sudo visudo
.
superuser ALL=(ALL) NOPASSWD: ALL
Per un gruppo
%supergroup ALL=(ALL) NOPASSWD: ALL
Come Vince ha menzionato in un commento, potete usare questa linea:
%sudo ALL=NOPASSWD: ALL
(Questo è diverso dalle linee mostrate in quelle risposte, e ha risolto il problema per me).