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 プレイブックが次のように同じユーザーをグループに追加するときに保持されます。

 - name: Add user to different-groupname group
   command: usermod -a -G different-groupname one-username

ただし、プレイブックで前の 2 行が次の 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ユーザーモジュールは「ユーザーのプライマリ グループを設定します」。

詳細

ユーザー1つのユーザー名プライマリグループで作成される1つのユーザー名

sudo groupadd -g 2002 one-username
sudo useradd -u 2002 -g 2002 ... one-username

グループのメンバー1つのユーザー名sudoが許可されている

User_Alias ONE_USERNAME = %one-username
ONE_USERNAME ALL=(ALL)      NOPASSWD: ALL

Ansibleモジュールユーザーユーザーのプライマリグループを設定します1つのユーザー名異なるグループ名

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、ユーザーはそれらのグループから削除されます。

関連情報