Una máquina Amazon Linux 2 está configurada con un usuario que puede sudo sin contraseña de la siguiente manera:
# 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
Esta configuración se conserva cuando un libro de jugadas ansible agrega el mismo usuario a un grupo de la siguiente manera:
- name: Add user to different-groupname group
command: usermod -a -G different-groupname one-username
Sin embargo, cuando las dos líneas anteriores se cambian en el libro de jugadas para convertirse en las siguientes 4 líneas, el mismo usuario ya no puede realizar sudo sin que se le solicite una contraseña inexistente:
- name: Add user to different-groupname group
user:
name: one-username
group: different-groupname
¿Por qué está pasando esto? ¿Cómo se puede reconfigurar aquí el módulo de usuario de Ansible para evitar causar este problema?
Nota: different-groupname
el grupo se crea por separado (y one-username
se agrega por different-groupname
separado) de la misma manera en ambas situaciones y, por lo tanto, esta no es la causa del problema aquí.
Respuesta1
Respuesta corta
El comando usermod -a ...
agrega el grupo, pero el parámetro group
delusuarioEl módulo "establece el grupo principal del usuario".
Detalles
Usuarioun nombre de usuariose crea con el grupo primarioun nombre de usuario
sudo groupadd -g 2002 one-username
sudo useradd -u 2002 -g 2002 ... one-username
Miembros del grupoun nombre de usuariose les permite sudo
User_Alias ONE_USERNAME = %one-username
ONE_USERNAME ALL=(ALL) NOPASSWD: ALL
módulo ansibleusuarioestablece el grupo principal del usuarioun nombre de usuarioanombre de grupo diferente.
user:
name: one-username
group: different-groupname
Muy probablemente miembros del grupo.nombre de grupo diferenteno se les permite sudo.
Solución
Usar groups
en lugar de group
parámetro del módulousuario. En lugar de
user:
name: one-username
group: different-groupname
usar
user:
name: one-username
groups:
- different-groupname
(no probado)
Además, la append
palabra clave del módulo de usuario afecta al conjunto de grupos de un usuario. Si agrega append: yes
, different-groupname
se agrega a la lista de grupos para el usuario:
user:
name: one-username
append: yes
groups:
- different-groupname
De forma predeterminada, append
el valor predeterminado es no
y los grupos de usuarios se configuran en el conjunto de grupos declarados por la groups
palabra clave. Si el usuario pertenece a otros grupos que no están en la groups
lista, el usuario es eliminado de esos grupos.