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