我正在尝试编写脚本来创建可以sudo
访问我的 ec2 实例的用户。
我在设置 sudo 访问权限时遇到问题。我以 root 身份运行以下命令...
adduser --disabled-password --gecos "" testuser
usermod -a -G admin,sudo testuser
然后我从 s3 复制 authorized_keys。
此时 ssh 工作正常。
但是如果我尝试使用 sudo,系统会提示我输入密码。
我的 sudoers 文件包括以下内容......
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
除了注销并重新登录之外,我还需要做什么才能使我的更改生效?
我没有更改 sudoers 文件,这是默认设置。
另外还有另一个系统创建的用户ubuntu
,可以成功使用 sudo。但是文件中没有明确提及此用户sudoers
,因此它一定是通过组成员身份执行此操作。
更新:我尝试将“ubuntu”所属的每个其他组添加到 testuser,但仍然提示我输入密码。
有什么方法可以让我弄清楚“ubuntu”如何获得无密码 sudo 访问权限?
答案1
NOPASSWD
除非您在文件中为任何给定条目设置了选项,否则系统将始终提示您输入密码sudoers
(忽略记住密码的宽限期,因此不会提示,默认为 15 分钟)。
例如让sudo
群组内所有成员都实现无密码sudo
实现:
%sudo ALL=(ALL:ALL) NOPASSWD: ALL
这表示该sudo
组的任何成员都可以运行以 开头的任何命令,而sudo
无需提示输入密码。
同样,用户foobar
运行命令reboot
:
foobar ALL=(ALL:ALL) NOPASSWD: /sbin/reboot
请注意,sudo
除非您有非常好的理由,否则对所有命令进行无密码访问并不是一个好主意,您应该考虑将命令限制在必要的最低限度。
规则sudo
也可以在目录下的文件中定义/etc/sudoers.d/
,默认/etc/sudoers
文件包含:
includedir /etc/sudoers.d
最后,这使得任何不包含.
或以结尾的文件~
都将被读取以查找规则。大概是目录下任何文件中定义的sudo
用户定义。ubuntu
/etc/sudoes.d/
答案2
我在 AWS EC2 实例上遇到了同样的问题。结果发现 cloud-init 在 /etc/sudoers.d 中添加了一个文件, 90-cloud-init-users
内容如下:
# Created by cloud-init v. 19.2-36-g059d049c-0ubuntu2~18.04.1 on Wed, 05 Jan 2022 09:44:40 +0000
# User rules for ubuntu
ubuntu ALL=(ALL) NOPASSWD:ALL
为我的用户添加相同的行解决了该问题。
既然您提到了 S3,我猜这是您的问题,结合 sudoers 配置文件的行为:“当多个条目与用户匹配时,它们将按顺序应用。如果有多个匹配,则使用最后一个匹配(不一定是最具体的匹配)。”,请参阅man sudo
。