O módulo Ansible User remove a configuração do sudo. Por que?

O módulo Ansible User remove a configuração do sudo. Por que?

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-groupnameo grupo é criado separadamente (e one-usernameadicionado 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 groupdodo 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 groupsem vez de groupparâ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 appendpalavra-chave do módulo do usuário afeta o conjunto de grupos de um usuário. Se você adicionar append: yes, different-groupnameserá adicionado à lista de grupos do usuário:

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

Por padrão, appendo padrão é noe os grupos de usuários são definidos como o conjunto de grupos declarado pela groupspalavra-chave. Se o usuário pertencer a outros grupos que não estão na groupslista, o usuário será removido desses grupos.

informação relacionada