Ubuntu 20.04.6 LTS配置sudoers NOPASSWD后仍需密码启动systemd服务的问题排查
我太懂这种明明配置了规则却不生效的挫败感了!咱们一步步来揪出问题所在:
先检查sudoers规则的顺序
sudoers是按从上到下的顺序匹配规则的,要是你的NOPASSWD规则写在了默认的%sudo ALL=(ALL:ALL) ALL这类要求密码的规则前面,就会被后面的规则覆盖掉。打开visudo,确保你的两条NOPASSWD规则放在所有组规则(比如%sudo那行)的后面。核对命令路径是否绝对正确
你在sudoers里写的是/usr/bin/systemctl,先确认这个路径没错:在终端执行which systemctl,看看输出是不是和你写的完全一致。如果路径不对,sudo根本匹配不到你的规则。检查sudo配置的语法和额外文件
用sudo visudo -c命令可以检查所有sudo相关配置文件的语法是否正确,要是有语法错误,规则也会失效。另外,别忘了系统可能会加载/etc/sudoers.d/目录下的文件,这些文件里的规则也可能干扰你的设置,你可以进去看看有没有冲突的规则。确保执行的命令和规则完全匹配
你sudoers里写的是完整路径的命令,执行的时候也要严格对应:比如必须敲sudo /usr/bin/systemctl start mc,别简化成sudo systemctl start mc(虽然大部分时候没问题,但万一PATH有变动或者有别名,就会匹配不到规则)。清除sudo密码缓存试试
有时候sudo会缓存密码状态,你可以先执行sudo -k清除缓存,然后再重新运行启动服务的命令,看看是不是还会要求输入密码。
如果以上都排查完了,你可以试试把启动和停止服务的规则合并成一行,写在sudoers里:
christian ALL=NOPASSWD: /usr/bin/systemctl start mc, /usr/bin/systemctl stop mc
记得一定要用visudo编辑sudoers文件,它会帮你检查语法错误,避免不小心把系统搞崩。
备注:内容来源于stack exchange,提问作者Apollo

