Das Ansible-Benutzermodul entfernt die Sudo-Konfiguration. Warum?

Das Ansible-Benutzermodul entfernt die Sudo-Konfiguration. Warum?

Eine Amazon Linux 2-Maschine wird mit einem Benutzer konfiguriert, der sudo ohne Passwort wie folgt ausführen kann:

# 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

Diese Konfiguration bleibt erhalten, wenn ein Ansible-Playbook denselben Benutzer wie folgt zu einer Gruppe hinzufügt:

 - name: Add user to different-groupname group
   command: usermod -a -G different-groupname one-username

Wenn jedoch die beiden vorhergehenden Zeilen im Playbook in die folgenden vier Zeilen geändert werden, kann derselbe Benutzer nicht mehr „sudo“ verwenden, ohne zur Eingabe eines nicht vorhandenen Kennworts aufgefordert zu werden:

 - name: Add user to different-groupname group
   user:
     name: one-username
     group: different-groupname

Warum passiert das? Wie kann das Benutzermodul von Ansible hier neu konfiguriert werden, um dieses Problem zu vermeiden?

Hinweis: different-groupnameDie Gruppe wird in beiden Situationen auf die gleiche Weise separat erstellt (und separat one-usernamehinzugefügt different-groupname), und dies ist daher hier nicht die Ursache des Problems.

Antwort1

Kurze Antwort

Befehl usermod -a ...fügt die Gruppe hinzu, aber der Parameter groupderBenutzerModul „legt die primäre Gruppe des Benutzers fest“.

Einzelheiten

Benutzerein Benutzernamewird mit der primären Gruppe erstelltein Benutzername

sudo groupadd -g 2002 one-username
sudo useradd -u 2002 -g 2002 ... one-username

Mitglieder der Gruppeein Benutzernamedürfen sudo

User_Alias ONE_USERNAME = %one-username
ONE_USERNAME ALL=(ALL)      NOPASSWD: ALL

Ansible-ModulBenutzerlegt die primäre Gruppe des Benutzers festein BenutzernameZuanderer Gruppenname.

user:
  name: one-username
  group: different-groupname

Sehr wahrscheinlich Mitglieder der Gruppeanderer Gruppennamedürfen nicht sudo verwenden.

Lösung

groupsAnstelle des groupParameters des Moduls verwendenBenutzer. Anstatt

user:
  name: one-username
  group: different-groupname

verwenden

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

(nicht getestet)

Darüber hinaus beeinflusst das appendSchlüsselwort des Benutzermoduls die Gruppenmenge für einen Benutzer. Wenn Sie hinzufügen append: yes, different-groupnamewird der Gruppenliste für den Benutzer Folgendes hinzugefügt:

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

Der Standardwert appendist no, und die Benutzergruppen werden auf die durch das groupsSchlüsselwort deklarierten Gruppen eingestellt. Wenn der Benutzer zu anderen Gruppen gehört, die nicht in der groupsListe enthalten sind, wird er aus diesen Gruppen entfernt.

verwandte Informationen