Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:benutzer_mit_ansible_einrichten

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

tachtler:benutzer_mit_ansible_einrichten [2020/03/19 07:38] – [Konfiguration] klaustachtler:benutzer_mit_ansible_einrichten [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1
Zeile 1: Zeile 1:
-====== Benutzer mit Ansible einrichten  ====== 
- 
-[[tachtler:ansible|{{:tachtler:index:ansible-48x48.png }}]] ist eine Open-Source-Software zur Automatisierung, Orchestrierung und Konfiguration von Serversystemen. Mit [[https://www.ansible.com/|Ansible]] erfolgt die Verwaltung von Servern unter anderem über SSH und erfordert keinerlei zusätzliche Software auf dem zu verwaltenden System. Die Ausgabe erfolgt im JSON-Format und Module können in jeder beliebigen Programmiersprache geschrieben sein. Das System nutzt überwiegend [[https://yaml.org/|YAML]] zur Konfiguration von wiederverwendbarer Beschreibungen der Systeme.    
- 
-^ Beschreibung      ^ Externer Link                                                                          ^ 
-| Homepage          | [[https://www.ansible.com/]]                                                                                                                                                                                                                                                                                                           
-| Dokumentation     | [[https://docs.ansible.com/]]                                                          | 
-| Best Practise     | [[https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html]]   | 
- 
-Ab hier werden ''ansible''-Benutzerrechte zur Ausführung der nachfolgenden Befehle benötigt. Um der Benutzer ''ansible'' zu werden, geben Sie bitte nachfolgenden Befehl ein: 
-<code> 
-$ su - ansible 
-Password:  
-</code> 
- 
-===== Vorbereitung ===== 
- 
-Nachfolgend soll davon ausgegangen werden, dass 
-  - [[https://www.ansible.com/|Ansible]] **installiert** ist\\ Siehe auch nachfolgenden internen Link: [[tachtler:ansible|Ansible]] 
-  - [[https://www.ansible.com/|Ansible]] **wie folgt eingerichtet ist**\\ Siehe auch nachfolgenden internen Link: [[tachtler:ansible_mit_ansible_einrichten|Ansible mit Ansible einrichten]] 
-  - Ein **eigener Benutzer** für die Nutzung von [[https://www.ansible.com/|Ansible]] genutzt werden soll 
-  - Die **Authentifizierung** des [[https://www.ansible.com/|Ansible]]-Benutzers gegenüber allen Hosts durch Verwendung eines ''ssh''-Schlüsselpaares erfolgen soll 
- 
-===== Aufgaben ===== 
- 
-Aufbauend auf die Installation und Einrichtung von [[https://www.ansible.com/|Ansible]], soll nachfolgende **role** (Rolle) für  
-  - die Erstellung von Benutzern, auf dem [[https://www.ansible.com/|Ansible]]-Host und den **Clients** durchgeführt werden 
-  - auf dem [[https://www.ansible.com/|Ansible]]-Host und **__nur__** auf dem [[https://www.ansible.com/|Ansible]]-Host sollen ''ssh-''Schlüsselpaare für die einzelnen Benutzer erstellt werden. 
-  - die auf dem [[https://www.ansible.com/|Ansible]]-Host erstellten ''ssh-''Schlüsselpaare für die einzelnen Benutzer, sollen auf die **Clients** verteilt werden. 
-  - Mitglieder der Gruppe ''wheel'' haben die Möglichkeit ''root''-Rechte, durch Eingabe des jeweiligen PAssworts des Benutzers, zu erlangen. 
- 
-===== Konfiguration ===== 
- 
-Ausgehend davon, dass folgende Konfigurationen 
-  - [[https://www.ansible.com/|Ansible]] **installiert** ist\\ Siehe auch nachfolgenden internen Link: [[tachtler:ansible|Ansible]] 
-  - [[https://www.ansible.com/|Ansible]] **wie folgt eingerichtet ist**\\ Siehe auch nachfolgenden internen Link: [[tachtler:ansible_mit_ansible_einrichten|Ansible mit Ansible einrichten]] 
-bereits durchgeführt worden sind, erfolgen die weiteren Konfigurationen als **role** (Rolle). 
- 
-Nachfolgende Dateien müssen dazu **__verändert__**: 
-  - ''~/ansible/inventories/production/hosts'' 
-bzw. nachfolgende Dateien sollen dazu mindestens **__neu__ erstellt**: 
-  - ''~/ansible/inventories/production/host_vars/00_user.yml'' 
-  - ''~/ansible/00_user.yml'' 
-  - ''~/ansible/roles/00_user/tasks/main.yml'' 
-werden: 
- 
-==== ~/ansible/inventories/production/hosts ==== 
- 
-In nachfolgendem Aufruf wird die **hosts**-Datei unter nachfolgendem Pfad verwendet: 
-  * ''~/ansible/inventories/production/hosts'' 
- 
-Der Inhalt, falls dies nicht schin geschen sein sollte, muss entsprechend mindestens wie folgt angepasst werden: 
-<code yaml> 
-[ansible] 
-192.168.1.10 
- 
-[all] 
-192.168.1.20 
-192.168.1.30 
-</code> 
- 
-**__Erklärung__**: 
- 
-  * <code yaml>[ansible] 
-192.168.1.10</code> 
- 
-Die Einträge sollte aus der nachfolgenden [[https://www.ansible.com/|Ansible]] **Einrichtung** stammen:\\ Siehe auch nachfolgenden internen Link: [[tachtler:ansible_mit_ansible_einrichten|Ansible mit Ansible einrichten]] 
- 
-  * <code yaml>[all] 
-192.168.1.20 
-192.168.1.30</code> 
- 
-Die **Gruppe** - **''[all]''** muss, falls nicht schon vorhanden, entsprechend mit dem Gruppennamen und z.B. den IP-Adressen aller zu konfigurierenden Hosts versehen werden. 
- 
-==== "vault"-Erstellung === 
- 
-Bevor mit der eigentlichen Konfiguration begonnen werden soll, sollen vorab die später benötigten **''vault'' verschlüsselten Zeichenkette** generiert werden.  
- 
-Zur Erstellung einer **''vault'' verschlüsselten Zeichenkette** kann nachfolgender Befehl genutzt werden: 
-<code yaml> 
-$ ansible-vault encrypt_string --stdin-name 'password' 
-New Vault password:  
-Confirm New Vault password:  
-Reading plaintext input from stdin. (ctrl-d to end input) 
-geheimpassword: !vault | 
-          $ANSIBLE_VAULT;1.1;AES256 
-          35323839633331323063396362343163313632626634386366383961343632376636626335396564 
-          6461313461343538383738653365373036623837626136650a633961326533616133626262346133 
-          32653636343836303866303262653164326166356138356239333266616632646364343066306537 
-          3637623863373362660a626362653737623735623565343262333033323163386566376333393164 
-          3731 
-Encryption successful 
-</code> 
-bzw. 
-<code yaml> 
-$ ansible-vault encrypt_string --stdin-name 'ssh_key_passphrase' 
-New Vault password:  
-Confirm New Vault password:  
-Reading plaintext input from stdin. (ctrl-d to end input) 
-geheimssh_key_passphrase: !vault | 
-          $ANSIBLE_VAULT;1.1;AES256 
-          31653266333835333866323833643664363562323438333935303737383064346139306630396366 
-          6139336531393164643835353334346666623238336334330a623030353633666237343737326531 
-          66346338613735356131663035343632623238343331666566386639393231353061643862343961 
-          3361326130386664350a336538636238633638353730363935363339636632316135303635356138 
-          6330 
-Encryption successful 
-</code> 
- 
-Nach absetzen des Befehls 
-  * ''$ ansible-vault encrypt_string --stdin-name 'password''' 
-muss **zuerst** ein **Passwort** für **__ALLE__** nachfolgende **''vault'' verschlüsselten Zeichenketten** gesetzt werden, **welches später __wichtig__ zur __Entschlüsselung__ benötigt wird!** 
-<code> 
-New Vault password:  
-Confirm New Vault password: 
-</code> 
- 
-Nach Eingabe des **Passwort** für **__ALLE__** nachfolgende **''vault'' verschlüsselten Zeichenketten** wird dann die **eigentlich zu verschlüsselnde Zeichenkette** eingegeben **__UND__** dann mit der  
-  * **Tastenkombination** - **''[Strg]+[d]''** - **__zwei mal__** betätigt werden! 
-<code yaml> 
-geheimpassword: !vault | 
-          $ANSIBLE_VAULT;1.1;AES256 
-          35323839633331323063396362343163313632626634386366383961343632376636626335396564 
-          6461313461343538383738653365373036623837626136650a633961326533616133626262346133 
-          32653636343836303866303262653164326166356138356239333266616632646364343066306537 
-          3637623863373362660a626362653737623735623565343262333033323163386566376333393164 
-          3731 
-Encryption successful 
-</code> 
- 
-* //Die **''vault'' verschlüsselte Zeichenkette** ist hier ''geheim''// 
- 
-==== ~/ansible/inventories/production/host_vars/00_user.yml==== 
- 
-:!: **HINWEIS** - **Nachfolgende Variablen Definitionen sollen __GLOBAL__ verfügbar sein!** 
- 
-Die Konfigurationsdatei ''~/ansible/inventories/production/host_vars/00_user.yml'' kann mit nachfolgendem Befehl **neu** erstellt werden, falls diese nicht bereits vorhanden sein sollte: 
-<code> 
-$ touch ~/ansible/inventories/production/host_vars/00_user.yml 
-</code> 
- 
-Der Inhalt der Konfigurationsdatei ''~/ansible/inventories/production/host_vars/00_user.yml'', welche die **benötigten __Variablen__** für das **Playbook** bereit stellt, kann als **Beispiel** wie folgt aussehen: 
-<code yaml> 
---- ### Verwaltet Benutzergruppen, Benutzer und SSH-Schluessel. 
-  # 
-  # Generate a encrypted password string: ansible-vault encrypt_string --stdin-name 'password' 
-  # To test the gernated password string: ansible localhost -m debug -a var="password" -e "@password.yml" --ask-vault-pass 
-  # (The encrypted string must be in a file in the same directory named 'password.yml') 
-  # 
-users: 
-  ansible: 
-    protected: True 
-    gid: 65533 
-    group: 'ansible' 
-    comment: "Ansible User"  
-    name: 'ansible' 
-    password: !vault | 
-      $ANSIBLE_VAULT;1.1;AES256 
-      35323839633331323063396362343163313632626634386366383961343632376636626335396564 
-      6461313461343538383738653365373036623837626136650a633961326533616133626262346133 
-      32653636343836303866303262653164326166356138356239333266616632646364343066306537 
-      3637623863373362660a626362653737623735623565343262333033323163386566376333393164 
-      3731 
-    shell: '/bin/bash' 
-    ssh_key_passphrase: !vault | 
-      $ANSIBLE_VAULT;1.1;AES256 
-      31653266333835333866323833643664363562323438333935303737383064346139306630396366 
-      6139336531393164643835353334346666623238336334330a623030353633666237343737326531 
-      66346338613735356131663035343632623238343331666566386639393231353061643862343961 
-      3361326130386664350a336538636238633638353730363935363339636632316135303635356138 
-      6330 
-    uid: 65533 
-    wheel: True 
-</code> 
- 
-**__Erklärung__**: 
- 
-  * <code yaml>--- ### Verwaltet Benutzergruppen, Benutzer und SSH-Schluessel.</code> 
- 
-Hier ist der Anfang der Konfigurationsdatei im [[https://yaml.org/|YAML]]-Format, inklusive einer Kurzbeschreibung. 
- 
-  * <code yaml>  # 
-  # Generate a encrypted password string: ansible-vault encrypt_string --stdin-name 'password' 
-  # To test the gernated password string: ansible localhost -m debug -a var="password" -e "@password.yml" --ask-vault-pass 
-  # (The encrypted string must be in a file in the same directory, for example named 'password.yml') 
-  #</code> 
- 
-Ein Kommentar, welcher eine Beschreibung enthält, wie eine **''vault''**-verschlüsselte Zeichenkette **erstellt** und **geprüft** werden kann. 
- 
-  * <code yaml>users:</code> 
- 
-Name des **dictionarys** (Wörterbuchs) unter dem auf die nachfolgenden Inhalte zugegriffen werden kann. 
- 
-  * <code yaml>  ansible:</code> 
- 
-Name des Benutzers im **dictionary** (Wörterbuch) unter dem die nachfolgenden Eigenschaften abgelegt werden. 
- 
-  * <code yaml>    protected: True</code> 
- 
-Eigenschaft: **Geschützt: (True|False)** des Benutzers ''ansible'' im **dictionary** (Wörterbuch). Dies bewirkt, das des Benutzer **__NICHT__** durch [[https://www.ansible.com/|Ansible]] gelöscht und wieder neu angelegt werden kann.  
- 
-:!: **HINWEIS** - **Dies ist __nur__ für den Benutzer erforderlich, welcher zur Ausführung von [[https://www.ansible.com/|Ansible]]-Playbooks vorgesehen ist!** 
- 
-  * <code yaml>    gid: 65533</code> 
- 
-Eigenschaft: **Gruppen-ID 65533** des Benutzers ''ansible'' im **dictionary** (Wörterbuch). 
- 
-  * <code yaml>    group: 'ansible'</code> 
- 
-Eigenschaft: **Gruppenname 'ansible'** des Benutzers ''ansible'' im **dictionary** (Wörterbuch). 
- 
-  * <code yaml>    comment: "Ansible User" </code> 
- 
-Eigenschaft: **Kommentar "Ansible User"** des Benutzers ''ansible'' im **dictionary** (Wörterbuch). 
- 
-  * <code yaml>    password: !vault | 
-      $ANSIBLE_VAULT;1.1;AES256 
-      35323839633331323063396362343163313632626634386366383961343632376636626335396564 
-      6461313461343538383738653365373036623837626136650a633961326533616133626262346133 
-      32653636343836303866303262653164326166356138356239333266616632646364343066306537 
-      3637623863373362660a626362653737623735623565343262333033323163386566376333393164 
-      3731</code> 
- 
-Eigenschaft: **Passwort als ''vault''-verschlüsselte Zeichenkette** des Benutzers ''ansible'' im **dictionary** (Wörterbuch). 
- 
-  * <code yaml>    shell: '/bin/bash'</code> 
- 
-Eigenschaft: **''shell /bin/bash''** des Benutzers ''ansible'' im **dictionary** (Wörterbuch). 
- 
-  * <code yaml>    ssh_key_passphrase: !vault | 
-      $ANSIBLE_VAULT;1.1;AES256 
-      31653266333835333866323833643664363562323438333935303737383064346139306630396366 
-      6139336531393164643835353334346666623238336334330a623030353633666237343737326531 
-      66346338613735356131663035343632623238343331666566386639393231353061643862343961 
-      3361326130386664350a336538636238633638353730363935363339636632316135303635356138 
-      6330</code> 
- 
-Eigenschaft: **Passphrase des ''ssh''-Schlüssels als ''vault''-verschlüsselte Zeichenkette** des Benutzers ''ansible'' im **dictionary** (Wörterbuch). 
- 
-  * <code yaml>    uid: 65533</code> 
- 
-Eigenschaft: **Benutzer-ID 65533** des Benutzers ''ansible'' im **dictionary** (Wörterbuch). 
- 
-  * <code yaml>    wheel: True</code> 
- 
-Eigenschaft: **wheel: True** des Benutzers ''ansible'' im **dictionary** (Wörterbuch) ist eine **eigene Definition** und soll angeben, ob der Benutzer in die Gruppe ''wheel'' aufgenommen werden soll. 
- 
-==== ~/ansible/00_user.yml ==== 
- 
-Die Konfigurationsdatei ''~/ansible/00_user.yml'' kann mit nachfolgendem Befehl **neu** erstellt werden: 
-<code> 
-$ touch ~/ansible/00_user.yml 
-</code> 
- 
-Der Inhalt der Konfigurationsdatei ''~/ansible/00_user.yml'', welche das eigentliche **Playbook** darstellt, sollte mindestens wie folgt aussehen: 
-<code yaml> 
---- ### Verwaltet Benutzergruppen, Benutzer und SSH-Schluessel. 
-  # 
-  # # ansible-playbook -i /home/ansible/ansible/inventories/production/hosts --ask-pass --ask-vault-pass /home/ansible/ansible/00_user.yml 
-  # 
-- hosts: all 
-  vars_files: 
-    - /home/ansible/ansible/inventories/production/host_vars/00_user.yml 
-  roles: 
-    - { role: 00_user, tags: ['00_user'] } 
-</code> 
- 
-**__Erklärungen__**: 
- 
-  * <code yaml>--- ### Verwaltet Benutzergruppen, Benutzer und SSH-Schluessel.</code> 
- 
-Hier ist der Anfang der Konfigurationsdatei im [[https://yaml.org/|YAML]]-Format, inklusive einer Kurzbeschreibung. 
- 
-  * <code yaml>  # 
-  # # ansible-playbook -i /home/ansible/ansible/inventories/production/hosts --ask-pass --ask-vault-pass /home/ansible/ansible/00_user.yml 
-  #</code> 
- 
-Ein Kommentar, welcher eine Beschreibung enthält, mit welchen Parametern das **Playbook** ausgeführt werden muss. 
- 
-  * <code yaml>- hosts: all</code> 
- 
-Auf welche **hosts** das **Playbook** angewendet werden soll. 
- 
-  * <code yaml>  vars_files:</code> 
- 
-Die Definition, das das **Playbook** nachfolgende Variablen Datei verwenden soll. 
- 
-  * <code yaml>    - /home/ansible/ansible/inventories/production/host_vars/00_user.yml</code> 
- 
-Die Definition, der Variablen Datei welche das **Playbook** verwenden soll. 
- 
-  * <code yaml>  roles:</code> 
- 
-Die Definition, das das **Playbook** aus nachfolgender **role** (Rolle) besteht. 
- 
-  * <code yaml>    - { role: 00_user, tags: ['00_user'] }</code> 
- 
-Welche **role** (Rolle) das **Playbook** benutzen soll. 
- 
-==== ~/ansible/roles/00_user/tasks/main.yml ==== 
- 
-Die Verzeichnisstruktur für die **role** (Rolle) - ''00_user'', kann mit nachfolgendem Befehl erstellt werden: 
-<code> 
-$ mkdir -p ~/ansible/roles/00_user/tasks 
-</code> 
- 
-Die Konfigurationsdatei ''~/ansible/roles/00_user/tasks/main.yml'' kann mit nachfolgendem Befehl **neu** erstellt werden: 
-<code> 
-$ touch ~/ansible/roles/00_user/tasks/main.yml 
-</code> 
- 
-Der Inhalt der Konfigurationsdatei ''~/ansible/roles/00_user/tasks/main.yml'', welche das eigentliche **Playbook** ist, kann als **Beispiel** wie folgt aussehen: 
-<code yaml> 
---- ### Verwaltet Benutzergruppen, Benutzer und SSH-Schluessel. 
-  # 
-  # # ansible-playbook -i /home/ansible/ansible/inventories/production/hosts --ask-pass --ask-vault-pass /home/ansible/ansible/00_user.yml 
-  # 
-- name: Make sure group 'wheel' does exists. 
-  group: 
-    name: wheel 
-    state: present 
-- name: Allow 'wheel' group to have password accessed sudo. 
-  copy: 
-    content: '%wheel ALL=(ALL) ALL' 
-    dest: /etc/sudoers.d/020_passwd_all_for_wheel 
-    group: root 
-    mode: "0440" 
-    owner: root      
-    validate: visudo -cf %s 
-- name: Ensure user does NOT exists, if NOT protected. 
-  user: 
-    name: "{{ item.value.name }}" 
-    remove: yes 
-    state: absent 
-  when: "item.value.protected | bool == False" 
-  with_dict: 
-    - "{{ users }}" 
-  no_log: True 
-- name: Ensure group does NOT exists, if NOT protected. 
-  group: 
-    name: "{{ item.value.group }}" 
-    state: absent 
-  when: "item.value.protected | bool == False" 
-  with_dict: 
-    - "{{ users }}" 
-  no_log: True 
-- name: Ensure group exists. 
-  group: 
-    gid: "{{ item.value.gid }}" 
-    name: "{{ item.value.group }}" 
-    state: present 
-  with_dict: 
-    - "{{ users }}" 
-  no_log: True 
-- name: Ansible-Host - Ensure user exists. 
-  user: 
-    append: yes 
-    comment: "{{ item.value.comment }}" 
-    force: yes 
-    generate_ssh_key: yes 
-    group: "{{ item.value.group }}" 
-    name: "{{ item.value.name }}" 
-    password: "{{ item.value.password | password_hash('sha512', 65534 | random ) }}" 
-    shell: "{{ item.value.shell }}" 
-    ssh_key_comment: "{{ item.value.comment }}" 
-    ssh_key_file: ".ssh/id_ed25519_{{ item.value.name }}" 
-    ssh_key_passphrase: "{{ item.value.ssh_key_passphrase }}" 
-    ssh_key_type: ed25519 
-    state: present 
-    uid: "{{ item.value.uid }}" 
-  with_dict: 
-    - "{{ users }}" 
-  delegate_to: 127.0.0.1 
-  no_log: True 
-- name: Clients - Ensure user exists. 
-  user: 
-    append: yes 
-    comment: "{{ item.value.comment }}" 
-    force: yes 
-    group: "{{ item.value.group }}" 
-    name: "{{ item.value.name }}" 
-    password: "{{ item.value.password | password_hash('sha512', 65534 | random ) }}" 
-    shell: "{{ item.value.shell }}" 
-    state: present 
-    uid: "{{ item.value.uid }}" 
-  with_dict: 
-    - "{{ users }}" 
-  no_log: True 
-- name: Add users to group 'wheel' if set. 
-  user: 
-    append: yes 
-    groups: wheel 
-    name: "{{ item.value.name }}" 
-  when: "item.value.wheel | bool" 
-  with_dict: 
-    - "{{ users }}" 
-  no_log: True  
-- name: Set exclusive authorized key for users taken from file. 
-  authorized_key: 
-    user: "{{ item.value.name }}" 
-    key: "{{ lookup('file', '/home/{{ item.value.name }}/.ssh/id_ed25519_{{ item.value.name }}.pub') }}" 
-    state: present 
-    exclusive: True 
-  with_dict: 
-    - "{{ users }}" 
-  no_log: True 
-</code> 
- 
-**__Erklärungen__**: 
- 
-  * <code yaml>--- ### Verwaltet Benutzergruppen, Benutzer und SSH-Schluessel.</code> 
- 
-Hier ist der Anfang der Konfigurationsdatei im [[https://yaml.org/|YAML]]-Format, inklusive einer Kurzbeschreibung. 
- 
-  * <code yaml>  # 
-  # # ansible-playbook -i /home/ansible/ansible/inventories/production/hosts --ask-pass --ask-vault-pass /home/ansible/ansible/00_user.yml 
-  #</code> 
- 
-Ein Kommentar, welcher eine Beschreibung enthält, mit welchen Parametern das **Playbook** ausgeführt werden muss. 
- 
-  * <code yaml>- name: Make sure group 'wheel' does exists. 
-  group: 
-    name: wheel 
-    state: present</code> 
- 
-Es wird sicher gestellt, das ein **Gruppe** ''wheel'' auf **__allen__ Clients** existiert. 
- 
-  * <code yaml>- name: Allow 'wheel' group to have password accessed sudo. 
-  copy: 
-    content: '%wheel ALL=(ALL) ALL' 
-    dest: /etc/sudoers.d/020_passwd_all_for_wheel 
-    group: root 
-    mode: "0440" 
-    owner: root      
-    validate: visudo -cf %s</code> 
- 
-Erstellt eine **__neue__** Konfigurationsdatei 
-  * ''/etc/sudoers.d/020_passwd_all_for_wheel'' 
-mit dem Inhalt 
-  * ''%wheel ALL=(ALL) ALL'' 
-welcher besagt, dass alle Mitglieder der Gruppe ''wheel'' auf **__allen__ Clients** die Fähigkeit besitzen ''root''-Rechte, durch Eingabe des Passworts des jeweiligen Benutzer, zu erlangen. Dazu Benötigt die Konfigurationsdatei nachfolgende Eigenschaften: 
-  * ''group: root'' - Die Konfigurationsdatei muss der Gruppe ''root'' gehören 
-  * ''mode: "0440"'' - Die Konfigurationsdatei muss die gezeigten Dateirechte besitzen 
-  * ''owner: root'' - Die Konfigurationsdatei muss dem Benutzer ''root'' gehören 
-  * ''validate: visudo -cf %s'' - Es erfolgt eine syntaktische Überprüfung, ob die Konfigurationsdatei Fehler aufweist. 
- 
-  * <code yaml>- name: Ensure user does NOT exists, if NOT protected. 
-  user: 
-    name: "{{ item.value.name }}" 
-    remove: yes 
-    state: absent 
-  when: "item.value.protected | bool == False" 
-  with_dict: 
-    - "{{ users }}" 
-  no_log: True</code> 
- 
-Es wird sicher gestellt, das ein **Benutzer** des **Benutzers** aus dem **dictionary (Wörterbuch)** - ''users''  
-  * auf **__allen__ Clients** 
-  * ''name: '' - aus dem **dictionary (Wörterbuch)** - ''users'' 
-  * mit dem Status ''state: absent'' bedeutet, dass der Benutzer gelöscht wird. 
-  * ''when: "item.value.protected | bool == False"'' - - aus dem **dictionary (Wörterbuch)** - ''users'' - konvertiert zu einem boolischem Wert (Wahr/Unwahr). 
-  * ''no_log: True'' - bewirkt, dass keine detaillierten Ausgaben erfolgen, da sonst z.B. Passwörter im Klartext bei der Log-Ausgabe auftauchen würden. 
-**gelöscht** wird, **__falls dieser NICHT als geschützt gekennzeichnet ist!__** 
- 
-:!: **HINWEIS** - **Dies bewirkt, das der Benutzer zuerst gelöscht und später __komplett NEU__ erstellt wird!** 
- 
-  * <code yaml>- name: Ensure group does NOT exists, if NOT protected. 
-  group: 
-    name: "{{ item.value.group }}" 
-    state: absent 
-  when: "item.value.protected | bool == False" 
-  with_dict: 
-    - "{{ users }}" 
-  no_log: True</code> 
- 
-Es wird sicher gestellt, das eine **Gruppe** des **Benutzers** aus dem **dictionary (Wörterbuch)** - ''users'' - mit dem 
-  * ''name:'' - aus dem **dictionary (Wörterbuch)** - ''users'' 
-  * mit dem Status ''state: absent'' bedeutet, dass die Gruppe gelöscht wird 
-  * ''when: "item.value.protected | bool == False"'' - - aus dem **dictionary (Wörterbuch)** - ''users'' - konvertiert zu einem boolischem Wert (Wahr/Unwahr). 
-  * ''no_log: True'' - bewirkt, dass keine detaillierten Ausgaben erfolgen, da sonst z.B. Passwörter im Klartext bei der Log-Ausgabe auftauchen würden. 
-**gelöscht** wird, **__falls dieser NICHT als geschützt gekennzeichnet ist!__** 
- 
-:!: **HINWEIS** - **Dies bewirkt, das die Gruppe zuerst gelöscht und später __komplett NEU__ erstellt wird!** 
- 
-  * <code yaml>- name: Ensure group exists. 
-  group: 
-    gid: "{{ item.value.gid }}" 
-    name: "{{ item.value.group }}" 
-    state: present 
-  with_dict: 
-    - "{{ users }}" 
-  no_log: True</code> 
- 
-Es wird sicher gestellt, das eine **Gruppe** des **Benutzers** aus dem **dictionary (Wörterbuch)** - ''users'' - mit der  
-  * ''gid:'' - aus dem **dictionary (Wörterbuch)** - ''users'' 
-  * ''name:'' - aus dem **dictionary (Wörterbuch)** - ''users'' 
-  * mit dem Status ''state: present'' bedeutet, dass der Benutzer angelegt wird, wenn dieser nicht bereits existiert 
-  * ''no_log: True'' - bewirkt, dass keine detaillierten Ausgaben erfolgen, da sonst z.B. Passwörter im Klartext bei der Log-Ausgabe auftauchen würden. 
-durchgeführt wird. 
- 
-  * <code yaml>- name: Ensure user exists. (Host) 
-  user: 
-    append: yes 
-    comment: "{{ item.value.comment }}" 
-    force: yes 
-    generate_ssh_key: yes 
-    group: "{{ item.value.group }}" 
-    name: "{{ item.value.name }}" 
-    password: "{{ item.value.password | password_hash('sha512', 65534 | random ) }}" 
-    shell: "{{ item.value.shell }}" 
-    ssh_key_comment: "{{ item.value.comment }}" 
-    ssh_key_file: ".ssh/id_ed25519_{{ item.value.name }}" 
-    ssh_key_passphrase: "{{ item.value.ssh_key_passphrase }}" 
-    ssh_key_type: ed25519 
-    state: present 
-    uid: "{{ item.value.uid }}" 
-  with_dict: 
-    - "{{ users }}" 
-  delegate_to: 127.0.0.1 
-  no_log: True</code> 
- 
-Es wird sicher gestellt, das ein **Benutzer** des **Benutzers** aus dem **dictionary (Wörterbuch)** - ''users''  
-  * nur auf dem [[https://www.ansible.com/|Ansible]]-**Host** 
-hinzugefügt wird und nachfolgende Eigenschaften besitzt: 
-  * ''comment:'' - aus dem **dictionary (Wörterbuch)** - ''users'' 
-  * ''generate_ssh_key: yes'' - Ein ''ssh''-Schlüsselpaar soll ebenfalls erstellt werden 
-    * ''ssh_key_comment:'' - Parameter - aus dem **dictionary (Wörterbuch)** - ''users'' 
-    * ''ssh_key_file:'' - aus dem **dictionary (Wörterbuch)** - ''users'' mit Speicherort''.ssh/id_ed25519_[Name des Benutzer](.pub)'' 
-    * ''ssh_key_passphrase:'' - aus dem **dictionary (Wörterbuch)** - ''users'' 
-    * ''ssh_key_type: ed25519'' - Schlüsseltyp ist ''ed25519'' 
-  * ''group:'' - aus dem **dictionary (Wörterbuch)** - ''users'' 
-  * ''name: '' - aus dem **dictionary (Wörterbuch)** - ''users'' 
-  * ''password:'' - aus dem **dictionary (Wörterbuch)** - ''users'' umgewandelt zur Nutzung in ''/etc/shadow'' 
-  * ''shell:'' - aus dem **dictionary (Wörterbuch)** - ''users'' 
-  * mit dem Status ''state: present'' bedeutet, dass der Benutzer angelegt wird, wenn dieser nicht bereits existiert 
-  * ''uid:'' - aus dem **dictionary (Wörterbuch)** - ''users'' 
-  * ''delegate_to: 127.0.0.1'' - bewirkt, dass dies **__NUR__** auf dem [[https://www.ansible.com/|Ansible]]-**Host** ausgeführt wird und nicht auf allen anderen **Clients** auch! 
-  * ''no_log: True'' - bewirkt, dass keine detaillierten Ausgaben erfolgen, da sonst z.B. Passwörter im Klartext bei der Log-Ausgabe auftauchen würden. 
-durchgeführt wird. 
- 
-  * <code yaml>- name: Ensure user exists. (Clients) 
-  user: 
-    append: yes 
-    comment: "{{ item.value.comment }}" 
-    force: yes 
-    group: "{{ item.value.group }}" 
-    name: "{{ item.value.name }}" 
-    password: "{{ item.value.password | password_hash('sha512', 65534 | random ) }}" 
-    shell: "{{ item.value.shell }}" 
-    state: present 
-    uid: "{{ item.value.uid }}" 
-  with_dict: 
-    - "{{ users }}" 
-  no_log: True</code> 
- 
-Es wird sicher gestellt, das ein **Benutzer** des **Benutzers** aus dem **dictionary (Wörterbuch)** - ''users''  
-  * auf **__allen__ Clients** 
-hinzugefügt wird und nachfolgende Eigenschaften besitzt: 
-  * ''comment:'' - aus dem **dictionary (Wörterbuch)** - ''users'' 
-  * ''group:'' - aus dem **dictionary (Wörterbuch)** - ''users'' 
-  * ''name: '' - aus dem **dictionary (Wörterbuch)** - ''users'' 
-  * ''password:'' - aus dem **dictionary (Wörterbuch)** - ''users'' umgewandelt zur Nutzung in ''/etc/shadow'' 
-  * ''shell:'' - aus dem **dictionary (Wörterbuch)** - ''users'' 
-  * mit dem Status ''state: present'' bedeutet, dass die Gruppe angelegt wird, wenn diese nicht bereits existiert 
-  * ''uid:'' - aus dem **dictionary (Wörterbuch)** - ''users'' 
-  * ''no_log: True'' - bewirkt, dass keine detaillierten Ausgaben erfolgen, da sonst z.B. Passwörter im Klartext bei der Log-Ausgabe auftauchen würden. 
-durchgeführt wird. 
- 
-  * <code yaml>- name: Add users to group 'wheel' if set. 
-  user: 
-    append: yes 
-    groups: wheel 
-    name: "{{ item.value.name }}" 
-  when: "item.value.wheel | bool" 
-  with_dict: 
-    - "{{ users }}" 
-  no_log: True</code> 
- 
-Es wird sicher gestellt, das ein **Benutzer** des **Benutzers** aus dem **dictionary (Wörterbuch)** - ''users''  
-  * auf **__allen__ Clients** 
-der Gruppe ''wheel'' hinzugefügt wird, wenn die Varibale **''wheel: True''** gesetzt ist: 
-  * ''name: '' - aus dem **dictionary (Wörterbuch)** - ''users'' 
-  * ''when: "item.value.wheel | bool"'' - - aus dem **dictionary (Wörterbuch)** - ''users'' - konvertiert zu einem boolischem Wert (Wahr/Unwahr). 
-  * ''no_log: True'' - bewirkt, dass keine detaillierten Ausgaben erfolgen, da sonst z.B. Passwörter im Klartext bei der Log-Ausgabe auftauchen würden. 
-durchgeführt wird. 
- 
-  * <code yaml>- name: Set exclusive authorized key for users taken from file. 
-  authorized_key: 
-    user: "{{ item.value.name }}" 
-    key: "{{ lookup('file', '/home/{{ item.value.name }}/.ssh/id_ed25519_{{ item.value.name }}.pub') }}" 
-    state: present 
-    exclusive: True 
-  with_dict: 
-    - "{{ users }}" 
-  no_log: True</code> 
- 
-Es wird sicher gestellt, das der **öffentliche** **''ssh''-Schlüssel** des **Benutzers** aus dem **dictionary (Wörterbuch)** - ''users''  
-  * auf **__allen__ Clients** 
-hinzugefügt wird und nachfolgende Eigenschaften besitzt: 
-  * ''user:'' - aus dem **dictionary (Wörterbuch)** - ''users'' 
-  * ''key:'' - aus dem **dictionary (Wörterbuch)** - ''users'' - mit Speicherort''.ssh/id_ed25519_[Name des Benutzer](.pub)'' 
-  * mit dem Status ''state: present'' bedeutet, dass der Schlüssel hinzugefügt wird, wenn diese nicht bereits existiert 
-  * ''exclusive: True'' - bedeutet, das keine anderer öffentlicher Schlüssel in der Datei ''authorized_keys'' vorgehalten wird 
-  * ''no_log: True'' - bewirkt, dass keine detaillierten Ausgaben erfolgen, da sonst z.B. Passwörter im Klartext bei der Log-Ausgabe auftauchen würden. 
-durchgeführt wird. 
- 
-===== Playbook Ausführung ===== 
- 
-Ab hier werden ''root''-Benutzerrechte zur Ausführung der nachfolgenden Befehle benötigt. Um der Benutzer ''root'' zu werden, geben Sie bitte nachfolgenden Befehl ein: 
-<code> 
-$ su - 
-Password:  
-</code> 
- 
-:!: **HINWEIS** - **Dies ist aktuell __noch__ erforderlich, da noch kein Benutzer außer ''root'' sich auf die entsprechenden Clients verbinden kann und sonst noch keine Benutzer angelegt sind!!!** 
- 
-Bevor das **Playbbok** ausgeführt werden kann, muss eine **erste** Verbindung mittels der ipv4-Adresse **lokal** auf und von dem[[https://www.ansible.com/|Ansible]]-**Host** und **__allen__** **Clients** aufgebaut werden, um den **HOST-Key** (HOST-Schlüssel) überpüfen zu können und dies **dauerhaft** zu speichern, was durch nachfolgenden Befehl erfolgen sollte: 
-<code> 
-# ssh root@192.168.1.20 
-The authenticity of host '192.168.1.30 (192.168.1.20)' can't be established. 
-ECDSA key fingerprint is SHA256:4j14DjWe5Vq5EP5aeQytzEZGx0phhhQK746jk6BJhIQ. 
-Are you sure you want to continue connecting (yes/no/[fingerprint])? yes 
-Warning: Permanently added '192.168.1.20' (ECDSA) to the list of known hosts. 
-root@192.168.1.20's password:  
-Last login: Sun Jan 12 13:07:20 2020 from 192.168.1.1 
-</code> 
-bzw. 
-<code> 
-# ssh root@192.168.1.30 
-The authenticity of host '192.168.1.30 (192.168.1.30)' can't be established. 
-ECDSA key fingerprint is SHA256:4j14DjWe5Vq5EP5aeQytzEZGx0phhhQK746jk6BJhIQ. 
-Are you sure you want to continue connecting (yes/no/[fingerprint])? yes 
-Warning: Permanently added '192.168.1.30' (ECDSA) to the list of known hosts. 
-root@192.168.1.30's password:  
-Last login: Sun Jan 12 13:07:20 2020 from 192.168.1.1 
-</code> 
- 
-==== /home/ansible/ansible/00_user.yml  ==== 
- 
-Nachfolgender Befehl führt eine detaillierte Überprüfung des angegeben **Playbook** durch: 
-<code yaml> 
-# ansible-playbook --syntax-check -i /home/ansible/ansible/inventories/production/hosts --ask-pass --ask-vault-pass /home/ansible/ansible/00_user.yml  
-Vault password:  
- 
-playbook: /home/ansible/ansible/00_user.yml 
-</code> 
- 
-Nachfolgender Befehl für das **Playbook**, welches unter ''~/ansible/00_user.yml'' gespeichert sein sollte aus: 
-<code yaml> 
-# ansible-playbook -i /home/ansible/ansible/inventories/production/hosts --ask-pass --ask-vault-pass /home/ansible/ansible/00_user.yml 
-SSH password:  
-Vault password:  
-</code> 
  
tachtler/benutzer_mit_ansible_einrichten.1584599937.txt.gz · Zuletzt geändert: 2020/03/19 07:38 von klaus