Narzędzia użytkownika

Narzędzia witryny


freebsd:kerberos

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
freebsd/kerberos.txt · ostatnio zmienione: 2016/07/16 00:18 przez mky