记一次用visudo修改sudoers文件

33次阅读
没有评论
记一次用 visudo 修改 sudoers 文件

在 Linux 中配置 sudo 的权限,我一直都以为只要在 /etc/sudoers 文件里把相应的规则写上就行了。我的用户 user 已经是 sudo 组的成员了,但每次执行 sudo 命令时都得输入密码,感觉特别麻烦。于是,我决定把它改成无密码模式。

我打开了 visudo,并在文件里添加了这一行:

user ALL=(ALL) NOPASSWD: ALL

但是,当我尝试执行 sudo 命令时,它依然固执地要求我输入密码。我反复检查了配置,确认语法没错,也确定我的用户名写对了。

这时,我开始怀疑是不是其他配置在作祟。我注意到文件里有一行默认的配置,它管理着整个 sudo 组的权限:

%sudo   ALL=(ALL:ALL) ALL

这条规则的意思是,sudo 组里的所有用户在任何地方、以任何用户的身份执行任何命令,都必须输入密码。

我尝试把我的无密码规则改写成这样:

%user ALL=(ALL) NOPASSWD: ALL

但结果还是一样,没有任何变化。

经过一番研究,我才恍然大悟:sudoers 文件中的规则是有顺序的,并且是会相互覆盖的! sudo 会从上到下逐行读取配置,一旦找到第一条匹配的规则,它就会立即应用这条规则,并忽略后面所有相关的配置。

我的问题就出在这里:

# 这是默认的配置,在文件比较靠前的位置
%sudo   ALL=(ALL:ALL) ALL

# 这是我添加的规则,在文件比较靠后的位置
user ALL=(ALL) NOPASSWD: ALL

因为我的用户 user 属于 sudo 组,所以 sudo 在读取到 %sudo 那一行时,就直接匹配上了。这条规则要求输入密码,所以后面的 user ALL=(ALL) NOPASSWD: ALL 规则就直接被忽略了。

找到问题后,解决方法就很简单了。我将我自己的无密码规则放到了 %sudo 规则的前面,这样它就会优先被匹配和应用。

# 将这条规则放在前面
user ALL=(ALL) NOPASSWD: ALL

# 保持默认规则不变
%sudo   ALL=(ALL:ALL) ALL

保存文件后,我再次执行 sudo 命令,果然不再需要输入密码了!

期间我还求助了 AI 工具,Gemini,结果回我说顺序不影响,我真的是信了邪。目前还是要警惕 AI 幻觉的。

正文完
 
评论(没有评论)
验证码