Ansible 用户模块删除 sudo 配置。为什么?

Ansible 用户模块删除 sudo 配置。为什么?

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,则该用户将从这些组中删除。

相关内容