Replikovanie databázy splnomocniteľov systému Kerberos medzi dvoma servermi môže byť komplikované a navyše to pridáva do systému ďalšiu databázu používateľov. Našťastie sa dá systém Kerberos nakonfigurovať tak, aby použil pre uloženie databázy splnomocniteľov adresár LDAP. V tejto časti si ukážeme, ako nastaviť primárny a sekundárny server Kerberosu tak, aby používali OpenLDAP pre uloženie databázy splnomocniteľov.
Ako prvé je potrebné nahrať príslušnú schému do OpenLDAP servera, ktorá bude zabezpečovať sieťové pripojenie k primárnemu a sekundárnemu KDC. Vo zvyšku tejto časti predpokladáme, že už máme nastavenú replikáciu LDAP adresára aspoň medzi dvoma servermi. Viac informácií o nastavení OpenLDAP sa nachádza v časti "OpenLDAP Server".
Je tiež potrebné nastaviť OpenLDAP server tak, aby prijímal TLS a SSL pripojenia, aby komunikácia medzi KDC a LDAP serverom bola šifrovaná. Viac informácií je v časti “TLS a SSL”.
Schému do LDAP nahráme tak, že na LDAP serveri nainštalujeme balík krb5-kdc-ldap. Do príkazového riadka zadáme:
sudo apt-get install krb5-kdc-ldap
Potom rozbalíme súbor kerberos.schema.gz
:
sudo gzip -d /usr/share/doc/krb5-kdc-ldap/kerberos.schema.gz
sudo cp /usr/share/doc/krb5-kdc-ldap/kerberos.schema /etc/ldap/schema/
Schému kerberos je potrebné pridať do stromu cn=config. Postup ako pridávať schému do slapd je vysvetlený v časti “Konfigurácia”.
Najskôr vytvoríme konfiguračný súbor, ktorý pomenujeme schema_convert.conf
, alebo podobným viacvravnejším názvom a prekopírujeme do neho tieto riadky:
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/collective.schema
include /etc/ldap/schema/corba.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/duaconf.schema
include /etc/ldap/schema/dyngroup.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/java.schema
include /etc/ldap/schema/misc.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/openldap.schema
include /etc/ldap/schema/ppolicy.schema
include /etc/ldap/schema/kerberos.schema
Vytvoríme dočasný priečinok, do ktorého sa uložia LDIF súbory:
mkdir /tmp/ldif_output
Teraz použijeme nástroj slapcat na skonvertovanie súborov schém:
slapcat -f schema_convert.conf -F /tmp/ldif_output -n0 -s "cn={12}kerberos,cn=schema,cn=config\" > /tmp/cn=kerberos.ldif
Keby sme použili iné meno konfiguračného súboru, je potrebné ho zmeniť aj v predchádzajúcom príkaze.
Otvoríme vygenerovaný súbor /tmp/cn\=
kerberos.ldif
a zmeníme nasledujúce atribúty:
dn: cn=kerberos,cn=schema,cn=config
...
cn: kerberos
a odstránime nasledujúce riadky z konca súboru:
structuralObjectClass: olcSchemaConfig
entryUUID: 18ccd010-746b-102d-9fbe-3760cca765dc
creatorsName: cn=config
createTimestamp: 20090111203515Z
entryCSN: 20090111203515.326445Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20090111203515Z
![]() |
Hodnoty atribútov sa môžu líšiť, preto si pri mazaní dajte pozor, aby ste zmazali všetky uvedené atribúty. |
---|---|
Načítame novú schému pomocou ldapadd:
ldapadd -x -D cn=admin,cn=config -W -f /tmp/cn\\=kerberos.ldif
Pridáme index pre atribút krb5principalname:
ldapmodify -x -D cn=admin,cn=config -W
Enter LDAP Password:
dn: olcDatabase={1}hdb,cn=config
add: olcDbIndex
olcDbIndex: krbPrincipalName eq,pres,sub
modifying entry "olcDatabase={1}hdb,cn=config"
Nakoniec aktualizujeme zoznamy prístupových práv (ACL):
ldapmodify -x -D cn=admin,cn=config -W
Enter LDAP Password:
dn: olcDatabase={1}hdb,cn=config
replace: olcAccess
olcAccess: to attrs=userPassword,shadowLastChange,krbPrincipalKey by dn="cn=admin,dc=exampl
e,dc=com" write by anonymous auth by self write by * none
-
add: olcAccess
olcAccess: to dn.base="" by * read
-
add: olcAccess
olcAccess: to * by dn="cn=admin,dc=example,dc=com" write by * read
modifying entry "olcDatabase={1}hdb,cn=config"
Teraz by LDAP adresár mal byť schopný spracovať zoznam splnomocniteľov systému Kerberos.
Ak už máme nakonfigurovaný OpenLDAP, môžme sa pustiť do konfigurácie KDC.
Najskôr nainštalujeme potrebné balíky:
sudo apt-get install krb5-kdc krb5-admin-server krb5-kdc-ldap
Potom otvoríme súbor /etc/krb5.conf
a pridáme nasledujúce nastavenia do príslušnej časti súboru:
[libdefaults]
default_realm = NIECO.SK
...
[realms]
NIECO.SK = {
kdc = kdc01.nieco.sk
kdc = kdc02.nieco.sk
admin_server = kdc01.neico.sk
admin_server = kdc02.nieco.sk
default_domain = nieco.sk
database_module = openldap_ldapconf
}
...
[domain_realm]
.nieco.sk = NIECO.SK
...
[dbdefaults]
ldap_kerberos_container_dn = dc=nieco,dc=sk
[dbmodules]
openldap_ldapconf = {
db_library = kldap
ldap_kdc_dn = "cn=admin,dc=nieco,dc=sk"
# this object needs to have read rights on
# the realm container, principal container and realm sub-trees
ldap_kadmind_dn = "cn=admin,dc=nieco,dc=sk"
# this object needs to have read and write rights on
# the realm container, principal container and realm sub-trees
ldap_service_password_file = /etc/krb5kdc/service.keyfile
ldap_servers = ldaps://ldap01.nieco.sk ldaps://ldap02.nieco.sk
ldap_conns_per_server = 5
}
![]() |
Hodnoty nieco.sk, dc=nieco,dc=sk, cn=admin,dc=nieco,dc=sk a ldap01.nieco.sk zmeňte za hodnoty zodpovedajúce doméne, LDAP objektom a LDAP serveru, ktoré používate v sieti. |
---|---|
Ďalej použijeme nástroj kdb5_ldap_util a vytvoríme pôsobisko:
sudo kdb5_ldap_util -D cn=admin,dc=nieco,dc=sk create -subtrees dc=nieco,dc=sk -r NIECO.SK -s -H ldap://ldap01.nieco.sk
Vytvoríme obtlačok hesla, ktorý bude potrebný na prístup k LDAP serveru. Toto heslo použijeme pre nastavenie ldap_kdc_dn a
ldap_kadmin_dn v súbore /etc/krb5.conf
:
sudo kdb5_ldap_util -D cn=admin,dc=nieco,dc=sk stashsrvpw -f /etc/krb5kdc/service.keyfile cn=admin,dc=nieco,dc=sk
Nakopírujeme certifikáty CA z LDAP serveru:
scp ldap01:/etc/ssl/certs/cacert.pem .
sudo cp cacert.pem /etc/ssl/certs
a
nastavíme ich použitie v súbore /etc/ldap/ldap.conf
:
TLS_CACERT /etc/ssl/certs/cacert.pem
![]() |
Aby bolo možné pripojiť sa k LDAP serverom pomocou LDAPS, je potrebné certifikáty prekopírovať aj na sekundárne KDC. |
---|---|
Teraz je možné pridať splnomocniteľov systému Kerberos do LDAP databázy a tá sa automaticky replikuje na ostatné LDAP servery. Splnomocniteľov môžeme pridať pomocou nástroja kadmin.local zadaním:
sudo kadmin.local
Authenticating as principal root/admin@NIECO.SK with password.
kadmin.local: addprinc -x dn="uid=stefan,ou=ludia,dc=nieco,dc=sk" stefan
WARNING: no policy specified for stefan@NIECO.SK; defaulting to no policy
Enter password for principal "stefan@NIECO.SK":
Re-enter password for principal "stefan@NIECO.SK":
Principal "stefan@NIECO.SK" created.
Teraz by sme mali mať v objekte používateľa uid=stefan,ou=ludia,dc=nieco,dc=sk pridané atribúty krbPrincipalName, krbPrincipalKey, krbLastPwdChange a krbExtraData. Na otestovanie toho, či bude používateľovi pridelaná vstupenka použijeme nástroje kinit a klist.
![]() |
Ak objekt používateľa už existuje, je potrebné k atribútom systému Kerberos pridať ešte -x dn="...". Inak sa vytvorí nový objekt splnomocniteľa v strome pôsobiska. |
---|---|
Konfigurácia sekundárneho KDC s použitím LDAP je podobná konfigurácii s normálnou Kerberos databázou.
Najskôr nainštalujeme potrebné balíky. V príkazovom riadku zadáme:
sudo apt-get install krb5-kdc krb5-admin-server krb5-kdc-ldap
Potom otvoríme súbor /etc/krb5.conf
a nastavíme použitie LDAP databázy:
[libdefaults]
default_realm = NIECO.SK
...
[realms]
NIECO.SK = {
kdc = kdc01.nieco.sk
kdc = kdc02.nieco.sk
admin_server = kdc01.nieco.sk
admin_server = kdc02.nieco.sk
default_domain = nieco.sk
database_module = openldap_ldapconf
}
...
[domain_realm]
.nieco.sk = NIECO.SK
...
[dbdefaults]
ldap_kerberos_container_dn = dc=nieco,dc=sk
[dbmodules]
openldap_ldapconf = {
db_library = kldap
ldap_kdc_dn = "cn=admin,dc=nieco,dc=sk"
# this object needs to have read rights on
# the realm container, principal container and realm sub-trees
ldap_kadmind_dn = "cn=admin,dc=nieco,dc=sk"
# this object needs to have read and write rights on
# the realm container, principal container and realm sub-trees
ldap_service_password_file = /etc/krb5kdc/service.keyfile
ldap_servers = ldaps://ldap01.nieco.sk ldaps://ldap02.nieco.sk
ldap_conns_per_server = 5
}
Vytvoríme obtlačok LDAP hesla:
sudo kdb5_ldap_util -D cn=admin,dc=nieco,dc=sk stashsrvpw -f /etc/krb5kdc/service.keyfile cn=admin,dc=nieco,dc=sk
Teraz na primárnom KDC skopírujeme Master kľúč /etc/krb5kdc/.k5.NIECO.SK
na sekundárny KDC. Súbor je kvôli bezpečnosti potrebné kopírovať cez zašifrované spojenie akým je napríklad scp alebo prostredníctvom fyzického média.
sudo scp /etc/krb5kdc/.k5.NIECO.SK stefan@kdc02.nieco.sk:~ sudo mv .k5.NIECO.SL /etc/krb5kdc/
![]() |
Rovnako nahraďte NIECO.SK pôsobiskom, ktoré používate. |
---|---|
Nakoniec spustíme démon krb5-kdc:
sudo /etc/init.d/krb5-kdc start
Teraz by sme mali mať v našej sieti redundantdé distribučné centrá kľúčov KDC a vďaka redundantným LDAP serverom by sa mali používatelia vedieť prihlásiť aj po výpadku jedného LDAP servera a jedného Kerberos servera.
Niektoré ďalšie podrebnejšie informácie sa nachádzajú na stránke Kerberos Admin Guide.
Viac informácií o kdb5_ldap_util je na stránkach Section 5.6 a kdb5_ldap_util man page.
Ostatné užitočné zdroje nájdete na stránke krb5.conf man page.
Informácie sa dajú nájsť aj na wiki stránke Ubuntu Kerberos and LDAP.