cogini.users
Użytkownicy
Ta rola Ansible zarządza kontami użytkowników i kontroluje dostęp do nich za pomocą kluczy SSH.
Jest używana do wdrażania jednej lub więcej aplikacji na serwerze. Obsługuje tworzenie kont używanych do wdrażania i uruchamiania aplikacji, a także kont dla administratorów systemu i deweloperów.
Jest to w zasadzie opakowanie na moduł Ansible user, wyrażające konkretne opinie na jego temat.
Typy użytkowników
Rola obsługuje tworzenie następujących typów kont użytkowników:
- Globalni administratorzy systemu / zespół operacyjny
Ci użytkownicy mają swoje własne loginy na serwerze z uprawnieniami sudo. Dodajemy ich do grupy wheel
lub admin
, a następnie pozwalamy im na uruchamianie sudo bez hasła.
Podczas konfiguracji serwera automatycznie tworzymy konta dla naszego zespołu administratorów systemu, niezależnie od projektu.
- Administratorzy projektu / użytkownicy z dużymi uprawnieniami
Ci użytkownicy mają te same prawa co globalni administratorzy, ale są ustawiani na poziomie projektu lub serwera, kontrolowani za pomocą zmiennych hosta/grupy w inwentarzu. Zazwyczaj lider techniczny projektu byłby administratorem.
- Konto wdrożeniowe
To konto użytkownika jest używane do wdrażania aplikacji na serwerze. Posiada pliki oprogramowania aplikacji i ma uprawnienia do zapisu w katalogach wdrożeniowych i konfiguracyjnych.
Konta aplikacji i wdrożenia nie mają uprawnień sudo, chociaż możemy stworzyć regułę w /etc/sudoers.d/
, aby umożliwić im uruchamianie poleceń, aby np. restartować aplikację za pomocą systemctl
. To jest obsługiwane przez rolę, która instaluje i konfiguruje aplikację, a nie przez tę rolę.
Na przykład, utwórz plik o nazwie /etc/sudoers.d/deploy-foo
:
deploy ALL=(ALL) NOPASSWD: /bin/systemctl start foo, /bin/systemctl stop foo, /bin/systemctl restart foo, /bin/systemctl status foo
- Konto aplikacji
Aplikacja działa pod tym kontem użytkownika.
To konto ma dostęp do zapisu w katalogach, których potrzebuje podczas działania, np. dla logów, i ma dostęp tylko do odczytu do swoich plików kodu i konfiguracyjnych.
- Deweloperzy
Deweloperzy mogą potrzebować dostępu do konta użytkownika wdrożeniowego lub aplikacji, aby sprawdzić logi i debugować. Dodajemy klucze SSH dla deweloperów do kont, umożliwiając im logowanie się przez SSH.
- Użytkownicy projektu
Ci użytkownicy są jak administratorzy, ale nie mają sudo. Przykładem może być konto dla klienta, które umożliwia mu logowanie się i uruchamianie zapytań w bazie danych, ale nie potrzebuje uprawnień administratora. Możesz przyznać im uprawnienia, np. do dostępu do plików logów aplikacji, dodając ich do grupy aplikacji i ustawiając uprawnienia do plików.
Konfiguracja
Domyślnie ta rola nic nie robi. Musisz dodać zmienne konfiguracyjne, aby coś zrobiła. Zwykle odbywa się to poprzez zmienne grupowe, np. inventory/group_vars/app_servers
, sekcję vars
w playbooku lub kombinację.
Możesz mieć różne ustawienia na poziomie hosta lub grupy, aby np. dać deweloperom dostęp do logowania w środowisku deweloperskim, ale nie na produkcji.
Konta aplikacji
Konto, które wdraża aplikację. Opcjonalne, jeśli nie jest określone, użytkownik wdrożeniowy nie zostanie utworzony.
users_deploy_user: deploy
users_deploy_group: deploy
Konto, które uruchamia aplikację. Opcjonalne, jeśli nie jest określone, użytkownik aplikacji nie zostanie utworzony.
users_app_user: foo
users_app_group: foo
Konta użytkowników
users_users
definiuje nazwy kont Unix i klucze SSH dla użytkowników.
Jest to lista słowników z czterema polami:
user
: Nazwa konta Unixname
: Imię użytkownika. Opcjonalne, do dokumentacji.key
: plik publicznego klucza SSH. Umieść je w np. katalogufiles
swojego playbooka.github
to identyfikator GitHub użytkownika. Rola uzyskuje klucze użytkowników zhttps://github.com/{{ github }}.keys
Przykład:
users_users:
- user: jake
name: "Jake Morrison"
github: reachfh
- user: ci
name: "CI server"
key: ci.pub
Listy użytkowników
Po zdefiniowaniu kont użytkowników w users_users
, skonfiguruj listy użytkowników, określając identyfikator użyty w kluczu user
. Domyślnie są one puste, więc jeśli nie określisz użytkowników, nie zostaną utworzeni.
Globalni użytkownicy administratorzy z oddzielnym kontem Unix i uprawnieniami sudo.
users_global_admin_users:
- jake
Użytkownicy administracyjni na poziomie projektu z oddzielnym kontem Unix i uprawnieniami sudo.
users_admin_users:
- fred
Użytkownicy projektu z oddzielnym kontem Unix, ale bez uprawnień sudo.
users_regular_users:
- bob
Użytkownicy (klucze SSH), którzy mogą uzyskać dostęp do konta wdrożeniowego.
users_deploy_users:
- ci
Użytkownicy (klucze SSH), którzy mogą uzyskać dostęp do konta aplikacji.
users_app_users:
- fred
Konfiguracja grup
Możesz określić dodatkowe grupy, do których będą należeć różne typy użytkowników. Domyślnie te listy są puste, ale możesz je wykorzystać do precyzyjnego dostosowywania dostępu do aplikacji.
Zwykle konfigurujemy SSH, aby konto użytkownika musiało być członkiem grupy sshusers
, inaczej SSH nie pozwoli na logowanie.
Dodaj to do /etc/ssh/sshd_config
AllowGroups sshusers sftpusers
Następnie dodaj sshusers
do users_admin_groups
, np.
users_admin_groups:
- sshusers
Grupy Unix, do których powinny należeć użytkownicy administracyjni.
Rola zawsze dodaje użytkowników do grupy wheel
lub admin
, w zależności od platformy. Jeśli zdefiniowani są użytkownicy administracyjni, to ta rola konfiguruje sudo z plikiem /etc/sudoers.d/00-admin
, aby użytkownicy administracyjni mogli uruchamiać sudo bez hasła.
users_admin_groups:
- sshusers
Grupy Unix, do których powinny należeć regularni użytkownicy:
users_regular_groups:
- sshusers
Grupy Unix, do których powinno należeć konto wdrożeniowe:
users_deploy_groups:
- sshusers
Grupy Unix, do których powinno należeć konto aplikacji:
users_app_groups:
- sshusers
Usuwanie użytkowników
Ta rola definiuje użytkowników, których tworzy z "ansible-" w komentarzu. Pozwala to śledzić, kiedy użytkownicy są dodawani lub usuwani z list i usuwać konta.
Możesz także określić konta na liście users_delete_users
, a one zostaną
usunięte. To przydatne do czyszczenia starych kont.
Możesz kontrolować, czy usunąć katalog domowy użytkownika podczas usuwania konta za pomocą zmiennych users_delete_remove
i users_delete_force
.
Zobacz dokumentację Ansible w celu uzyskania szczegółów.
Dla bezpieczeństwa te zmienne są domyślnie ustawione na no
, ale jeśli zarządzasz
użytkownikami systemowymi z tą rolą, prawdopodobnie chcesz je ustawić na yes
.
users_delete_remove: yes
users_delete_force: yes
Rola może opcjonalnie usunąć autoryzowane klucze z użytkowników systemowych takich jak 'root' lub 'ubuntu'. To jest przydatne dla bezpieczeństwa, aby uniknąć utrzymywania kluczy root, once ustawisz nazwane użytkowników administracyjnych.
users_remove_system_authorized_keys: true
Instalacja
Normalną sekwencją jest uruchomienie tej roli jako pierwszej na nowej instancji.
Tworzy to użytkowników administracyjnych i ustawia ich klucze, aby mogli uruchamiać
inne role konfiguracyjne na serwerze. Rola specyficzna dla projektu jest odpowiedzialna za
przygotowanie serwera do aplikacji, np. tworzenie katalogów i instalacja
zależności. Zwykle wdrażamy aplikację z serwera budowy lub CI, bez sudo,
korzystając z konta użytkownika deploy
.
Oto typowy playbook:
- name: Zarządzaj użytkownikami
hosts: '*'
vars:
users_app_user: foo
users_app_group: foo
users_deploy_user: deploy
users_deploy_group: deploy
users_users:
- user: jake
name: "Jake Morrison"
github: reachfh
users_app_users:
- jake
users_deploy_users:
- jake
roles:
- { role: cogini.users, become: true }
Dodaj hosta do pliku inventory/hosts
.
[web-servers]
web-server-01
Dodaj hosta do .ssh/config
lub specyficznego dla projektu pliku ssh.config
.
Host web-server-01
HostName 123.45.67.89
Na fizycznym serwerze, gdzie zaczynamy z kontem root i żadnymi kluczami SSH, musimy bootstrapować serwer po raz pierwszy, określając hasło z -k.
ansible-playbook -k -u root -v -l web-server-01 playbooks/manage-users.yml --extra-vars "ansible_host=123.45.67.89"
Na macOS polecenie -k wymaga narzędzia askpass, które nie jest instalowane domyślnie,
więc przechodzi na paramiko, który nie rozumie .ssh/config
, więc określamy ansible_host
ręcznie.
W kolejnych uruchomieniach, po skonfigurowaniu użytkowników administracyjnych, użyj:
ansible-playbook -u $USER -v -l web-server-01 playbooks/manage-users.yml
Usuwanie starych użytkowników
Zdefiniuj konta starszych użytkowników do usunięcia na liście users_delete_users
, np.:
ansible-playbook -u $USER -v -l web-servers playbooks/manage-users.yml --extra-vars "users_delete_users=[fred] users_delete_remove=yes users_delete_force=yes"
Licencja
MIT
Informacje o autorze
Jake Morrison w Cogini
ansible-galaxy install cogini.users