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

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 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.
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
command: hostnamectl set-hostname "{{ 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.
Weryfikacja dwuetapowa
W profilu naszego użytkownika na serwerze IPA wybieramy przycisk Actions
i z listy rozwijanej opcję Add OTP
token.
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.
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
.
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 Search 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.