El módulo de usuario de Ansible elimina la configuración de sudo. ¿Por qué?

El módulo de usuario de Ansible elimina la configuración de sudo. ¿Por qué?

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-groupnameel grupo se crea por separado (y one-usernamese agrega por different-groupnameseparado) 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 groupdelusuarioEl 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 groupsen lugar de grouppará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 appendpalabra clave del módulo de usuario afecta al conjunto de grupos de un usuario. Si agrega append: yes, different-groupnamese agrega a la lista de grupos para el usuario:

user:
  name: one-username
  append: yes
  groups:
    - different-groupname

De forma predeterminada, appendel valor predeterminado es noy los grupos de usuarios se configuran en el conjunto de grupos declarados por la groupspalabra clave. Si el usuario pertenece a otros grupos que no están en la groupslista, el usuario es eliminado de esos grupos.

información relacionada