Sieťová autentifikácia

Táto časť hovorí o rôznych protokoloch sieťovej autentifikácie.

OpenLDAP Server

LDAP je skratka pre Lightweight Directory Access Protocol (protokol odľahčeného prístupu k adresárom), ktorý je zjednodušenou verziou protokolu X.500. Nastavenie adresárov v tejto časti použijeme na autentifikáciu. LDAP sa však dá použiť aj na rôzne ďalšie účely, ako napríklad zdielaný adresár (pre mailových klientov), adresár kontaktov, atď.

Ak by sme chceli zjednodušene povedať, čo je LDAP, povedali by sme, že sú to informácie usporiadané do stromovej štruktúry (označuje sa cn=nazov_stromu). V  OpenLDAP môžeme slobodne určiť rozvetvenie adresárov (tzv. DIT – Directory Information Tree). My začneme vytvorením dvoch organizačných jednotiek (označuje sa ou=nazov_jednotky) na najvyššej úrovni:

  • "Ludia": uzol, do ktorého budeme zadávať používateľov.
  • "Skupiny": uzol, do ktorého budeme zadávať skupiny.

Pred tým, ako začneme, mali by sme zistiť, ako sa volá uzol najvyššej úrovne LDAP adresára. Za normálnych okolností je meno stromu určené tzv. Fully Qualified Domain Name (FQDN) – úplným menom domény (označuje sa dc=nazov_domeny). Ak je vaša doména nieco.sk (ktorú budeme v tomto príklade používať), názov hlavného uzla bude dc=nieco,dc=sk.

Inštalácia

Najskôr nainštalujeme démon OpenLDAP servera slapd a balík ldap-utils, ktorý obsahuje nástroje pre správu LDAP:

sudo apt-get install slapd ldap-utils

V predvolenom stave je slapd nastavený s minimálnymi voľbami potrebnými na beh démona slapd.

Príklad konfigurácie v nasledujúcich častiach sa zhoduje s doménovým názvom servera. Napríklad počítač s FQDN adresou ldap.nieco.sk bude mať príponu dc=nieco,dc=sk.

Naplnenie LDAP

Adresár na pozadí cn=config má len minimálnu konfiguráciu a bude potrebné nastaviť ďalšie voľby, aby bolo možné naplniť adresár v popredí. Adresár v popredí napliníme pomocou schémy "classical", ktorá je kompatibilná s adresármi v aplikáciách a s kontami Unix Posix. Kontá Posix umožňujú autentifikáciu do rôznych aplikácií, vrátane webových aplikácií, emailových aplikácií Mail Transfer Agent (MTA), atď.

[Note]

Ak chcete, aby externé aplikácie používali LDAP pri autentifikácii, je potrebné každú z nich nastaviť osobitne. Viac informácii získate v dokumentácii konkrétnej aplikácie.

Nezabudnite zmeniť dc=nieco,dc=sk v nasledujúcich príkladoch, na zodpovedajúce vašej konfigurácii LDAP.

Najskôr je potrebné načítať niektoré prídavné schémy. Do príkazového riadka zadáme:

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

Teraz niekde v systéme vytvoríme súbor s názvom pozadie.nieco.sk.ldif a skopírujeme do neho nasledujúci ukážkový obsah LDIF súboru:

# Načítanie dynamických modulov pozadia
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulepath: /usr/lib/ldap
olcModuleload: back_hdb

# Nastavenia databázy
dn: olcDatabase=hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcSuffix: dc=nieco,dc=sk
olcDbDirectory: /var/lib/ldap
olcRootDN: cn=admin,dc=nieco,dc=sk
olcRootPW: tajne
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,shadowLastChange by dn=\"cn=admin,dc=nieco,dc=sk\" write by anonymous auth by self write by * none
olcAccess: to dn.base=\"\" by * read
olcAccess: to * by dn=\"cn=admin,dc=nieco,dc=sk\" write by * read
[Note]

Zmeňte olcRootPW: tajne na vami vybrané heslo.

Teraz pridáme LDIF do adresára:
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f pozadie.nieco.sk.ldif

Teraz môžeme naplniť adresár v popredí. Vytvoríme súbor popredie.nieco.sk.ldif s nasledujúcim obsahom:

# Vytvorenie najvrchnejšieho objektu v doméne
dn: dc=nieco,dc=sk
objectClass: top
objectClass: dcObject
objectclass: organization
o: Organizácia Nieco
dc: Nieco
description: Ukážka LDAP

# Používateľ Admin.
dn: cn=admin,dc=nieco,dc=sk
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword: tajne

dn: ou=ludia,dc=nieco,dc=sk
objectClass: organizationalUnit
ou: ludia

dn: ou=skupiny,dc=nieco,dc=sk
objectClass: organizationalUnit
ou: skupiny

dn: uid=jozef,ou=ludia,dc=nieco,dc=sk
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: jozef
sn: Mrkva
givenName: Jozef
cn: Jozef Mrkva
displayName: Jozef Mrkva
uidNumber: 1000
gidNumber: 10000
userPassword: heslo
gecos: Jozef Mrkva
loginShell: /bin/bash
homeDirectory: /home/jozef
shadowExpire: -1
shadowFlag: 0
shadowWarning: 7
shadowMin: 8
shadowMax: 999999
shadowLastChange: 10877
mail: jozef.mrkva@nieco.sk
postalCode: 81100
l: Bratislava
o: Nieco
mobile: +421 (0)9xx xx xx xx
homePhone: +421 (0)2 xx xx xx xx
title: Systemový administrátor
postalAddress:
initials: JM

dn: cn=priklad,ou=skupiny,dc=nieco,dc=sk
objectClass: posixGroup
cn: priklad
gidNumber: 10000

V tomto príklade je nastavená štruktúra adresára, používateľ a skupina. V iných príkladoch konfigurácie môžeme naraziť na nastavenie objectClass: top, ktoré býva pridané ku každému záznamu. Toto nastavenie však nemusíme pridávať explicitne, pretože je predvolené.

Pridáme záznamy do LDAP adresára :

sudo ldapadd -x -D cn=admin,dc=nieco,dc=sk -W -f popredie.nieco.sk.ldif

Pomocou nástroja ldapsearch môžeme overiť, či bol obsah správne pridaný. Spustíme vyhľadávanie v LDAP adresári:

ldapsearch -xLLL -b "dc=nieco,dc=sk" uid=jozef sn givenName cn
dn: uid=jozef,ou=ludia,dc=nieco,dc=sk
cn: Jozef Mrkva
sn: Mrkva
givenName: Jozef

Rýchle vysvetlenie:

  • -x: nepoužije SASL metódu autentifikácie, ktorá je predvolená.
  • -LLL: zabráni vypísaniu informácií o LDIF schéme.

Ďalšie nastavenia

Strom cn=config sa dá upravovať pomocou nástrojov z balíka ldap-utils. Napríklad takto:

  • Ak chceme strom zobraziť, použijeme príkaz ldapsearch a zadáme heslo správcu, ktoré sme zadali pri inštalácii:
    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
    Výpis, ktorý sa nám zobrazil, predstavuje aktuálnu konfiguráciu databázy na pozadí cn=config. Výpis sa môže líšiť.
  • Aby sme ukázali, ako sa strom cn=config upravuje, pridáme pomocou ldapmodify ďalší atribút do zoznamu indexov: 
    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: entryUUID eq

    modifying entry "olcDatabase={1}hdb,cn=config"
    Po ukončení pridávania nástroj ukončíme stlačením Ctrl+D. 
  • ldapmodify môže zmeny prečítať aj zo súboru. Nasledujúci text skopírujeme do súboru s názvom uid_index.ldif:
    dn: olcDatabase={1}hdb,cn=config
    add: olcDbIndex
    olcDbIndex: uid eq,pres,sub
    Potom spustíme ldapmodify:
    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"
    Tento spôsob s nastavením v súbore sa používa najmä pri rozsiahlych zmenách.
  • Ak chceme pridať do slapd ďalšiu schému (definíciu atribútov pre organizačnú jednotku), je potrebné ju prekonvertovať do LDIF formátu. Priečinok /etc/ldap/schema obsahuje niektoré schémami v súboroch, ktoré sú už skonvertované do LDIF formátu podobne ako sme to demonštrovali v predchádzajúcej časti. Našťastie sa program slapd dá použiť na zautomatizovanie konverzie. V nasledujúcom príklade pridáme schému dyngoup.schema:
    1. Najskôr vytvoríme konverzný súbor schema_convert.conf a uložíme do neho nasledujúce 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
    2. V ďalšom kroku vytvoríme dočasný priečinok pre ukladanie výstupov:
      mkdir /tmp/ldif_output
    3. Teraz pomocou slapcat skonvertujeme súbor schémy do LDIF formátu:
      slapcat -f schema_convert.conf -F /tmp/ldif_output -n0 -s "cn={5}dyngroup,cn=schema,cn=config" > /tmp/cn=dyngroup.ldif

      Ak by sme použili iný názov konfiguračného súboru a priečinka, bolo by potrebné prispôsobiť aj príkaz. Priečinok ldif_output nemusíme mazať, môžeme ho využiť neskôr, keď budeme pridávať ďalšie schémy.
    4. Otvoríme súbor /tmp/cn\=dyngroup.ldif, zmeníme nasledujúce atribúty:
      dn: cn=dyngroup,cn=schema,cn=config
      ...
      cn: dyngroup
      a odstránime nasledujúce riadky z konca súboru:
      structuralObjectClass: olcSchemaConfig
      entryUUID: 10dae0ea-0760-102d-80d3-f9366b7f7757
      creatorsName: cn=config
      createTimestamp: 20080826021140Z
      entryCSN: 20080826021140.791425Z#000000#000#000000
      modifiersName: cn=config
      modifyTimestamp: 20080826021140Z
      [Note]

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

    5. Nakoniec pomocou nástroja ldapadd pridáme novú schému do adresára:
      sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /tmp/cn\=dyngroup.ldif

Teraz by sme v strome cn=config mali mať záznam dn: cn={4}misc,cn=schema,cn=config.

Replikácia LDAP

LDAP sa veľmi rýchlo stane kľúčovou službou v našej sieti. Viaceré systémy budú závislé od LDAP autentifikácie, autorizácie, konfigurácie, atď. Z tohto dôvodu je dobré systém nastaviť tak, aby bol redundantný.

Replikácia sa vykonáva pomocou Syncrepl. Syncrepl umožňuje synchronizáciu adresára buď pomocou modelu výrobca - spotrebiteľ. Výrobca poskytuje zmeny v adresári spotrebiteľovi

Konfigurácia výrobcu

My použijeme tzv. Single-Master konfiguráciu. V našom príklade bude jeden OpenLDAP server výrobca a druhý spotrebiteľ

  1. Najskôr nastavíme server výrobcu. Skopírujeme nasledujúce riadky do súboru s názvom provider_sync.ldif:
    # Pridá indexy do databázy popredia.
    dn: olcDatabase={1}hdb,cn=config
    changetype: modify
    add: olcDbIndex
    olcDbIndex: entryCSN eq
    -
    add: olcDbIndex
    olcDbIndex: entryUUID eq

    #Načíta moduly syncprov a accesslog.
    dn: cn=module{0},cn=config
    changetype: modify
    add: olcModuleLoad
    olcModuleLoad: syncprov
    -
    add: olcModuleLoad
    olcModuleLoad: accesslog

    # Definície databázy accesslog
    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=nieco,dc=sk
    olcDbIndex: default eq
    olcDbIndex: entryCSN,objectClass,reqEnd,reqResult,reqStart

    # Accesslog db syncprov.
    dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
    changetype: add
    objectClass: olcOverlayConfig
    objectClass: olcSyncProvConfig
    olcOverlay: syncprov
    olcSpNoPresent: TRUE
    olcSpReloadHint: TRUE

    # syncrepl Výrobcu pre primárnu db
    dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config
    changetype: add
    objectClass: olcOverlayConfig
    objectClass: olcSyncProvConfig
    olcOverlay: syncprov
    olcSpNoPresent: TRUE

    # Prekryje definície accesslog pre primárnu db
    dn: olcOverlay=accesslog,olcDatabase={1}hdb,cn=config
    objectClass: olcOverlayConfig
    objectClass: olcAccessLogConfig
    olcOverlay: accesslog
    olcAccessLogDB: cn=accesslog
    olcAccessLogOps: writes
    olcAccessLogSuccess: TRUE
    # Prehľadá accesslog DB každý deň a odstráni záznamy staršie ako 7 dní
    olcAccessLogPurge: 07+00:00 01+00:00
  2. Teraz je potrebné upraviť profil AppArmor pre slapd a zadať do neho umiestnenie databázy accesslog. Otvoríme súbor /etc/apparmor.d/usr.sbin.slapd a pridáme:

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

    Potom vytvoríme priečinok, znova načítame profil apparmor a skopírujeme súbor DB_CONFIG:

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

    Pomocou voľby -u openldap za príkazom sudo odstránime potrebu nastavovania práv pre novovytvorený priečinok.

  3. Otvoríme súbor a zmeníme nastavenie olcRootDN tak, aby sa zhodoval s naším adresárom:
    olcRootDN: cn=admin,dc=nieco,dc=sk
  4. Potom LDIF súbor pridáme pomocou nástroja ldapadd utility:

    sudo ldapadd -Y EXTERNAL -H ldapi:/// -f provider_sync.ldif
  5. Reštartujeme slapd:

    sudo /etc/init.d/slapd restart
Server v úlohe výrobcu je teraz nakonfigurovaný a teraz je čas nakonfigurovať server v úlohe spotrebiteľa.

Konfigurácia spotrebiteľa

  1. Na serveri v úlohe spotrebiteľa nastavíme to isté ako na serveri v úlohe výrobcu s výnimkou konfiguračných krokov pre Syncrepl.

    Pridáme dodatočné súbory schém:

    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

    Tiež vytvoríme alebo z výrobcu skopírujeme súbor pozadie.nieco.sk.ldif

    # Načítanie dynamických modulov pozadia
    dn: cn=module,cn=config
    objectClass: olcModuleList
    cn: module
    olcModulepath: /usr/lib/ldap
    olcModuleload: back_hdb

    # Nastavenia databázy
    dn: olcDatabase=hdb,cn=config
    objectClass: olcDatabaseConfig
    objectClass: olcHdbConfig
    olcDatabase: {1}hdb
    olcSuffix: dc=nieco,dc=sk
    olcDbDirectory: /var/lib/ldap
    olcRootDN: cn=admin,dc=nieco,dc=sk
    olcRootPW: tajne
    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,shadowLastChange by dn=\"cn=admin,dc=nieco,dc=sk\" write by anonymous auth by self write by * none
    olcAccess: to dn.base=\"\" by * read
    olcAccess: to * by dn=\"cn=admin,dc=nieco,dc=sk\" write by * read

    a pridáme LDIF zadaním príkazu:

    sudo ldapadd -Y EXTERNAL -H ldapi:/// -f backend.nieco.sk.ldif
  2. To isté urobíme so súborom popredie.nieco.sk.ldif zobrazeným vyššie a tiež ho pridáme:

    sudo ldapadd -x -D cn=admin,dc=nieco,dc=sk -W -f frontend.nieco.sk.ldif

    Oba servery by teraz mali mať rovnakú konfiguráciu až na voľby Syncrepl.

  3. Teraz vytvoríme súbor s názvom consumer_sync.ldif obsahujúci:

    #Načítanie modulu syncprov.
    dn: cn=module{0},cn=config
    changetype: modify
    add: olcModuleLoad
    olcModuleLoad: syncprov

    # Ukazovatele špecifické pre syncrepl
    dn: olcDatabase={1}hdb,cn=config
    changetype: modify
    add: olcDbIndex
    olcDbIndex: entryUUID eq
    -
    add: olcSyncRepl
    olcSyncRepl: rid=0 provider=ldap://ldap01.example.com bindmethod=simple binddn="cn=admin,dc=nieco,dc=sk"
    credentials=tajne searchbase="dc=nieco,dc=sk" logbase="cn=accesslog"
    logfilter="(&(objectClass=auditWriteObject)(reqResult=0))" schemachecking=on
    type=refreshAndPersist retry="60 +" syncdata=accesslog
    -
    add: olcUpdateRef
    olcUpdateRef: ldap://ldap01.nieco.sk

    Bude pravdepodobne potrebné zmeniť tieto atribúty:

    • ldap01.nieco.sk na adresu nášho servera.

    • binddn

    • credentials

    • searchbase

    • olcUpdateRef:

  4. Pridáme LDIF súbor do konfiguračného stromu:

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

Databáza popredia by teraz mala byť synchronizovaná medzi oboma servermi. Podľa predchádzajúcich krokov môžeme v prípade potreby pridať aj ďalšie servery.

[Note]

Démon slapd bude v predvolenom stave odosielať záznamy do súboru /var/log/syslog. Takže ak niečo neprebehne tak, ako má, nájdeme v ňom zapísané zaznamy o chybách a ďalšie informácie potrebné pre vyriešenie problému. Je potrebné sa tiež uistiť, či sú všetky servery známe pod úplnou doménovou adresou - Fully Qualified Domain Name (FQDN). V súbore /etc/hosts by malo byť zapísané niečo podbné tomuto:

127.0.0.1	ldap01.nieco.sk ldap01

.

Nastavenie prístupových práv

Autentifikácia vyžaduje prístup k poľu s heslom, ktoré by nemalo byť prístupné bežným spôsobom. Aby si používatelia po prihlásení mohli zmeniť svoje heslo pomocou passwd alebo iných nástrojov, potrebujú prístup k shadowLastChange.

Ak chceme zobraziť tzv. Access Control List (ACL) - zoznam prístupových práv, použijeme nástroj ldapsearch:

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=nieco
,dc=sk" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=admin,dc=nieco,dc=sk" write by * read

TLS a SSL

Ak sa prihlasujeme k OpenLDAP serveru, je vhodné to robiť pomocou šifrovaného pripojenia. Toto je možné zabezpečiť pomocou použitia Transport Layer Security (TLS) a/alebo Secure Sockets Layer (SSL).

Prvý krok, ktorý je potrebné vykonať, je získanie alebo vytvorenie certifikátu. Pretože démon slapd je kompilovaný pomocou knižnice gnutls, na vytvorenie certifikátu je potrebné použiť nástroj certtool.

  1. Najskôr nainštalujeme balík gnutls-bin zadaním nasledujúceho príkazu:

    sudo apt-get install gnutls-bin
  2. Potom vytvoríme súkromný kľúč pre Certifikačnú autoritu (CA):

    sudo sh -c "certtool --generate-privkey > /etc/ssl/private/cakey.pem"
  3. Vytvoríme súbor /etc/ssl/ca.info s podrobnosťami pre sebou podpísaný certifikát CA obsahujúci:

    cn = Spoločnosť Niečo
    ca
    cert_signing_key
  4. Teraz vytvoríme sebou podpísaný certifíkát CA:

    sudo certtool --generate-self-signed --load-privkey /etc/ssl/private/cakey.pem \ 
    --template /etc/ssl/ca.info --outfile /etc/ssl/certs/cacert.pem

  5. Vytvoríme súkromný kľúč pre server:

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

    V názve súboru nahraďte ldap01 vami používaným názvom hostiteľskej stanice. Správne pomenovanie certifikátu a kľúča pre stanicu a službu, ktorú používame, je dôležité kvôli poriadku.

  6. Keď chceme podpísať serverový certifikát pomocou CA, vytvoríme súbor /etc/ssl/ldap01.info obsahujúci:

    organization = Spoločnosť Niečo
    cn = ldap01.nieco.sk
    tls_www_server
    encryption_key
    signing_key
  7. Vytvoríme serverový certifiká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

Keď máme nainštalovaný certifikát, kľúč a certifikát CA, pomocou nástroja ldapmodify pridáme nové voľby konfigurácie:

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"

[Note]

Zmeňte názvy ldap01_slapd_cert.pem, ldap01_slapd_key.pem a cacert.pem ak ste použili iné.

Teraz otvoríme súbor /etc/default/slapd a odpoznámkujeme voľbu SLAPD_SERVICES:

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

 

Teraz povolíme používateľovi menom openldap prístup k certifikátu:

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

Ak /etc/ssl/private a /etc/ssl/private/server.key majú rozdielne nastavené práva, prispôsobte podľa toho príkazy.

Nakoniec reštartujeme slapd:

sudo /etc/init.d/slapd restart
Odteraz démon slapd bude akceptovať aj šifrované LDAPS pripojenia a bude môcť použiť STARTTLS počas autentifikácie.
[Note]

Ak nastane problém a server sa nedá naštartovať, skontrolujeme /var/log/syslog. Ak zbadáme chybu podobnú: TLS init def ctx failed: -1, je pravdepodobné, že sme urobili chybu v konfigurácii. Skontrolujeme, či je certifikát podpísaný autoritou aká je nastavená v konfiguračných súboroch, a či má skupina ssl-cert právo na čítanie súkromného kľúča.

 

TLS Replikácia

Ak sme medzi servermi nastavili Syncrepl, je rozumné zašifrovať replikačnú komunikáciu pomocou Transport Layer Security (TLS). Viac informácii o replíkácii nájdeme v časti “Replikácia LDAP”.

Za predpokladu, že sme sa pomocou predchádzajúcich inštrukcií dostali až sem, vytvorili sme certifikát CA  a certifikát pre server v úlohe výrobcu. Pomocou nasledujúcich krokov teraz vytvoríme certifikát a kľuč pre server v úlohe spotrebiteľa.

  1. Vytvoríme nový kľúč pre server v úlohe spotrebiteľa:

    mkdir ldap02-ssl
    cd ldap02-ssl
    certtool --generate-privkey > ldap02_slapd_key.pem
    [Note]

    Vytvorenie nového priečinka nie je nevyhnutne potrebné, ale pomôže nám to udržať poriadok a budú sa nám ľahšie kopírovať súbory na server v úlohe spotrebiteľa.

  2. Teraz vytvoríme súbor ldap02.info s informáciami pre server v úlohe spotrebiteľa, pričom zmeníme parametre aby súhlasili s našou lokalitou a serverom:

    country = SK
    state = Slovakia
    locality = Bratislava
    organization = Spoločnosť Niečo
    cn = ldap02.filialka.sk
    tls_www_client
    encryption_key
    signing_key
  3. Vytvoríme certifikát:

    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. Skopírujeme cacert.pem do priečinka:

    cp /etc/ssl/certs/cacert.pem .
  5. Poslednú vec, ktorú musíme urobiť, je skopírovať priečinok ldap02-ssl dna server v úlohe spotrebiteľa, potom skopírovať súbory ldap02_slapd_cert.pem a cacert.pem do priečinka /etc/ssl/certs a súbor ldap02_slapd_key.pem do priečinka /etc/ssl/private.

  6. Keď sú súbory na správnom mieste, uprevíme vetvu cn=config zadaním:

    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. Tak, ako pri výrobcovi, teraz môžeme otvoriť súbor /etc/default/slapd a pridať parameter ldaps:/// do voľby SLAPD_SERVICES.

Teraz, keď je TLS nastavené na každom serveri, ešte raz upravíme vetvu cn=config na spotrebiteľovi zadaním:

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.example.com bindmethod=simple binddn="cn=ad
min,dc=example,dc=com" credentials=secret searchbase="dc=example,dc=com" 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"

 

Ak adresa stanice LDAP servera nesúhlasí s FQDN v certifikáte, mali by sme otvoriť súbor /etc/ldap/ldap.conf a pridať nasledujúce TLS nastavenia:

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

Nakoniec reštartujeme slapd na každom serveri:

sudo /etc/init.d/slapd restart

LDAP autentifikácia

Keď máme funkčný LDAP server, balíky auth-client-config a libnss-ldap nám pomôžu prekonať ťažkosti pri nastavovaní Ubuntu klientov tak, aby sa prihlasovali pomocou LDAP. Ak chceme balíky nainštalovať, zadáme:

sudo apt-get install libnss-ldap

Počas inštalácie bude potrebné zadať parametre pripojenia k LDAP serveru.

Ak sa pomýlime pri zadávaní informácií, môžeme dialóg vyvolať znova pomocou príkazu:

sudo dpkg-reconfigure ldap-auth-config

Hodnoty, ktoré zadáme do dialógu, môžeme vidieť v súbore /etc/ldap.conf. Ak náš server vyžaduje nastavenie, ktoré sa nenachádza v dialógu, môžeme ho v tomto súbore doplniť.

Teraz, keď je libnss-ldap nakonfigurované, zapneme pomocou auth-client-config LDAP profil:

sudo auth-client-config -t nss -p lac_ldap
  • -t: zmení iba /etc/nsswitch.conf.
  • -p: meno profilu, ktoré sa má zapnúť alebo vypnúť.
  • lac_ldap: profil auth-client-config, ktorý je časťou balíka ldap-auth-config.

Použitím nástroja pam-auth-update nastavíme systém tak, aby používal na autentifikáciu LDAP:

sudo pam-auth-update

Z ponuky pam-auth-update vyberieme LDAP a ktorékoľvek ďalšie autentifikačné mechanizmy, ktoré ešte potrebujeme.

Teraz by sme mali byť schopný prihlásiť používateľa, ktorý je uložený v LDAP adresáre.

[Note]

Ak sa chystáte použiť LDAP na uloženie používateľov systému Samba, bude potrebné nastaviť server tak, aby na autentifikáciu využíval LDAP. Viac informácii sa dozviete v časti “Samba a LDAP”.

Správa používateľov a skupín

Balík ldap-utils obsahuje viacero nástrojov na správu adresára, ale pri potrebe nastavenia dlhších reťazcov môže byť ich použitie ťažkopádne. Balík ldapscripts obsahuje konfiguračné skripty na správu LDAP používateľov a skupín.

Ak tento balíček chceme nainštalovať, zadáme:

sudo apt-get install ldapscripts

Potom otvoríme konfiguračný súbor /etc/ldapscripts/ldapscripts.conf a odkomentujeme a zmeníme nasledujúce riadky tak, aby zodpovedali nášmu prostrediu:

SERVER=localhost
BINDDN='cn=admin,dc=nieco,dc=sk'
BINDPWDFILE="/etc/ldapscripts/ldapscripts.passwd"
SUFFIX='dc=nieco,dc=sk'
GSUFFIX='ou=Skupiny'
USUFFIX='ou=Ludia'
MSUFFIX='ou=Pocitace'
GIDSTART=10000
UIDSTART=10000
MIDSTART=10000

Teraz vytvoríme súbor ldapscripts.passwd, aby sme umožnili autentifikovaný prístup k adresáru:

sudo sh -c "echo -n 'tajne' > /etc/ldapscripts/ldapscripts.passwd"
sudo chmod 400 /etc/ldapscripts/ldapscripts.passwd
[Note]

Slovo “tajne” nahraďte aktuálnym heslom LDAP administrátora.

Odteraz sú skripty ldapscripts pripravené pomôcť nám pri správe adresára. Nasledujúce príklady hovoria o tom, ako sa skripty používajú:

  • Vytvorenie nového používateľa:
    sudo ldapadduser juro pokus
    Tento príkaz vytvorí používateľa s uid juro a nastaví jeho hlavnú skupinu (gid) na pokus
  • Zmena hesla:
    sudo ldapsetpasswd juro
    Changing password for user uid=juro,ou=Ludia,dc=nieco,dc=sk
    New Password:
    New Password (verify):
  • Odstránenie používateľa:
    sudo ldapdeleteuser juro
  • Pridanie skupiny:
    sudo ldapaddgroup qa
  • Odstránenie skupiny:
    sudo ldapdeletegroup qa
  • Pridanie používateľa do skupiny:
    sudo ldapaddusertogroup juro qa
    Teraz sa môžeme presvedčiť, že atribút memberUid skupiny qa bude obsahovať hodnotu juro.
  • Odstránenie používateľa zo skupiny:
    sudo ldapdeleteuserfromgroup juro qa
    Z atribútu memberUid skupiny qa by mal byť juro teraz odstránený.
  • Skript ldapmodifyuser umožňuje pridať, odstrániť alebo nahradiť atribúty používateľa. Skript používa rovnakú syntax ako nástroj ldapmodify. Napríklad:
    sudo ldapmodifyuser juro

    # About to modify the following entry :
    dn: uid=juro,ou=Ludia,dc=nieco,dc=sk
    objectClass: account
    objectClass: posixAccount
    cn: juro
    uid: juro
    uidNumber: 1001
    gidNumber: 1001
    homeDirectory: /home/juro
    loginShell: /bin/bash
    gecos: juro
    description: User account
    userPassword:: e1NTSEF9eXFsTFcyWlhwWkF1eGUybVdFWHZKRzJVMjFTSG9vcHk=

    # Enter your modifications here, end with CTRL-D.
    dn: uid=juro,ou=Ludia,dc=nieco,dc=sk

    replace: gecos
    gecos: Juraj Jánošík

    Atribút gecos by mal mať teraz hodnotu “Juraj Jánošík”.
  • Ďalšou obrovskou výhodou balíka ldapscripts je využívanie systémových šablón. Šablóny umožňujú prispôsobiť atribúty používateľa, skupiny a počítača. Ak chceme napríklad použiť šablónu user, otvoríme súbor /etc/ldapscripts/ldapscripts.conf a pridáme riadok:
    UTEMPLATE="/etc/ldapscripts/ldapadduser.template"
    Vzorové šablóny sa nachádzajú v priečinku /etc/ldapscripts. Skopírujeme súbor  ldapadduser.template.sample do /etc/ldapscripts/ldapadduser.template:
    sudo cp /etc/ldapscripts/ldapadduser.template.sample /etc/ldapscripts/ldapadduser.template
    Otvoríme novú šablónu a upravíme príslušné atribúty. Nasledujúca šablóna slúži na vytváranie nových používateľov s prednastaveným atribútom objectClass na hodnotu inetOrgPerson:
    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: User account
    title: Employee
    Všimnime si použitie <otázky> pre cn hodnoty. Použitím <otázky> prinútime nástroj ldapadduser aby sa opýtal na hodnotu atribútu pri vytváraní používateľa.

Existuje viac užitočných skriptov. Ak chceme zobraziť ich zoznam, zadáme príkaz: dpkg -L ldapscripts | grep bin

Zdroje

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

OpenLDAP Server starý návod

LDAP je skratka pre Lightweight Directory Access Protocol (protokol odľahčeného prístupu k adresárom), ktorý je zjednodušenou verziou protokolu X.500. Nastavenie adresárov v tejto časti použijeme na autentifikáciu. LDAP sa však dá použiť aj na rôzne ďalšie účely, ako napríklad zdielaný adresár (pre mailových klientov), adresár kontaktov, atď.

Ak by sme chceli zjednodušene povedať, čo je LDAP, povedali by sme, že sú to informácie usporiadané do stromovej štruktúry (označuje sa cn=nazov_stromu). V OpenLDAP môžeme slobodne určiť rozvetvenie adresárov (tzv. DIT - Directory Information Tree). My začneme vytvorením dvoch organizačných jednotiek (označuje sa ou=nazov_jednotky) na najvyššej úrovni:

  • "Ludia": uzol, do ktorého budeme zadávať používateľov.
  • "Skupiny": uzol, do ktorého budeme zadávať skupiny.

Pred tým, ako začneme, mali by sme zistiť, ako sa volá uzol najvyššej úrovne LDAP adresára. Za normálnych okolností je meno stromu určené tzv. Fully Qualified Domain Name (FQDN) - úplným menom domény (označuje sa dc=nazov_domeny). Ak je vaša doména nieco.sk (ktorú budeme v tomto príklade používať), názov hlavného uzla bude dc=nieco,dc=sk.

Inštalácia

Najskôr nainštalujeme démon OpenLDAP servera slapd a balík ldap-utils, ktorý obsahuje nástroje pre správu LDAP:

sudo apt-get install slapd ldap-utils

Pri inštalácii bude potrebné zadať heslo správcu pre LDAP adresár a potvrdiť ho.

Za normálnych okolností bude prípona mena adresára zhodná s nastaveným menom domény servera. Napríklad, ak je úplné doménové meno (FQDN) počítača ldap.nieco.sk, prípona bude dc=nieco,dc=sk. Ak by sme chceli inú príponu, môžeme ju zmeniť prostredníctvom dpkg-reconfigure. Stačí zadať nasledujúci príkaz do príkazového riadka:

sudo dpkg-reconfigure slapd

Zobrazí sa nám dialóg, ktorý nám umožní zmeniť rôzne možnosti slapd.

Konfigurácia

OpenLDAP používa samostatnú databázu, ktorá obsahuje stromovú štruktúru cn=config adresárov (DIT). Databáza cn=config DIT sa používa na dynamické konfigurovanie démona slapd a umožňuje bez nutnosti zastavenia služby upravovať schémy definícii, indexov, prístupových práv atď.

Strom cn=config sa dá upravovať pomocou nástrojov z balíka ldap-utils. Napríklad takto:

  • Ak chceme strom zobraziť, použijeme príkaz ldapsearch a zadáme heslo správcu, ktoré sme zadali pri inštalácii:
    ldapsearch -xLLL -b cn=config -D cn=admin,cn=config -W olcDatabase={1}hdb
    Enter LDAP Password: 
    dn: olcDatabase={1}hdb,cn=config
    objectClass: olcDatabaseConfig
    objectClass: olcHdbConfig
    olcDatabase: {1}hdb
    olcDbDirectory: /var/lib/ldap
    olcSuffix: dc=nieco,dc=sk
    olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=nieco
    ,dc=sk" write by anonymous auth by self write by * none
    olcAccess: {1}to dn.base="" by * read
    olcAccess: {2}to * by dn="cn=admin,dc=nieco,dc=sk" write by * read
    olcLastMod: TRUE
    olcDbCheckpoint: 512 30
    olcDbConfig: {0}set_cachesize 0 2097152 0
    olcDbConfig: {1}set_lk_max_objects 1500
    olcDbConfig: {2}set_lk_max_locks 1500
    olcDbConfig: {3}set_lk_max_lockers 1500
    olcDbIndex: objectClass eq
    Výpis, ktorý sa nám zobrazil, predstavuje aktuálnu konfiguráciu v databáze hdb, ktorá v našom prípade obsahuje príponu dc=nieco,dc=sk.
  • Výpis môžeme zúžiť pomocou filtra, ktorý zobrazí iba požadovanú hodnotu Index:
    ldapsearch -xLLL -b cn=config -D cn=admin,cn=config -W olcDatabase={1}hdb olcDbIndex
    Enter LDAP Password: 
    dn: olcDatabase={1}hdb,cn=config
    olcDbIndex: objectClass eq
  • Aby sme ukázali, ako sa strom cn=config upravuje, pridáme pomocou ldapmodify ďalší atribút do zoznamu indexov:
    ldapmodify -x -D cn=admin,cn=config -W
    Enter LDAP Password:

    dn: olcDatabase={1}hdb,cn=config
    add: olcDbIndex
    olcDbIndex: entryUUID eq


    modifying entry "olcDatabase={1}hdb,cn=config"
    Po ukončení pridávania nástroj ukončíme stlačením Ctrl+D.
  • ldapmodify môže zmeny prečítať aj zo súboru. Nasledujúci text skopírujeme do súboru s názvom uid_index.ldif:
    dn: olcDatabase={1}hdb,cn=config
    add: olcDbIndex
    olcDbIndex: uid eq,pres,sub
    Potom spustíme ldapmodify:
    ldapmodify -x -D cn=admin,cn=config -W -f uid_index.ldif
    Enter LDAP Password: 
    modifying entry "olcDatabase={1}hdb,cn=config"
    Tento spôsob s nastavením v súbore sa používa najmä pri rozsiahlych zmenách.
  • Ak chceme pridať do slapd ďalšiu schému (definíciu atribútov pre organizačnú jednotku), je potrebné ju prekonvertovať do LDIF formátu. Priečinok /etc/ldap/schema obsahuje niektoré schémami v súboroch, ktoré sú už skonvertované do LDIF formátu podobne ako sme to demonštrovali v predchádzajúcej časti. Našťastie sa program slapd dá použiť na zautomatizovanie konverzie. V nasledujúcom príklade pridáme schému dyngoup.schema:
    1. Najskôr vytvoríme konverzný súbor schema_convert.conf a uložíme do neho nasledujúce 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
    2. V ďalšom kroku vytvoríme dočasný priečinok pre ukladanie výstupov:
      mkdir /tmp/ldif_output
    3. Teraz pomocou slaptest skonvertujeme súbor schémy do LDIF formátu:
      slaptest -f schema_convert.conf -F /tmp/ldif_output
      Ak by sme použili iný názov konfiguračného súboru a priečinka, bolo by potrebné prispôsobiť aj príkaz. Priečinok ldif_output nemusíme mazať, môžeme ho využiť neskôr, keď budeme pridávať ďalšie schémy.
    4. Otvoríme súbor /tmp/ldif_output/cn=config/cn=schema/cn={8}misc.ldif, zmeníme nasledujúce atribúty:
      dn: cn=misc,cn=schema,cn=config
      ...
      cn: misc
      a odstránime nasledujúce riadky z konca súboru:
      structuralObjectClass: olcSchemaConfig
      entryUUID: 10dae0ea-0760-102d-80d3-f9366b7f7757
      creatorsName: cn=config
      createTimestamp: 20080826021140Z
      entryCSN: 20080826021140.791425Z#000000#000#000000
      modifiersName: cn=config
      modifyTimestamp: 20080826021140Z
      [Note]

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

    5. Nakoniec pomocou nástroja ldapadd pridáme novú schému do adresára:
      ldapadd -x -D cn=admin,cn=config -W -f /tmp/ldif_output/cn\=config/cn\=schema/cn\=\{8\}misc.ldif

    Teraz by sme v strome cn=config mali mať záznam dn: cn={4}misc,cn=schema,cn=config.

Naplnenie LDAP

Adresár sme už vytvorili a nakonfigurovali a teraz je čas ho naplniť. Naplníme ho pomocou schémy "classical", ktorá je kompatibilná s adresármi v aplikáciách a s kontami Unix Posix. Kontá Posix umožňujú autentifikáciu do rôznych aplikácií, vrátane webových aplikácií, emailových aplikácií Mail Transfer Agent (MTA), atď.

[Note]

Ak chcete, aby externé aplikácie používali LDAP pri autentifikácii, je potrebné každú z nich nastaviť osobitne. Viac informácii získate v dokumentácii konkrétnej aplikácie.

Adresáre LDAP môžeme naplniť pomocou súborov vo formáte LDIF (LDAP Directory Interchange Format). Vytvoríme niekde v systéme nový súbor s názvom nieco.sk.ldif a nakopírujeme do neho nasledujúcu vzorovú konfiguráciu:

dn: ou=ludia,dc=nieco,dc=sk
objectClass: organizationalUnit
ou: ludia

dn: ou=skupiny,dc=nieco,dc=sk
objectClass: organizationalUnit
ou: skupiny

dn: uid=jozef,ou=ludia,dc=nieco,dc=sk
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: jozef
sn: Mrkva
givenName: Jozef
cn: Jozef Mrkva
displayName: Jozef Mrkva
uidNumber: 1000
gidNumber: 10000
userPassword: heslo
gecos: Jozef Mrkva
loginShell: /bin/bash
homeDirectory: /home/jozef
shadowExpire: -1
shadowFlag: 0
shadowWarning: 7
shadowMin: 8
shadowMax: 999999
shadowLastChange: 10877
mail: jozef.mrkva@nieco.sk
postalCode: 81100
l: Bratislava
o: Firma
mobile: +421 (0)90x xxx xxx
homePhone: +421 (0)2 xxxx xxx
title: Systemový administrátor
postalAddress:
initials: JM

dn: cn=priklad,ou=skupiny,dc=nieco,dc=sk
objectClass: posixGroup
cn: priklad
gidNumber: 10000

V tomto príklade je nastavená štruktúra adresára, používateľ a skupina. V iných príkladoch konfigurácie môžeme naraziť na nastavenie objectClass: top, ktoré býva pridané ku každému záznamu. Toto nastavenie však nemusíme pridávať explicitne, pretože je predvolené.

Ak chceme pridať záznamy do LDAP adresára, použijeme na to nástroj ldapadd:

ldapadd -x -D cn=admin,dc=nieco,dc=sk -W -f nieco.sk.ldif

Ak chceme overiť, či obsah bol správne pridaný, urobíme to jedným z nástrojov balíka ldap-utils. Spustíme vyhľadávanie v LDAP adresáre:

ldapsearch -xLLL -b "dc=nieco,dc=sk" uid=jozef sn givenName cn
dn: uid=jozef,ou=ludia,dc=nieco,dc=sk
cn: Jozef Mrkva
sn: Mrkva
givenName: Jozef

Rýchle vysvetlenie:

  • -x: nepoužije SASL metódu autentifikácie, ktorá je predvolená.
  • -LLL: zabráni vypísaniu informácií o LDIF schéme.

Replikácia LDAP

LDAP sa veľmi rýchlo stane kľúčovou službou v našej sieti. Viaceré systémy budú závislé od LDAP autentifikácie, autorizácie, konfigurácie, atď. Z tohto dôvodu je dobré systém nastaviť tak, aby bol redundantný.

Replikácia sa vykonáva pomocou Syncrepl. Syncrepl umožňuje synchronizáciu adresára buď pomocou systému push alebo systému pull. Pri použití systému push “primárny” server naraz pošle adresár “sekundárnym” serverom, zatiaľčo systém pull  umožňuje replikáciu serverov synchronizovaním v určitých časových intervaloch.

My použijeme tzv. Multi-Master konfiguráciu. V našom príklade budú OpenLDAP servery používať oba spôsoby replikácie push aj pull.

  1. Najskôr pripravíme server na synchronizovanie databázy cn=config. Skopírujeme nasledujúce riadky do súboru s názvom syncrepl_cn-config.ldif:
    dn: cn=module{0},cn=config
    changetype: modify
    add: olcModuleLoad
    olcModuleLoad: syncprov

    dn: cn=config
    changetype: modify
    replace: olcServerID
    olcServerID: 1 ldap://ldap01.nieco.sk
    olcServerID: 2 ldap://ldap02.nieco.sk

    dn: olcOverlay=syncprov,olcDatabase={0}config,cn=config
    changetype: add
    objectClass: olcOverlayConfig
    objectClass: olcSyncProvConfig
    olcOverlay: syncprov

    dn: olcDatabase={0}config,cn=config
    changetype: modify
    add: olcSyncRepl
    olcSyncRepl: rid=001 provider=ldap://ldap01.nieco.sk binddn="cn=admin,cn=config" bindmethod=simple
    credentials=tajne searchbase="cn=config" type=refreshAndPersist
    retry="5 5 300 5" timeout=1
    olcSyncRepl: rid=002 provider=ldap://ldap02.nieco.sk binddn="cn=admin,cn=config" bindmethod=simple
    credentials=tajne searchbase="cn=config" type=refreshAndPersist
    retry="5 5 300 5" timeout=1
    -
    add: olcMirrorMode
    olcMirrorMode: TRUE
  2. Otvoríme súbor a upravíme nastavenia
    • ldap://ldap01.nieco.sk a ldap://ldap02.nieco.sk na mená staníc našich LDAP serverov.
      [Note]

      Môžete mať viac ako dva LDAP servery. Keď urobíte zmenu na jednom z nich, synchronizáciou sa dostane na ostatné. Na každom ďalšom serveri však musíte pridať záznam s vyššou hodnotou olcServerID, a tiež záznam olcSyncRepl s vyššou hodnotou rid.

    • a zmeníme credentials=tajne na naše administrátorské heslo.
  3. Potom pridáme LDIF súbor pomocou nástroja ldapmodify:
    ldapmodify -x -D cn=admin,cn=config -W -f syncrepl_cn-config.ldif
  4. Skopírujeme súbor syncrepl_cn-config.ldif na ďalší LDAP server a zopakujeme vyššie použitý príkaz ldapmodify.
  5. Pretože bol pridaný nový modul, je potrebné na replikačných serveroch reštartovať slapd démon:
    sudo /etc/init.d/slapd restart
  6. Teraz je nastavenie databázy rovnaké na všetkých serveroch, rovnako je však potrebné  synchronizovať rozhranie samotnej databázy. Skopírujeme nasledujúce riadky do ďalšieho LDIF súboru s názvom syncrepl_backend.ldif:
    dn: olcDatabase={1}hdb,cn=config
    changetype: modify
    add: olcRootDN
    olcRootDN: cn=admin,dc=nieco,dc=sk
    -
    add: olcSyncRepl
    olcSyncRepl: rid=003 provider=ldap://ldap01.nieco.sk binddn="cn=admin,dc=nieco,dc=sk"
    bindmethod=simple credentials=tajne searchbase="dc=nieco,dc=sk" type=refreshOnly
    interval=00:00:00:10 retry="5 5 300 5" timeout=1
    olcSyncRepl: rid=004 provider=ldap://ldap02.nieco.sk binddn="cn=admin,dc=nieco,dc=sk"
    bindmethod=simple credentials=tajne searchbase="dc=nieco,dc=sk" type=refreshOnly
    interval=00:00:00:10 retry="5 5 300 5" timeout=1
    -
    add: olcMirrorMode
    olcMirrorMode: TRUE

    dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config
    changetype: add
    objectClass: olcOverlayConfig
    objectClass: olcSyncProvConfig
    olcOverlay: syncprov
  7. Tak ako predchádzajúci súbor LDIF, aj tento otvoríme a zmeníme:
    • searchbase="dc=nieco,dc=sk" na naše hodnoty searchbase.
    • Ak by sme chceli iného používateľa ako admin, zmenili by sme binddn="cn=admin,dc=nieco,dc=sk".
    • Zmeníme aj credentials=tajne na heslo správcu.
  8. Pridáme LDIF súbor:
    ldapmodify -x -D cn=admin,cn=config -W -f syncrepl_backend.ldif
    Vďaka tomu, že konfigurácia databáz je už synchronizovaná, nie je potrebné tento LDIF súbor kopírovať na ostatné servery.

Konfigurácia a rozhrania databáz by teraz mali byť synchronizované s ostatnými servermi. Ďalšie servery môžeme podľa potreby pridať pomocou nástroja ldapmodify. Viac informácií o tejto možnosti nájdeme v časti “Konfigurácia”.

[Note]

Démon slapd zaznamenáva svoje výstupy do súboru /var/log/syslog. Takže ak niečo nefunguje tak ako má, môžete v ňom nájsť chybové hlásenia a informácie pre ich odstránenie. Tiež sa uistite, že každý server pozná svoje plné doménové meno (FQDN). Je nastavené v súbore /etc/hosts pomocou riadka podobného tomuto:

127.0.0.1	ldap01.nieco.sk ldap01

Nastavenie prístupových práv

Autentifikácia vyžaduje prístup k poľu s heslom, ktoré by nemalo byť prístupné bežným spôsobom. Aby si používatelia po prihlásení mohli zmeniť svoje heslo pomocou passwd alebo iných nástrojov, potrebujú prístup k shadowLastChange.

Ak chcete zobraziť tzv. Access Control List (ACL) - zoznam prístupových práv, použite nástroj ldapsearch:

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=nieco
,dc=sk" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=admin,dc=nieco,dc=sk" write by * read

TLS a SSL

Ak sa prihlasujeme k OpenLDAP serveru, je vhodné to robiť pomocou šifrovaného pripojenia. Toto je možné zabezpečiť pomocou použitia Transport Layer Security (TLS) a/alebo Secure Sockets Layer (SSL).

Prvý krok, ktorý je potrebné vykonať, je vytvorenie certifikátu. Viac informácii o tejto téme nájdeme v časti “Certifikáty” a v časti “Certifikačná autorita”.

Keď máme nainštalovaný certifikát, kľuč a certifikát CA, použijeme nástroj ldapmodify, ktorým pridáme nové nastavenia:

ldapmodify -x -D cn=admin,cn=config -W
Enter LDAP Password:

dn: cn=config
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/cacert.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/server.crt
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/server.key


modifying entry "cn=config"
[Note]

Upravte názvy server.crt, server.key a cacert.pem na také, aké používate.

Ako ďalšie otvoríme súbor /etc/default/slapd a odpoznámkujeme riadok SLAPD_SERVICES:

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

Teraz povolíme používateľovi menom openldap prístup k certifikátu:

sudo adduser openldap ssl-cert
sudo chgrp ssl-cert /etc/ssl/private/server.key
[Note]

Ak /etc/ssl/private a /etc/ssl/private/server.key majú rozdielne nastavené práva, prispôsobte podľa toho príkazy.

Nakoniec reštartujeme slapd:

sudo /etc/init.d/slapd restart

Odteraz démon slapd bude akceptovať aj šifrované LDAPS pripojenia a bude môcť použiť STARTTLS počas autentifikácie.

TLS Replikácia

Ak sme medzi servermi nastavili Syncrepl, je rozumné zašifrovať replikačnú komunikáciu pomocou Transport Layer Security (TLS). Viac informácii o replíkácii nájdeme v časti “Replikácia LDAP”.

Po nastavení replikácie pokračujeme inštrukciami v časti “TLS a SSL”. Z oboch častí vyplývajú dôsledky, ktoré by sme mali mať na zreteli:

  • Konfiguráciu stačí upraviť len na jednom serveri.
  • Cesta k certifikátu a kľúču musí byť na všetkých serveroch rovnaká.

Na každom replikačnom serveri teda: nainštalujeme certifikát, upravíme súbor /etc/default/slapd a reštartujeme slapd.

Keď sme TLS nastavili na každom serveri, zmeníme replikáciu cn=config zadaním nasledujúceho príkazu:

ldapmodify -x -D cn=admin,cn=config -W
Enter LDAP Password: 

dn: olcDatabase={0}config,cn=config
replace: olcSyncrepl
olcSyncrepl: {0}rid=001 provider=ldap://ldap01.nieco.sk binddn="cn=admin,cn
=config" bindmethod=simple credentials=tajne searchbase="cn=config" type=refre
shAndPersist retry="5 5 300 5" timeout=1 starttls=yes
olcSyncrepl: {1}rid=002 provider=ldap://ldap02.nieco.sk binddn="cn=admin,cn
=config" bindmethod=simple credentials=tajne searchbase="cn=config" type=refre
shAndPersist retry="5 5 300 5" timeout=1 starttls=yes


modifying entry "olcDatabase={0}config,cn=config"

Teraz upravíme replikáciu rozhrania databázy:

ldapmodify -x -D cn=admin,cn=config -W
Enter LDAP Password:

dn: olcDatabase={1}hdb,cn=config
replace: olcSyncrepl
olcSyncrepl: {0}rid=003 provider=ldap://ldap01.nieco.sk binddn="cn=admin,dc=nieco,dc=
sk" bindmethod=simple credentials=tajne searchbase="dc=nieco,dc=sk" type=r
efreshOnly interval=00:00:00:10 retry="5 5 300 5" timeout=1 starttls=yes
olcSyncrepl: {1}rid=004 provider=ldap://ldap02.nieco.sk binddn="cn=admin,dc=nieco,dc=
sk" bindmethod=simple credentials=tajne searchbase="dc=nieco,dc=sk" type=r
efreshOnly interval=00:00:00:10 retry="5 5 300 5" timeout=1 starttls=yes


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

Ak adresa stanice LDAP servera nesúhlasí s FQDN v certifikáte, mali by sme otvoriť súbor /etc/ldap/ldap.conf a pridať nasledujúce TLS nastavenia:

TLS_CERT /etc/ssl/certs/server.crt
TLS_KEY /etc/ssl/private/server.key
TLS_CACERT /etc/ssl/certs/cacert.pem

Nakoniec reštartujeme slapd na každom serveri:

sudo /etc/init.d/slapd restart

LDAP autentifikácia

Keď máme funkčný LDAP server, balíky auth-client-config a libnss-ldap nám pomôžu prekonať ťažkosti pri nastavovaní Ubuntu klientov tak, aby sa prihlasovali pomocou LDAP. Ak chceme balíky nainštalovať, zadáme:

sudo apt-get install libnss-ldap

Počas inštalácie bude potrebné zadať parametre pripojenia k LDAP serveru.

Ak sa pomýlime pri zadávaní informácií, môžeme dialóg vyvolať znova pomocou príkazu:

sudo dpkg-reconfigure ldap-auth-config

Hodnoty, ktoré zadáme do dialógu, môžeme vidieť v súbore /etc/ldap.conf. Ak náš server vyžaduje nastavenie, ktoré sa nenachádza v dialógu, môžeme ho v tomto súbore doplniť.

Teraz, keď je libnss-ldap nakonfigurované, zapneme pomocou auth-client-config LDAP profil:

sudo auth-client-config -t nss -p lac_ldap
  • -t: zmení iba /etc/nsswitch.conf.
  • -p: meno profilu, ktoré sa má zapnúť alebo vypnúť.
  • lac_ldap: profil auth-client-config, ktorý je časťou balíka ldap-auth-config.

Použitím nástroja pam-auth-update nastavíme systém tak, aby používal na autentifikáciu LDAP:

sudo pam-auth-update

Z ponuky pam-auth-update vyberieme LDAP a ktorékoľvek ďalšie autentifikačné mechanizmy, ktoré ešte potrebujeme.

Teraz by sme mali byť schopný prihlásiť používateľa, ktorý je uložený v LDAP adresáre.

[Note]

Ak sa chystáte použiť LDAP na uloženie používateľov systému Samba, bude potrebné nastaviť server tak, aby na autentifikáciu využíval LDAP. Viac informácii sa dozviete v časti “Samba a LDAP”.

Správa používateľov a skupín

Balík ldap-utils obsahuje viacero nástrojov na správu adresára, ale pri potrebe nastavenia dlhších reťazcov môže byť ich použitie ťažkopádne. Balík ldapscripts obsahuje konfiguračné skripty na správu LDAP používateľov a skupín.

Ak tento balíček chceme nainštalovať, zadáme:

sudo apt-get install ldapscripts

Potom otvoríme konfiguračný súbor /etc/ldapscripts/ldapscripts.conf a odkomentujeme a zmeníme nasledujúce riadky tak, aby zodpovedali nášmu prostrediu:

SERVER=localhost
BINDDN='cn=admin,dc=nieco,dc=sk'
BINDPWDFILE="/etc/ldapscripts/ldapscripts.passwd"
SUFFIX='dc=nieco,dc=sk'
GSUFFIX='ou=Skupiny'
USUFFIX='ou=Ludia'
MSUFFIX='ou=Pocitace'
GIDSTART=10000
UIDSTART=10000
MIDSTART=10000

Teraz vytvoríme súbor ldapscripts.passwd, aby sme umožnili autentifikovaný prístup k adresáru:

sudo sh -c "echo -n 'tajne' > /etc/ldapscripts/ldapscripts.passwd"
sudo chmod 400 /etc/ldapscripts/ldapscripts.passwd
[Note]

Slovo “tajne” nahraďte aktuálnym heslom LDAP administrátora.

Odteraz sú skripty ldapscripts pripravené pomôcť nám pri správe adresára. Nasledujúce príklady hovoria o tom, ako sa skripty používajú:

  • Vytvorenie nového používateľa:
    sudo ldapadduser juro pokus
    Tento príkaz vytvorí používateľa s uid juro a nastaví jeho hlavnú skupinu (gid) na pokus
  • Zmena hesla:
    sudo ldapsetpasswd juro
    Changing password for user uid=juro,ou=Ludia,dc=nieco,dc=sk
    New Password:
    New Password (verify):
  • Odstránenie používateľa:
    sudo ldapdeleteuser juro
  • Pridanie skupiny:
    sudo ldapaddgroup qa
  • Odstránenie skupiny:
    sudo ldapdeletegroup qa
  • Pridanie používateľa do skupiny:
    sudo ldapaddusertogroup juro qa
    Teraz sa môžeme presvedčiť, že atribút memberUid skupiny qa bude obsahovať hodnotu juro.
  • Odstránenie používateľa zo skupiny:
    sudo ldapdeleteuserfromgroup juro qa
    Z atribútu memberUid skupiny qa by mal byť juro teraz odstránený.
  • Skript ldapmodifyuser umožňuje pridať, odstrániť alebo nahradiť atribúty používateľa. Skript používa rovnakú syntax ako nástroj ldapmodify. Napríklad:
    sudo ldapmodifyuser juro

    # About to modify the following entry :
    dn: uid=juro,ou=Ludia,dc=nieco,dc=sk
    objectClass: account
    objectClass: posixAccount
    cn: juro
    uid: juro
    uidNumber: 1001
    gidNumber: 1001
    homeDirectory: /home/juro
    loginShell: /bin/bash
    gecos: juro
    description: User account
    userPassword:: e1NTSEF9eXFsTFcyWlhwWkF1eGUybVdFWHZKRzJVMjFTSG9vcHk=

    # Enter your modifications here, end with CTRL-D.
    dn: uid=juro,ou=Ludia,dc=nieco,dc=sk

    replace: gecos
    gecos: Juraj Jánošík

    Atribút gecos by mal mať teraz hodnotu “Juraj Jánošík”.
  • Ďalšou obrovskou výhodou balíka ldapscripts je využívanie systémových šablón. Šablóny umožňujú prispôsobiť atribúty používateľa, skupiny a počítača. Ak chceme napríklad použiť šablónu user, otvoríme súbor /etc/ldapscripts/ldapscripts.conf a pridáme riadok:
    UTEMPLATE="/etc/ldapscripts/ldapadduser.template"
    Vzorové šablóny sa nachádzajú v priečinku /etc/ldapscripts. Skopírujeme súbor  ldapadduser.template.sample do /etc/ldapscripts/ldapadduser.template:
    sudo cp /etc/ldapscripts/ldapadduser.template.sample /etc/ldapscripts/ldapadduser.template
    Otvoríme novú šablónu a upravíme príslušné atribúty. Nasledujúca šablóna slúži na vytváranie nových používateľov s prednastaveným atribútom objectClass na hodnotu inetOrgPerson:
    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: User account
    title: Employee
    Všimnime si použitie <otázky> pre cn hodnoty. Použitím <otázky> prinútime nástroj ldapadduser aby sa opýtal na hodnotu atribútu pri vytváraní používateľa.

Existuje viac užitočných skriptov. Ak chceme zobraziť ich zoznam, zadáme príkaz: dpkg -L ldapscripts | grep bin

Zdroje

  • Viac informácii je na stránke OpenLDAP Home Page
  • Možte si tiež pozrieť slovenský preklad domovskej stránky OpenLDAP
  • Aj napriek svojmu veku je významným zdrojom podrobných informácii o LDAP O'Reillyho LDAP System Administration
  • Kniha vydavateľstva Packt - Mastering OpenLDAP je skvelou príručkou, ktorá obsahuje informácie o novších verziách OpenLDAP.
  • Viac informácii o auth-client-config je na man stránke: man auth-client-config.
  • Ďalšie detaily o balíku ldapscripts sú na man stránkach: man ldapscripts, man ldapadduser, man ldapaddgroup, etď.

Samba a LDAP

Táto časť hovorí o tom, ako nakonfigurovať systém Samba tak, aby na autentifikáciu používal informácie o kontách používateľov, skupín a počítačov z adresára LDAP. Predpoklad je, že už máme funkčnú inštaláciu adresára OpenLDAP a že server je nastavený tak, aby adresár využíval pri autentifikácii. Viac informácií o nastavovaní OpenLDAP nájdeme v častiach “OpenLDAP Server” a “LDAP autentifikácia”. Viac informácií o inštalácii a konfigurácii servera Samba sa nachádza v kapitole Sieť Windows.

Inštalácia

Na prepojenie systému Samba s adresárom LDAP sú potrebné tri balíky: samba, samba-doc a smbldap-tools. Nainštalujeme ich zadaním nasledujúceho príkazu:

sudo apt-get install samba samba-doc smbldap-tools

Presnejšie povedané, balík smbldap-tools nepotrebujeme, ale namiesto neho by sme museli použiť iný balík alebo vlastné skripty, aby sme mohli spravovať kontá používateľov, skupín a počítačov.

Konfigurácia OpenLDAP

Aby Samba mohla použiť OpenLDAP ako pozadie pre autentifikáciu, k používateľským objektom v adresári je potrebné pridať ďalšie atribúty. V tejto časti predpokladáme, že chceme systém Samba nastaviť ako tzv. radič domény Windows NT a že chceme podľa toho pridať príslušné objekty a atribúty do adresára LDAP.

  • Atribúty systému Samba sú definované v súbore schémy samba.schema, ktorá je súčasťou balíka samba-doc. Súbor schémy je potrebné rozzipovať a skopírovať do priečinka /etc/ldap/schema. Do príkazového riadka teda zadajme:
    sudo cp /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz /etc/ldap/schema/
    sudo gzip -d /etc/ldap/schema/samba.schema.gz

  • Schému samba je potrebné pridať do vetvy cn=config. Postup, ako pridať novú schému do slapd, je detailne popísaný v časti “Konfigurácia”.
    1. Najskôr vytvoríme konfiguračný súbor, ktorý pomenujeme schema_convert.conf alebo iným viacvravnejším názvom a vložíme 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/samba.schema
    2. 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}samba,cn=schema,cn=config" > /tmp/cn=samba.ldif
      
      Ak by sme použili iné meno súboru a cestu k priečinku, je potrebné ich zmeniť aj v predchádzajúcom príkaze.
    3. Otvoríme vygenerovaný súbor /tmp/cn=samba.ldif, zmeníme nasledujúce atribúty:
      dn: cn=samba,cn=schema,cn=config
      ...
      cn: samba
      a odstránime nasledujúce riadky z konca súboru:
      structuralObjectClass: olcSchemaConfig
      entryUUID: b53b75ca-083f-102d-9fff-2f64fd123c95
      creatorsName: cn=config
      createTimestamp: 20080827045234Z
      entryCSN: 20080827045234.341425Z#000000#000#000000
      modifiersName: cn=config
      modifyTimestamp: 20080827045234Z
      [Note]

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

    4. Nakoniec pomocou nástroja ldapadd pridáme novú schému do adresára:
      ldapadd -x -D cn=admin,cn=config -W -f /tmp/cn=samba.ldif
      

    Teraz by sme mali mať vo vetve cn=config záznam dn: cn={X}misc,cn=schema,cn=config, kde "X" poradové číslo sekvenčnej schémy.

  • Nasledujúce riadky nakopírujeme do súboru samba_indexes.ldif:
    dn: olcDatabase={1}hdb,cn=config
    changetype: modify
    add: olcDbIndex
    olcDbIndex: uidNumber eq
    olcDbIndex: gidNumber eq
    olcDbIndex: loginShell eq
    olcDbIndex: uid eq,pres,sub
    olcDbIndex: memberUid eq,pres,sub
    olcDbIndex: uniqueMember eq,pres
    olcDbIndex: sambaSID eq
    olcDbIndex: sambaPrimaryGroupSID eq
    olcDbIndex: sambaGroupType eq
    olcDbIndex: sambaSIDList eq
    olcDbIndex: sambaDomainName eq
    olcDbIndex: default sub
    Pomocou nástroja ldapmodify načítame nové indexy:
    ldapmodify -x -D cn=admin,cn=config -W -f samba_indexes.ldif
    Ak všetko prebehne dobre, môžeme si nové indexy prezrieť pomocou ldapsearch:
    ldapsearch -xLLL -D cn=admin,cn=config -x -b cn=config -W olcDatabase={1}hdb
  • Ako ďalšie nakonfigurujeme balík smbldap-tools, aby bol v súlade s naším rozhraním. Balík je dodávaný spolu s konfiguračným skriptom, ktorý sa nás bude pýtať na potrebné nastavenia. Ak chceme skript spustiť, zadáme:
    sudo gzip -d /usr/share/doc/smbldap-tools/configure.pl.gz
    sudo perl /usr/share/doc/smbldap-tools/configure.pl

    Keď odpovieme na všetky otázky, zapíšu sa do súborov /etc/smbldap-tools/smbldap.conf a /etc/smbldap-tools/smbldap_bind.conf. Tieto súbory sú generované konfiguračnými skriptami, takže ak sa pomýlime, niekedy je jednoduchšie opraviť nastavenie v súboroch, ako spúšťať skript odznova.
  • Skript smbldap-populate pridá potrebných používateľov, skupiny a LDAP objekty potrebné pre systém Samba. Pred tým, ako spustíme tento príkaz, môžeme si pomocou slapcat odzálohovať súbor LDAP Data Interchange Format (LDIF):
    sudo slapcat -l backup.ldif
  • Po dokončení zálohovania môžeme spustiť smbldap-populate zadaním príkazu:
    sudo smbldap-populate
    [Note]

    LDIF súbor obsahujúci nové objekty systému Samba môžete vytvoriť spustením príkazu sudo smbldap-populate -e samba.ldif. V tomto súbore sa môžete pozrieť na vykonané zmeny a uistiť sa, či je všetko správne.

Náš LDAP adresár teraz obsahuje všetky potrebné informácie na to, aby mohol autentifikovať používateľov systému Samba.

Konfigurácia systému Samba

Existuje viacero spôsobov, akými sa dá nakonfigurovať Samba. Viac informácii o najčastejších spôsoboch sa dozvieme v časti Sieť Windows. Ak chceme nastaviť systém Samba tak, aby používal LDAP, otvoríme hlavný konfiguračný súbor systému Samba /etc/samba/smb.conf zakomentujeme možnosť passdb backend a pridáme nasledujúce riadky:

#   passdb backend = tdbsam

# LDAP Settings
passdb backend = ldapsam:ldap://hostname
ldap suffix = dc=nieco,dc=sk
ldap user suffix = ou=Ludia
ldap group suffix = ou=Skupiny
ldap machine suffix = ou=Pocitace
ldap idmap suffix = ou=Idmap
ldap admin dn = cn=admin,dc=nieco,dc=sk
ldap ssl = start tls
ldap passwd sync = yes
...
add machine script = sudo /usr/sbin/smbldap-useradd -t 0 -w "%u"

Aby sa nové nastavenia prejavili, reštartujeme službu samba:

sudo /etc/init.d/samba restart

Teraz Samba potrebuje vedieť, aké je heslo administrátora LDAP. Do príkazového riadka zadáme:

sudo smbpasswd -w tajne
[Note]

Slovo tajne nahraďte heslom LDAP administrátora.

Ak už v adresári LDAP máme vložených používateľov a chceme, aby sa vedeli autentifikovať v systéme Samba, je potrebné vyplniť niekoľko Samba atribútov, ktoré sú zadefinované v súbore samba.schema. Samba atribúty k existujúcim používateľom pridáme pomocou nástroja smbpasswd, tak že použijeme používateľské meno aktuálneho používateľa:

sudo smbpasswd -a menopouzivatela

Po spustení nástroja bude potrebné zadať heslo používateľa.

Ak chceme pridať nové kontá používateľov, skupín a počítačov. použijeme nástroje balíčka smbldap-tools. Tu je niekoľko príkladov:

  • Nového používateľa do adresára LDAP pridáme cez Samba atribúty zadaním nasledujúceho príkazu, v ktorom nahradíme menopouzivatela aktuálnym menom používateľa:
    sudo smbldap-useradd -a -P menopouzivatela
    Prepínač -a pridá Samba atribúty a prepínač -P spustí nástroj smbldap-passwd po tom, ako je používateľ vytvorený a umožní nám zadať heslo pre používateľa.
  • Ak chceme používateľa z adresára odstrániť, zadáme:
    sudo smbldap-userdel menopouzivatela
    Nástroj smbldap-userdel má aj prepínač -r. ktorý súčasne odstráni aj domovský priečinok používateľa.
  • Ak chceme pridať skupinu, použijeme smbldap-groupadd a nahradíme menoskupiny prislúchajúcim menom skupiny:
    sudo smbldap-groupadd -a menoskupiny
    Podobne aj pri smbldap-useradd prepínač -a pridá Samba atribúty.
  • Ak chceme pridať používateľa do skupiny, použijeme smbldap-groupmod:
    sudo smbldap-groupmod -m menopouzivatela menoskupiny
    Nesmieme zabudnúť menopouzivatela nahradiť menom skutočného používateľa. Prepínač -m umožňuje pridať viacero používateľov oddelených čiarkami naraz.
  • smbldap-groupmod sa používa na odstránenie používateľa zo skupiny:
    sudo smbldap-groupmod -x menopouzivatela menoskupiny
  • Pomocou nástroja smbldap-useradd môžeme pridať do systému Samba aj účet pre počítač:
    sudo smbldap-useradd -t 0 -w menopocitaca
    V príkaze nahradíme menopocitaca skutočným menom pracovnej stanice. Prepínač -t 0 vytvorí konto počítača bez zdržania, zatiaľčo prepínač -w hovorí o tom, že sa jedná o účet počítača. Tiež si môžeme všimnúť, že sa v súbore /etc/samba/smb.conf zmenilo nastavenie add machine script tak, aby sa použil nástroj smbldap-useradd.

V balíku smbldap-tools sú aj ďalšie užitočné nástroje. Viac sa o nich dozvieme na man stránkach.

Zdroje

  • Existuje viacero stránok, kde sú zdokumentované LDAP a Samba. Napríklad Samba HOWTO Collection.
  • Konkrétne odporúčame passdb section.
  • Ďalšia výborná stránka je Samba OpenLDAP HOWTO.
  • Viac informácii o smbldap-tools opäť nájdete na man stránkach: man smbldap-useradd, man smbldap-groupadd, man smbldap-populate, atď.
  • Okrem toho je tu ešte zoznam článkov na stránke Ubuntu wiki.

Kerberos

Kerberos je sieťový autentifikačný systém založený na princípe dôveryhodnej tretej strany. Na zvyšných dvoch stranách sa nachádza používateľ a služba, kvôli ktorej sa chce používateľ autentifikovať. Nie všetky služby a aplikácie môžu použiť Kerberos, ale pre tie, ktoré môžu, Kerberos ponúkne sieťové rozhranie, ktoré je o jeden krok bližšie k tzv. Single Sign On (SSO) - jeden podpis na všetko.

Táto časť hovorí o inštalácii a konfigurácii Kerberos servera a uvádza i niekoľko príkladov konfigurácie klienta.

Prehľad

Ak ešte Kerberos nepoznáme, bude dobré sa najskôr oboznámiť s niektorými dôležitými pojmami skôr, ako začneme nastavovať server Kerberos. Väčšina pojmov je odvodená od vecí, ktoré sú podobné v iných rozhraniach:

  • Principal (splnomocniteľ): všetci používatelia, počítače a služby poskytované servermi musia byť zadefinované ako splnomocnitelia systému Kerberos.
  • Instances (rozhrania): používajú sa na obsluhu splnomocniteľov a pre špeciálnych administratívnych splnomocniteľov.
  • Realms (pôsobiská): jedinečná sféra pôsobenia inštalácie systému Kerberos. Zvyčajne to je DNS doména prevedená na veľké písmená (NIECO.SK).
  • Key Distribution Center (distribučné centrum kľúčov): (KDC) sa skladá z troch častí, databázy všetkých splnomocniteľov, autentifikačného servera a servera poskytujúceho vstupenky. Pre každé pôsobisko musí existovať aspoň jedno KDC.
  • Ticket Granting Ticket (vstupenka poskytujúca vstupenku): je poskytovaný Autentifikačným serverom (AS). Ticket Granting Ticket (TGT) je zašifrované heslo používateľa, ktoré je známe iba používateľovi a KDC.
  • Ticket Granting Server (server poskytujúci vstupenku): (TGS) služba poskytujúca vstupenky klientom, ktorí o ne žiadajú.
  • Tickets (vstupenky): potvrdzujú identitu dvoch splnomocniteľov. Prvým splnomocniteľom - používateľom a druhým splnomocniteľom - službou, ktorú používateľ chce použiť. Vstupenky vytvoria šifrovací kľúč, ktorý bude použitý počas autentifikovaného pripojenia.
  • Keytab Files (súbory tabuliek kľúčov): sú súbory extrahované KDC databázy splnomocniteľov a obsahujú zašifrované kľúče pre služby a stanice.

Aby sme jednotlivé pojmy dali do súvisu, vedzme, že pôsobisko - Realm má najmenej jedno distribučné centrum kľúčov KDC (odporúčajú sa však dve kvôli redundacii), ktoré obsahuje a databázu splnomocniteľov - Principal. Keď sa používateľ - splnomocniteľ prihlasuje k pracovnej stanici, ktorá je nakonfigurovaná na autentifikáciu pomocou systému Kerberos, KDC vydá vstupenku poskytujúcu vstupenku (TGT), ktorá obsahuje zašifrované heslo. Ak sa heslo zhoduje s tým, ktoré zadal používateľ, používateľ je autentifikovaný a môže dostať vstupenky od servera poskytujúceho vstupenky (TGS). Vstupenky tejto služby umožnia používateľovi autentifikovať sa do ostatných služieb bez ďalšieho zadávania používateľského mena a hesla.

Kerberos Server

Inštalácia

Pred tým, ako sa pustíme do inštalácie servera Kerberos, je potrebné mať pre našu doménu správne nakonfigurovaný DNS server. Pretože pôsobisko systému Kerberos by sa podľa zvyklostí malo zhodovať s menom domény, budeme používať doménu nieco.sk, ktorej konfigurácia je popísaná v časti “Primárny hlavný menný server”.

Kerberos je protokol citlivý na čas. Preto, ak je časový rozdiel medzi lokálnym systémom a počítačom klienta väčší ako päť minút (predvolená hodnota), pracovná stanica sa nebude môcť autentifikovať. Aby sme tomuto problému zabránili, je potrebné zosynchronizovať čas použitím protokolu Network Time Protocol (NTP). Viac informácii o NTP sa nachádza v časti “Synchronizácia času pomocou NTP”.

Prvým krokom pri inštalácii Pôsobiska systému Kerberos je nainštalovanie balíkov krb5-kdc a krb5-admin-server. V príkazovom riadku zadáme:

sudo apt-get install krb5-kdc krb5-admin-server

Na konci inštalácie bude potrebné zadať názov servera Kerberos a názov Admin servera, ktoré môžu, ale nemusia byť pre pôsobisko zhodné.

Ako ďalšie vytvoríme nové pôsobisko pomocou nástroja kdb5_newrealm:

sudo krb5_newrealm

Konfigurácia

Parametre, ktoré sme zadali pri inštalácii, sa uložili do konfiguračného súboru /etc/krb5.conf. Ak budeme chcieť zmeniť nastavenia Distribučného centra kľúčov (KDC), jednoducho zmeníme nastavenia v súbore a reštartujeme démon krb5-kdc.

  1. Teraz, keď je KDC spustené, je potrebné vytvoriť používateľa s administrátorskými právami. Odporúčame použiť iné meno, ako bežne používate. Použijeme na to nástroj kadmin.local:
    sudo kadmin.local
    Authenticating as principal root/admin@NIECO.SK with password.
    kadmin.local:
    addprinc stefan/admin

    WARNING: no policy specified for stefan/admin@NIECO.SK; defaulting to no policy
    Enter password for principal "stefan/admin@NIECO.SK":
    Re-enter password for principal "stefan/admin@NIECO.SK":
    Principal "stefan/admin@NIECO.SK" created.
    kadmin.local:
    quit
    V predchádzajúcom príklade je ako Splnomocniteľ - Principal nastavený stefan, /admin je Rozhranie - Instance a @NIECO.SK predstavuje pôsobisko. "Každodenný" splnomocniteľ bude stefan@NIECO.SK a mal by mať iba normálne používateľské práva.
    [Note]

    Nahraďte NIECO.SK a stefan, pôsobiskom a menom používateľa, ktoré chcete použiť.

  2. Teraz novému používateľovi pridelíme práva (ACL). Práva sú nastavené v súbore /etc/krb5kdc/kadm5.acl:
    stefan/admin@NIECO.SK        *
    Tento záznam poskytne používateľovi stefan/admin schopnosť vykonávať ľubovoľnú operácie so všetkými splnomocniteľmi v pôsobisku.
  3. Aby sa nové ACL oprávnenia prejavili, je potrebné reštartovať krb5-admin-server :
    sudo /etc/init.d/krb5-admin-server restart
  4. Novovytvoreného splnomocniteľa môžeme otestovať pomocou nástroja kinit:
    kinit stefan/admin
    stefan/admin@NIECO.SK's Password:
    Po zadaní hesla, použijeme nástroj  klist, ktorý zobrazí informácie o TGT:
    klist
    Credentials cache: FILE:/tmp/krb5cc_1000
    Principal: stefan/admin@NIECO.SK

    Issued Expires Principal
    Jul 13 17:53:34 Jul 14 03:53:34 krbtgt/NIECO.SK@NIECO.SK
    Pre KDC je potrebné pridať záznam aj do súboru /etc/hosts. Napríklad:
    192.168.0.1   kdc01.nieco.sk       kdc01
    Adresu 192.168.0.1 nahradíme IP adresou nášho KDC.
  5. Aby klienti vedeli nájsť KDC v pôsobisku, je potrebné pridať niekoľko DNS SRV záznamov. Pridáme ich do súboru /etc/named/db.nieco.sk:
    _kerberos._udp.NIECO.SK.     IN SRV 1  0 88  kdc01.nieco.sk.
    _kerberos._tcp.NIECO.SK. IN SRV 1 0 88 kdc01.nieco.sk.
    _kerberos._udp.NIECO.SK. IN SRV 10 0 88 kdc02.nieco.sk.
    _kerberos._tcp.NIECO.SK. IN SRV 10 0 88 kdc02.nieco.sk.
    _kerberos-adm._tcp.NIECO.SK. IN SRV 1 0 749 kdc01.nieco.sk.
    _kpasswd._udp.NIECO.SK. IN SRV 1 0 464 kdc01.nieco.sk.
    [Note]

    Nahraďte NIECO.SK, kdc01 a kdc02 názvom domény a názvami primárneho a sekundárneho KDC.

    Podrobné inštrukcie o nastavovaní DNS nájdete v kapitole Služba prekladu doménových mien (DNS).

Nové pôsobisko systému Kerberos je teraz pripravené na autetifikovanie klientov.

Sekundárny KDC

Ak už máme funkčné jedno Distribučné centrum kľúčov (KDC), je dobrým zvykom vytvoriť aj sekundárne KDC pre prípad, že primárne sa stane nedostupným.

  1. Najskôr nainštalujeme balíky. Pri otázke inštalátora na Kerberos server a Admin server zadáme meno primárneho KDC:
    sudo apt-get install krb5-kdc krb5-admin-server
  2. Po nainštalovaní balíkov vytvoríme splnomocniteľa "host" (stanica) pre sekundárny KDC. V príkazovom riadku zadáme:
    kadmin -q "addprinc -randkey host/kdc02.nieco.sk"
    [Note]

    Vždy po zadaní príkazu kadmin bude potrebné zadať heslo pre pouzivatel/admin@NIECO.SK.

  3. Extrahujeme súbor tabuľky kľúčov:
    kadmin -q "ktadd -k keytab.kdc02 host/kdc02.nieco.sk"
  4. Teraz by v priečinku kde sa nachádzame mal pribudnúť súbor keytab.kdc02. Presunieme ho do priečinka /etc/krb5.keytab:
    sudo mv keytab.kdc02 /etc/krb5.keytab
    [Note]

    Ak ste použili inú cestu k súboru keytab.kdc02, použite tú.

    Z tabuľky kľúčov sa pomocou nástroja klist dá vypísať aj zoznam splnomocniteľov, čo môže byť užitočné pri riešení problémov:
    sudo klist -k /etc/krb5.keytab
  5. Ako ďalšie je potrebné vytvoriť súbor kpropd.acl, ktorý bude obsahovať zoznam všetkých KDC v pôsobisku. Na oboch serveroch - primárnom aj sekundárnom, vytvoríme súbor /etc/krb5kdc/kpropd.acl s takýmto obsahom:
    host/kdc01.nieco.sk@NIECO.SK
    host/kdc02.nieco.sk@NIECO.SK
  6. Vytvoríme databázu na sekundárnom KDC:
    sudo kdb5_util -s create
  7. Teraz spustíme démona kpropd, ktorý bude načúvať pripojeniam nástroja kprop. Nástroj kprop sa používa na prenos vyexportovaných súborov:
    sudo kpropd -S
  8. V príkazovom riadku primárneho KDC, vyexportujeme súbor so splnomocniteľmi:
    sudo kdb5_util dump /var/lib/krb5kdc/dump
  9. Vyextrahujeme súbor tabuľky kľúčov primárneho KDC a skopírujeme ho do /etc/krb5.keytab:
    kadmin -q "ktadd -k keytab.kdc01 host/kdc01.nieco.sk"
    sudo mv keytab.kdc01 /etc/kr5b.keytab
    [Note]

    Pred extrahovaním tabuľky kľúčov sa uistite, či existuje host pre kdc01.nieco.sk.

  10. Nástroj kprop vloží databázu do sekundárneho KDC:
    sudo kprop -r NIECO.SK -f /var/lib/krb5kdc/dump kdc02.nieco.sk
    [Note]

    Ak operácia prebehne správne, program vypíše SUCCEEDED. Ak nastane chyba, viac informácii sa dozviete v súbore /var/log/syslog na sekundárnom KDC.

    Môžeme tiež naplánovať úlohu pre cron, ktorá bude periodicky aktualizovať databázu sekundárneho KDC. Napríklad, ak chceme aktualizáciu vykonávať každú hodinu, pridáme do súboru /etc/crontab nasledujúce riadky:
    # m h  dom mon dow   command
    0 * * * * /usr/sbin/kdb5_util dump /var/lib/krb5kdc/dump && /usr/sbin/kprop -r NIECO.SK -f /var/lib/krb5kdc/dump kdc02.nieco.sk
  11. Vrátime sa na sekundárne KDC, kde vytvoríme súbor stash, ktorý bude obsahovať hlavný kľúč systému Kerberos:
    sudo kdb5_util stash
  12. Nakoniec spustíme démon krb5-kdc na sekundárnom KDC:
    sudo /etc/init.d/krb5-kdc start

Sekundárne KDC by teraz malo byť schopné vydávať vstupenky pre pôsobisko. Môžeme to otestovať stopnutím démona krb5-kdc na primárnom KDC a následným požiadaním o vstupenku pomocou nástroja kinit. Ak sme všetko urobili správne, mala by nám byť vstupenka poskytnutá zo sekundárneho KDC.

Linuxový klient systému Kerberos

V tejto časti si povieme, ako nastaviť operačný systém Linux tak, aby bol klientom systému Kerberos. To umožní používateľovi, ktorý sa úspešne do systému prihlási, prístup ku všetkým kerberizovaným službám bez toho, aby musel zakaždým zadať heslo.

Inštalácia

Aby bolo možné prihlásiť sa do pôsobiska systému Kerberos, sú potrebné balíky krb5-user a libpam-krb5 spolu s ďalšími, ktoré síce nie sú nutné, ale uľahčia nám prácu. Ak chceme tieto balíky nainštalovať, do príkazového riadka zadáme:

sudo apt-get install krb5-user libpam-krb5 libpam-ccreds auth-client-config

Balík auth-client-config umožňuje jednoduchú konfiguráciu PAM pre autentifikáciu z viacerých zdrojov a libpam-ccreds dočasne uchováva údaje o prihlásení, ktoré nám umožnia prihlásiť sa, aj keď je distribučné centrum kľúčov (KDC) nedostupné. Tento balík je tiež užitočný pre notebooky, ktoré sa musia vedieť prihlásiť do firemnej siete pomocou systému Kerberos, ale musia používateľovi umožniť prístup aj vtedy, ak nie sú pripojené do siete.

Konfigurácia

Ak chceme nastaviť klienta, zadáme:

sudo dpkg-reconfigure krb5-config

Pri konfigurácii bude potrebné zadať meno pôsobiska systému Kerberos a ak nemáte nastavené v DNS Kerberos SRV záznamy, bude potrebné zadať i adresu distribučného centra kľúčov (KDC) a adresu Admin servera pôsobiska.

Nástroj dpkg-reconfigure tieto zadané údaje o pôsobisku uloží do súboru /etc/krb5.conf. Záznamy v súbore budú vyzerať asi takto:

[libdefaults]
default_realm = NIECO.SK
...
[realms]
NIECO.SK = }
kdc = 192.168.0.1
admin_server = 192.168.0.1
}

Nastavenie môžeme otestovať požiadaním o vstupenku pomocou nástroja kinit. Napríklad takto:

kinit stefan@NIECO.SK
Password for stefan@NIECO.SK:

Ak nám bude vstupenka poskytnutá, detail môžeme zobraziť pomocou klist:

klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: stefan@NIECO.SK

Valid starting Expires Service principal
07/24/08 05:18:56 07/24/08 15:18:56 krbtgt/NIECO.SK@NIECO.SK
renew until 07/25/08 05:18:57


Kerberos 4 ticket cache: /tmp/tkt1000
klist: You have no tickets cached

Potom použijeme nástroj auth-client-config, ktorým nastavíme modul libpam-krb5, aby žiadal o vstupenku pri prihlasovaní:

sudo auth-client-config -a -p kerberos_example

Teraz by sme po úspešnom prihlásení mali obdržať vstupenku.

Zdroje

  • Viac informácii o systéme Kerberos sa nachádza na stránke MIT Kerberos.
  • Viac podrobností sa nachádza na stránke Ubuntu Wiki Kerberos.
  • Dobrou príručkou o nastavovaní systému Kerberos je O'Reillyho Kerberos: The Definitive Guide.
  • Na niektoré otázky o systéme Kerberos nám určite niekto odpovie aj na IRC kanále #ubuntu-server na Freenode.

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