Od utorka 2. júla do štvrtka 4. júla 2013 sa v priestoroch Fakulty riadenia a informatiky Žilinskej univerzity uskutoční v poradí už piata, jubilejná, konferencia OSSConf 2013 (Otvorený softvér vo vzdelávaní, výskume a v IT riešeniach)
Tešíme sa na vašu účasť.
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 -WEnter 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 -WEnter 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.localAuthenticating 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.