Kerberos a LDAP

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.

Konfigurácia OpenLDAP

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”.

    1. 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
    2. Vytvoríme dočasný priečinok, do ktorého sa uložia LDIF súbory:

      mkdir /tmp/ldif_output
    3. 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.

    4. Otvoríme vygenerovaný súbor /tmp/cn\=kerberos.ldif a zmeníme nasledujúce atribúty:

    5. 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
      [Note]

      Hodnoty atribútov sa môžu líšiť, preto si pri mazaní dajte pozor, aby ste zmazali všetky uvedené atribúty.

    6. Načítame novú schému pomocou ldapadd:

      ldapadd -x -D cn=admin,cn=config -W -f /tmp/cn\\=kerberos.ldif
      
    7. 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"

    8. 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.

Konfigurácia primárneho KDC

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
    }
    [Note]

    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
    
    [Note]

    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.

[Note]

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

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/
    [Note]

    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.

Zdroje