Kerberose ja OpenLDAP seadistamine

From ICO wiki

Tähelepanu! See artikkel on ikka veel poolik; siit ei saa töötavat süsteemi.

Versioonide ajalugu

0.1 - 18.12.2009 
Lehe struktuuri loomine, esmane nõudmeste ja eelduste määramine
0.2 - 26.01.2010 
Ikka veel poolik tööversioon, kuid paigaldamine, seadistamine, varundamine ja taastamine on jõudnud hakkab looma olekusse; täiesti puudu on testimine.
0.3 - 30.01.2010 
Parandatud ja natuke täiendatud vastavalt diskussiooni lehel toodud soovitustele, kuid ikka veel poolik.
0.4 - 31.01.2010 
Eelkõige on parandatud eelmisesse versiooni alles jäänud vead. Lisatud on mõningate käskude väljundid.

Autor

Kristjan Räts / AK-41

Sissejuhatus

Käesolevas juhendi eesmärk on luua Kerberose ja LDAP vahenditega suhteliselt universaalne baas kasutajate autentimiseks erinevate serverite ja teenuste poolt. Juhend on loodud Debian GNU/Linuxi baasil ja kasutab temaga kaasas olevaid Heimdali ja OpenLDAP pakette.

Kuigi juhend on püütud kirjutada nii, et sellest peaks sobima ka täiesti algajale, tasub lugejal enne siiski veenduda, et ta on suuteline seadistama OpenLDAP-i seadistamine teenuse. Samuti eeldatakse Kerberose ja X.509 sertifikaatide loomise põhitõdede tundmist.

Alljärgnevas eeldatakse, et kõik käsud käivitatakse juurkasutaja (root) õigustes, kui seda ei öelda ilmutatult teisiti.

Paigaldatav ja seadistatav tarkvara

Programm Versioon
Debian 5.0.3
Heimdal 1.2.dfsg.1-2.1
OpenLDAP 2.4.11-1+lenny1
Cyrus SASL2 teek 2.1.22.dfsg1-23+lenny1

Nõuded

  • Luua OpenLDAP ja Heimdali Kerberose baasil toorik, mis sobib muude teenuste autentimise tuumaks.
  • Seadistada Kerberos nii, et ta andmebaas on OpenLDAP serveris.

Terminid ja lühendid

Juhendis on kasutatud järgmiseid mõisteid ja lühendeid.

realm 
haldusüksus, mida kerberose abil hallatakse-kaitstakse. Haldusüksuse moodustavad tavakasutajad, masinad ja nendes töötavad teenused.
principal 
kasutaja, ehk süsteemi tavakasutaja, teenus või masin.
KDC (Key Distribution Center
Kerberose võtmete ja piletite jaotamise teenus
LDAP (Lightweight Directory Access Protocol
lihtne kataloogi pöördusprotokoll. Sõna lihtne (lightweight) on tegelikult ääretult võlts; LDAP on lihtne ainult X.500 DAP protokolliga võrreldes...
mkey (master key
võti, millega krüpteeritakse Kerberose andmebaas
localnet.ee 
fiktiivne domeen, millele luuakse kerberose haldusüksus ja LDAP kataloog.
LOCALNET.EE 
loodava haldusüksuse nimi. Kerberose haldusüksused on harilikult läbivate suurtähtedega, kuid väiketähed on lubatud.
dc=localnet,dc=ee 
LDAP kataloogi juur, mille alla luuakse kõik ülejäänud kataloogi objektid. Ka kataloogi juurt võib muuta, kuid on olemas programme, mis ei tööta muul kujul juurega.
demo.localnet.ee 
server, mis hakkab pakkuma kerberose autentimise ja LDAP kataloogi teenuseid.

Kerberose lühitutvustus

(Järgnev jutt on tõlgitud wikipeediast. Eesti keeles on juttu veel Kuutõrvajas)

Kerberos on arvutivõrgu autentimisprotokoll, mis lubab turvamata võrgus olevatel seadmetel üksteist identifitseerida turvaliselt. Sama nime kannab ka Massachusettsi Tehnoloogia Instituudi poolt loodud tarkvarapakett, mis on vabalt kasutatav.

Kerberos on loodud klient-server mudeli põhjal ja võimaldab vastastikust autentimist - nii kasutaja kui ka server kontrollivad teineteise identiteeti. Kerberose protokolli sõnumid on kaitsud nii pealtkuulamise kui ka korduvkasutamise eest. Protokoll põhineb salajase võtme krüptograafial ja nõuab usaldatavat kolmandat osapoolt. Protokolli on laiendatud toetama avaliku võtme krüptograafiat autenitmise mõnedes faasides.

FIXME: lisa pilt ja seletus kerberose põhikäitumisest


Kasutajate nimetamine kerberose andmebaasis

Kerberose andmebaasis defineeritud kasutajate nimed on kujul prefiks@haldusüksus. Prefiks koosneb põhinimest ja täpsustavast instantsist; neid eraldab kaldkriips (/).

Eelnevalt on kokku lepitud, et kõigi haldusüksuses olevate masinate-seadmete põhinimi on host ja instants masina täispikk nimi. Näiteks serverile demo.localnet.ee vastav kerberose kasutajanimi on host/demo.localnet.ee@LOCALNET.EE.

Analoogne kokkulepe kehtib ka teenuste osas. Siin on põhinimeks teenuse nimi ja instants masina täispikk nimi. Näiteks LDAP teenusele vastav kerberose kasutajanimi serveris demo.localnet.ee on ldap/demo.localnet.ee@LOCALNET.EE.

Paigaldamine

Põhiprogrammid: Heimdal ja OpenLDAP

Paigalda paketid slapd, heimdal-kcm ja heimdal-kdc:

apt-get install slapd heimdal-kcm heimdal-kdc

Lisaks hulgale pakettidele lisatakse süsteemi veel kasutaja ja grupp openldap, mille õigustes hakkab töötama OpenLDAP deemon slapd.

Paketi slapd eelkonfigureerimisel küsitakse LDAP kataloogi administraatori parooli, mis tuleks meelde jätta.

Paketi krb5-config seadistamisel tuletatakse arvuti domeenist automaatselt kerberose vaikimis haldusüksuse nimi (LOCALNET.EE), millele küsitakse võtmete ja paroolivahetuse serverite nimesid. Mõlemal juhul on serveriks demo.localnet.ee.

Heimdali ja OpenLDAP põimimisvahendid: sasl2-bin ja libsasl2-modules-gssapi-heimdal

Paketid sasl2-bin ja libsasl2-modules-gssapi-heimdal sisaldavad vahendeid, mis võimaldavad kokku siduda OpenLDAP ja Heimdali teenused nii, et tekib mõnes mõttes ringsõltuvus LDAP ja Kerberose vahel.

Paigaldamine on lihtne nagu ikka:

apt-get install sasl2-bin libsasl2-modules-gssapi-heimdal

Eelkonfigureerimist ei toimu.

Abiprogrammid: Migration tools, TinyCA2

migrationtools

Paketi migrationtools abil saab luua LDAP kataloogi alglaadimisfaili, mis sisaldab hetkel süsteemi flat-andmebaasides (/etc/passwd, /etc/group, jt.) kirjeldatid kasutajad. teenused, grupid. Lisaks paigaldatakse tänu sõltuvustele veel pakett ldap-utils, milles olevaid utiliite kasutame hiljem testimiseks.

Paketi migrationtools saad paigaldada nii:

apt-get install migrationtools

TinyCA2

OpenLDAP teenuse seadistamisel on vaja luua ka mitmeid sertifikaate. Seda võib tega nii nagu on kirjas artiklis veebiserveri laboris või kasutada mõnda sertifikaatide haldamise programmi. Käesoleva juhendi autorile esimene variant ei meeldi ning soovitab kasutada programmi TinyCA2.

Tähelepanu: tegemist on programmiga, mis töötab X11 keskkonnas, mille paigaldamine serverisse ei ole alati mõttekas tegu. Samuti tasub arvestada sellega, et TinyCA2 hoiab kõiki sertifikaate kasutaja kodukataloogis.

Soovitus: palun paigaldage tegelikuks kasutuseks mõeldud TinyCA2 Internetist võimalikult eraldatud arvutisse.

Paigaldamine

apt-get install tinyca


Seadistamine

TinyCA2

TinyCA2 seadistamine tähendab tegelikult testimiseks mõeldud CA loomist.

  1. Selleks pane programm tööle. Kui menüüst ei leia, siis toksi programmi nimi tinyca2 kas terminali või käivitusdialoogi.
  2. Kui TinyCA2 ei leia käivitamisel ühtegi CA-d, siis pakub ta võimaluse ühe loomiseks. Selleks kuvab ta dialoogi Create CA, mis tuleks täita näiteks nii:
  • Name: localnet.ee
  • Common Name: Testimise CA
  • Country Name: EE
  • Password (2x): testca (mida keerulisem, seda parem)
  • State or Province Name: Harju
  • Locality Name: Tallinn
  • Organization Name: AS localnet.ee
  • Organizational Unit Name: IT
  • eMail Address: testca@localnet.ee
  • Valid for: 3650
  • Keylength: 4096
  • Digest: SHA-1
  1. Kliki nupul "OK"
  2. Avaneb CA seadistamise dialoog. Siin määratakse ära, kuidas antud CA-d kasutada. Tesimiseks sobivad vaikeseaded küll, mistõttu kliki nupul "OK".
  3. Nüüd läheb sõltuvalt masinast ja juhuarvude generaatori koormatusest natuke aega (genereeritakse RSA võtmeid) ning siis antaksegi teada, et CA on loodud.

Sellega on TinyCA2 seadistamine lõppenud.

Järgmisena ekspordime vastloodud CA juursertifikaadi kõigile kättesaadavale kujule faili.

  1. Aktiveeri vahekaart "CA"
  2. Kliki tööriistariba paremalt teisel nupul (disketi pildiga), et avaneks juursertifikaadi eksportimise dialoog
  3. Soovi korral muuda failinimi sobivaks; ära muuda vormingut
  4. Kliki "Save" ja "OK"

Lõpetuseks tee äsja eksporditud sertifikaat kõigile huvilistele kättesaadavaks.

  1. Loo kataloog /etc/ssl/local: mkdir /etc/ssl/local
  2. Kontrolli, et kataloog oleks kõigile loetav: chmod 755 /etc/ssl/local
  3. Kopeeri eelnevalt eksporditud juursertifikaadi fail äsja loodud kataloogi: cp /root/localnet.ee-cacert.pem /etc/ssl/local/cacert.pem
  4. Muuda kopeeritud sertifikaat kõigile ainult loetavaks: chmod 444 /etc/ssl/local/cacert.pem

Kui on soov teha loodud juursertifikaat tuntuks enamikele programmidele, siis tasub mõelda paketi ca-certificates paigaldamisele. See võimaldab vähese vaevaga teha suvalise juursertifikaadi debianiseeritult kõigile kasutatavaks.


Serverisertifikaadi loomine TineCA2 abil

  1. Aktiveeri vahekaart "Requests"
  2. Kliki tööriistariba paremamalt neljandal nupul
  3. Avanes sertifikaadi nõude loomise dialoog, mis täida järgmiselt:
    1. Common Name: serveri.täispikk.nimi.domeeniga.ee
    2. eMail Address: (täitmine ei ole vajalik)
    3. Password (2x): mida keerulisem, seda parem (seda on vaja sertifikaadi võtme eksportimisel faili)
    4. Organizational Unit Name: siia sobib kirjutada seda, milleks sertifikaati kasutatakse
    5. Ülejäänud väljade väärtust ei ole vaja muuta
  4. Kliki "OK", mille tulemusel lisatakse sertifikaadi nõue nimekirja
  5. Vali nimekirjast loodud nõue
  6. Kliki tööriistariba paremamalt teisel nupul
  7. Avaneb nõude allkirjastamise dialoog, mis täida järgmiselt:
    1. CA Password: testca
    2. Ülejäänud väljade väärtust ei ole vaja muuta
  8. Kliki OK, mille tulemusel sertifikaat allkirjastatakse
  9. Aktiveeri vahekaart "Keys"
  10. Otsi üles äsjaloodud sertifikaadi võti ja aktiveeri see hiireklikiga
  11. Kliki tööriistariba paremamalt teisel nupul
  12. Avaneb sertifikaadi võtme eksportimise dialoog, mis täida järgmiselt:
    1. File: muuda ära, kui vaikeväärtus ei meeldi või kattub olemasolevaga
    2. Export Format: PEM (Key)
    3. Without Passphrase: Yes
    4. Include Certificate: No
  13. Kliki "Save"
  14. Aktiveeri vahekaart "Certificates"
  15. Otsi üles allkirjastatud sertifikaat ja aktiveeri see hiireklikiga
  16. Kliki tööriistariba paremamalt neljandal nupul
  17. Avaneb sertifikaadi eksportimise dialoog, mis täida järgmiselt
    1. File: muuda ära, kui vaikeväärtus ei meeldi või kattub olemasolevaga
    2. Export Format: PEM (certificate)
    3. Include Key: No
    4. Include Fingerprint: No
  18. Kliki "Save"

Migrationtools

Paketi konfiguratsioonifail on /etc/migrationtools/migrate_common.ph.

Muuda selles konstantide DEFAULT_MAIL_DOMAIN ja DEFAULT_BASE väärtused nii:

  • $DEFAULT_MAIL_DOMAIN = "localnet.ee";
  • $DEFAULT_BASE = "dc=localnet,dc=ee";

Kustuta kommentaarimärk järgmiste ridade eest:

  • $IGNORE_UID_BELOW = 1000;
  • $IGNORE_GID_BELOW = 100;
  • $IGNORE_UID_ABOVE = 9999;
  • $IGNORE_GID_ABOVE = 9999;

Allpool eeldatakse, et muudeti ka järgmised read, kuid see on otseselt maitseasi.

  • $NAMINGCONTEXT{'passwd'} = "ou=Users"; # oli: "ou=People"
  • $NAMINGCONTEXT{'group'} = "ou=Groups"; # oli: "ou=Group"

OpenLDAP

LDAP teenuse peatamine

Peale paigaldamist LDAP teenus küll töötab, kuid kahjuks vale seadistusega. Seetõttu tuleb ta seisata.

/etc/init.d/slapd stop

LDAP teenuse käivitamise seadistamine

Järgmisena muuda faili /etc/default/slapd.

Otsi faili keskelt üles rida, mis algab #SLAPD_SERVICES= ja muuda ta järgmiseks

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

Selle muudatuse tulemusel hakkab slapd deemon järgmisel käivitamisel teenindama sissetulevaid ühendusi nii LDAP teenuse tavalisel pordil (389) kui ka SSL krüpteeringuga pordil (636) ning lõpetuseks veel POSIXi kohalikust protsessidevahelise suhtluse soklist. (Kahte esimest meetodit saab kasutada võrgust, kolmandat aga ainult kohalikust arvutist.)

Järgmisena otsi faili lõpust üles rida, mis algab #export KRB5_KTNAME= ja muuda ta järgmiseks

export KRB5_KTNAME=/etc/ldap/ldap.keytab

See muudatus ütleb LDAP deemonile, et SASL teegi GSSAPI moodul peab Kerberose võtmeid otsima failist /etc/ldap/ldap.keytab.

Ja ongi kõik. Lõppkujul fail peaks sisaldama järgmist informatsiooni. Lühiduse mõttes ei ole siin kommentaare ja tühje ridu; muudetud read on rasvasemas kirjas.

SLAPD_CONF=
SLAPD_USER="openldap"
SLAPD_GROUP="openldap"
SLAPD_PIDFILE=
SLAPD_SERVICES="ldap:/// ldaps:/// ldapi:///"
SLAPD_SENTINEL_FILE=/etc/ldap/noslapd
export KRB5_KTNAME=/etc/ldap/ldap.keytab
SLAPD_OPTIONS=""

LDAP teenuse seadistamine

Nüüd ava tekstiredaktoris OpenLDAP deemoni seadistuste fail /etc/ldap/slapd.conf.

Üsna selle faili alguses on 4-5 include-lauset, mille taha lisa veel üks

include   /etc/ldap/schema/hdb.schema

Failis /etc/ldap/schema/hdb.schema on kirjeldatud LDAP objektid ja atribuudid, mis võimaldavad Heimdali deemonitel kasutada LDAP kataloogi oma andmebaasina.

Umbes 15 rida allpool on slapd laiendusmoodulite konfigureerimine (moduleload). Lisa sinna rida

moduleload   syncprov

See võimaldab slapdil olla efektiivne replitseerimise allikas. Rida ei ole vajalik, kui repliteerimist ei planeerita.

Veel ~kümmekond rida allpool on koht, kus hakatakse konfigreerima andmebaaside mootoreid (backend). Enne vastavat sektsiooni on sobiv koht, kuhu lisada CA ja teenuse sertifikaadid ja võtmed. Lisa read

TLSCACertificateFile   /etc/ssl/local/cacert.pem
TLSCertificateFile     /etc/ssl/local/slapd_demo.localnet.ee_cert.pem
TLSCertificateKeyFile  /etc/ssl/local/slapd_demo.localnet.ee_key.pem

TLSVerifyClient        allow

Viimane rida lubab LDAP teenusel nõuda ühenduse alguses kliendilt ta sertifikaati, et olla kindel ka kliendi identiteedis. Kui klient sertifikaati ei paku, või esitab vale või vigase sertifikaadi, siis jätkatakse ühendust nii nagu kliendisertifikaati ei olekski esitatud.

Järgnevalt lisa autentimisraamistiku tõlkereegel, mis tõlgib SASL'i pakutud kasutajanime OpenLDAP'le arusaadavaks. OpenLDAP dokumentatsioonis on öeldud, et asendamise tulemusel tekkivat objekti ei pea kataloogis eksisteerima.

authz-regexp "gidNumber=.*\\\+uidNumber=0,cn=peercred,cn=external,cn=auth"
       "uid=heimdal,dc=services,dc=localnet,dc=ee"

Kuna Heimdali ja OpenLDAP hakkavad omavahel suhtlema POSIX IPC sokli kaudu, siis on vaja lisa ka järgmine rida, mille mõte on keelata suhtluskanalil kasutatav turvalisus.

localSSF 0

Sellega on slapd globaalne konfiguratsioon valmis. Järgnev kehtib ainult ühe konkreetse kataloogi kohta.

Lisame LDAP administraatorile ajutiselt parooli. Kui kõik seadistatavad komponendid töötavad korralikult, on õigem jätta autentimine SASLi teegi abil kerberose hooleks. Otsi üles rida rootdn ja lisa peale seda järgmine rida:

rootpw  {SSHA}qsOaO/rjPUXDhBctf8xPO4pLm5IUmuN0

Siin on parool demo salted SSH-1 räsina; selle tekitab käsk slappasswd.

Kataloogi replitseerimise seadistamine on valikuline, kuid soovitatav. Replitseerimise lubamiseks lisa read

overlay                 syncprov
syncprov-checkpoint     100 10
syncprov-sessionlog     100

Esimene rida kolmest kohustab slapdi genereerima kõigile kataloogis olevatele objektidele replitseerimisel kasutatavad atribuudid entryCSN ja entryUUID. Ülejäänud kaks seadistavad replitsserimisinfo uuendamist.

Järgmisena täiendame indekseeritavate atribuutide valikut, sest indekseerimata atribuutide küsimine on suure kattaloogi puhul suhteliselt aeglane tegevus ja vaikimisi luuakse indeks ainult atribuudile objectClass. Defineeri indekseerimiseks täiendavad atribuudid:

index   entryCSN		eq
index   entryUUID		eq
index   uid			eq
index   uidNumber		eq
index   gidNumber		eq
index   memberUid		eq
index   krb5PrincipalName	eq
index   cn			eq,sub,pres
index   mail			eq,sub,pres
index   surname			eq,sub,pres
index   givenname		eq,sub,pres

Nüüd käi läbi kõik ligipääsukontrolli (ACL) reeglid (algavad fraasiga access to) ja täienda neid reaga

by dn.exact="uid=heimdal,dc=services,dc=localnet,dc=ee" write

Näide lõpptulemusest

access to attrs=userPassword,shadowLastChange
       by dn="cn=admin,dc=localnet,dc=ee" write
       by dn.exact="uid=heimdal,dc=services,dc=localnet,dc=ee" write
       by anonymous auth
       by self write
       by * none

Ja ongi kõik. Kui kommentaarid välja visata, siis peaks lõppkujul fail olema selline (lisatud read on poolpaksus kirjas):

include      /etc/ldap/schema/core.schema
include      /etc/ldap/schema/cosine.schema
include      /etc/ldap/schema/nis.schema
include      /etc/ldap/schema/inetorgperson.schema
include      /etc/ldap/schema/hdb.schema
pidfile      /var/run/slapd/slapd.pid
argsfile     /var/run/slapd/slapd.args
loglevel     none
modulepath   /usr/lib/ldap
moduleload   back_hdb
moduleload   syncprov
sizelimit    500
tool-threads 1
TLSCACertificateFile   /etc/ssl/local/cacert.pem
TLSCertificateFile     /etc/ssl/local/slapd_demo.localnet.ee_cert.pem
TLSCertificateKeyFile  /etc/ssl/local/slapd_demo.localnet.ee_key.pem
TLSVerifyClient        allow
authz-regexp "gidNumber=.*\\\+uidNumber=0,cn=peercred,cn=external,cn=auth"
      "uid=heimdal,dc=services,dc=localnet,dc=ee"
localSSF 0
backend      hdb
database     hdb
suffix       "dc=localnet,dc=ee"
rootdn       "cn=admin,dc=localnet,dc=ee"
rootpw       {SSHA}qsOaO/rjPUXDhBctf8xPO4pLm5IUmuN0	# demo
directory    "/var/lib/ldap"
dbconfig     set_cachesize      0   2097152   0
dbconfig     set_lk_max_objects 1500
dbconfig     set_lk_max_locks   1500
dbconfig     set_lk_max_lockers 1500
overlay                 syncprov
syncprov-checkpoint     100 10
syncprov-sessionlog     100
index        objectClass        eq
index        entryCSN           eq
index        entryUUID          eq
index        uid                eq
index        uidNumber          eq
index        gidNumber          eq
index        memberUid          eq
index        krb5PrincipalName  eq
index        cn                 eq,sub,pres
index        mail               eq,sub,pres
index        surname            eq,sub,pres
index        givenname          eq,sub,pres
lastmod      on
checkpoint   512 30
access to attrs=userPassword,shadowLastChange
      by dn="cn=admin,dc=localnet,dc=ee" write
      by dn.exact="uid=heimdal,dc=services,dc=localnet,dc=ee" write
      by anonymous auth
      by self write
      by * none
access to dn.base="" by * read
access to *
      by dn="cn=admin,dc=localnet,dc=ee" write
      by dn.exact="uid=heimdal,dc=services,dc=localnet,dc=ee" write
      by * read

LDAP teenuse sertifikaat

Ülalpool OpenLDAP teenust seadistades läks konfiguratsioonifaili sisse ka sertifikaadi kasutamine. Seega on vaja luua sertifikaat. Põhimõtteliselt võib luua ühe sertifikaadi terve masina jaoks, kuid kuna slapd töötab eraldi kasutaja õigustes, siis peaks võimaluse korral kasutama ainult talle loodud sertifikaati. <FIXME: lisa põhjendus>

Loo sertifikaat, mille

  • common name: demo.localnet.ee
  • password: midagi omal valikul järgides põhimõtet, mida keerulisem, seda parem
  • organizational unit: LDAP teenus

Ekspordi sertifikaat faili /etc/ssl/local/slapd_demo.localnet.ee_cert.pem
Ekspordi sertifikaadi võti faili /etc/ssl/local/slapd_demo.localnet.ee_key.pem

Muuda failide õigused ja omanik:

chown openldap:openldap /etc/ssl/local/slapd_demo.localnet.ee_*.pem
chmod 644 /etc/ssl/local/slapd_demo.localnet.ee_cert.pem
chmod 600 /etc/ssl/local/slapd_demo.localnet.ee_key.pem

Ära unusta kontrollimast ka juursertifikaadi olemasolu!

Lõpetuseks väikese test, et veenduda teenuse ja sertifikaadi õiges seadistuses. Käivita slapd käsurealt nii:

slapd -h 'ldap:/// ldaps:/// ldapi:///' -g openldap -u openldap -f /etc/ldap/slapd.conf -d 0

Kui slapd jääb tööle, siis on kõik korras ja ta töö võib lõpetada Ctrl+C klahvikombinatsiooniga. Kui ei jää, siis on kusagil mingi viga tehtud.

Tavalised vead on näiteks sertifikaadi faili nime valesti kirjutamine või faili omaniku muutmata jätmine.

LDAP teenuse andmebaas

Järgmise sammuna on mõttekas tühjendada LDAP andmebaas.

Tee varukoopia olemasolevast andmebaasist

cp -a /var/lib/ldap /var/lib/ldap_old

Kustuta kataloogist /var/lib/ldap kõik failid peale faili DB_CONFIG. Tegemist on andmebaasimootori konfiguratsioonifailiga.

rm /var/lib/ldap/*
cp /var/lib/ldap_old/DB_CONFIG /var/lib/ldap/

Nüüd konverteeri migrationtoolsi abil süsteemi flat-andmebaasid LDAP kataloogi lähteandmeteks. Kuigi migrationtools võimaldab genereeritava info laadimist otse kataloogi, on mõttekam see salvestada kõigepealt faili, üle vaadata ja alles siis manuaalselt kataloogi laadida. Järgnevad käsud genereerivad faili /root/ldap_init.ldif.

perl -I/etc/migrationtools/ /usr/share/migrationtools/migrate_base.pl               >  /root/ldap_init.ldif
perl -I/etc/migrationtools/ /usr/share/migrationtools/migrate_group.pl  /etc/group  >> /root/ldap_init.ldif
perl -I/etc/migrationtools/ /usr/share/migrationtools/migrate_passwd.pl /etc/passwd >> /root/ldap_init.ldif

Ava loodud fail tekstiredaktoris ja kustuta sellest kõik kirjed, mis viitavad NIS teenusele. Samuti kustata ka kasutajad ja grupid, mis LDAP kataloogi kuuluma ei pea.
Alljärgnev näide on "üle keskmise" töödeldud:

  • sealt on kustutatud liigsed kataloogi harud, mis jäävad hetkel nagunii täitmata,
  • kustutatud on mitmed süsteemsed kasutajad ja grupid (ssh, openldap, ...)
dn: dc=localnet,dc=ee
dc: localnet
objectClass: top
objectClass: domain

dn: ou=Users,dc=localnet,dc=ee
ou: Users
objectClass: top
objectClass: organizationalUnit

dn: ou=Groups,dc=localnet,dc=ee
ou: Groups
objectClass: top
objectClass: organizationalUnit

dn: cn=users,ou=Groups,dc=localnet,dc=ee
objectClass: posixGroup
objectClass: top
cn: users
userPassword: {crypt}x
gidNumber: 100
memberUid: tester

dn: cn=tester,ou=Groups,dc=localnet,dc=ee
objectClass: posixGroup
objectClass: top
cn: tester
userPassword: {crypt}x
gidNumber: 1001

dn: uid=tester,ou=Users,dc=localnet,dc=ee
uid: tester
cn: test kasutaja
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$1$BG.Oj4UR$Rz9N6uBq3Ox8HHnriOdKu/
shadowLastChange: 14618
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/tester
gecos: test kasutaja,,,

Nüüd laeme algandmed LDAP andmebaasi (ja ühtlasi loome selle).

slapadd -l /root/ldap_init.ldif

Edasi muuda failide omanikuks openldap (hetkel on juurkasutaja).

chown openldap:openldap /var/lib/ldap/*

LDAP teenuse käivitamine

Nüüd saab lõpuks käivitada OpenLDAP deemoni slapd:

/etc/init.d/slapd start

Lõpetuseks kiirkontroll, kas slapd töötab ja andmed on kättesaadavad LDAP juurkasutajale

ldapsearch -x -H "ldap://localhost/" -D "cn=admin,dc=localnet,dc=ee" -w demo -b "dc=localnet,dc=ee"

Käsu väljund peab olema peaaegu sama, mis initsialiseerimisel. Lisatud kommentaarid on oodatud ja lubatud erinevused.
Ülaltoodud sisendfaili kasutamisel on väljund selline:

# extended LDIF
#
# LDAPv3
# base <dc=localnet,dc=ee> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# localnet.ee
dn: dc=localnet,dc=ee
dc: localnet
objectClass: top
objectClass: domain

# Groups, localnet.ee
dn: ou=Groups,dc=localnet,dc=ee
ou: Groups
objectClass: top
objectClass: organizationalUnit

# Users, localnet.ee
dn: ou=Users,dc=localnet,dc=ee
ou: Users
objectClass: top
objectClass: organizationalUnit

# users, Groups, localnet.ee
dn: cn=users,ou=Groups,dc=localnet,dc=ee
objectClass: posixGroup
objectClass: top
cn: users
userPassword:: e2NyeXB0fXg=
gidNumber: 100
memberUid: tester

# tester, Groups, localnet.ee
dn: cn=tester,ou=Groups,dc=localnet,dc=ee
objectClass: posixGroup
objectClass: top
cn: tester
userPassword:: e2NyeXB0fXg=
gidNumber: 1001

# tester, Users, localnet.ee
dn: uid=tester,ou=Users,dc=localnet,dc=ee
uid: tester
cn: test kasutaja
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSQxJEJHLk9qNFVSJFJ6OU42dUJxM094OEhIbnJpT2RLdS8=
shadowLastChange: 14618
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/tester
gecos: test kasutaja,,,

# search result
search: 2
result: 0 Success

# numResponses: 7
# numEntries: 6

Teegi SASL2 konfiguratsioon

Loo fail /etc/ldap/sasl2/slapd.conf järgmise sisuga.

keytab: /etc/ldap/ldap.keytab
pwcheck_method: saslauthd
log_level: 7
#mech_list: GSSAPI PLAIN LOGIN CRAM-MD5 DIGEST-MD5

Siin on kirjas, et

  • GSSAPI (Kerberose) võtmefail on /etc/ldap/ldap.keytab
  • paroole kontrollitakse saslauthd deemoni abil
  • SASL2 teegi teateid logitakse maksimaalsel tasemel

Toetatud autentimismehanismide nimekiri on hetkel väljakommenteeritud. See kohustab teeki proovima kõiki süsteemi paigaldatud autentimismeetodeid.

LDAP klienditeegi seadistus

Ava tekstiredaktoris fail /etc/ldap/ldap.conf ja lisa järgmised read:

BASE            dc=localnet,dc=ee
URI             ldap://demo.localnet.ee
TLS_CACERT      /etc/ssl/local/cacert.pem
#TLS_REQCERT    allow

BASE defineerib vaikimis kasutatava kataloogi juure.
URI määrab vaikimisi serveri ja ühendusprotokolli.
TLS_CACERT võimaldab kirjeldada kasutatava juursertifikaadi.

Hetkel on kommenteeritud TLS_REQCERT, mis võimaldab määrata, kui põhjalikult on vaja kontrollida serveri sertifikaati.


Heimdal

Deemonite peatamine

Analoogselt OpenLDAP deemonile on ka Heimdali deemonite seadistus vale, mistõttu peab nad seiskama.

/etc/init.d/heimdal-kdc stop
/etc/init.d/heimdal-kcm stop

/etc/heimdal-kdc/kdc.conf

Ava tekstiredaktoris Heimdali võtmejaotusteenuse seadistuste fail /etc/heimdal-kdc/kdc.conf.

Lisa kommentaarimärk (#) rea acl_file = FILE:/etc/heimdal-kdc/kadmind.acl ette.

Lisa järgmised read väljakommenteeritud rea alla (nagu näed muutus antud direktiivi asukoht).

database = {
    dbname = ldap:ou=KerberosPrincipals,dc=localnet,dc=ee
    acl_file = FILE:/etc/heimdal-kdc/kadmind.acl
    hdb-ldap-structural-object = inetOrgPerson
    mkey_file = /var/lib/heimdal-kdc/mkey
}

Siin on kirjas järgmine:

  • andmebaas on LDAP kataloogi harus ou=KerberosPrincipals,dc=localnet,dc=ee,
  • administreerimisteenuse ligipääsuõigusi sisaldava faili asukoht,
  • milline objektiklass võtta uue kasutaja loomisel baasiks (vajalik ainult siis, kui on plaan kasutada Sambat), ja
  • millisesse faili salvestada kerberose andmebaasi võti (vajalik siis, kui ei taha seda salvestada LDAP kataloogi).

FIXME: kirjuta, miks pannakse Samba kasutamisel andmebaas ou=Users,dc=localnet,dc=ee harusse ja mis probleemid sellega kaasnevad.

/etc/heimdal-kdc/kadmind.acl

Peale Heimdali paigaldamist on administratiivserveri ligipääsu haldamise fail sisuliselt tühi.

Lisa sinna rida

*/admin@LOCALNET.EE     *

See lubab kõigil kerberose andmebaasis defineeritud kasutajatel, kellel haldusüksuses LOCALNET.EE on instantsiks defineeritud admin, kõike majandada.

Tulevikus tuleb seda faili üsna kindlasti täiendada.

Andmebaasi uuesti initsialiseerimine

Kahjuks ei leidnud võimalust veenda Heimdali ise looma ülalpool ette antud organiseerimisüksust, mille all andmebaasi hoitakse. Seega tuleb see ise luua. Kõige lihtsam on sisestada järgmine käsk:

ldapadd -x -H "ldap://localhost/" -D "cn=admin,dc=localnet,dc=ee" -w demo <<EOF
dn: ou=KerberosPrincipals,dc=localnet,dc=ee
objectClass: organizationalUnit
objectClass: top
ou: KerberosPrincipals
EOF

Järgmisena loo võti andmebaasi krüpteerimiseks:

kstash --random-key

Nüüd on kõik valmis, et andmebaas initsialiseerida. Selleks käivita

kadmin -l init LOCALNET.EE

ja vasta küsimustele piletite eluea kohta enteriga, et aktsepteerida vaikeväärtus (igavesed).

Nüüd on saabunud järjekordne enesekontrolli koht. Vaatame, kas lisatud kasutajad on LDAP kataloogis kirjas:

ldapsearch -H ldap://demo.localnet.ee/ -x -s base -b "" supportedSASLMechanisms -LLL
ldapsearch -H ldaps://demo.localnet.ee/ -x -s base -b "" supportedSASLMechanisms -LLL

Mõlemal juhul peab väljund olema midagi järgnevat

dn:
supportedSASLMechanisms: CRAM-MD5
supportedSASLMechanisms: NTLM
supportedSASLMechanisms: GSSAPI
supportedSASLMechanisms: PLAIN
supportedSASLMechanisms: DIGEST-MD5
supportedSASLMechanisms: LOGIN

Kasutajate lisamine

Kui andmebaas on loodud ja lähteadmetega täidetud, on aeg lisada andmebaasi mõned kasutajad.

Tavakasutaja lisamise protseduur näeb välja järgmine:

  1. Pane tööle administreerimisprogramm kadmin kohalikus režiimis:
    kadmin -l add kasutajanimi
  2. vajuta viis korda enter-klahvi, kui ei ole soovi muuta kandilistes sulgudes olevaid vaikeväärtusi
  3. lõpetuseks sisesta kaks korda parool

Programmi kadmin käsk add võimaldab ka parooli automaatset genereerimist, mis on mõistlik eelkõige teenuste puhul. Selleks lisa käsule parameeter --random-key. Käsureal näeb asi välja selline: kadmin -l add --random-key kasutajanimi

Lisa kasutajad root, root/admin, tester ja tester/admin. Kõigi paroolid peaksid olema erinevad ja need tuleb meelde jätta!

Lisa Kerberose andmebaasi ka LDAP teenust pakkuva server ja teenus ise; parool lase genereerida ja piletite kehtivus sea piiramatuks. Kasutajad on:

  • host/demo.localnet.ee
  • ldap/demo.localnet.ee


Ja jälle väike enesekontroll: vaatame, kas lisatud kasutajad on LDAP kataloogis olemas.

ldapsearch -x -H "ldaps://demo.localnet.ee/" -D "cn=admin,dc=localnet,dc=ee" -w demo -b "ou=KerberosPrincipals,dc=localnet,dc=ee" krb5PrincipalName
ldapsearch -x -H "ldapi:///" -D "cn=admin,dc=localnet,dc=ee" -w demo -b "ou=KerberosPrincipals,dc=localnet,dc=ee" krb5PrincipalName

Mõlemal juhul peab väljund olema midagi sellist:

# extended LDIF
#
# LDAPv3
# base <ou=KerberosPrincipals,dc=localnet,dc=ee> with scope subtree
# filter: (objectclass=*)
# requesting: krb5PrincipalName
#

# KerberosPrincipals, localnet.ee
dn: ou=KerberosPrincipals,dc=localnet,dc=ee

# tester@LOCALNET.EE, KerberosPrincipals, localnet.ee
dn: krb5PrincipalName=tester@LOCALNET.EE,ou=KerberosPrincipals,dc=localnet,dc=
 ee
krb5PrincipalName: tester@LOCALNET.EE

# tester/admin@LOCALNET.EE, KerberosPrincipals, localnet.ee
dn: krb5PrincipalName=tester/admin@LOCALNET.EE,ou=KerberosPrincipals,dc=localn
 et,dc=ee
krb5PrincipalName: tester/admin@LOCALNET.EE

# krbtgt/LOCALNET.EE@LOCALNET.EE, KerberosPrincipals, localnet.ee
dn: krb5PrincipalName=krbtgt/LOCALNET.EE@LOCALNET.EE,ou=KerberosPrincipals,dc=
 localnet,dc=ee
krb5PrincipalName: krbtgt/LOCALNET.EE@LOCALNET.EE

# kadmin/changepw@LOCALNET.EE, KerberosPrincipals, localnet.ee
dn: krb5PrincipalName=kadmin/changepw@LOCALNET.EE,ou=KerberosPrincipals,dc=loc
 alnet,dc=ee
krb5PrincipalName: kadmin/changepw@LOCALNET.EE

# kadmin/admin@LOCALNET.EE, KerberosPrincipals, localnet.ee
dn: krb5PrincipalName=kadmin/admin@LOCALNET.EE,ou=KerberosPrincipals,dc=localn
 et,dc=ee
krb5PrincipalName: kadmin/admin@LOCALNET.EE

# changepw/kerberos@LOCALNET.EE, KerberosPrincipals, localnet.ee
dn: krb5PrincipalName=changepw/kerberos@LOCALNET.EE,ou=KerberosPrincipals,dc=l
 ocalnet,dc=ee
krb5PrincipalName: changepw/kerberos@LOCALNET.EE

# kadmin/hprop@LOCALNET.EE, KerberosPrincipals, localnet.ee
dn: krb5PrincipalName=kadmin/hprop@LOCALNET.EE,ou=KerberosPrincipals,dc=localn
 et,dc=ee
krb5PrincipalName: kadmin/hprop@LOCALNET.EE

# default@LOCALNET.EE, KerberosPrincipals, localnet.ee
dn: krb5PrincipalName=default@LOCALNET.EE,ou=KerberosPrincipals,dc=localnet,dc
 =ee
krb5PrincipalName: default@LOCALNET.EE

# root/admin@LOCALNET.EE, KerberosPrincipals, localnet.ee
dn: krb5PrincipalName=root/admin@LOCALNET.EE,ou=KerberosPrincipals,dc=localnet
 ,dc=ee
krb5PrincipalName: root/admin@LOCALNET.EE

# root@LOCALNET.EE, KerberosPrincipals, localnet.ee
dn: krb5PrincipalName=root@LOCALNET.EE,ou=KerberosPrincipals,dc=localnet,dc=ee
krb5PrincipalName: root@LOCALNET.EE

# ldap/demo.localnet.ee@LOCALNET.EE, KerberosPrincipals, localnet.ee
dn: krb5PrincipalName=ldap/demo.localnet.ee@LOCALNET.EE,ou=KerberosPrincipals,
 dc=localnet,dc=ee
krb5PrincipalName: ldap/demo.localnet.ee@LOCALNET.EE

# host/demo.localnet.ee@LOCALNET.EE, KerberosPrincipals, localnet.ee
dn: krb5PrincipalName=host/demo.localnet.ee@LOCALNET.EE,ou=KerberosPrincipals,
 dc=localnet,dc=ee
krb5PrincipalName: host/demo.localnet.ee@LOCALNET.EE

# search result
search: 2
result: 0 Success

# numResponses: 14
# numEntries: 13


LDAP võtmete eksportimine

Vaikimisi hoiatakse exporditud Kerberose võtmeid failis /etc/krb5.keytab. See fail on loetav ja kirjutatav ainult juurkasutajale.

Samas peab slapd autentimisel kasutama talle loodud võtmeid (ühte mitmest; täpne valik sõltub juba Kerberosest) ja ei pääse antud failile ligi, sest ta töötab kasutaja openldap õigustes. Probleemi lahendus on hosti ja LDAP teenuse võtmete eksportimine faili /etc/ldap/ldap.keytab ja selle fail slapd-le kättesaadavaks tegemine.

kadmin -l ext -k /etc/ldap/ldap.keytab host/demo.localnet.ee
kadmin -l ext -k /etc/ldap/ldap.keytab ldap/demo.localnet.ee
chown openldap:openldap /etc/ldap/ldap.keytab 


Testimiseks vaatame, mis võtmed on võtmefailis kirjas. Käivita käsk

ktutil -k /etc/ldap/ldap.keytab list

Käsu väljund on selline:

FILE:/etc/ldap/ldap.keytab:
Vno  Type                     Principal
  1  des-cbc-md5              host/demo.localnet.ee@LOCALNET.EE
  1  des-cbc-md4              host/demo.localnet.ee@LOCALNET.EE
  1  des-cbc-crc              host/demo.localnet.ee@LOCALNET.EE
  1  aes256-cts-hmac-sha1-96  host/demo.localnet.ee@LOCALNET.EE
  1  des3-cbc-sha1            host/demo.localnet.ee@LOCALNET.EE
  1  arcfour-hmac-md5         host/demo.localnet.ee@LOCALNET.EE
  1  des-cbc-md5              ldap/demo.localnet.ee@LOCALNET.EE
  1  des-cbc-md4              ldap/demo.localnet.ee@LOCALNET.EE
  1  des-cbc-crc              ldap/demo.localnet.ee@LOCALNET.EE
  1  aes256-cts-hmac-sha1-96  ldap/demo.localnet.ee@LOCALNET.EE
  1  des3-cbc-sha1            ldap/demo.localnet.ee@LOCALNET.EE
  1  arcfour-hmac-md5         ldap/demo.localnet.ee@LOCALNET.EE

Heimdali deemonite käivitamine

Sisesta käsud

/etc/init.d/heimdal-kdc start
/etc/init.d/heimdal-kcm start

Saslauthd

Ava fail /etc/default/saslauthd.

  1. Muuda START=no -> START=yes
  2. Muuda MECHANISMS="pam" -> MECHANISMS="kerberos5 pam"

Pane saslauthd tööle:

/etc/init.d/saslauthd start


Testimine

Testimiseks on plaanis paigaldada libnss-ldap (kasutajate info) ja libpam-krb5 (autentimine).


Varundamine ja taastamine

Varundamine

Tee väljavõte LDAP kataloogist:

slapcat > /var/ldap/backup_`date +"%Y%m%d"`.ldif

Varunda failid:

  • /etc/ldap/*
  • /etc/heimdal-kdc/*
  • /etc/ssl/local/*
  • /etc/krb5.conf
  • /etc/default/slapd
  • /etc/default/saslauthd
  • /var/lib/heimdal-kdc/mkey
  • Uusim versioon failist /var/ldap/backup*.ldif

Kui süsteemis ei ole kasutusel varundamistarkvara, siis ajab asja ära ka järgmine skriptike. Selle tulemusel luuakse fail /var/

#!/bin/bash

BACKUP_DIR="/var/backup_`date +"%Y%m%d"`"

mkdir $BACKUP_DIR

cp -a --parents \
 /etc/ldap/ldap.conf /etc/ldap/ldap.keytab /etc/ldap/slapd.conf \
 /etc/ldap/sasl2/slapd.conf \
 /etc/heimdal-kdc/kdc.conf /etc/heimdal-kdc/kadmind.acl \
 /etc/krb5.conf \
 /etc/default/slapd /etc/default/saslauthd \
 /etc/ssl/local/cacert.pem \
 /etc/ssl/local/slapd_demo.localnet.ee_cert.pem /etc/ssl/local/slapd_demo.localnet.ee_key.pem \
 /var/lib/heimdal-kdc/mkey \
 `find /var/lib/ldap/ -type f -name backup_\*.ldif -print | sort -r | head -1` \
 $BACKUP_DIR
cd $BACKUP_DIR
tar jcf /var/`basename $BACKUP_DIR`.tar.bz2 *

Taastamine

  • Kontrolli üle konfiguratsioonifailid; asenda muudetud failid või taasta valesti muudetud kohad.
  • Vajadusel lae LDAP andmebaas uuesti.

Ülaltoodud varundamise skripti väljundist saab taastamisel muudatustest aimu järgmise skripti abil.

#!/bin/bash

# $1 on arhiiv, millest taastada
$BACKUP=$1

mkdir /tmp/restore
cd /tmp/restore
tar jxf $BACKUP

for D in `find -type d -print`; do
  if [ ! -d /$D ]; then
    echo -n "Kataloog $D on puudu!"
  fi
done

for F in `find -type f -print | grep -v backup*ldif | grep -v mkey`; do
  if [ ! -f /$F ]; then 
    echo "Fail /$F on puudu!"
    continue
  fi
  OUT=`diff -u $F /$F`
  if [ $? -ne 0 ]; then
    echo "Faili /$F on muudetud. Muudatused on"
    cat <<EOF
$OUT
EOF
  fi
done

Skripti kasutamisel anna talle argumendiks üks varukoopiatest.

LDAP andmebaasi taastamiseks peata LDAP deemon:

/etc/init.d/slapd stop

Nüüd saab kataloogi taastada failist programmi slapadd abil:

slapadd -l /tmp/restore/var/lib/ldap/backup*.ldif

Käivita LDAP deemon uuesti:

/etc/init.d/slapd start

Kuidas jätkata

Käesolevast juhendist jäid olulistest komponentidest välja:

  • LDAP replitseerimine (käideldavuse tõstmine ja kiirema vastamise tagamine),
  • Kerberose täiendavad võtmejaotusserverid, mis tõstavad käideldavust ja tagavad ka kiirema vastamise,
  • DNSi kirjete lisamine, et vältida serverite staatilist konfigureerimist /etc/krb5.conf failidesse.
  • NTP teenuse seadistamine, et garanteerida haldusüksuse moodustavate masinate kellade samasus. Siinkohal on vale öelda õigsus (seadmete kell on õige), sest Keberos eeldab ainult seda, et haldusüksuse sees on kõigil seadmetel enam-vähem sama kellaaeg-kuupäev. Vaikeseadistuses on lubatud erinevus viis minutit.

Kasutatud kirjandus

Käesoleva juhendi lähtematerjaliks olid järgmised resursid: