Ubuntu下实现无需密码执行`sudo su`的问题求助
解决无需密码执行
sudo su的问题 我来帮你排查这个困扰——你已经做了基础配置但还是没生效,大概率是sudoers的规则优先级或者配置细节出了问题,咱们一步步来解决:
1. 调整sudoers规则的优先级
sudo的规则是匹配到第一条符合条件的规则就停止执行,如果你的用户属于sudo组,而sudo组的默认规则(比如%sudo ALL=(ALL:ALL) ALL)在你的NOPASSWD规则前面,那组规则会覆盖你单独给用户设置的免密规则。
操作步骤:
- 必须用
visudo命令打开sudoers文件(直接编辑容易导致语法错误,锁死sudo权限):sudo visudo - 在文件中找到类似这样的组规则行:
%sudo ALL=(ALL:ALL) ALL - 把你的用户免密规则放在这一行之后:
<user> ALL=(ALL) NOPASSWD: ALL - 保存退出(visudo会自动检查语法,如果有错误会提示你修改,千万别强制保存)
2. 检查sudoers.d目录下的冲突配置
很多系统推荐把自定义sudo规则放在/etc/sudoers.d/目录下的单独文件里,而不是修改主sudoers文件。如果这里有针对该用户的其他规则,可能会和你的配置冲突。
执行下面的命令查看是否有冲突配置:
sudo grep -r "<user>" /etc/sudoers.d/
如果发现有其他限制该用户sudo权限的规则,要么删除冲突文件,要么调整规则的优先级(把你的免密规则放在最后加载的文件里)。
3. 验证当前用户的sudo权限
配置完成后,执行以下命令查看当前用户的sudo权限详情:
sudo -l
如果配置生效,输出结果里应该会明确显示:
User <user> may run the following commands on <hostname>: (ALL) NOPASSWD: ALL
如果看不到这条,说明配置没生效,回去检查语法和规则位置。
4. 替代方案:使用sudo -i直接切换到root
其实sudo su是先通过sudo获取root权限,再启动root的shell。你可以直接用sudo -i命令,效果完全一样,而且如果sudo免密配置生效,这个命令也不需要输入密码。
5. 清除sudo权限缓存
有时候sudo会缓存之前的权限验证结果,执行下面的命令清除缓存,再测试:
sudo -k
之后再试sudo su或者sudo -i,应该就不需要密码了。
内容的提问来源于stack exchange,提问作者Adrian Maire
相关产品推荐
相关产品推荐

