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-groupname
Die Gruppe wird in beiden Situationen auf die gleiche Weise separat erstellt (und separat one-username
hinzugefü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 group
derBenutzerModul „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
groups
Anstelle des group
Parameters 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 append
Schlüsselwort des Benutzermoduls die Gruppenmenge für einen Benutzer. Wenn Sie hinzufügen append: yes
, different-groupname
wird der Gruppenliste für den Benutzer Folgendes hinzugefügt:
user:
name: one-username
append: yes
groups:
- different-groupname
Der Standardwert append
ist no
, und die Benutzergruppen werden auf die durch das groups
Schlüsselwort deklarierten Gruppen eingestellt. Wenn der Benutzer zu anderen Gruppen gehört, die nicht in der groups
Liste enthalten sind, wird er aus diesen Gruppen entfernt.