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 Unix
  • name: Imię użytkownika. Opcjonalne, do dokumentacji.
  • key: plik publicznego klucza SSH. Umieść je w np. katalogu files swojego playbooka.
  • github to identyfikator GitHub użytkownika. Rola uzyskuje klucze użytkowników z https://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

O projekcie

Manage user accounts and control access to them with ssh keys

Zainstaluj
ansible-galaxy install cogini.users
Licencja
mit
Pobrania
355
Właściciel
Product development services for ambitious innovators