Kerberos és LDAP

A Kerberos résztvevő-adatbázis replikálása két kiszolgáló között bonyolult lehet, és egy újabb felhasználó-adatbázist ad a hálózatához. Szerencsére a MIT Kerberos beállítható LDAP címtár használatára résztvevő-adatbázisként. Ez a szakasz bemutatja az elsődleges és másodlagos Kerberos kiszolgáló beállítását OpenLDAP használatára résztvevő-adatbázisként.

OpenLDAP beállítása

Első lépésként a szükséges sémát kell betölteni egy OpenLDAP kiszolgálóra, amely rendelkezik hálózati kapcsolattal az elsődleges és másodlagos KDC-khez. A szakasz további része feltételezi, hogy az LDAP replikáció is be van állítva legalább két kiszolgáló között. Az OpenLDAP beállításával kapcsolatos információkért lásd: „OpenLDAP kiszolgáló”.

Szükség van még az OpenLDAP beállítására TLS és SSL kapcsolatokhoz, a KDC és az LDAP-kiszolgáló közötti forgalom titkosításához. A részletekért lásd: „TLS és SSL”.

  • A séma LDAP-ba töltéséhez az LDAP-kiszolgálón telepítse a krb5-kdc-ldap csomagot. Adja ki a következő parancsot:

    sudo apt-get install krb5-kdc-ldap
    
  • Ezután bontsa ki a kerberos.schema.gz fájlt:

    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/
    
  • A kerberos sémát fel kell venni a cn=config fába. Az új séma slapd-be való felvételének módját a „További beállítások” szakasz ismerteti.

    1. Első lépésként hozzon létre egy schema_convert.conf vagy hasonló beszédes nevű konfigurációs fájlt, a következő tartalommal:

      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. Hozzon létre egy ideiglenes könyvtárat az LDIF-fájlok tárolásához:

      mkdir /tmp/ldif_output
      
    3. Most az slapcat használatával konvertálja a sémafájlokat:

      slapcat -f schema_convert.conf -F /tmp/ldif_output -n0 -s "cn={12}kerberos,cn=schema,cn=config" > /tmp/cn=kerberos.ldif
      

      Módosítsa a fenti fájl- és útvonalneveket a sajátjainak megfelelően.

    4. Szerkessze a kapott /tmp/cn\=kerberos.ldif fájlt, és módosítsa a következő attribútumokat:

      dn: cn=kerberos,cn=schema,cn=config
      ...
      cn: kerberos
      

      Távolítsa el a következő sorokat a fájl végéről:

      structuralObjectClass: olcSchemaConfig
      entryUUID: 18ccd010-746b-102d-9fbe-3760cca765dc
      creatorsName: cn=config
      createTimestamp: 20090111203515Z
      entryCSN: 20090111203515.326445Z#000000#000#000000
      modifiersName: cn=config
      modifyTimestamp: 20090111203515Z
      
      [Megjegyzés]

      Az attribútumértékek eltérők lesznek, győződjön meg róla, hogy eltávolította az attribútumokat.

    5. Töltse be az új sémát az ldapadd használatával:

      ldapadd -x -D cn=admin,cn=config -W -f /tmp/cn\=kerberos.ldif
      
    6. Vegyen fel indexet a krb5principalname attribútumhoz:

      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"
      
    7. Végül frissítse a hozzáférés-vezérlési listákat (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=példa
      ,dc=hu" 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=példa,dc=hu" write by * read
      
      modifying entry "olcDatabase={1}hdb,cn=config"
      
      

Ennyi az egész, az LDAP-címtár ezzel készen áll a Kerberos résztvevő-adatbázisként való használatra.

Elsődleges KDC beállítása

Az OpenLDAP beállítása után ideje beállítani a KDC-t is.

  • Első lépésként telepítse a szükséges csomagokat, adja ki a következő parancsot:

    sudo apt-get install krb5-kdc krb5-admin-server krb5-kdc-ldap
    
  • Szerkessze az /etc/krb5.conf fájlt, az alábbi beállítások megfelelő szakaszokhoz adásával:

    [libdefaults]
            default_realm = PÉLDA.HU
    
    ...
    
    [realms]
            PÉLDA.HU = {
                    kdc = kdc01.példa.hu
                    kdc = kdc02.példa.hu
                    admin_server = kdc01.példa.hu
                    admin_server = kdc02.példa.hu
                    default_domain = példa.hu
                    database_module = openldap_ldapconf
            }
    
    ...
    
    [domain_realm]
            .példa.hu = PÉLDA.HU
    
    
    ...
    
    [dbdefaults]
            ldap_kerberos_container_dn = dc=példa,dc=hu
    
    [dbmodules]
            openldap_ldapconf = {
                    db_library = kldap
                    ldap_kdc_dn = "cn=admin,dc=példa,dc=hu"
    
                    # this object needs to have read rights on
                    # the realm container, principal container and realm sub-trees
                    ldap_kadmind_dn = "cn=admin,dc=példa,dc=hu"
    
                    # 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.példa.hu ldaps://ldap02.példa.hu
                    ldap_conns_per_server = 5
            }
    
    [Megjegyzés]

    A példa.hu, dc=példa,dc=hu, cn=admin,dc=példa,dc=hu és az ldap01.példa.hu helyére a hálózatának megfelelő tartományt, LDAP-objektumot és LDAP-kiszolgálót írja.

  • Ezután a kdb5_ldap_util segédprogrammal hozza létre a tartományt:

    sudo kdb5_ldap_util -D cn=admin,dc=példa,dc=hu create -subtrees dc=példa,dc=hu -r PÉLDA.HU -s -H ldap://ldap01.példa.hu
    
  • Hozzon létre egy stash fájlt az LDAP-kiszolgálóhoz kapcsolódásra használt jelszóval. Ezt a jelszót az /etc/krb5.conf fájl ldap_kdc_dn és ldap_kadmin_dn beállításai használják:

    sudo kdb5_ldap_util -D cn=admin,dc=példa,dc=hu stashsrvpw -f /etc/krb5kdc/service.keyfile cn=admin,dc=példa,dc=hu
    
  • Másolja át a CA-tanúsítványt az LDAP-kiszolgálóról:

    scp ldap01:/etc/ssl/certs/cacert.pem .
    sudo cp cacert.pem /etc/ssl/certs
    

    Módosítsa az /etc/ldap/ldap.conf fájlt a tanúsítvány használatához:

    TLS_CACERT /etc/ssl/certs/cacert.pem
    
    [Megjegyzés]

    A tanúsítványt a másodlagos KDC-re is át kell másolni, az LDAP-kiszolgálókhoz LDAPS használatával való kapcsolódás engedélyezéséhez.

Most már felvehet Kerberos résztvevőket az LDAP-adatbázisba, ezek minden más, replikációra beállított LDAP-kiszolgálóra át lesznek másolva. Adja ki a következő parancsot résztvevő hozzáadásához a kadmin.local segédprogrammal:

sudo kadmin.local
Authenticating as principal root/admin@PÉLDA.HU with password.
kadmin.local:  addprinc -x dn="uid=geza,ou=emberek,dc=példa,dc=hu" geza
WARNING: no policy specified for geza@PÉLDA.HU; defaulting to no policy
Enter password for principal "geza@PÉLDA.HU": 
Re-enter password for principal "geza@PÉLDA.HU": 
Principal "geza@PÉLDA.HU" created.

Ezután a uid=geza,ou=emberek,dc=példa,dc=hu felhasználóobjektumhoz meg kell jelenniük a krbPrincipalName, krbPrincipalKey, krbLastPwdChange és krbExtraData attribútumoknak. A kinit és klist segédprogramokkal tesztelheti, hogy a felhasználó valóban kap-e jegyet.

[Megjegyzés]

Ha a felhasználóobjektum már létezik, akkor a -x dn="..." kapcsoló szükséges a Kerberos attribútumok hozzáadásához. Ellenkező esetben egy új résztvevőobjektum jön létre a tartomány részfájában.

Másodlagos KDC beállítása

A másodlagos KDC beállítása az LDAP-háttérprogram használatára hasonlóan történik a normál Kerberos adatbázist használó beállításához.

  • Első lépésként telepítse a szükséges csomagokat, adja ki a következő parancsot:

    sudo apt-get install krb5-kdc krb5-admin-server krb5-kdc-ldap
    
  • Ezután szerkessze az /etc/krb5.conf fájlt az LDAP-háttérprogram használata érdekében:

    [libdefaults]
            default_realm = PÉLDA.HU
    
    ...
    
    [realms]
            PÉLDA.HU = {
                    kdc = kdc01.példa.hu
                    kdc = kdc02.példa.hu
                    admin_server = kdc01.példa.hu
                    admin_server = kdc02.példa.hu
                    default_domain = példa.hu
                    database_module = openldap_ldapconf
            }
    
    ...
    
    [domain_realm]
            .példa.hu = PÉLDA.HU
    
    
    ...
    
    [dbdefaults]
            ldap_kerberos_container_dn = dc=példa,dc=hu
    
    [dbmodules]
            openldap_ldapconf = {
                    db_library = kldap
                    ldap_kdc_dn = "cn=admin,dc=példa,dc=hu"
    
                    # this object needs to have read rights on
                    # the realm container, principal container and realm sub-trees
                    ldap_kadmind_dn = "cn=admin,dc=példa,dc=hu"
    
                    # 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.példa.hu ldaps://ldap02.példa.hu
                    ldap_conns_per_server = 5
            }
    
  • Hozzon létre stash fájlt az LDAP-hoz kapcsolódásra használt jelszóról:

    sudo kdb5_ldap_util -D cn=admin,dc=példa,dc=hu stashsrvpw -f /etc/krb5kdc/service.keyfile cn=admin,dc=példa,dc=hu
    
  • Ezután az elsődleges KDC-n másolja át az /etc/krb5kdc/.k5.PÉLDA.HU elsődleges kulcs stash fájlt a másodlagos KDC-re. Ne feledje a fájlt titkosított kapcsolaton vagy fizikai adathordozón átmásolni.

    sudo scp /etc/krb5kdc/.k5.PÉLDA.HU geza@kdc02.példa.hu:~
    sudo mv .k5.PÉLDA.HU /etc/krb5kdc/
    
    [Megjegyzés]

    A PÉLDA.HU helyére a tényleges tartományt írja.

  • Végül indítsa el a krb5-kdc démont:

    sudo /etc/init.d/krb5-kdc start
    

Ezzel a hálózatán működő redundáns KDC-kkel és a redundáns LDAP-kiszolgálókkal képes lesz a felhasználók hitelesítésére akkor is, ha az egyik LDAP-kiszolgáló, az egyik Kerberos-kiszolgáló, vagy egy LDAP-kiszolgáló és egy Kerberos-kiszolgáló is elérhetetlenné válik.

Információforrások