如何跳过用户的[sudo]密码?

如何跳过用户的[sudo]密码?

我有一个随机问题。我对多个服务器有相同的配置,但只有其中一些服务器向排除的用户询问密码:

Using username "a-u".
Authenticating with public key "rsa-key-20220705"
Linux i01.is-u.local 4.9.0-18-amd64 #1 SMP Debian 4.9.303-1 (2022-03-07) x86_64

a-u@i01:~$ sudo su -
[sudo] password for a-u:

该用户是“sudo”组的一部分。在 /etc/sudoers.d/ 下创建一个文件并声明“sudo”组,如下所示:

[/etc/sudoers.d]# cat nopasswd
%sudo ALL=NOPASSWD: ALL

另外,/etc/sudoers 文件的配置如下:

[/etc]# cat sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification
User_Alias ADMINS = a-u

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL
ADMINS  ALL = (ALL) NOPASSWD: ALL,!/usr/bin/passwd,!/usr/bin/passwd [A-z]*,!/usr/bin/passwd root

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

请帮我找出问题所在。谢谢。

答案1

我成功使用的模式看起来与您的 nopasswd 文件有点不同:

%sudo ALL=(ALL) NOPASSWD: ALL

如果您查看 /etc/sudoers 文件,该ADMINS行与此几乎相同,最后一个之后有一个排除命令的列表ALL,所以我相信它会为您工作。


编辑:公平地说,WhiteOwl 在此之前几分钟发布了相同的解决方案。 OP 接受了这个答案,因为在此处的评论线程中,OP 报告了问题,并且故障排除发现原因是 /etc/sudoers.d 文件夹中的其他文件覆盖了其nopasswd文件中的配置。 Sudo 正在读取他之后的其他文件,这使得其中一个文件可以覆盖他的配置。

为了对此进行扩展,sudo 按照文件写入并包含在 /etc/sudoers 文件中的顺序读取文件。当 sudoers 文件包含文件夹/目录时,sudo 按字母数字顺序对文件夹的文件名进行排序(根据区域设置的排序规则),然后按该顺序读取文件。在此类目录(如 /etc/sudoers.d)中使用数字前缀命名文件是很常见的,以确保 sudo 按照您想要的顺序读取文件。我经常看到诸如10-sudoers-group20-admins-group99-special-admins、 之类的文件名,旨在控制它们的评估顺序。

答案2

nopasswd 文件的正确语法应该是:

%sudo ALL=(ALL) NOPASSWD: ALL

相关内容