В Ubuntu 20.04 у меня есть такая конфигурация. в / etc / sudoers:
...
%sudo ALL=(ALL:ALL) ALL
...
Я изменил его следующим образом:
...
%sudo ALL=(ALL:ALL) ALL
david ALL=(ALL) NOPASSWD: /usr/bin/systemctl hibernate
...
david
- мое имя пользователя.
Я перепробовал много вариантов и искал в Интернете.
Я должен вводить пароль всякий раз, когда я это делаю:
sudo systemctl hibernate
С CentOS и другими вариантами Linux все работает нормально.
ОБНОВЛЕНИЕ 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
Вывод для другой системы, где NOPASSWD:
работает эквивалентно.
Для отладки sudo используйте sudo -ll
, чтобы вывести список параметров флага, которые применяются к пользователю, а также все записи, которые будут проверяться на соответствие любой команде.
В настройках secure_path=
будет показано, в каких каталогах будет выполняться поиск команды. Обычно это /usr/bin
и /bin
, и ваша запись должна использовать правильный каталог, если он находится только в одном из них. Однако в некоторых системах /bin
является символической ссылкой на /usr/bin
, так что это не имеет значения.
Если команда соответствует нескольким записям, будет использована последняя найденная. Иногда это означает, что явная запись NOPASSWD:
для команды игнорируется, поскольку существует более поздняя глобальная запись ALL=(ALL) ALL
, которая переопределяет ее. Как правило, чтобы избежать этого, полезно помещать явные записи в конец файла sudoers или в отдельный отдельный включаемый файл.