ryandaniels.create_users

ansible-role-tworzenie-użytkowników

CI

Rola do zarządzania użytkownikami w systemie Linux.
Zarządzaj użytkownikami w pliku konfiguracyjnym listy użytkowników (lista znajduje się w pliku vars/secret).
Dodawaj użytkowników (z określonym uid), zmieniaj hasła, blokuj/odblokowuj konta użytkowników, zarządzaj dostępem sudo (dla każdego użytkownika), dodawaj klucze ssh do autoryzacji opartej na kluczach, ustawiaj główną grupę i gid użytkownika, dodawaj użytkowników do grup (dodawanych), a grupy będą tworzone, jeśli nie istnieją.
Zarządzanie odbywa się na zasadzie "grupy" (zmienne grupowe Ansible), zgodnie z ustawieniami w pliku konfiguracyjnym. Grupa pochodzi z grupy Ansible, jak ustawiono dla serwera w pliku inwentarza. Obsługiwane jest również all, aby zastosować do każdego hosta w pliku inwentarza.

Bardziej szczegółowy przykład można znaleźć w poście na blogu: Zarządzanie użytkownikami z Ansible

Uwaga: Usuwanie użytkowników nie jest wykonywane celowo.

Testowane dystrybucje

  • Ubuntu 22.04, 20.04, 18.04, 16.04
  • CentOS / RHEL: 9.1, 8.x, 7.x, 6.5, 5.9

Wymagania

Wymaga Ansible 2.6 (z powodu wcześniejszego błędu 20096 dotyczącego użytkowników, których hasła nigdy nie wygasają)

ansible-vault

Użyj ansible-vault, aby zaszyfrować wrażliwe informacje przed dodaniem do git.

cat vars/secret
# szyfruj, jeśli tekst jawny (przed zatwierdzeniem/pchnięciem do git)
ansible-vault encrypt vars/secret

#Edytuj zaszyfrowany plik:
ansible-vault edit vars/secret

vi .vaultpass
-Wprowadź hasło do Ansible Vault z Menedżera Haseł
chmod 600 .vaultpass
vi ansible.cfg
#Wstaw następujące linie
[defaults]
vault_password_file = ./.vaultpass

.gitignore

vi .gitignore
#Wstaw następujące linie
.vaultpass
.retry
secret
*.secret

Jak wygenerować hasło

  • na Ubuntu - Zainstaluj pakiet "whois"
mkpasswd --method=SHA-512
  • na RedHat - Użyj Pythona
python -c 'import crypt,getpass; print(crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA512)))'

Ustawienia domyślne

---
# Uwaga: 'debug_enabled_default: true' spowoduje umieszczenie haszowanych haseł w wyjściu.
debug_enabled_default: false
default_update_password: on_create
default_shell: /bin/bash
default_generate_ssh_key_comment: "{{ item.username }}@{{ ansible_hostname }}"

Ustawienia użytkowników

Lokalizacja pliku: vars/secret

  • username: nazwa użytkownika - bez spacji (wymagane)
  • uid: numeryczna wartość identyfikatora użytkownika (opcjonalne)
  • user_state: present|lock (wymagane)
  • password: hasło zaszyfrowane w sha512 (opcjonalne). Jeśli nie ustawione, hasło jest ustawiane na "!"
  • update_password: always|on_create (opcjonalne, domyślnie on_create dla bezpieczeństwa).
    OSTRZEŻENIE: gdy 'always', hasło zostanie zmienione na wartość hasła.
    Jeśli używasz 'always' dla istniejących użytkowników, upewnij się, że masz ustawione hasło.
  • comment: Pełne imię i nazwisko oraz dział lub opis aplikacji (opcjonalne) (Ale powinieneś to ustawić!)
  • primarygroup: Nazwa grupy głównej (opcjonalne).
  • primarygid: Identyfikator grupy głównej (opcjonalne). Jeśli ta sama gid jest używana na serwerze, playbook się nie powiedzie. Jeśli ta sama grupa jest podana z różnym gid, używana będzie ostatnio skonfigurowana. OSTRZEŻENIE: zmiana primarygroup i/lub primarygid dla istniejących użytkowników nie zmieni uprawnień do istniejących plików należących do tego użytkownika. Stare wpisy pozostaną w /etc/group. Używaj ostrożnie.
  • groups: Lista grup, do których użytkownik zostanie dodany (dodany). Jeśli grupa nie istnieje, zostanie utworzona na konkretnym serwerze. To nie jest grupa główna (grupa główna nie jest modyfikowana).
  • shell: ścieżka do powłoki (opcjonalne, domyślnie to /bin/bash)
  • ssh_key: Dodaj autoryzowany klucz ssh do autoryzacji opartej na kluczach ssh (opcjonalne)
    UWAGA: 1 klucz może znajdować się w jednej linii, ale jeśli jest wiele kluczy, użyj formatu jak w pierwszym przykładzie.
  • exclusive_ssh_key: yes|no (opcjonalne, domyślnie: no)
    OSTRZEŻENIE: exclusive_ssh_key: yes - usunie wszelkie klucze ssh, które nie są tutaj zdefiniowane! no - doda każdy określony klucz.
  • generate_ssh_key: Czy wygenerować klucz SSH dla danego użytkownika. (opcjonalne, domyślnie 'no')
    UWAGA: To nie nadpisze istniejącego klucza SSH.
  • ssh_key_bits: Opcjonalnie określ liczbę bitów w kluczu SSH do utworzenia. (opcjonalne, domyślnie ustawione przez ssh-keygen)
  • ssh_key_passphrase: Ustaw hasło dla klucza SSH. Jeśli nie podano hasła, klucz SSH domyślnie będzie bez hasła.
  • generate_ssh_key_comment: Określ komentarz dla wygenerowanego klucza SSH (opcjonalne). Jeśli nie jest określony, użyje default_generate_ssh_key_comment z domyślnego pliku yaml.
  • use_sudo: yes|no (opcjonalne, domyślnie no)
  • use_sudo_nopass: yes|no (opcjonalne, domyślnie no). yes = sudo bez hasła.
  • system: yes|no (opcjonalne, domyślnie no). yes = utwórz konto systemowe (uid < 1000). Nie działa dla istniejących użytkowników.
  • servers: lista subelementów serwerów, gdzie wprowadza się zmiany. (wymagane)
    To są grupy Ansible z twojego pliku inwentarza Ansible. W poniższych przykładach webserver oznaczałoby 3 serwery w grupie inwentarza Ansible webserver, czyli webserver1, webserver2 i webserver3.

Uwaga: Możesz mieć powtarzające się nazwy użytkowników na różnych serwerach, jeśli chcesz mieć różne ustawienia. Zobacz poniższy przykład, w którym testuser102 ma sudo na serwerach zdefiniowanych jako grupa webserver, ale nie ma sudo w grupie database.

Przykład pliku inwentarza Ansible

[webserver]
webserver1
webserver2
webserver3

[database]
db1
db2
db3

[monitoring]
monitor1

Przykład pliku konfiguracyjnego (vars/secret)

---
users:
  - username: testuser101
    password: $6$/y5RGZnFaD3f$96xVdOAnldEtSxivDY02h.DwPTrJgGQl8/MTRRrFAwKTYbFymeKH/1Rxd3k.RQfpgebM6amLK3xAaycybdc.60
    update_password: on_create
    comment: Testowy Użytkownik 100
    shell: /bin/bash
    ssh_key: |
      ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx8crAHG/a9QBD4zO0ZHIjdRXy+ySKviXVCMIJ3/NMIAAzDyIsPKToUJmIApHHHF1/hBllqzBSkPEMwgFbXjyqTeVPHF8V0iq41n0kgbulJG testuser101@server1
      ssh-rsa AAAA.... testuser101@server2
    exclusive_ssh_key: yes
    use_sudo: no
    use_sudo_nopass: no
    user_state: present
    servers:
      - webserver
      - database
      - monitoring

  - username: testuser102
    password: $6$F/KXFzMa$ZIDqtYtM6sOC3UmRntVsTcy1rnsvw.6tBquOhX7Sb26jxskXpve8l6DYsQyI1FT8N5I5cL0YkzW7bLbSCMtUw1
    update_password: always
    comment: Testowy Użytkownik 101
    groups: testcommon, testgroup102web
    shell: /bin/sh
    use_sudo: yes
    user_state: present
    servers:
      - webserver
      - all

  - username: testuser102
    password: $6$F/KXFzMa$ZIDqtYtM6sOC3UmRntVsTcy1rnsvw.6tBquOhX7Sb26jxskXpve8l6DYsQyI1FT8N5I5cL0YkzW7bLbSCMtUw1
    update_password: always
    comment: Testowy Użytkownik 101
    groups: testcommon, testgroup102db
    shell: /bin/sh
    user_state: present
    servers:
      - database

  - username: testuser103
    password: $6$wBxBAqRmG6O$gPbg9hYShkuIe3YKMFujwiKsPKZHNFwoK4yCyTOlploljz53YSoPdCn9P5k8Qm0z062Q.8hvJ6DnnQQjwtrnS0
    user_state: present
    servers:
      - webserver

  - username: testuser104
    primarygroup: testgroup104primary
    ssh_key: ssh-rsa AAAB.... test103@server
    exclusive_ssh_key: no
    generate_ssh_key: yes
    generate_ssh_key_comment: niestandardowy komentarz dla generowanego klucza ssh
    use_sudo: no
    user_state: present
    servers:
      - webserver
      - monitoring

  - username: testuser105
    uid: 1099
    password: $6$XEnyI5UYSw$Rlc6tXtECtqdJ3uFitrbBlec1/8Fx2obfgFST419ntJqaX8sfPQ9xR7vj7dGhQsfX8zcSX3tumzR7/vwlIH6p/
    primarygroup: testgroup105primary
    primarygid: 2222
    ssh_key: ssh-rsa AAAB.... test107@server
    generate_ssh_key: yes
    ssh_key_bits: 4096
    use_sudo: no
    user_state: lock
    servers:
      - webserver
      - database

Przykład Playbooka create-users.yml

---
- hosts: '{{inventory}}'
  vars_files:
    - vars/secret
  become: yes
  roles:
  - create-users

Przygotowanie

  • zainstaluj ansible
  • utwórz klucze
  • ssh do klienta, aby dodać wpis do pliku known_hosts
  • skonfiguruj serwer klienta authorized_keys
  • uruchom polecenia ansible

Użytkowanie

Utwórz wszystkich użytkowników

ansible-playbook create-users.yml --ask-vault-pass --extra-vars "inventory=all-dev" -i hosts
O projekcie

Role to manage users on linux

Zainstaluj
ansible-galaxy install ryandaniels.create_users
Licencja
mit
Pobrania
187.6k
Właściciel
Ansible all the things