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,則該使用者將從這些群組中刪除。

相關內容