Amazon Linux 2 计算机配置了无需密码即可执行 sudo 的用户,如下所示:
# Add user
sudo groupadd -g 2002 one-username
sudo useradd -u 2002 -g 2002 -c "One Username Account" -s /bin/bash -m -d /home/one-username one-username
# Configure SSH for the user
mkdir -p /home/one-username/.ssh
cp -pr /home/ec2-user/.ssh/authorized_keys /home/one-username/.ssh/authorized_keys
chown -R one-username:one-username /home/one-username/.ssh
chmod 700 /home/one-username/.ssh
cat << 'EOF' > /etc/sudoers.d/one-username
User_Alias ONE_USERNAME = %one-username
ONE_USERNAME ALL=(ALL) NOPASSWD: ALL
EOF
chmod 400 /etc/sudoers.d/one-username
# disable login for one-username except through ssh keys
cat << 'EOF' >> /etc/ssh/sshd_config
Match User one-username
PasswordAuthentication no
AuthenticationMethods publickey
EOF
# restart sshd
systemctl restart sshd
当 ansible playbook 将相同的用户添加到组中时,会保留此配置,如下所示:
- name: Add user to different-groupname group
command: usermod -a -G different-groupname one-username
但是,当 playbook 中的前两行更改为以下 4 行时,同一用户将不再能够在不提示输入不存在的密码的情况下执行 sudo:
- name: Add user to different-groupname group
user:
name: one-username
group: different-groupname
为什么会发生这种情况?这里如何重新配置Ansible的用户模块以避免导致这个问题?
注意: 在这两种情况下different-groupname
,组都是以相同的方式单独创建的(并且单独one-username
添加到组中different-groupname
),因此这不是问题的原因。
答案1
简短回答
命令usermod -a ...
添加组,但group
参数用户模块“设置用户的主要组”。
细节
用户单一用户名与主要组一起创建单一用户名
sudo groupadd -g 2002 one-username
sudo useradd -u 2002 -g 2002 ... one-username
小组成员单一用户名允许 sudo
User_Alias ONE_USERNAME = %one-username
ONE_USERNAME ALL=(ALL) NOPASSWD: ALL
Ansible模块用户设置用户的主要组单一用户名到不同组名。
user:
name: one-username
group: different-groupname
很可能是该团体的成员不同组名不允许 sudo。
解决方案
使用groups
代替group
模块的参数用户。代替
user:
name: one-username
group: different-groupname
使用
user:
name: one-username
groups:
- different-groupname
(未测试)
此外,append
用户模块的关键字会影响用户的组集。如果添加append: yes
,则会将其different-groupname
添加到用户的组列表中:
user:
name: one-username
append: yes
groups:
- different-groupname
默认情况下,append
默认为no
,用户组设置为关键字声明的组集groups
。如果用户属于不在列表中的其他组groups
,则该用户将从这些组中删除。