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