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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:22:43