Kerberose ja OpenLDAP seadistamine
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.
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/Linux versioonile 5.0.3 ja kasutab temaga kaasas olevaid Heimdali ja OpenLDAP pakette. (Seega võiks antud juhendi pealkiri olla ka Heimdali ja OpenLDAP seadistamine.)
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.
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
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 realmi nimi (antud juhendis 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.
- Selleks pane programm tööle. Kui menüüst ei leia, siis toksi programmi nimi tinyca2 kas terminali või käivitusdialoogi.
- 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
- Kliki nupul "OK"
- Avaneb CA seadistamise dialoog. Siin määratakse ära, kuidas antud CA-d kasutada. Tesimiseks sobivad vaikeseaded küll, mistõttu kliki nupul "OK".
- 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.
- Aktiveeri vahekaart "CA"
- Kliki tööriistariba paremalt teisel nupul (disketi pildiga), et avaneks juursertifikaadi eksportimise dialoog
- Soovi korral muuda failinimi sobivaks; ära muuda vormingut
- Kliki "Save" ja "OK"
Lõpetuseks tee äsja eksporditud sertifikaat kõigile huvilistele kättesaadavaks.
- Loo kataloog /etc/ssl/local: mkdir /etc/ssl/local
- Kontrolli, et kataloog oleks kõigile loetav: chmod 755 /etc/ssl/local
- Kopeeri eelnevalt eksporditud juursertifikaadi fail äsja loodud kataloogi: cp /root/localnet.ee-cacert.pem /etc/ssl/local/cacert.pem
- 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
- Aktiveeri vahekaart "Requests"
- Kliki tööriistariba paremamalt neljandal nupul
- Avanes sertifikaadi nõude loomise dialoog, mis täida järgmiselt:
- Common Name: serveri.täispikk.nimi.domeeniga.ee
- eMail Address: (täitmine ei ole vajalik)
- Password (2x): mida keerulisem, seda parem (seda on vaja sertifikaadi võtme eksportimisel faili)
- Organizational Unit Name: siia sobib kirjutada seda, milleks sertifikaati kasutatakse
- Ülejäänud väljade väärtust ei ole vaja muuta
- Kliki "OK", mille tulemusel lisatakse sertifikaadi nõue nimekirja
- Vali nimekirjast loodud nõue
- Kliki tööriistariba paremamalt teisel nupul
- Avaneb nõude allkirjastamise dialoog, mis täida järgmiselt:
- CA Password: testca
- Ülejäänud väljade väärtust ei ole vaja muuta
- Kliki OK, mille tulemusel sertifikaat allkirjastatakse
- Aktiveeri vahekaart "Keys"
- Otsi üles äsjaloodud sertifikaadi võti ja aktiveeri see hiireklikiga
- Kliki tööriistariba paremamalt teisel nupul
- Avaneb sertifikaadi võtme eksportimise dialoog, mis täida järgmiselt:
- File: muuda ära, kui vaikeväärtus ei meeldi või kattub olemasolevaga
- Export Format: PEM (Key)
- Without Passphrase: Yes
- Include Certificate: No
- Kliki "Save"
- Aktiveeri vahekaart "Certificates"
- Otsi üles allkirjastatud sertifikaat ja aktiveeri see hiireklikiga
- Kliki tööriistariba paremamalt neljandal nupul
- Avaneb sertifikaadi eksportimise dialoog, mis täida järgmiselt
- File: muuda ära, kui vaikeväärtus ei meeldi või kattub olemasolevaga
- Export Format: PEM (certificate)
- Include Key: No
- Include Fingerprint: No
- 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äivita 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 administratiivsetel tegelinskitel kõike majandada.
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:
- Pane tööle administreerimisprogramm kadmin kohalikus režiimis:
kadmin -l add kasutajanimi - vajuta viis korda enter-klahvi, kui ei ole soovi muuta kandilistes sulgudes olevaid vaikeväärtusi
- 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.
- Muuda START=no -> START=yes
- 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:
- Heimdali dokumentatsioon
- OpenLDAP dokumentatsioon
- Cyrus-SASL2 teegi dokumentatsioon
- http://aput.net/~jheiss/krbldap/howto.html
- http://www.badzilla.net/dokuwiki/linuxguides/ldapsaslkerberoshowto