OpenLDAP kiszolgáló

Az LDAP jelentése: könnyűsúlyú címtár-hozzáférési protokoll - ez az X.500 protokoll egyszerűsített változata. Ebben a szakaszban a címtár hitelesítésre lesz felhasználva. Ezzel együtt az LDAP számos módon használható: hitelesítés, megosztott könyvtár (levelezőklienseknek), címtár stb.

Az LDAP röviden azzal jellemezhető, hogy minden információ egy faszerkezetben található. Az OpenLDAP segítségével önállóan megállapíthatja a címtár faszerkezetét (a címtárinformációs fát, DIT). Egy egyszerű fával kezdünk, amely két csomópontot tartalmaz a gyökér alatt:

  • A „People” csomópont, amelyben a felhasználók találhatók

  • A „Groups” csomópont, amelyben a csoportjai lesznek tárolva

Mielőtt elkezdi, meg kell határoznia az LDAP címtár gyökerét. Alapértelmezésben a fát a teljes képzésű tartománynév (FQDN) határozza meg. Ha a tartomány a példa.hu (ezt fogjuk használni a példában), akkor a gyökércsomópont dc=példa,dc=hu.

Telepítés

Első lépésként telepítse az slapd nevű OpenLDAP kiszolgálódémont és az LDAP-kezelő segédprogramokat tartalmazó ldap-utils csomagot:

sudo apt-get install slapd ldap-utils

Alapértelmezésben a slapd a slapd démon futtatásához szükséges minimális beállításokkal van konfigurálva.

A következő szakaszok példái megegyeznek a kiszolgáló tartománynevével. Ha például a gép teljes képzésű tartományneve (FQDN) ldap.példa.hu, akkor az alapértelmezett utótag dc=példa,dc=hu lesz.

Az LDAP feltöltése

Az OpenLDAP önálló adatbázist használ, amely tartalmazza a cn=config könyvtárinformációs fát (DIT). A cn=config DIT segítségével dinamikusan kerül beállításra a slapd démon, lehetővé téve a sémadefiníciók, indexek, ACL-ek stb. a szolgáltatás leállítása nélküli módosítását.

A háttér cn=config címtár csak minimális beállításokkal rendelkezik, és az előtét feltöltése érdekében további beállításokat kell végezni. Az előtét egy „klasszikus” sémával lesz feltöltve, amely kompatibilis címtáralkalmazásokkal és a Unix Posix fiókokkal. A Posix fiókok lehetővé teszik a hitelesítést számos alkalmazás, például webes alkalmazások, levéltovábbító (MTA) alkalmazások stb. felé.

[Megjegyzés]

A külső alkalmazások számára az LDAP segítségével történő hitelesítéshez mindet külön be kell állítani. A részletekért nézze meg az adott alkalmazások dokumentációját.

[Megjegyzés]

Ne feledje el az alábbi példákban a dc=példa,dc=hu kifejezést az Ön LDAP konfigurációjának megfelelően módosítani.

Első lépésként néhány sémafájlt kell betölteni. Adja ki a következő parancsot:

sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif

Ezután másolja az alábbi példa LDIF-fájlt a rendszerére backend.példa.hu.ldif néven:

# Dinamikus backend modulok betöltése
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulepath: /usr/lib/ldap
olcModuleload: back_hdb

# Adatbázis-beállítások
dn: olcDatabase=hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcSuffix: dc=példa,dc=hu
olcDbDirectory: /var/lib/ldap
olcRootDN: cn=admin,dc=példa,dc=hu
olcRootPW: titok
olcDbConfig: set_cachesize 0 2097152 0
olcDbConfig: set_lk_max_objects 1500
olcDbConfig: set_lk_max_locks 1500
olcDbConfig: set_lk_max_lockers 1500
olcDbIndex: objectClass eq
olcLastMod: TRUE
olcDbCheckpoint: 512 30
olcAccess: to attrs=userPassword by dn="cn=admin,dc=példa,dc=hu" write by anonymous auth by self write by * none
olcAccess: to attrs=shadowLastChange by self write by * read
olcAccess: to dn.base="" by * read
olcAccess: to * by dn="cn=admin,dc=példa,dc=hu" write by * read

[Megjegyzés]

A olcRootPW: titok sorban adja meg az admin jelszavát.

Most adja az LDIF-fájlt a címtárhoz:

sudo ldapadd -Y EXTERNAL -H ldapi:/// -f backend.példa.hu.ldif

Az előtét címtár készen áll a feltöltésre. Hozzon létre egy frontend.példa.hu.ldif nevű fájlt a következő tartalommal:

# A tartomány felső szintű objektumának létrehozása
dn: dc=példa,dc=hu
objectClass: top
objectClass: dcObject
objectclass: organization
o: Példaszervezet
dc: Example
description: LDAP példa 

# Admin felhasználó.
dn: cn=admin,dc=példa,dc=hu
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP adminisztrátor
userPassword: titok

dn: ou=people,dc=példa,dc=hu
objectClass: organizationalUnit
ou: people

dn: ou=groups,dc=példa,dc=hu
objectClass: organizationalUnit
ou: groups

dn: uid=john,ou=people,dc=példa,dc=hu
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: john
sn: Doe
givenName: John
cn: John Doe
displayName: John Doe
uidNumber: 1000
gidNumber: 10000
userPassword: jelszó
gecos: John Doe
loginShell: /bin/bash
homeDirectory: /home/john
shadowExpire: -1
shadowFlag: 0
shadowWarning: 7
shadowMin: 8
shadowMax: 999999
shadowLastChange: 10877
mail: john.doe@példa.hu
postalCode: 31000
l: Toulouse
o: Example
mobile: +33 (0)6 xx xx xx xx
homePhone: +33 (0)5 xx xx xx xx
title: Rendszeradminisztrátor
postalAddress: 
initials: JD

dn: cn=example,ou=groups,dc=példa,dc=hu
objectClass: posixGroup
cn: example
gidNumber: 10000

Ebben a példában a címtárszerkezet, egy felhasználó és egy csoport került beállításra. Más példákban találkozhat az objectClass: top hozzáadásával minden bejegyzéshez, de mivel ez az alapértelmezett viselkedés, így nem szükséges mindig felvenni.

Vegye fel a bejegyzéseket az LDAP-címtárba:

sudo ldapadd -x -D cn=admin,dc=példa,dc=hu -W -f frontend.példa.hu.ldif

Az ldapsearch segédprogrammal ellenőrizhető, hogy a tartalom megfelelően lett-e felvéve. Hajtsa végre a következő keresést az LDAP-címtárban:

ldapsearch -xLLL -b "dc=példa,dc=hu" uid=john sn givenName cn

dn: uid=john,ou=people,dc=példa,dc=hu
cn: John Doe
sn: Doe
givenName: John

Rövid magyarázat:

  • -x: nem használja a SASL hitelesítési módszert, amely alapértelmezett.

  • -LLL: az LDIF sémainformációk kiírásának kikapcsolása.

További beállítások

A cn=config fa az ldap-utils csomag segédprogramjaival manipulálható. Például:

  • Az ldapsearch segítségével nézze meg a fát, megadva a telepítéskor vagy újrakonfiguráláskor beállított admin jelszót:

    sudo ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn
    
    
    SASL/EXTERNAL authentication started
    SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    SASL SSF: 0
    dn: cn=config
    
    dn: cn=module{0},cn=config
    
    dn: cn=schema,cn=config
    
    dn: cn={0}core,cn=schema,cn=config
    
    dn: cn={1}cosine,cn=schema,cn=config
    
    dn: cn={2}nis,cn=schema,cn=config
    
    dn: cn={3}inetorgperson,cn=schema,cn=config
    
    dn: olcDatabase={-1}frontend,cn=config
    
    dn: olcDatabase={0}config,cn=config
    
    dn: olcDatabase={1}hdb,cn=config
    
    

    A fenti kimenet a cn=config háttéradatbázis aktuális beállításaiból áll. A tényleges kimenet eltérhet.

  • A cn=config fa módosításához például felvehet egy új attribútumot az indexlistába az ldapmodify segítségével:

    sudo ldapmodify -Y EXTERNAL -H ldapi:///
    
    
    SASL/EXTERNAL authentication started
    SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    SASL SSF: 0
    dn: olcDatabase={1}hdb,cn=config
    add: olcDbIndex
    olcDbIndex: uidNumber eq
    
    modifying entry "olcDatabase={1}hdb,cn=config"
    
    

    A módosítások befejezése után nyomja meg a Ctrl+D billentyűkombinációt a kilépéshez a segédprogramból.

  • Az ldapmodify képes a változtatásokat fájlból is beolvasni. Hozzon létre egy uid_index.ldif nevű fájlt a következő tartalommal:

    dn: olcDatabase={1}hdb,cn=config
    add: olcDbIndex
    olcDbIndex: uid eq,pres,sub
    

    Ezután indítsa el az ldapmodify programot:

    sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f uid_index.ldif
    
    
    SASL/EXTERNAL authentication started
    SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    SASL SSF: 0
    modifying entry "olcDatabase={1}hdb,cn=config"
    
    

    A fájlt használó módszer nagy változtatások esetén hasznos.

  • Adding additional schemas to slapd requires the schema to be converted to LDIF format. The /etc/ldap/schema directory contains some schema files already converted to LDIF format as demonstrated in the previous section. Fortunately, the slapd program can be used to automate the conversion. The following example will add the dyngoup.schema:

    1. Első lépésként hozza létre a schema_convert.conf konverzió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
      
    2. Ezután hozzon létre egy átmeneti könyvtárat a kimenet tárolásához:

      mkdir /tmp/ldif_output
      
    3. Most a slapcat segítségével konvertálja a sémafájlokat LDIF formátumúra:

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

      Módosítsa a konfigurációs fájl nevét és az átmeneti könyvtár nevét, ha a sajátja eltér. Érdemes lehet megtartani az ldif_output könyvtárat, amennyiben további sémákat szeretne felvenni a jövőben.

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

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

      Távolítsa el a következő sorokat a fájl aljáról:

      structuralObjectClass: olcSchemaConfig
      entryUUID: 10dae0ea-0760-102d-80d3-f9366b7f7757
      creatorsName: cn=config
      createTimestamp: 20080826021140Z
      entryCSN: 20080826021140.791425Z#000000#000#000000
      modifiersName: cn=config
      modifyTimestamp: 20080826021140Z
      
      [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. Végül az ldapadd segédprogrammal vegye fel az új sémát a címtárba:

      sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /tmp/cn\=dyngroup.ldif
      

    Ezután létre kell jönnie egy dn: cn={4}dyngroup,cn=schema,cn=config bejegyzésnek a cn=config fában.

LDAP-replikáció

Az LDAP sok esetben gyorsan a hálózat kritikus szolgáltatásává válik. Egyre több szolgáltatás fogja hitelesítésre, jogosultságkezelésre, beállításokhoz stb. használni az LDAP-t. Ilyenkor hasznos lehet replikáció használatával beüzemelni egy redundáns rendszert.

A replikáció a Syncrepl alrendszer segítségével valósul meg. A Syncrepl fogyasztó-termelő modell használatával teszi lehetővé a címtár szinkronizálását. A termelő a címtár frissítéseit elküldi a fogyasztóknak.

Termelő beállítása

Az alábbi példa a single-master konfigurációt mutatja be. Ebben a konfigurációban egy OpenLDAP-kiszolgáló van beállítva termelőként, egy pedig fogyasztóként.

  1. Első lépésként állítsa be a termelő kiszolgálót. Másolja a következőket egy provider_sync.ldif nevű fájlba:

    # Indexek hozzáadása a frontend adatbázisához.
    dn: olcDatabase={1}hdb,cn=config
    changetype: modify
    add: olcDbIndex
    olcDbIndex: entryCSN eq
    -
    add: olcDbIndex
    olcDbIndex: entryUUID eq
    
    # A syncprov és accesslog modulok betöltése.
    dn: cn=module{0},cn=config
    changetype: modify
    add: olcModuleLoad
    olcModuleLoad: syncprov
    -
    add: olcModuleLoad
    olcModuleLoad: accesslog
    
    # Accesslog adatbázis meghatározása
    dn: olcDatabase={2}hdb,cn=config
    objectClass: olcDatabaseConfig
    objectClass: olcHdbConfig
    olcDatabase: {2}hdb
    olcDbDirectory: /var/lib/ldap/accesslog
    olcSuffix: cn=accesslog
    olcRootDN: cn=admin,dc=példa,dc=hu
    olcDbIndex: default eq
    olcDbIndex: entryCSN,objectClass,reqEnd,reqResult,reqStart
    
    # Accesslog adatbázis syncprov.
    dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
    changetype: add
    objectClass: olcOverlayConfig
    objectClass: olcSyncProvConfig
    olcOverlay: syncprov
    olcSpNoPresent: TRUE
    olcSpReloadHint: TRUE
    
    # syncrepl termelő az elsődleges adatbázishoz
    dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config
    changetype: add
    objectClass: olcOverlayConfig
    objectClass: olcSyncProvConfig
    olcOverlay: syncprov
    olcSpNoPresent: TRUE
    
    # az accesslog overlay meghatározásai az elsődleges adatbázishoz
    dn: olcOverlay=accesslog,olcDatabase={1}hdb,cn=config
    objectClass: olcOverlayConfig
    objectClass: olcAccessLogConfig
    olcOverlay: accesslog
    olcAccessLogDB: cn=accesslog
    olcAccessLogOps: writes
    olcAccessLogSuccess: TRUE
    # az accesslog adatbázis vizsgálata minden nap, és a 7 napnál régebbi bejegyzések törlése
    olcAccessLogPurge: 07+00:00 01+00:00
    
  2. Az slapd AppArmor profilját módosítani kell az accesslog adatbázis helyének megadásához. Szerkessze az /etc/apparmor.d/usr.sbin.slapd fájlt, és vegye fel a következőt:

      /var/lib/ldap/accesslog/ r,
      /var/lib/ldap/accesslog/** rwk,
    

    Ezután hozza létre a könyvtárat, töltse újra az apparmor profilt, és másolja át a DB_CONFIG fájlt:

    sudo -u openldap mkdir /var/lib/ldap/accesslog
    sudo -u openldap cp /var/lib/ldap/DB_CONFIG /var/lib/ldap/accesslog/
    sudo /etc/init.d/apparmor reload
    
    [Megjegyzés]

    A fenti sudo parancsok -u openldap kapcsolóval való használata hatására később nem kell az új könyvtár jogosultságait módosítania.

  3. Szerkessze a fájlt, és módosítsa az olcRootDN értékét a címtárának megfelelően:

    olcRootDN: cn=admin,dc=példa,dc=hu
    
  4. Ezután vegye fel az LDIF-fájlt az ldapadd segédprogram használatával:

    sudo ldapadd -Y EXTERNAL -H ldapi:/// -f provider_sync.ldif
    
  5. Indítsa újra a slapd démont:

    sudo /etc/init.d/slapd restart
    

A termelő kiszolgáló beállítása ezzel kész, ideje beállítani a fogyasztó kiszolgálót.

A fogyasztó beállítása

  1. A fogyasztó kiszolgálót állítsa be ugyanúgy, mint a termelőt, a Syncrepl beállítási lépéseket kivéve.

    Vegye fel a kiegészítő sémafájlt:

    sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif
    sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif
    sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif
    

    Hozza létre vagy másolja át a termelő kiszolgálóról a backend.példa.hu.ldif fájlt.

    # Dinamikus backend modulok betöltése
    dn: cn=module,cn=config
    objectClass: olcModuleList
    cn: module
    olcModulepath: /usr/lib/ldap
    olcModuleload: back_hdb
    
    # Adatbázis-beállítások
    dn: olcDatabase=hdb,cn=config
    objectClass: olcDatabaseConfig
    objectClass: olcHdbConfig
    olcDatabase: {1}hdb
    olcSuffix: dc=példa,dc=hu
    olcDbDirectory: /var/lib/ldap
    olcRootDN: cn=admin,dc=példa,dc=hu
    olcRootPW: titok
    olcDbConfig: set_cachesize 0 2097152 0
    olcDbConfig: set_lk_max_objects 1500
    olcDbConfig: set_lk_max_locks 1500
    olcDbConfig: set_lk_max_lockers 1500
    olcDbIndex: objectClass eq
    olcLastMod: TRUE
    olcDbCheckpoint: 512 30
    olcAccess: to attrs=userPassword by dn="cn=admin,dc=példa,dc=hu" write by anonymous auth by self write by * none
    olcAccess: to attrs=shadowLastChange by self write by * read
    olcAccess: to dn.base="" by * read
    olcAccess: to * by dn="cn=admin,dc=példa,dc=hu" write by * read
    

    Vegye fel az LDIF-fájlt:

    sudo ldapadd -Y EXTERNAL -H ldapi:/// -f backend.példa.hu.ldif
    
  2. Tegye ugyanezt a fenti frontend.példa.hu.ldif fájllal, és vegye fel:

    sudo ldapadd -x -D cn=admin,dc=példa,dc=hu -W -f frontend.példa.hu.ldif
    

    A két kiszolgáló most a Syncrepl beállításoktól eltekintve azonos beállításokkal rendelkezik.

  3. Most hozza létre a consumer_sync.ldif fájlt a következő tartalommal:

    # A syncprov modul betöltése.
    dn: cn=module{0},cn=config
    changetype: modify
    add: olcModuleLoad
    olcModuleLoad: syncprov
    
    # a syncrepl-hez kapcsolódó utasítások
    dn: olcDatabase={1}hdb,cn=config
    changetype: modify
    add: olcDbIndex
    olcDbIndex: entryUUID eq
    -
    add: olcSyncRepl
    olcSyncRepl: rid=0 provider=ldap://ldap01.példa.hu bindmethod=simple binddn="cn=admin,dc=példa,dc=hu" 
     credentials=titok searchbase="dc=példa,dc=hu" logbase="cn=accesslog" 
     logfilter="(&(objectClass=auditWriteObject)(reqResult=0))" schemachecking=on 
     type=refreshAndPersist retry="60 +" syncdata=accesslog
    -
    add: olcUpdateRef
    olcUpdateRef: ldap://ldap01.példa.hu
    

    Módosítsa a következő attribútumokat:

    • A ldap01.pelda.hu helyett használja saját kiszolgálója gépnevét.

    • binddn

    • credentials

    • searchbase

    • olcUpdateRef:

  4. Vegye fel az LDIF-fájlt a konfigurációs fába:

    sudo ldapadd -c -Y EXTERNAL -H ldapi:/// -f consumer_sync.ldif
    

Az előtét-adatbázisnak most már szinkronizálódnia kell a kiszolgálók között. Igény esetén további kiszolgálókat a fenti lépések alkalmazásával vehet fel.

[Megjegyzés]

A slapd démon alapértelmezésben a /var/log/syslog fájlba küldi a naplóinformációkat. Ha probléma lépne fel, ebben a fájlban találhat a hibák elhárításával kapcsolatos információkat. Ne feledjen el meggyőződni arról, hogy minden kiszolgáló ismerje saját teljes képzésű tartománynevét (FQDN). Ez az /etc/hosts fájlban állítható be egy ehhez hasonló sorral:

127.0.0.1	ldap01.példa.hu ldap01

.

ACL beállítása

A hitelesítés a jelszó mező elérését igényli, ennek alapértelmezésben nem szabad elérhetőnek lennie. Ahhoz, hogy a felhasználók megváltoztathassák saját jelszavukat a passwd vagy egyéb segédprogramokkal, a shadowLastChange mezőnek is elérhetőnek kell lennie, miután a felhasználó hitelesítette magát.

To view the Access Control List (ACL), use the ldapsearch utility:

ldapsearch -xLLL -b cn=config -D cn=admin,cn=config -W olcDatabase=hdb olcAccess
Enter LDAP Password: 
dn: olcDatabase={1}hdb,cn=config
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=exampl
 e,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=admin,dc=example,dc=com" write by * read

TLS és SSL

Az OpenLDAP kiszolgálóra való bejelentkezés legjobb módja a titkosított munkamenet használata. Ez elvégezhető TLS vagy SSL használatával is.

A folyamat első lépése egy tanúsítvány beszerzése vagy létrehozása. Mivel a slapd a gnutls programkönyvtár használatával lett fordítva, a certtool segédprogrammal hozzuk létre a tanúsítványokat.

  1. A következő parancs kiadásával telepítse a gnutls-bin csomagot:

    sudo apt-get install gnutls-bin
    
  2. Ezután hozzon létre egy személyes kulcsot a hitelesítésszolgáltató (CA) számára:

    sudo sh -c "certtool --generate-privkey > /etc/ssl/private/cakey.pem"
    
  3. Hozzon létre egy /etc/ssl/ca.info nevű információs fájlt a CA tanúsítvány önaláírásához a következő tartalommal:

    cn = Példacég
    ca
    cert_signing_key
    
  4. Ezután hozza létre az önaláírt CA tanúsítványt:

    sudo certtool --generate-self-signed --load-privkey /etc/ssl/private/cakey.pem \ --template /etc/ssl/ca.info --outfile /etc/ssl/certs/cacert.pem
    
  5. Hozzon létre személyes kulcsot a kiszolgáló számára:

    sudo sh -c "certtool --generate-privkey > /etc/ssl/private/ldap01_slapd_key.pem"
    
    [Megjegyzés]

    A fájlnévbe az ldap01 helyett a saját kiszolgálójának gépnevét írja. A tanúsítvány és kulcs az azokat használó gép és szolgáltatás után való elnevezése segít a fájlnevek és elérési utak rendben tartásában.

  6. Hozza létre az /etc/ssl/ldap01.info nevű információs fájlt a következő tartalommal a kiszolgáló tanúsítványának aláírásához a CA-val:

    organization = Példacég
    cn = ldap01.példa.hu
    tls_www_server
    encryption_key
    signing_key
    
  7. Hozza létre a kiszolgáló tanúsítványát:

    sudo certtool --generate-certificate --load-privkey /etc/ssl/private/x01-test_slapd_key.pem \ --load-ca-certificate /etc/ssl/certs/cacert.pem --load-ca-privkey /etc/ssl/private/cakey.pem \ --template /etc/ssl/x01-test.info --outfile /etc/ssl/certs/x01-test_slapd_cert.pem
    

Miután a tanúsítvány, a kulcs és a CA is telepítve lett, az ldapmodify parancs segítségével vegye fel az új beállításokat:

sudo ldapmodify -Y EXTERNAL -H ldapi:///
Enter LDAP Password:
dn: cn=config
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/cacert.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/ldap01_slapd_cert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/ldap01_slapd_key.pem

modifying entry "cn=config"

[Megjegyzés]

Módosítsa az ldap01_slapd_cert.pem, ldap01_slapd_key.pem és cacert.pem neveket, ha szükséges.

Ezután szerkessze az /etc/default/slapd fájlt, vegye ki megjegyzésből a SLAPD_SERVICES beállítást:

SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///"

Most az openldap felhasználónak hozzá kell férnie a tanúsítványhoz:

sudo adduser openldap ssl-cert
sudo chgrp ssl-cert /etc/ssl/private/ldap01_slapd_key.pem
sudo chmod g+r /etc/ssl/private/ldap01_slapd_key.pem
[Megjegyzés]

Ha az /etc/ssl/private és /etc/ssl/private/server.key fájlok jogosultságai eltérnek, akkor ennek megfelelően módosítsa a fenti parancsokat.

Végül indítsa újra az slapd démont:

sudo /etc/init.d/slapd restart

Az slapd démonnak ezután már figyelnie kell az LDAPS kapcsolatokra, és képesnek kell lennie a STARTTLS használatára a hitelesítéshez.

[Megjegyzés]

Ha azt tapasztalja, hogy a kiszolgáló nem indul el, akkor nézze meg a /var/log/syslog fájlt. Ha a következőhöz hasonló hibákat lát: main: TLS init def ctx failed: -1, akkor valószínűleg a beállítások hibásak. Ellenőrizze, hogy a tanúsítványt a fájlokban megadott hitelesítésszolgáltató írta alá, és hogy az ssl-cert csoportnak van olvasási joga a személyes kulcsra.

TLS replikáció

Ha beállította a kiszolgálók között a Syncrepl használatát, akkor bölcs lépés titkosítani a replikációs forgalmat TLS használatával. A replikáció beállításával kapcsolatos részletekért lásd: „LDAP-replikáció”.

Feltételezzük, hogy a fenti utasításokat követte, és létrehozott egy CA tanúsítványt és kiszolgálótanúsítványt a termelő kiszolgálón. Tegye a következőket a fogyasztó kiszolgáló tanúsítványának és kulcsának létrehozásához.

  1. Hozza létre a fogyasztó kiszolgáló új kulcsát:

    mkdir ldap02-ssl
    cd ldap02-ssl
    certtool --generate-privkey > ldap02_slapd_key.pem
    
    [Megjegyzés]

    Az új könyvtár létrehozása nem nélkülözhetetlen, de segít a fájlokat rendben tartani, és a fogyasztó kiszolgálóra másolás is egyszerűbb.

  2. Ezután hozzon létre egy ldap02.info nevű információs fájlt a fogyasztó kiszolgálóhoz, módosítsa az attribútumokat a helységnek és kiszolgálónak megfelelően:

    country = HU
    state = Pest
    locality = Budapest
    organization = Példacég
    cn = ldap02.példa.hu
    tls_www_client
    encryption_key
    signing_key
    
  3. Hozza létre a tanúsítványt:

    sudo certtool --generate-certificate --load-privkey ldap02_slapd_key.pem \ --load-ca-certificate /etc/ssl/certs/cacert.pem --load-ca-privkey /etc/ssl/private/cakey.pem \ --template ldap02.info --outfile ldap02_slapd_cert.pem
    
  4. Másolja a cacert.pem fájlt a könyvtárba:

    cp /etc/ssl/certs/cacert.pem .
    
  5. Már csak az ldap02-ssl könyvtárat kell átmásolni a fogyasztó kiszolgálóra, majd az ldap02_slapd_cert.pem és cacert.pem fájlokat kell az /etc/ssl/certs, illetve az ldap02_slapd_key.pem fájlt az /etc/ssl/private könyvtárba másolni.

  6. Miután a fájlok a helyükre kerültek, módosítsa a cn=config fát a következő parancs kiadásával:

    sudo ldapmodify -Y EXTERNAL -H ldapi:///
    
    Enter LDAP Password:
    dn: cn=config
    add: olcTLSCACertificateFile
    olcTLSCACertificateFile: /etc/ssl/certs/cacert.pem
    -
    add: olcTLSCertificateFile
    olcTLSCertificateFile: /etc/ssl/certs/ldap02_slapd_cert.pem
    -
    add: olcTLSCertificateKeyFile
    olcTLSCertificateKeyFile: /etc/ssl/private/ldap02_slapd_key.pem
    
    modifying entry "cn=config"
    
    
  7. A termelőhöz hasonlóan szerkesztheti az /etc/default/slapd fájlt, és felveheti az ldaps:/// paramétert a SLAPD_SERVICES beállításhoz.

Most, hogy a TLS mindkét kiszolgálón be van állítva, módosítsa újra a fogyasztó kiszolgáló cn=config fáját a következő parancs kiadásával:

sudo ldapmodify -Y EXTERNAL -H ldapi:///
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0

dn: olcDatabase={1}hdb,cn=config
replace: olcSyncrepl
olcSyncrepl: {0}rid=0 provider=ldap://ldap01.példa.hu bindmethod=simple binddn="cn=ad
 min,dc=példa,dc=hu" credentials=titok searchbase="dc=példa,dc=hu" logbas
 e="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0))" s
 chemachecking=on type=refreshAndPersist retry="60 +" syncdata=accesslog starttls=yes

modifying entry "olcDatabase={1}hdb,cn=config"

Ha az LDAP kiszolgáló gépneve nem egyezik a tanúsítványban lévő teljes képzésű tartománynévvel (FQDN), akkor szükség lehet az /etc/ldap/ldap.conf fájl szerkesztésére, és a következő TLS-beállítások felvételére:

TLS_CERT /etc/ssl/certs/ldap02_slapd_cert.pem
TLS_KEY /etc/ssl/private/ldap02_slapd_key.pem
TLS_CACERT /etc/ssl/certs/cacert.pem

Végül indítsa újra az slapd démont az összes kiszolgálón:

sudo /etc/init.d/slapd restart

LDAP hitelesítés

Ha az LDAP-kiszolgáló már működik, az auth-client-config és libnss-ldap csomagok leegyszerűsítik az Ubuntu kliens beállítását LDAP használatával való hitelesítésre. A csomagok telepítéséhez adja ki a következő parancsot:

sudo apt-get install libnss-ldap

A telepítés során egy párbeszédablak bekéri az LDAP-kiszolgáló kapcsolatinformációit.

Ha elrontotta az információk megadását, újra elindíthatja a párbeszédablakot:

sudo dpkg-reconfigure ldap-auth-config

A párbeszédablakban megadott adatok az /etc/ldap.conf fájlba kerülnek. Ha a kiszolgáló a menüben nem szereplő beállításokat igényel, akkor ezen fájl szerkesztésével megadhatja azokat.

Ezután a libnss-ldap beállítható az auth-client-config LDAP-profil engedélyezésére a következő parancs kiadásával:

sudo auth-client-config -t nss -p lac_ldap
  • -t: csak az /etc/nsswitch.conf fájlt módosítja.

  • -p: az engedélyezendő/letiltandó stb. profil neve.

  • lac_ldap: az auth-client-config profil, amely az ldap-auth-config csomag része.

A pam-auth-update segédprogram segítségével állítsa be a rendszert az LDAP használatára hitelesítésre:

sudo pam-auth-update

A pam-auth-update menüből válassza ki az LDAP-t, és az egyéb szükséges hitelesítési mechanizmusokat.

Most már képesnek kell lennie az LDAP-címtárban tárolt felhasználóhitelesítési adatokkal való bejelentkezésre.

[Megjegyzés]

Ha az LDAP címtárat Samba felhasználók tárolására fogja használni, akkor be kell állítania a kiszolgálót az LDAP használatával való hitelesítésre. A részletekért lásd: „Samba és LDAP”.

Felhasználó- és csoportkezelés

Az ldap-utils csomag több segédprogramot is tartalmaz a címtár karbantartásához, de a használatát megnehezítheti a szükséges kapcsolók hosszú sora. Az ldapscripts csomag az LDAP felhasználók és csoportok egyszerű kezeléséhez tartalmaz konfigurálható parancsfájlokat.

A csomag telepítéséhez adja ki a következő parancsot:

sudo apt-get install ldapscripts

Ezután szerkessze az /etc/ldapscripts/ldapscripts.conf konfigurációs fájlt, vegye ki megjegyzésből és módosítsa a következőket a környezetének megfelelően:

SERVER=localhost
BINDDN='cn=admin,dc=példa,dc=hu'
BINDPWDFILE="/etc/ldapscripts/ldapscripts.passwd"
SUFFIX='dc=példa,dc=hu'
GSUFFIX='ou=Csoportok'
USUFFIX='ou=Emberek'
MSUFFIX='ou=Számítógépek'
GIDSTART=10000
UIDSTART=10000
MIDSTART=10000

Ezután hozza létre az ldapscripts.passwd fájlt a címtár hitelesített elérésének lehetővé tételéhez:

sudo sh -c "echo -n 'titok' > /etc/ldapscripts/ldapscripts.passwd"
sudo chmod 400 /etc/ldapscripts/ldapscripts.passwd
[Megjegyzés]

A „titok” helyére az LDAP admin felhasználójának tényleges jelszavát írja.

Az ldapscripts ezzel készen áll a címtára karbantartásának segítésére. Alább látható néhány példa a parancsfájlok használatára:

  • Új felhasználó létrehozása:

    sudo ldapadduser geza példa
    

    Ez létrehoz egy felhasználót geza felhasználónévvel és példa elsődleges csoporttal.

  • Felhasználó jelszavának módosítása:

    sudo ldapsetpasswd geza
    Changing password for user uid=geza,ou=Emberek,dc=példa,dc=hu
    New Password: 
    New Password (verify): 
    
  • Felhasználó törlése:

    sudo ldapdeleteuser geza
    
  • Csoport hozzáadása:

    sudo ldapaddgroup qa
    
  • Csoport törlése:

    sudo ldapdeletegroup qa
    
  • Felhasználó csoporthoz adása:

    sudo ldapaddusertogroup geza qa
    

    Ezután a qa csoport memberUid attribútumának értéke geza lesz.

  • Felhasználó eltávolítása csoportból:

    sudo ldapdeleteuserfromgroup geza qa
    

    A memberUid attribútum ezzel eltávolításra került a qa csoportból.

  • Az ldapmodifyuser parancsfájl lehetővé teszi felhasználó attribútumainak felvételét, eltávolítását vagy cseréjét. A parancsfájl az ldapmodify segédprogram szintaxisát használja, például:

    sudo ldapmodifyuser geza
    # About to modify the following entry :
    dn: uid=geza,ou=Emberek,dc=példa,dc=hu
    objectClass: account
    objectClass: posixAccount
    cn: geza
    uid: geza
    uidNumber: 1001
    gidNumber: 1001
    homeDirectory: /home/geza
    loginShell: /bin/bash
    gecos: geza
    description: Felhasználói fiók
    userPassword:: e1NTSEF9eXFsTFcyWlhwWkF1eGUybVdFWHZKRzJVMjFTSG9vcHk=
    
    # Enter your modifications here, end with CTRL-D.
    dn: uid=geza,ou=Emberek,dc=példa,dc=hu
    replace: gecos
    gecos: Hoffmann Géza
    

    A felhasználó gecos attribútumának értéke ezután „Hoffmann Géza” lesz.

  • Az ldapscripts másik nagyszerű szolgáltatása a sablonrendszer. A sablonok lehetővé teszik a felhasználó, csoport és gép objektumok attribútumainak személyre szabását. A user sablon engedélyezéséhez szerkessze az /etc/ldapscripts/ldapscripts.conf fájlt, és módosítsa:

    UTEMPLATE="/etc/ldapscripts/ldapadduser.template"
    

    Az /etc/ldapscripts könyvtárban minta sablonok találhatók. Másolja vagy nevezze át az ldapadduser.template.sample fájlt /etc/ldapscripts/ldapadduser.template névre:

    sudo cp /etc/ldapscripts/ldapadduser.template.sample /etc/ldapscripts/ldapadduser.template
    

    Szerkessze az új sablont a kívánt attribútumok felvételéhez. A következők az új felhasználókat az inetOrgPerson objectClass elemeként hozzák létre:

    dn: uid=<user>,<usuffix>,<suffix>
    objectClass: inetOrgPerson
    objectClass: posixAccount
    cn: <user>
    sn: <ask>
    uid: <user>
    uidNumber: <uid>
    gidNumber: <gid>
    homeDirectory: <home>
    loginShell: <shell>
    gecos: <user>
    description: Felhasználói fiók
    title: Alkalmazott
    

    Figyelje meg a cn értékeként használt <ask> szöveget. Az <ask> segítségével az ldapadduser beállítható az attribútumérték bekérésére a felhasználó létrehozása során.

További hasznos parancsfájlok is találhatók a csomagban, a teljes lista a következő parancs kiadásával érhető el: dpkg -L ldapscripts | grep bin

Információforrások

  • Az Ubuntu wiki OpenLDAP oldala további részleteket tartalmaz.

  • További információkért lásd az OpenLDAP honlapját

  • Noha nem teljesen friss, az O'Reilly LDAP System Administration könyve a mélyebb LDAP információk hasznos forrása

  • A Packt Mastering OpenLDAP egy remek referencia, amely az OpenLDAP újabb verzióit mutatja be.

  • Az auth-client-config alkalmazással kapcsolatos további információkért lásd a kézikönyvoldalát: man auth-client-config.

  • Az ldapscripts csomaggal kapcsolatos további részletekért lásd a kézikönyvoldalakat: man ldapscripts, man ldapadduser, man ldapaddgroup stb.