No Ubuntu 20.04, eu tenho essa configuração. em /etc/sudoers:
...
%sudo ALL=(ALL:ALL) ALL
...
Já alterei desta forma:
...
%sudo ALL=(ALL:ALL) ALL
david ALL=(ALL) NOPASSWD: /usr/bin/systemctl hibernate
...
david
é meu nome de usuário. Eu tentei muitas variações e pesquisei na Internet. Sou obrigado a digitar a senha sempre que faço:
sudo systemctl hibernate
Com CentOS e outras variações do Linux funciona bem.
ATUALIZAÇÃO 1 :
sudo -ll
Matching Defaults entries for david on hp:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User david may run the following commands:
Sudoers entry:
RunAsUsers: ALL
RunAsGroups: ALL
Commands:
ALL
Sudoers entry:
RunAsUsers: ALL
Options: !authenticate
Commands:
/bin/systemctl hibernate
Sudoers entry:
RunAsUsers: ALL
Commands:
ALL
A saída para o outro sistema onde NOPASSWD:
funciona é equivalente.
Para depurar sudo, use
sudo -ll
para listar as configurações de sinalizador que se aplicam ao usuário e também todas as entradas que serão verificadas em qualquer comando para uma correspondência.Nas configurações,
secure_path=
mostrará quais diretórios serão procurados pelo comando. Isso geralmente inclui/usr/bin
e/bin
, e sua entrada precisaria usar o diretório correto se estiver em apenas um deles. No entanto, em alguns sistemas/bin
é um link simbólico para/usr/bin
, então não importa.Se o comando corresponder a várias entradas, a última encontrada será usada. Isso às vezes significa que uma entrada explícita
NOPASSWD:
para um comando é ignorada porque há umaALL=(ALL) ALL
entrada global posterior que a substitui. Normalmente, para evitar isso, é útil colocar entradas explícitas no final do arquivo sudoers ou em um arquivo incluído separado individual.