在 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:
可以运行的系统而言,其输出是相同的。
答案1
要调试 sudo,请使用sudo -ll
列出适用于用户的标志设置以及将根据任何命令检查是否匹配的所有条目。
在设置中,secure_path=
将显示将在哪些目录中搜索命令。这通常包括/usr/bin
和/bin
,如果您的条目只在其中一个目录中,则需要使用正确的目录。但是,在某些系统上/bin
是指向的符号链接/usr/bin
,因此这并不重要。
如果命令匹配多个条目,则将使用找到的最后一个条目。这有时意味着NOPASSWD:
命令的显式条目被忽略,因为后面有一个全局ALL=(ALL) ALL
条目覆盖了它。通常,为了避免这种情况,将显式条目放在 sudoers 文件的末尾或单独的包含文件中很有用。