Esta é uma questão bastante complexa relacionada com o arquivo Sudoers e o comando sudo em geral.
NOTA: Eu fiz estas alterações em uma máquina dedicada rodando Ubuntu Desktop 13.04, que eu uso apenas para fins de aprendizagem. Eu entendo isso'é um enorme risco de segurança para habilitar o NOPASSWD sudo.
Inicialmente, minha única alteração no arquivo sudoers (/etc/sudoers) foi uma linha, uma especificação de usuário que deveria ter habilitado 'nicholsonjf' para executar todos os comandos com o sudo sem ter que digitar uma senha (veja a linha que começa com '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
No entanto, isto não funcionou, e eu ainda era solicitado pela minha senha toda vez que executava um comando como 'nicholsonjf'. Só fui capaz de começar a executar comandos sudo como 'nicholsonjf' uma vez removi 'nicholsonjf' dos grupos sudo e admin.
Alguém pode explicar porque é que isto funcionou?
É porque o usuário 'nicholsonjf' estava herdando direitos de sudo das duas especificações de grupo de 'admin' e 'sudo' (visto abaixo no arquivo sudoers), que estavam sobrepondo o 'nicholsonjf' especificação de usuário porque eles estavam mais abaixo no arquivo de configuração?
A linha que você adicionou foi anulada. De "homens que sudoers":
Quando múltiplas entradas correspondem para um usuário, elas são aplicadas em ordem. Quando existem múltiplas correspondências, é utilizada a última correspondência (que não é necessariamente a mais específica).
No seu caso nicholsonjf
era um membro do grupo sudo
então para ele esta linha se aplicou:
%sudo ALL=(ALL:ALL) ALL
Se você quiser substituir as entradas em `/etc/sudoers' basta colocar as novas entradas depois delas.
A nova entrada deve ser parecida com
myuser ALL=(ALL) NOPASSWD: ALL
para um único usuário, ou
%sudo ALL=(ALL) NOPASSWD: ALL
para um grupo.
Para um único usuário, adicione esta linha no final do seu arquivo "sudoers" utilizando "sudo visudo".
superuser ALL=(ALL) NOPASSWD: ALL
Para um grupo
%supergroup ALL=(ALL) NOPASSWD: ALL