slogan3

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
disclaimerOnPageApi image_legal_disclaimer...

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!