====== Kerberos V ====== Założenia: * wykorzystujemy Kerberosa wbudowanego w base system * domena w której będzie pracować Kerberos to //kerberos.lan// * serwer dystrybucji kluczy to //kdc.kerberos.lan// Wymagania: * prawidłowo działający DNS * każdy host musi mieć prawidłowy wpis A i PTR * synchronizacja czasu na każdym z hostów ===== Konfiguracja wstępna ===== Na początku, do ''/etc/rc.local'' dorzucamy serwisy: kdc_enable="YES" kadmind_enable="YES" Następnie tworzymy konfigurację Kerberosa w pliku ''/etc/krb5.conf'': [libdefaults] default_realm = KERBEROS.LAN [realms] KERBEROS.LAN = { kdc = kdc.kerberos.lan admin_server = kdc.kerberos.lan } [domain_realm] .kerberos.lan = KERBEROS.LAN Tworzymy bazę danych. Wybieramy długie hasło do bazy (np. 64 znaki). Hasło będzie pełnić funkcję klucza szyfrującego i będzie przechowywane w ''/var/heimdal/m-key'': # kstash Master key: xxxxxxxxxxxxxxxxxxxxxxx Verifying password - Master key: xxxxxxxxxxxxxxxxxxxxxxx kstash: writing key to `/var/heimdal/m-key' Inicjalizujemy bazę danych. By to zrobić, podłączymy się lokalnie (''-l'')za pomocą kadmin-a: # kadmin -l kadmin> init KERBEROS.LAN Realm max ticket life [unlimited]: Realm max renewable ticket life [unlimited]: Będąc dalej podłączonym, dodajemy maszynę na której stoi KDC oraz eksportujemy keytab-a. Keytab zostanie zapisany w ''/etc/krb5.keytab''. kadmin> add -r host/kdc.kerberos.lan Max ticket life [1 day]: Max renewable life [1 week]: Principal expiration time [never]: Password expiration time [never]: Attributes []: kadmin> ext_keytab host/kdc.kerberos.lan Tworzymy użytkownika, który będzie zarządzał kadmin-em. Zakładamy że będzie to użytkownik systemowy ''root'' a principal ''root/admin'' kadmin> add root/admin Max ticket life [1 day]: Max renewable life [1 week]: Principal expiration time [never]: Password expiration time [never]: Attributes []: root/admin@KERBEROS.LAN's Password: Verifying - root/admin@KERBEROS.LAN's Password: **Powyżej utworzone hasło trzeba pamiętać! Będzie wykorzystywane do czynności administracyjnych na bazie Kerberosa!** \\ Dodajemy ACL dla root-a, by mógł wykonywać wszystko w kadmin-ie. Do pliku ''/var/heimdal/kadmind.acl'' wpisujemy: root/admin@KERBEROS.LAN all Uruchamiamy usługi, poprzednio dodane do ''/etc/rc.conf'': # service kdc start # service kadmind start ===== Dodawanie użytkowników ===== Kolejne hosty oraz użytkowników dodajemy przy pomocy kadmin-a i utworzonego wcześniej użytkownika. Z root-a uruchamiamy kadmin. Następnie by dodać użytkownika: kadmin> add username ===== Dodawanie hostów i konfiguracja ===== By dodać hosta, należy wygenerować jego principal-a oraz wyeksportować jego keytab-a: kadmin> add -r host/srv1.kerberos.lan Max ticket life [1 day]: Max renewable life [1 week]: Principal expiration time [never]: Password expiration time [never]: Attributes []: kadmin> ext_keytab --keytab=/tmp/krb5.keytab host/srv1.kerberos.lan Następnie na maszynie ''srv1.kerberos.lan'' umieszczamy konfigurację Kerberosa w pliku ''/etc/krb5.conf'': [libdefaults] default_realm = KERBEROS.LAN [realms] KERBEROS.LAN = { kdc = kdc.kerberos.lan admin_server = kdc.kerberos.lan } [domain_realm] .kerberos.lan = KERBEROS.LAN Oraz kopiujemy wyeksportowanego keytab-a do pliku ''/etc/krb5.keytab''. Warto zwrócić uwagę na prawidłowego właściciela i prawa plików: -rw-r--r-- 1 root wheel 179 Jul 15 22:36 /etc/krb5.conf -rw------- 1 root wheel 260 Jul 15 22:32 /etc/krb5.keytab Co istotne, na hostach podłączanych do Kerberosa nie uruchamiamy dodatkowych usług z ''rc.d''. ==== Aktywacja Kerberosa na hoście ===== Aby Kerberos aktywował się każdorazowo po zalogowaniu użytkownika w systemie, rekonfigurujemy PAM-a. === Logowanie z konsoli lokalnej === Dla logowania bezpośrednio z konsoli, zmieniamy dopisujemy linie w odpowiednich sekcjach w ''/etc/pam.d/system'': # auth auth sufficient pam_opie.so no_warn no_fake_prompts auth requisite pam_opieaccess.so no_warn allow_local auth sufficient pam_krb5.so no_warn try_first_pass forwardable <<< DOPISZ #auth sufficient pam_ssh.so no_warn try_first_pass auth required pam_unix.so no_warn try_first_pass nullok # account account required pam_krb5.so <<< DOPISZ account required pam_login_access.so account required pam_unix.so # session #session optional pam_ssh.so want_agent session required pam_lastlog.so no_fail # password password sufficient pam_krb5.so no_warn try_first_pass <<< DOPISZ password required pam_unix.so no_warn try_first_pass === Serwer SSH === W pliku ''/etc/ssh/sshd_config'' ustawiamy: GSSAPIAuthentication yes GSSAPICleanupCredentials yes W pliku ''/etc/ssh/ssh_config'' ustawiamy: Host * GSSAPIAuthentication yes GSSAPIDelegateCredentials yes Oraz zmieniamy w ''/etc/pam.d/sshd'': # auth auth sufficient pam_opie.so no_warn no_fake_prompts auth requisite pam_opieaccess.so no_warn allow_local auth sufficient pam_krb5.so no_warn try_first_pass <<< DOPISZ #auth sufficient pam_ssh.so no_warn try_first_pass auth required pam_unix.so no_warn try_first_pass # account account required pam_nologin.so account required pam_krb5.so <<< DOPISZ account required pam_login_access.so account required pam_unix.so # session #session optional pam_ssh.so want_agent session required pam_permit.so # password password sufficient pam_krb5.so no_warn try_first_pass <<< DOPISZ password required pam_unix.so no_warn try_first_pass FIXME - Obecnie (na FreeBSD 10.3) występuje jakiś błąd i przy logowaniu się na SSH nie jest inicjalizowany Kerberos. Można to zrobić po zalogowaniu ręcznie poleceniem ''kinit'' == SSH FIX == Instalujemy z portów ''security/pam_krb5''. Trzeba niestety skompilować z niestandardowymi opcjami: ===> The following configuration options are available for pam_krb5-4.7_2: ====> Options available for the single LINK: you have to select exactly one of them MIT=off: Link against MIT Kerberos HEIMDAL_BASE=on: Link against Heimdal in base Kerberos HEIMDAL_PORT=off: Link against Heimdal in ports Kerberos ===> Use 'make config' to modify these settings Po instalacji zmieniamy ''/etc/pam.d/sshd'', by korzystał z doinstalowanej wtyczki do PAM-a: # auth auth sufficient pam_opie.so no_warn no_fake_prompts auth requisite pam_opieaccess.so no_warn allow_local auth sufficient /usr/local/lib/security/pam_krb5.so try_first_pass #auth sufficient pam_ssh.so no_warn try_first_pass auth required pam_unix.so no_warn try_first_pass # account account required pam_nologin.so account required /usr/local/lib/security/pam_krb5.so account required pam_login_access.so account required pam_unix.so # session #session optional pam_ssh.so want_agent session required pam_permit.so # password password sufficient /usr/local/lib/security/pam_krb5.so try_first_pass password required pam_unix.so no_warn try_first_pass