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
相关产品推荐
相关产品推荐

