Maak een Playbook voor Geautomatiseerd Gebruikersbeheer in Ansible
description
Door gebruikersbeheer te automatiseren, kan ik tijd besparen, fouten verminderen en zorgen voor consistente gebruikersconfiguraties op mijn infrastructuur, wat de beveiliging en naleving verbetert.
prompt
try_prompt
Help me bij het ontwerpen van een Ansible-playbook dat gebruikersbeheer taken automatiseert op mijn servers. Ik wil gebruikers aanmaken, aanpassen en verwijderen op basis van specifieke rollen en attributen. Mijn g ... more
generate_helper
...
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van een Ansible-playbook dat gebruikersbeheer taken automatiseert voor jouw servers, gericht op gebruikers met de rol "beheerder". Het playbook maakt gebruikers aan, past attributen aan, verwijdert gebruikers indien nodig, en beheert groepslidmaatschappen en rechten.
```yaml
---
- name: Beheer van gebruikers op servers
hosts: alle_servers
become: yes
vars:
gebruikers:
- naam: admin1
rol: beheerder
home: /home/admin
state: present
groepen:
- beheer
- naam: admin2
rol: beheerder
home: /home/admin
state: present
groepen:
- beheer
tasks:
- name: Gebruiker aanmaken of aanpassen
ansible.builtin.user:
name: "{{ item.naam }}"
state: "{{ item.state }}"
home: "{{ item.home }}"
groups: "{{ item.groepen | join(',') }}"
append: yes
loop: "{{ gebruikers }}"
when: item.rol == 'beheerder'
- name: Groepen aanmaken indien niet aanwezig
ansible.builtin.group:
name: "{{ item }}"
state: present
loop: "{{ gebruikers | map(attribute='groepen') | flatten | unique }}"
- name: Gebruikers verwijderen indien niet meer in de lijst
ansible.builtin.user:
name: "{{ item }}"
state: absent
loop: "{{ gebruikers | selectattr('state', 'equalto', 'absent') | map(attribute='naam') }}"
- name: Toekennen van juiste groepslidmaatschappen
ansible.builtin.user:
name: "{{ item.naam }}"
groups: "{{ item.groepen | join(',') }}"
append: yes
loop: "{{ gebruikers }}"
when: item.state == 'present'
- name: Toekennen van gebruikersrechten (bijvoorbeeld sudo)
ansible.builtin.copy:
dest: /etc/sudoers.d/{{ item.naam }}
content: "{{ item.naam }} ALL=(ALL) NOPASSWD:ALL"
owner: root
group: root
mode: '0440'
loop: "{{ gebruikers }}"
when: item.rol == 'beheerder'
```
**Uitleg:**
- **Gebruikers aanmaken of aanpassen:** Maakt gebruikers aan met de opgegeven attributen en voegt ze toe aan de juiste groepen.
- **Groepen aanmaken:** Zorgt dat de benodigde groepen (bijvoorbeeld "beheer") bestaan.
- **Gebruikers verwijderen:** Verwijdert gebruikers die niet meer in de lijst staan of een 'absent' status hebben.
- **Groepslidmaatschappen:** Zorgt dat gebruikers in de juiste groepen zitten, waardoor je rechten en toegang effectief beheert.
- **Gebruikersrechten toekennen:** Geeft beheerders sudo-rechten door een sudoers-bestand aan te maken.
**Aanpassingen:**
- Pas de variabele `gebruikers` aan met jouw gebruikers en attributen.
- Voeg eventueel extra taken toe voor meer complexe rechten of attributen.
Wil je dat ik het playbook uitbreid met specifieke rechten of meer rollen?
provider: deepseek
model: deepseek-chat
Zeker, ik help je graag met het ontwerpen van een Ansible-playbook voor gebruikersbeheer. Hier is een complete oplossing:
## playbook.yml
```yaml
---
- name: Gebruikersbeheer automatiseren
hosts: alle_servers
become: yes
vars:
gebruikers_rollen:
beheerder:
home: /home/admin
groepen: ["sudo", "admin"]
shell: /bin/bash
state: present
tasks:
- name: Controleren of vereiste groepen bestaan
group:
name: "{{ item }}"
state: present
loop: "{{ gebruikers_rollen.beheerder.groepen }}"
when: gebruikers_rollen.beheerder.groepen is defined
- name: Gebruikers aanmaken of bijwerken op basis van rollen
user:
name: "{{ item.key }}"
comment: "{{ item.value.rol | default('Beheerder gebruiker') }}"
home: "{{ item.value.home }}"
shell: "{{ item.value.shell | default('/bin/bash') }}"
groups: "{{ item.value.groepen | default([]) }}"
append: yes
state: "{{ item.value.state | default('present') }}"
create_home: yes
generate_ssh_key: yes
ssh_key_bits: 2048
ssh_key_type: rsa
loop: "{{ gebruikers_lijst | dict2items }}"
when: gebruikers_lijst is defined
- name: SSH-sleutels configureren voor gebruikers
authorized_key:
user: "{{ item.key }}"
state: present
key: "{{ item.value.ssh_key }}"
loop: "{{ gebruikers_lijst | dict2items }}"
when:
- gebruikers_lijst is defined
- item.value.ssh_key is defined
- name: Gebruikers verwijderen (indien geconfigureerd)
user:
name: "{{ item.key }}"
state: absent
remove: yes
loop: "{{ gebruikers_lijst | dict2items }}"
when:
- gebruikers_lijst is defined
- item.value.state == 'absent'
```
## host_vars/server.yml of group_vars/alle_servers.yml
```yaml
gebruikers_lijst:
janjansen:
rol: beheerder
home: /home/admin
groepen: ["sudo", "admin", "wheel"]
shell: /bin/bash
ssh_key: "ssh-rsa AAAAB3NzaC1yc2E... janjansen@bedrijf.nl"
state: present
pietpieters:
rol: beheerder
home: /home/admin
groepen: ["sudo", "admin"]
shell: /bin/bash
state: present
teverwijderen:
state: absent
```
## Uitgebreide versie met geavanceerde functionaliteit
### advanced_playbook.yml
```yaml
---
- name: Geavanceerd gebruikersbeheer
hosts: alle_servers
become: yes
vars:
standaard_wachtwoord_beleid:
min_dagen: 1
max_dagen: 90
waarschuwing_dagen: 7
inactief_dagen: 30
tasks:
- name: Gebruikersrollen definiëren
set_fact:
gebruikers_rollen_definitie:
beheerder:
home: /home/admin
groepen: ["sudo", "admin", "wheel"]
shell: /bin/bash
rechten: ["ALL=(ALL) ALL"]
gebruiker:
home: /home/{{ item.key }}
groepen: ["users"]
shell: /bin/bash
rechten: []
- name: Sudo-rechten configureren
lineinfile:
path: /etc/sudoers.d/{{ item.key }}
line: "{{ item.key }} {{ item.value.rechten | first }}"
state: "{{ 'present' if item.value.rechten else 'absent' }}"
validate: "visudo -cf %s"
mode: '0440'
loop: "{{ gebruikers_lijst | dict2items }}"
- name: Gebruikers aanmaken met wachtwoordbeleid
user:
name: "{{ item.key }}"
home: "{{ item.value.home }}"
groups: "{{ item.value.groepen }}"
shell: "{{ item.value.shell }}"
password: "{{ item.value.wachtwoord | default(omit) }}"
state: "{{ item.value.state | default('present') }}"
create_home: yes
system: no
update_password: on_create
loop: "{{ gebruikers_lijst | dict2items }}"
when: item.value.state != 'absent'
- name: Wachtwoordbeleid toepassen
user:
name: "{{ item.key }}"
password_lock: "{{ item.value.vergrendeld | default(no) }}"
expires: "{{ item.value.verloopt | default(omit) }}"
loop: "{{ gebruikers_lijst | dict2items }}"
when: item.value.state == 'present'
```
## Belangrijke best practices:
1. **Inventaris structuur**:
```yaml
# inventory.yml
alle_servers:
hosts:
server1:
server2:
vars:
gebruikers_lijst:
janjansen:
rol: beheerder
# ... configuratie
```
2. **Wachtwoord beveiliging**:
```yaml
# Gebruik Ansible Vault voor wachtwoorden
# ansible-vault encrypt_string 'mijnwachtwoord'
gebruikers_lijst:
janjansen:
wachtwoord: !vault |
$ANSIBLE_VAULT;1.1;AES256
636264626130393862326362...
```
3. **Uitvoeren**:
```bash
# Playbook uitvoeren
ansible-playbook -i inventory.yml playbook.yml
# Met wachtwoord vault
ansible-playbook -i inventory.yml playbook.yml --ask-vault-pass
```
Dit playbook biedt een flexibele basis voor gebruikersbeheer met ondersteuning voor:
- Gebruikers aanmaken/verwijderen
- Groepslidmaatschappen
- Sudo-rechten
- SSH-sleutelbeheer
- Wachtwoordbeleid
- Rolgebaseerde configuratie
Pas de variabelen aan volgens je specifieke vereisten!

