Uma máquina Amazon Linux 2 é configurada com um usuário que pode usar sudo sem senha da seguinte maneira:
# 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
Essa configuração é preservada quando um playbook ansible adiciona o mesmo usuário a um grupo da seguinte maneira:
- name: Add user to different-groupname group
command: usermod -a -G different-groupname one-username
No entanto, quando as duas linhas anteriores são alteradas no playbook para se tornarem as 4 linhas seguintes, o mesmo usuário não poderá mais fazer sudo sem ser solicitada uma senha inexistente:
- name: Add user to different-groupname group
user:
name: one-username
group: different-groupname
Por que isso está acontecendo? Como o módulo de usuário do Ansible pode ser reconfigurado aqui para evitar causar esse problema?
Nota: different-groupname
o grupo é criado separadamente (e one-username
adicionado separadamente different-groupname
) da mesma maneira em ambas as situações e, portanto, esta não é a causa do problema aqui.
Responder1
Resposta curta
O comando usermod -a ...
adiciona o grupo, mas o parâmetro group
dodo utilizadormódulo "define o grupo primário do usuário".
Detalhes
Do utilizadornome de usuário únicoé criado com o grupo primárionome de usuário único
sudo groupadd -g 2002 one-username
sudo useradd -u 2002 -g 2002 ... one-username
Membros do gruponome de usuário únicoestão autorizados a sudo
User_Alias ONE_USERNAME = %one-username
ONE_USERNAME ALL=(ALL) NOPASSWD: ALL
Módulo Ansibledo utilizadordefine o grupo principal do usuárionome de usuário únicoparanome de grupo diferente.
user:
name: one-username
group: different-groupname
Muito provavelmente membros do gruponome de grupo diferentenão são permitidos sudo.
Solução
Use groups
em vez de group
parâmetro do módulodo utilizador. Em vez de
user:
name: one-username
group: different-groupname
usar
user:
name: one-username
groups:
- different-groupname
(não testado)
Além disso, a append
palavra-chave do módulo do usuário afeta o conjunto de grupos de um usuário. Se você adicionar append: yes
, different-groupname
será adicionado à lista de grupos do usuário:
user:
name: one-username
append: yes
groups:
- different-groupname
Por padrão, append
o padrão é no
e os grupos de usuários são definidos como o conjunto de grupos declarado pela groups
palavra-chave. Se o usuário pertencer a outros grupos que não estão na groups
lista, o usuário será removido desses grupos.