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