Scentralizowane zarządzanie tożsamością – FreeIPA w praktyce

FreeIPA zarządzanie tożsamością

FreeIPA zapewnia centralnie zarządzany system tożsamości, polityki i audytowania. Używa połączenia Open Source’owych rozwiązań 389 Directory Server, MIT Kerberos, NTP, DNS, systemu certyfikatów DogTag, SSSD i innych otwartych komponentów.

FreeIPA integruje się ze środowiskiem Active Directory i umożliwia centralne zarządzanie mechanizmami bezpieczeństwa, takimi jak hasła, klucze publiczne SSH, reguły SUDO, Keytabs, czy reguły kontroli dostępu.

FreeIPA

W artykule przeprowadzimy szybką i uproszczoną (pozbawioną usługi DNS) instalację serwera IPA w dystrybucji EuroLinux 8 oraz umożliwimy autoryzację z włączoną obsługą 2FA (two-factor authentication) w przykładowej aplikacji – Jenkins.

Z materiału można korzystać również w połączeniu z innymi dystrybucjami z rodziny Enterprise Linux (RHEL®, Oracle® Linux, CentOS) w wersji minimum 8.3.

Instalacja serwera IPA poprzez Ansible

Przykładowy plik inventory.ini dla projektu:

[ipaserver]
192.168.122.99

[ipaserver:vars]
server_hostname=ipa.example.local
domain=example.local
realm=EXAMPLE.LOCAL
firewall_zone=public
ipa_user=admin
ipa_user_password=KX7c39BV384PsE
manager_password=YuH73PLvc93T

Kompleksowy, uproszczony instalator FreeIPA – playbook ipa.yml:

- hosts: ipaserver
  remote_user: root
  tasks:

  - name: zdefiniowanie hosta
    hostname:
      name: "{{ server_hostname }}"

  - name: edycja pliku hosts
    lineinfile:
      path: /etc/hosts
      line: "{{ ansible_host }}   {{ server_hostname }}"

  - name: aktywacja modułu z IPA
    command: dnf module enable idm:DL1 -y
    args:
      warn: false

  - name: distro-sync
    command: dnf distro-sync -y
    args:
      warn: false

  - name: instalacja pakietów serwera IPA
    yum:
      name: ipa-server
      state: present

  - name: instalacja firewalld
    yum:
      name: firewalld
      state: present

  - block:
    - name: uruchomienie firewalld
      systemd:
        name: firewalld
        enabled: yes
        state: started

  - name: uruchomienie instalatora IPA
    command: ipa-server-install -U --hostname={{ server_hostname }} --domain={{ domain }} --realm={{ realm }} --ds-password={{ manager_password }} --admin-password={{ ipa_user_password }}

  - name: aktualizacja serwera IPA
    command: ipa-server-upgrade

  - name: otworzenie wymaganych portów
    firewalld:
      zone: "{{ firewall_zone }}"
      service: "{{ item }}"
      immediate: true
      permanent: true
      state: enabled
    loop: 
      - dns
      - https
      - http
      - ntp
      - freeipa-ldap
      - freeipa-ldaps

Uruchomienie playbooka:

ansible all -i inventory.ini -m ping && ansible-playbook -i inventory.ini ipa.yml

Konfiguracja serwera IPA poprzez GUI

Po instalacji serwera dodajemy wpis do pliku /etc/hosts na swoim komputerze osobistym:

server_ip    ipa.example.local

Następnie w przeglądarce otwieramy stronę https://ipa.example.local.

Logujemy się za pomocą poświadczeń zdefiniowanych w konfiguracji Ansible. Po pierwszym zalogowaniu należy zmienić hasło (Actions → Reset Password). W przypadku kolejnych użytkowników zmiana hasła będzie już automatycznie wymuszana przez system.

FreeIPA

Weryfikacja dwuetapowa

W profilu naszego użytkownika na serwerze IPA wybieramy przycisk Actions i z listy rozwijanej opcję Add OTP token.

FreeIPA

Podajemy swój Unique ID, Description, zakres dat działania, a resztę pól pozostawiamy jako domyślne lub niewypełnione i naciskamy przycisk Add. Wyświetli się kod QR.

FreeIPA

W urządzeniu mobilnym instalujemy aplikację Google Authenticator i dodajemy do niej wyświetlany na stronie WWW kod QR.

W interfejsie serwisu FreeIPA naciskamy przycisk OK wyświetlany pod kodem QR i przechodzimy do pola User authentication types Tam zaznaczamy opcję Two factor authentication (password + OTP).

U góry profilu naciskamy przycisk Save i wylogowujemy się.

Synchronizacja tokena OTP

Przed pierwszym logowaniem z wykorzystaniem 2FA należy dokonać synchronizacji tokena OTP. W tym celu w oknie logowania do serwera IPA wybieramy opcję Sync OTP Token. Wypełniamy nazwę użytkownika i nasze hasło, a następnie wpisujemy pierwszy kod wyświetlany w Google Authenticator w polu First OTP i kolejny w kolejności kod (wyświetlany po pewnym czasie) w polu Second OTP. Pole Token ID wypełniamy tekstem wyświetlanym pod kodem w aplikacji mobilnej Google Authenticator i naciskamy przycisk Sync OTP Token.

FreeIPA

Wracamy do głównego okna logowania i podajemy login, hasło i tuż po haśle doklejamy (w tym samym polu) kod wyświetlany w aplikacji Google Authenticator. Klikamy Log in i powinniśmy zostać zalogowani z wykorzystaniem 2FA.

Wymuszenie 2FA w usłudze LDAP w interfejsie WWW FreeIPA dokonuje się w menu Itentity -> Services -> ldap/ipa.example.local -> Authentication indicators.

Jenkins autoryzowany za pomocą serwera IPA z aktywną weryfikacją dwuetapową

Na serwerze, na którym zainstalowaliśmy Jenkinsa, dodajemy analogiczny wpis do pliku /etc/hosts. W pluginach Jenkinsa powinniśmy posiadać domyślnie zainstalowany LDAP plugin – jeżeli nie, to oczywiście przed następnym krokiem należy ten plugin doinstalować. W interfejsie klikamy w menu Manage Jenkins -> Configure Global Security i w sekcji Security Realm przycisk radio LDAP.

Wypełniamy pole Server ldap://ipa.example.local:389

Naciskamy przycisk Advanced Server Configuration i w root DN podajemy dc=example,dc=local, w Seach users cn=users,cn=accounts. Resztę pól pozostawiamy domyślnie lub puste i naciskamy Test LDAP settings. Podajemy swoje dane (ponownie doklejając kod OTP tuż po haśle) i dopiero po sukcesie autentykacji naciskamy przycisk Save.

W polu niżej – Authorization – wybieramy opcję Matrix-based security i uzależniamy poszczególne uprawnienia użytkowników od przynależności do grup zdefiniowanych na serwerze IPA.
W podobny sposób możemy dodać obsługę serwera IPA do dowolnego serwisu wykorzystującego autentykację po LDAPie. Brak wymogu posiadania dodatkowego pola na kody weryfikacji dwuetapowej znacznie ułatwia integrację z kolejnymi serwisami i usługami, ponieważ nie są konieczne żadne dodatkowe prace przy wtyczkach aktywujących autentykację LDAP.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *