ryandaniels.create_users
ansible-role-tworzenie-użytkowników
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ładachwebserver
oznaczałoby 3 serwery w grupie inwentarza Ansiblewebserver
, czyliwebserver1
,webserver2
iwebserver3
.
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
ansible-galaxy install ryandaniels.create_users