You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 20.04下sudoers配置NOPASSWD不生效问题求助

解决Ubuntu 20.04中用户免密执行关机、时间设置及重启的sudo配置问题

我来帮你排查这个sudo免密配置的问题——Ubuntu 20.04下这类问题几乎都是配置格式错误或者权限不符合要求导致的,咱们一步步来修复:

1. 修正sudoers配置的语法错误

你之前在sudoers里添加的配置行有个关键问题:多个命令之间必须用逗号分隔,而不是空格!这是最容易踩的坑。

错误格式:

holmer ALL=(ALL) NOPASSWD: /sbin/shutdown /usr/bin/timedatectl /usr/sbin/reboot

正确格式:

holmer ALL=(ALL) NOPASSWD: /sbin/shutdown, /usr/bin/timedatectl, /usr/sbin/reboot

2. 务必用visudo工具编辑配置

绝对不要直接用vim/nano打开/etc/sudoers或者sudoers.d下的文件!visudo会自动检查语法,防止你写错配置导致sudo彻底失效——这是很多人忽略的重要细节。

  • 编辑主sudoers文件:sudo visudo
  • 编辑sudoers.d下的单独配置文件:sudo visudo -f /etc/sudoers.d/holmer

3. 用sudoers.d单独配置的正确流程

如果你想用sudoers.d目录管理配置(推荐这种方式,避免污染主sudoers文件),请严格执行以下步骤:

  • 创建配置文件:sudo touch /etc/sudoers.d/holmer
  • 用visudo编辑该文件:sudo visudo -f /etc/sudoers.d/holmer,添加第1点里的正确配置行
  • 设置正确的文件权限:sudo chmod 440 /etc/sudoers.d/holmer。sudo要求该目录下的文件必须是只读权限(所有者和组可读,其他无权限),否则会直接忽略这个文件。

4. 解决includedir取消注释时报错的问题

取消#includedir /etc/sudoers.d注释后报错,说明你的sudoers配置存在语法错误(可能是主文件,也可能是sudoers.d里的文件)。

  • 先运行sudo visudo -c来检查所有sudo配置的语法,它会明确告诉你错误位置(比如哪一行、哪个文件有问题)
  • 修复所有语法错误后,再取消includedir的注释,此时sudo就能正常加载sudoers.d里的配置了。

5. 测试配置是否生效

切换到holmer用户,直接执行带sudo的命令测试:

su - holmer
sudo /sbin/shutdown -h now  # 测试关机
sudo timedatectl set-time "2024-05-20 14:30:00"  # 测试时间设置
sudo reboot  # 测试重启

如果不需要输入密码,说明配置生效了。

额外注意事项

  • 只给用户授予必要的命令权限,不要用ALL=(ALL) NOPASSWD: ALL,避免不必要的安全风险
  • 确保命令的路径是正确的,可以用which shutdown、which timedatectl、which reboot来确认路径是否和你配置的一致

内容的提问来源于stack exchange,提问作者Florian K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 10:37:54