Założenia:
Wymagania:
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
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
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.
Aby Kerberos aktywował się każdorazowo po zalogowaniu użytkownika w systemie, rekonfigurujemy PAM-a.
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
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
- 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
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