====== 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