OpenLDAP kasutamine Debianiga

Allikas: Kuutõrvaja

Sissejuhatus

Kataloogiteenuse (ingl. k. directory service) kasutamine on populaarne kuna selle abil saab suhteliselt lihtsasti ja turvaliselt keskselt andmeid hallata ja paindlikult kontrollida kataloogiteenuse klientide ligipääsu neile andmetele. Nt võiks korraldada selliste probleemide lahendamist kataloogiteenuse abil

  • mitmete arvutite kasutajate keskne haldus, st kasutaja saab sama kasutajanime ja parooliga logida sisse haldusala kõigisse arvutitesse; seejuures võetakse kaasa tema kodukataloog NFS serverist
  • aadressraamatu pidamine
  • X509 jms sertifikaatide haldamine PKI pidamise kontekstis

LDAP (Lightweight Directory Access Protocol) on iseenesest protokoll ning üks selle prokolli implementatsioon on OpenLDAP http://www.openldap.org/, mis sisaldab üldiselt nelja komponenti

  • slapd - stand-alone LDAP daemon (server)
  • slurpd - stand-alone LDAP update replication daemon
  • teegid - implementeerivad LDAP protokolli
  • utiliidid - abiprogrammid ja näidised erinevate tegevuste sooritamiseks

OpenLDAP kasutamise muudab praktiliseks asjaolu, et ta on üsna paljude rakendustega (nt PAM) integreeritud ning OpenLDAP kasutamiseks on vajalikud teegid olemas mitmetes programmeerimiskeeltes (nt Java, Perl, PHP). OpenLDAP toetab suures ulatuses LDAP v2 ja v3 versioone; võimaldab andmevahetust üle TLS/SSL.

Seame eesmärgiks selliste omadustega LDAP kataloogi moodustamise

  • kataloogis on kirjeldatud Linuxi nn passwd-group-shadow andmetele vastavad andmed
  • kataloogi on seadistatud kasutama arvutid oma kasutajate autentimiseks ja autoriseerimiseks, kusjuures täiendavalt on võimalik piirata, millised kasutajad saavad pääseda millistesse arvutitesse (nt ssh või konsooli kaudu); lisaks ühendatakse selleks asjaks kui kasutaja on süsteemi sisse loginud külge üle NFS'i tema kodukataloog
  • töökohtadel ei saa kasutajad ega süsteemiadministraator paroole muuta, see toimub eraldi ldap kasutajaliidese abil
  • kataloogi saab kasutada postikliendi aadressraamatuna sh saab kataloogist kopeerida kasutaja sertifikaadi, et selle abil kiri krüptida

Lisaks LDAP kataloogi seadistamisele on kirjeldatud eesmärgi saavutamiseks vajalikke kõrvalisi tegevusi, nt AutoFS seadistamist; samuti tutvustatakse populaarseid LDAP kliente.

OpenLDAP serveri paigaldamine

OpenLDAP tarkvara paigaldamiseks Debianil tuleb öelda

 # apt-get install ldap-utils slapd

Paigaldamise ajal küsitakse LDAP kataloogi admin sissekande jaoks parooli

Ldap-2.gif

ja paigaldamise tulemusena tekitatakse

  • süsteemi uus privilegeerimata kasutaja, millena OpenLDAP server käib
  • esialgne LDAP serveri seadistusfail /etc/ldap/slapd.conf
  • kataloogi sisestatakse andmed organisatsiooni (dc=auul) ja administraatori (cn=admin,dc=auul) kohta (kui operatsioonisüsteemi domeeninimi on 'auul', st mida väljastab käsk 'hostname -d')
  • käivitatakse OpenLDAP server
 Creating new user openldap... done.
 Creating initial slapd configuration... done.
 Creating initial LDAP directory... done.
 Starting OpenLDAP: slapd.
  • ldap-utils - sisaldab ütiliite LDAP kataloogiga suhtlemiseks, nt ldapsearch päringute tegemiseks; 'dpkg -L ldap-utils | grep bin' näitab programmide nimekirja, reeglina algavad nende nimed 'ldap*' järgnevusega
  • slapd - sisaldab OpenLDAP serverit ning utiliite LDAP kataloogile vastavate failidega tegelemiseks, nt slapcat esitab kogu kataloogi sisu nn ldif formaadis; 'dpkg -L slapd | grep bin' esitab programmide nimekirja, reeglina algavad nimed 'slap*' järgnevusega

Oluline on nende kahe programmide komplekti juures tähale panna, et

  • ldap-utils ldap* programme kasutatakse töötava LDAP serveriga suhtlemiseks kusjuures andmevahetus toimub üle LDAP protokolli
  • slapd slap* programme kasutatakse reeglina mitte-töötava LDAP serveri andmefailidega manipuleerimiseks, nt andmebaasi reindekseerimiseks

Näiteks küsime kogu kataloogi sisu suheldes kataloogiga üle LDAP protokolli

 $ ldapsearch -x -H ldap://192.168.10.51 -b "dc=auul"
 # extended LDIF
 #
 # LDAPv3
 # base <dc=auul> with scope subtree
 # filter: (objectclass=*)
 # requesting: ALL
 #
 
 # auul
 dn: dc=auul
 objectClass: top
 objectClass: dcObject
 objectClass: organization
 o: auul
 dc: auul
 
 # admin, auul
 dn: cn=admin,dc=auul
 objectClass: simpleSecurityObject
 objectClass: organizationalRole
 cn: admin
 description: LDAP administrator
 
 # search result
 search: 2
 result: 0 Success
 
 # numResponses: 3
 # numEntries: 2
  • -x - serveri poole pöördudakse nn simple authentication'it kasutades, praktiliselt toimub serveri poole pöördumine alati selliselt
  • -H - LDAP kataloog aadress
  • -b - otsingualus
  • väljund on esitatud nn LDIF (LDAP Data Interchange Format) formaadis
  • vaikimisi lubab LDAP serveri seadistusfail pöörduda piiranguteta kataloogi poole andmete lugemiseks (va paroolikirjed)

Sisuliselt samasuguse tulemuse saab esitades LDAP kataloogile vastavate andmefailide sisu tekstina programmi slapcat abil, lisaks eelnevas väljundis esitatud andmetele on toodud ka nn operatiivsed andmed (ingl. k. operational data) st muudatuste tegemise kohta jms

 # slapcat
 dn: dc=auul
 objectClass: top
 objectClass: dcObject
 objectClass: organization
 o: auul
 dc: auul
 structuralObjectClass: organization
 entryUUID: 28c1ed58-bc3b-102d-8a77-1d122da291df
 creatorsName:
 createTimestamp: 20090413055329Z
 entryCSN: 20090413055329.986905Z#000000#000#000000
 modifiersName:
 modifyTimestamp: 20090413055329Z
 
 dn: cn=admin,dc=auul
 objectClass: simpleSecurityObject
 objectClass: organizationalRole
 cn: admin
 description: LDAP administrator
 userPassword:: e2NyeXB0fVBsOGtCbK2MURNLlU=
 structuralObjectClass: organizationalRole
 entryUUID: 28c2b58a-bc3b-102d-8a78-1d122da291df
 creatorsName:
 createTimestamp: 20090413055329Z
 entryCSN: 20090413055329.992087Z#000000#000#000000
 modifiersName:
 modifyTimestamp: 20090413055329Z

OpenLDAP serveri käivitusskript on

 # /etc/init.d/slapd

ning vaikimisi kuulab server päringuid tcp pordil 389

 # netstat -anp | grep slapd | grep LISTEN
 tcp        0      0 0.0.0.0:389             0.0.0.0:*               LISTEN      27926/slapd

kusjuures kataloogile vastavate failide omanikuks on kasutaja:grupp openldap:openldap

 # find /var/lib/ldap/ -ls
 106513    4 drwxr-xr-x   2 openldap openldap     4096 Apr 11 11:49 /var/lib/ldap/
 106738    8 -rw-------   1 openldap openldap     8192 Apr 12 03:05 /var/lib/ldap/__db.001
 106743  304 -rw-------   1 openldap openldap   305140 Apr 11 16:35 /var/lib/ldap/log.0000000001
 106741  592 -rw-------   1 openldap openldap   868352 Apr 12 03:00 /var/lib/ldap/__db.004
 ...

OpenLDAP seadistamine

OpenLDAP serveri tööd kontrollib seadistusfail /etc/ldap/slapd.conf, tarkvara paigaldamisel on valitud suhteliselt mõistlikud vaikeväärtused, millega sobib tarkvara kastamist alustada

 # egrep -v "^#|^$" /etc/ldap/slapd.conf
 include         /etc/ldap/schema/core.schema
 include         /etc/ldap/schema/cosine.schema
 include         /etc/ldap/schema/nis.schema
 include         /etc/ldap/schema/inetorgperson.schema
 pidfile         /var/run/slapd/slapd.pid
 argsfile        /var/run/slapd/slapd.args
 loglevel        none
 modulepath      /usr/lib/ldap
 moduleload      back_hdb
 sizelimit 500
 tool-threads 1
 backend         hdb
 database        hdb
 suffix          "dc=auul"
 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
 index           objectClass eq
 lastmod         on
 checkpoint      512 30
 access to attrs=userPassword,shadowLastChange
        by dn="cn=admin,dc=auul" write
        by anonymous auth
        by self write
        by * none
 access to dn.base="" by * read
 access to *
        by dn="cn=admin,dc=auul" write
        by * read

Seadistusfailis võiks muuta parameetri loglevel väärtuse

 loglevel        256

ning lisada suffix parameetri järele read, parool sama, mis sisestati paigaldamisel

 rootdn          "cn=admin,dc=auul"
 rootpw          "parool"
  • loglevel 256 - nii kirjutatakse /var/log/syslog'i mõõduka verbaalsusega toimuvate sündmuste kohta logi, mh on kirjas kataloogile esitatud päringud
  • rootdn ja rootpw - on tagatud, et näidatud vastavalt kasutaja ja parooliga saab kataloogi poole pöörduda isegi kui kataloogi andmefailides ei ole kataloogi administraatori kasutaja autentimiseks andmeid korrektsed (nt on parool ununenud)

Peale seadistusfailis muudatuste tegemist tuleb slapd deemon algkäivitusskripti abil uuesti käivitada.

Kataloogi struktuur

Käesolev tekst ei ole esitatud akadeemilise rangusega, tegu on kirjeldusega kuidas LDAP kataloog praktiliselt tööle saada ning seda kasutada. Seepärast kirjeldatakse kataloogi struktuuri seisukohalt olulisi seoseid üsna populaarses kõnepruugis.

LDAP kataloogil on sellised omadused

  • kataloog on hierarhiline moodustis, teatud mõttes sarnane failisüsteemile või interneti domeeninimede süsteemile
                             dc=auul
                            /      \
                           /        \
             ou=people,dc=auul    ou=group,dc=auul
                 /                            \
                /                              \
    uid=mart,ou=people,dc=auul           cn=loomaaed,ou=group,dc=auul
    uid=priit,ou=people,dc=auul
  • kataloogi iga element on üheselt identifitseeritud oma dn (ingl. k. distinguished name) väärtusega, skeemil toodud kõik nimed on dn'id; aga näiteks 'uid=mart' nimetatakse rdn'iks (ingl. k. relative distinguished name) ja seda saab kasutada kui on teada kontekst
  • kataloogi kasutamiseks on tarvis kasutajal privileege (erinevateks tegevusteks on vajalikud erinevad privileegid, privileegid on kirjeldatud serveri seadistusfailis; vaikimisi saavad kõik lugeda kõiki andmeid va kasutaja parool)
  • kataloogi mõnede elementide otstarbeks on moodustada teiste, kataloogi kasutajatele otsesemalt olulisemate andmede jaoks struktuuri; nt element ou=people,dc=auul ja ou=group,dc=auul on vajalikud, et oleks võimalik tekitada nende alla sissekandeid, mis vastavad kataloogi kasutajatele
  • kataloogi elemendid moodustatakse nn objectClass'ides kirjeldatud atribuutide abil
  • objectClass'isid saab LDAP serveri administraator ise juurde kirjeldada, kuid seda võiks teha juhul kui olemasolevate standardsete objectClass'ide võimalustest tõesti väheks jääb
  • ldap kataloogi kasutajad on kirjeldatud kataloogis endas, sh nende kasutajate paroolid; osa dn'isid ongi kasutajanimed, nt süsteemi administraatori kasutajanimi on antud juhul 'cn=admin,dc=auul' või kasutaja Mart kasutajanimi ldap kataloogis on 'uid=mart,ou=group,dc=auul'

Kui LDAP kasutamise põhiliseks eesmärgiks on hallata keskselt kasutajate ligipääsu arvutite shellidele (üle ssh või konsooli logini), siis sobib tekitada kaks sellist nö struktuuri-elementi, kaks tühja rida sissekannete vahel on olulised

$ cat people-group.ldif 
dn: ou=people,dc=auul
ou: people
objectClass: organizationalUnit


dn: ou=group,dc=auul
ou: group
objectClass: organizationalUnit

slapd server peab töötama ning öeldes

$ ldapadd -x -D cn=admin,dc=auul -w parool -f people-group.ldif
  • -x - ldap serverisse logimine toimub simple authenticationi abil
  • -D - serveri poole pöördutakse serveri administraatorina, nö kasutajanimega 'cn=admin,dc=auul'
  • -w - pöördumisel kasutatakse parooli 'parool
  • -f - serverisse laaditakse failist people-group.ldif andmed

Edaspidi paigutatakse andmed gruppide ja kasutajate grupikuuluvuse kohta ou=group,dc=auul alla ning kasutajate enda kohta ou=people,dc=auul alla.

Kasutaja andmete lisamine kataloogi

Lisame kataloogi järgmised andmed

  • kolm gruppi - kahe kasutaja kasutajanimelise grupid ja grupp loomaaed
  • kaks kasutajat - kasutajad kuuluvad nö primaarselt endanimelisse gruppi ning lisaks gruppi loomaaed

kusjuures kasutatud on viit standardset objectClass'i, tõenäoliselt saaks kasutada ka muid ning saavutada sarnase tulemusi, kui googledades internetis ning lugedes mujalt tekste soovitatakse sissekandeid tekidada just selliselt

  • top - peab olema
  • inetOrgPerson - givenName, mail, userCertificate jt atribuudid
  • posixGroup - gidNumber, memberUid jt atribuudid, vastab unixi /etc/group failile
  • posixAccount - uid, uidNumber, homeDirectory jt atribuudid, vastab unixi /etc/passwd failile
  • shadowAccount - shadowExpire jt atribuudid, vastab unixi /etc/shadow failile
$ cat sissekanded.ldif
dn: cn=mart,ou=group,dc=auul
cn: mart
gidNumber: 10000
objectClass: top
objectClass: posixGroup


dn: cn=priit,ou=group,dc=auul
cn: priit
gidNumber: 10001
objectClass: top
objectClass: posixGroup


dn: cn=loomaaed,ou=group,dc=auul
cn: loomaaed
gidNumber: 5000
memberUid: mart
memberUid: priit
objectClass: top
objectClass: posixGroup


dn: uid=mart,ou=people,dc=auul
uid: mart
uidNumber: 10000
gidNumber: 10001
cn: Mart Kask
givenName: Mart
sn: Kask
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
loginShell: /bin/bash
homeDirectory: /home/mart


dn: uid=priit,ou=people,dc=auul
uid: priit
uidNumber: 10001
gidNumber: 10001
cn: Priit Kask
givenName: Priit
sn: Kask
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
loginShell: /bin/bash
homeDirectory: /home/priit

Jällegi, slapd peab töötama ja öeldes

$ ldapadd -c -x -D cn=admin,dc=auul -w parool -f sissekanne.ldif
adding new entry "cn=mart,ou=group,dc=auul"
adding new entry "cn=priit,ou=group,dc=auul"
adding new entry "cn=loomaaed,ou=group,dc=auul
adding new entry "uid=mart,ou=people,dc=auul"
adding new entry "uid=priit,ou=people,dc=auul"

Nt kasutajale 'uid=mart,ou=people,dc=auul' parooli kehtestamiseks tuleb öelda

 $ ldappasswd -x -D cn=admin,dc=auul -w administraatoriparool -s kasutajaparool uid=mart,ou=people,dc=auul

Kommentaarid kasutatud atribuutidele

  • dc - domain class, tavaliselt esineb see dn'i kõige parempoolses osas
  • ou - organizational unit - tavaliselt esineb see dn'is vasakul dc'st
  • uid - user identifier - vastab unixi kasutajanimele
  • cn - common name - isikunimi
  • givenName - eesnimi
  • sn - surname - perekonanimi
  • uidNumber - vastab unixi kasutaja UID numbrile
  • gidNumber - vastab unixi kasutaja GID numbrile
  • memberUid - milline kasutaja kuulub sellesse gruppi
  • dn - distinguished name, identifitseerib üheselt kataloogis sissekande, reegilina moodustub teistest atribuutidest
  • loginShell - kasutaja shell
  • homeDirectory - kasutaja kodukataloog

LDAP päringute sooritamine

Pärgingud LDAP kataloogi saab teha utiliidiga ldapsearch, mis on paketis ldap-utils. Kui päringut sooritada samas arvutist, kus töötab LDAP server, siis tõenäoliselt on slapd paigaldamise käigus kirjutatud olulistesse failidesse mõistlikke vaikeväärtusi, mida LDAP kliendid sh ldapsearch kasutada osakavad. Teisest arvutist pöördudes kuhu pole kliendi seadistusfaile moodustatud saab aga selliselt, nt kataloogis sisalduva kasutaja andmete küsimiseks sobib öelda

 $ ldapsearch -LLL -x -H ldap://192.168.10.51 -D "cn=admin,dc=auul" -w parool -b "dc=auul" "(uid=mart)" uid uidNumber gidNumber cn sn
 dn: uid=mart,ou=people,dc=auul
 uid: mart
 uidNumber: 10000
 gidNumber: 5000
 cn: Mark Kask
 sn: Kask
  • -LLL - ei esitata LDIF formaadi kommentaare
  • -x - kasutatakse lihtsat autentimist
  • -H - ldap kataloogi aadress
  • -D - ldap kataloogi kasutaja kellena pöördutakse
  • -w - ldap kastaloogi kasutaja parool
  • -b - otsingualus (ingl. k. base), mille alla jäävatest andmetest otsingut teostatakse
  • uid=mart - filter, mis kitsendab otsingu tulemust; kui jätta näitamata, siis on see samaväärne filtriga "(objectClass=*)", st efektiivselt kogu kataloogi sisu, st kõik kirjed, kus on kasutatud mingit objectClass'i
  • uid uidNumber gidNumber cn sn - atribuudid, mille väärtused väljastatakse; kui ei ole näidatud, esitatakse kõik atribuudid

Kui kirjeldada aga globaalses LDAP kliendi seadistusfailis /etc/ldap/ldap.conf

 BASE    dc=auul
 URI     ldap://192.168.10.51

ning kasutaja seadistusfailis ~/.ldaprc

 BINDDN cn=admin,dc=auul

siis saab küsida nii

 $ ldapsearch -x -w parool uid=mart

Kui LDAP server on seadistatud logima, siis tekib /var/log/syslog'i viimase päringuga seoses sissekanne

 Apr 11 09:42:49 arendus64 slapd[25883]: conn=670 fd=27 ACCEPT from IP=127.0.0.1:45114 (IP=0.0.0.0:389)
 Apr 11 09:42:49 arendus64 slapd[25883]: conn=670 op=0 BIND dn="" method=128
 Apr 11 09:42:49 arendus64 slapd[25883]: conn=670 op=0 RESULT tag=97 err=0 text=
 Apr 11 09:42:49 arendus64 slapd[25883]: conn=670 op=1 SRCH base="dc=auul" scope=2 deref=0 filter="(uid=mart)"
 Apr 11 09:42:49 arendus64 slapd[25883]: conn=670 op=1 SRCH attr=uid uidNumber gidNumber cn sn
 Apr 11 09:42:49 arendus64 slapd[25883]: conn=670 op=1 SEARCH RESULT tag=101 err=0 nentries=1 text=
 Apr 11 09:42:49 arendus64 slapd[25883]: conn=670 op=2 UNBIND
 Apr 11 09:42:49 arendus64 slapd[25883]: conn=670 fd=27 closed

Kust on näha

  • ACCEPT from IP=127.0.0.1:45114 - päringu sooritanud arvuti ip aadress
  • BIND dn="" - serverisse päringu esitamiseks kasutatud ühendusviis
  • RESULT tag=97 err=0 - kas ühendumine andis vigu
  • SRCH base="dc=auul" scope=2 deref=0 filter="(uid=mart)" - kasutatud otsingualus ning filter
  • SRCH attr=uid uidNumber gidNumber cn sn - küsitud atribuudid
  • SEARCH RESULT tag=101 err=0 nentries=1 text= - kas päringu tulemus andis vigu ja mitu vastust anti

Käsurea utiliitide kasutamine on vajalik LDAP kataloogi tööleseadmisel või veasituatsioonide lahendamisel, nö tavalisel kasutamisel võib aga oluliselt mugavam ja ülevaatlikum olla kasutada mõnde graafilise kasutajaliidesega LDAP klienti. Siinkohal tasub uurida moodustatud LDAP kataloogi Apache Directory Studio kliendiga, mille kasutamist on kirjeldatud punktis http://kuutorvaja.eenet.ee/wiki/OpenLDAP_kasutamine_Debianiga#Apache_Directory_Studio

Ligipääsuõigused kataloogile

Ligipääsuõigusi kataloogile saab kontrollida seadistusfailist /etc/ldap/slapd.conf direktiiviga access, vaikimisi on kasutusel sellised piirangud

 # The userPassword by default can be changed
 # by the entry owning it if they are authenticated.
 # Others should not be able to see it, except the
 # admin entry below
 # These access lines apply to database #1 only
 access to attrs=userPassword,shadowLastChange
        by dn="cn=admin,dc=auul" write
        by anonymous auth
        by self write
        by * none
 
 # The admin dn has full write access, everyone else
 # can read everything.
 access to *
        by dn="cn=admin,dc=auul" write
        by * read

mis tähendab, et

  • kasutaja parooli saab kasutada ainult autentimiseks
  • kasutaja parooli saab muuta ainult kasutaja ise ning kataloogi administraator
  • kataloogi administraatoril on kataloogile täielik ligipääs
  • kõik kasutajad saavad kataloogi sisu lugeda (va sissekannete parooli väli)

access direktiiv võib esineda seadistusfailis mitu korda, rakendatakse esimest päringuga klappivat direktiivi.

Keskse kasutajate halduse korraldamine

Selleks, et LDAP kliendiks olev arvuti saaks oma kasutajate andmed kataloogist peab paigaldama klientarvutisse paketid libnss-ldap, nscd ja libpam-ldap (alternatiiviks on kasutada libnss-ldapd lahendust libnss-ldap asemel, vt pala lõpust eraldi punkti)

 # apt-get install libnss-ldap libpam-ldap nscd

NSS ja libnss-ldap teegi kasutamine

libnss-ldap on traditsioonile teek, et laiendada glibc NSS funktsionaalsust ja võimaldada kasutada andmeid LDAP kataloogist. Paigaldamisel küsitakse järgmisi küsimusi

  • LDAP serveri aadress - nt ldaps://ldap.loomaaed.tartu.ee:636/ (kuigi konfiguraator soovitab kasutada ip aadressi tuleks kasutada krüptitud suhtlemisel domeeninime, et serveriga ühenduse tekitamisel takistusi ei tekiks)
  • LDAP kataloogi otsingualus (ingl. k. search base) - nt dc=auul
  • LDAP kataloogi versioon - nt 3
  • kas LDAP kataloogist andmete saamiseks on vaja sisse logida - No, käesoleva pala kontekstis ei ole seda vaja üldiselt
  • kas LDAP kataloogiga suhtlemisel LDAP kataloogi klientarvuti juurkasutajal (root) on erilised privileegid, st juurkastuaja sooritatud päringud tehakse kataloogi erinevalt kataloogi autentides - No, käesoleva pala kontekstis ei olse seda vaja üldiselt
  • milliste ligipääsupiirangutega on libnss-ldap seadistusfailid, Yes
  • meenutatakse, et libnss-ldap võimaluste kasutamiseks tuleb /etc/nsswitch.conf seadistusfaili käsitsi redigeerida faili /usr/share/doc/libnss-ldap/examples/nsswitch.ldap eeskujul

libnss-ldap seadistusfail on /etc/libnss-ldap.conf, kõigile loetav

 # egrep -v "^#|^$" /etc/libnss-ldap.conf 
 host 192.168.10.247
 base dc=auul
 ldap_version 3
 rootbinddn cn=admin,dc=auul
 
 # ls -ld /etc/libnss-ldap.conf 
 -rw-r--r-- 1 root root 9782 Apr 19 17:37 /etc/libnss-ldap.conf

SSL toe sisselülitamiseks tuleb kasutada lisaks kahte direktiivi

 ssl on
 tls_cacertfile /etc/ldap/loomaaed-juur-cert.pem

ning failis /etc/libnss-ldap.secret (loetav ainult juurkasutajale) hoitakse LDAP kataloogi privilegeeritud kasutaja parooli selleks, et nt passwd käsu abil saaks süsteemi juurkasutaja (root) muuta kasutajate paroole, justnagu oleks tegu lokaatsete kasutajatega (antud ülesandepüstituse kohaselt ei ole seda võimalust tarvis, seega võiks selle faili parem kustutada)

 # cat /etc/libnss-ldap.secret 
 ldapprivkasutajaparool
 
 # ls -l /etc/libnss-ldap.secret 
 -rw------- 1 root root 12 Apr 19 14:28 /etc/libnss-ldap.secret

Operatsioonüsteem kasutab NSS (Name Service Switch) süsteemi selleks, et arvuti tööks olulisi andmeid kindlaks teha. Muu hulgas näitab NSS seadistusfail /etc/nsswitch.conf, millistest allikatest neid andmeid saab. Süsteemi NSS seadistamiseks tuleb failis /etc/nsswitch.conf lisada passwd, group ja shadow andmebaaside juurde ldap, tulemus võiks olla nt selline

 passwd:         files ldap
 group:          files ldap
 shadow:         files ldap
 
 hosts:          files dns
 networks:       files
 
 protocols:      db files
 services:       db files
 ethers:         db files
 rpc:            db files
 
 netgroup:       nis

LDAP kataloogi kasutamise muudab efektiivsemaks nscd (name service caching daemon) kasutamine, käivitamiseks tuleb öelda, seejuures tuleb arvestada, et nscd salvestab ka negatiivseid vastuseid teatud tingimustel ja seetõttu on soovitav seda kasutada alles siis kui süsteem on ära seadistatud

 # /etc/init.d/nscd start

Tulemusena peab saama kliendist küsida nö lokaalsete kasutajate andmeid kusjuures tegelikult võetakse andmed LDAP kataloogist, nt

 # finger mart
 Login: mart                             Name: Mart Kask
 Directory: /home/mart                   Shell: /bin/bash
 On since Sat Apr 11 16:04 (UTC) on pts/2 from 192.168.10.10
    1 day idle
 No mail.
 No Plan.

Vahel võib nscd säilitada aegunud andmeid, siis on abiks mitte niivõrd nscd uuesti käima panna kuivõrd cache puhastada, nt öeldes

 # nscd -i passwd

Kasutajate ligipääsemine piiramine erinevatesse arvutitesse

Kui seni kirjeldatud moel saavad kõik LDAP kataloogis kirjeldatud kasutajad sisse logida kõigisse haldusala arvutitesse, siis praktiliselt oleks hea, kui saaks piirata millised kasutajad saavad sisse logida millistesse arvutitesse. Üks võimalus seda korraldada on ühelt poolt kasutajatega seostada täiendavad nö gruppi määratlevad tunnused (pigem võiks see grupp olla mingi muu grupp kui nn unix'i grupp) ning teiselt poolt iga arvuti seada kontrollima seda tunnust.

Nt kui arvutid jagunevad kolme gruppi

  • arenduskeskkonna arvutid
  • testkeskkonna arvutid
  • avaliku keskkonna arvutid

siis võiks iga kasutaja LDAP kataloogi sissekandes näidata ära väljal 'description' millisesse gruppi kuuluva kasutajaga on tegu, kusjuures kasutaja võib korraga omada kõiki kolme rolli.

libnss-ldap teegi abil saab sellist täiendavat kontrolli teostada kasutades seadistusfailis /etc/libnss-ldap.conf vastavaid parameetreid, nt nõuame, et arvutisse pääsevad ainult arendajad ja testijad

 nss_base_passwd   ou=people,dc=auul?one?|(description=arendaja)(description=testija)                   
 nss_base_shadow   ou=people,dc=auul?one?|(description=arendaja)(description=testija)

Selline tulemus on väga soovitav seetõttu, et kõnealuse arvuti jaoks ei olegi olemas muid kasutajaid peale nende, kes vastavad esitatud kriteeriumile '(&(uidNumber=*)(|(description=arendaja)(description=testija)))' nt võrreldes sellega, kui PAM moodulite juures hakata ebasobivaid kasutajaid välja filtreerima.

Kasutajate nimekirja saab küsida käsuga

 # getent passwd

PAM

Operatsioonisüsteem kasutab PAM (Pluggable Authentication Modules) süsteemi selleks, et erinevad programmid saaksid kasutajaid autentida.

Eelnevalt paigaldatud libpam-ldap teegi seadistusfailis /etc/pam_ldap.conf tuleb kasutada selliseid direktiive

 # egrep -v "^$|^#" /etc/pam_ldap.conf
 base dc=auul
 uri ldaps://ns.auul/
 ldap_version 3
 ssl on
 tls_cacertfile /etc/ldap/auul-ca-chain.pem

Nt selleks, et kasutajad saaksid ssh abil sisse logida, sobib PAM'i ssh seadistusfaili/etc/pam.d/sshd lisada vastavate sektsioonide (auth ja account) juurde sellised read

 auth       sufficient    /lib/security/pam_ldap.so
 account    sufficient   /lib/security/pam_ldap.so

Selleks, et kasutaja saaks oma parooli muuta peab sisalduma /etc/pam.d/common-passwd failis lisaks nt (aga antud ülesandepüstituse puhul ei ole seda muudatust tarvis teha)

 password sufficient pam_unix.so nullok md5
 password required pam_ldap.so try_first_pass

Kasutajate autentimine toimub selliselt

  • Sisselogimisel kasutaja sisestab kasutatava serveri, nt SSH serveri kliendile kasutajanime ja parooli
  • SSH serveri PAM moodul edastab selle kasutajanimi ja parooli LDAP serverile
  • LDAP server krüptib parooli nii nagu on sobiv kõnaaluse kasutaja userPassword krüptole ja sooritab võrdluse
  • LDAP server tagastab võrdluse tulemusel saadud vastuse PAM moodulile
  • PAM moodul tagastab saadud vastuse SSH kliendile

Siit järjeldub, et LDAP kataloogi kasutava süsteemi seisukohalt ei ole oluline, millises formaadis on paroole LDAP kataloogis säilitatakse.

nn passwd-group-shadow kasutajate migreerimine LDAP kataloogi

Nn /etc/passwd, /etc/group ja /etc/shadow kasutajate migreerimiseks LDAP kataloogi sobib kasutada aadressil http://www.padl.com/OSS/MigrationTools.html jagatavaid vahendeid.

Kasutajate kodukataloogide automaatne külge ja lahti ühendamine

Kasutajate kodukataloogide automaatne külge ja lahti ühendamine tähendab seda, et kui nt kasutaja mart logib süsteemi sisse, siis tema kodukataloog /home/mart ühendatakse külge NFS serverist

 $ df
 Filesystem           1K-blocks      Used Available Use% Mounted on
 /dev/sda2              4128448   1007152   2911584  26% /
 tmpfs                   131180         0    131180   0% /lib/init/rw
 udev                     10240        12     10228   1% /dev
 tmpfs                   131180         4    131176   1% /dev/shm
 192.168.10.249:/data/export/mart
                     16513960   2482936  13192168  16% /home/mart
 192.168.10.249:/data/export/priit
                     16513960   2482936  13192168  16% /home/priit

ja kui ta logib välja, siis see ühendatakse nt kümnete sekundite jooksul lahti (eeldusel, et sealt mingeid protsesse tööle ei jäänud). Võib öelda, et nii saavutatud tulemus on väga sarnane sellele, kuidas vaikimisi Solaris käitub selles mõttes.

Süsteem koosneb kolmest komponendist

  • NFS - jagab välja kasutajatele nende kodukatalooge
  • LDAP - autendib kasutajaid ning autoriseeb kasutama ressursse, nt kasutaja kodukataloogi
  • AutoFS - tagab, et peale kasutaja sisselogimist klientarvutisse ühendatakse tema kataloog külge

Süsteemi tööd iseloomustavad sellised asjaolud

  • LDAP'is on kirjeldatud 'ou=People,dc=auul' all kasutajad nö tavalisel moel; kasutajate grupid on kirjeldatud 'ou=Group,dc=auul' all
  • NFS servist saab klientarvutisse resursse külge ühendada
  • klientarvutis on seadistatud NSS ning nt ssh PAM moodul, et toimuks kasutaja autentimine vastu LDAP kataloogi
  • Klientarvutis on seadistatud käima AutoFS, kusjuures sedasi, et /home alla toimuvaid ühenduste tegemisel vajalikke seadistusi võetakse LDAP kataloogist (mitte nö /etc/auto.master ning /etc/auto.home failist)
  • kasutusel on kolm eraldi arvutit, NFS server, LDAP server ja klientarvuti

NFS'i ettevalmistamine

NFS serveris tuleb jagada välja kataloog

 # ls -ld /data/export/*
 drwxr-xr-x 2 10000  5000 4096 Apr 11 19:04 /data/export/mart
 drwxr-xr-x 2 10001  5000 4096 Apr 11 19:04 /data/export/priit

seadistusfailis /etc/exports, nt selliselt

 # cat /etc/exports
 /data/export 192.168.10.199(rw,no_root_squash,async,no_subtree_check)

Klienti tuleb paigaldada NFS kliendi jaoks vajalik tarkvara

 # apt-get install nfs-common

Eelduseks, et edasine töötaks, peavad NFS server ja klient peavad olema seadistatud selliselt, et kliendis saab ühendada tavapärasel viisil üle NFS'i külge kasutaja kodukataloogi, st peab töötama käsk

 # mount 192.168.10.249:/data/export/mart /home/mart

AutoFS'i ettevalmistamine

Klienti tuleb paigaldada AutoFS kasutamiseks koos LDAP'iga vajalik tarkvara

 # apt-get install autofs autofs-ldap

Kui NFS osas on iseenesest ettevalmistatud, maksab kontrollida, et autofs süsteem klientarvutis samuti töötab. Selleks sobib moodustada sellise sisuga /etc/auto.master fail

 # cat /etc/auto.master
 /home /etc/auto.home

ning sellise sisuga /etc/auto.home fail

 # cat /etc/auto.home
 mart    -ro,soft,intr       192.168.10.249:/data/export/mart

Seejärel tuleb käivitada autofs deemon ning veenduda, et kui öelda 'ls -l /home/mart', siis ühendatakse see kataloog külge NFS serverist.

Seejärel tuleb /etc/auto.master ja /etc/auto.home failide eest ära liigutada ning autofs uuesti käivitada

 # mv /etc/auto.master /etc/auto.master-local
 # mv /etc/auto.home /etc/auto.home-local
 # /etc/init.d/autofs stop && /etc/init.d/autofs start

Kliendi LDAP seadistused tuleb kirjeldada failis /etc/default/autofs

 LDAPURI="ldap://192.168.10.51/"
 LDAPBASE="ou=auto.master,ou=autofs,dc=auul"

Antud juhul käib küll suhtlemine LDAP kataloogiga avatekstina, kuid paroole see ei sisalda ja pole seega nii tundlik.

LDAP serveri ettevalmistamine

Eelmises punktis AutoFS kasutamise kontrollimiseks moodustatud seadistusfailide

 /etc/auto.master
 /etc/auto.home

rolli võtab üle LDAP kataloog.

Selleks, et LDAP kataloogi saaks moodustada autofs jaoks vajalikke sissekandeid, tuleb lisada LDAP serverisse vajalik nn skeem /etc/ldap/schema/autofs.schema. See on nt autofs-ldap paketi koosseisus ja tuleks kliendist kopeerida LDAP serveri kataloogi /etc/ldap/schema

 ldap-server# scp root@klient:/etc/ldap/schema/autofs.schema /etc/ldap/schema

ning lisada LDAP serveri seadistusfaili /etc/ldap/slapd.conf peale core. ja consine. skeeme, nt nii

 # Schema and objectClass definitions
 include         /etc/ldap/schema/core.schema
 include         /etc/ldap/schema/cosine.schema
 include         /etc/ldap/schema/autofs.schema
 include         /etc/ldap/schema/nis.schema
 include         /etc/ldap/schema/inetorgperson.schema

Peale seda muudatust tuleb LDAP serveri uuesti käivitada.

Järgnevalt tuleb moodustada LDAP kataloogi AutoFS jaoks vajalikud sissekanded.

  • /etc/auto.master failis toodud andmetega on samaväärsed sellised LDAP kataloogi sissekanded (kaks reavahetust on .ldif'is vajalikud)
 dn: ou=autofs,dc=auul
 ou: autofs
 objectClass: top
 objectClass: organizationalUnit
 
 
 dn: ou=auto.master,ou=autofs,dc=auul
 ou: auto.master
 objectClass: top
 objectClass: automountMap
 
 
 dn: cn=/home,ou=auto.master,ou=autofs,dc=auul
 objectClass: automount
 cn: /home
 automountInformation: ldap:192.168.10.51:ou=auto.home,ou=autofs,dc=auul

Antud juhul hakkab küll toimuma suhtlemine LDAP kataloogiga avatekstina, kuid paroole see ei sisalda ja pole seega nii tundlik.

Selle info sisestamiseks kataloogi tuleb ülaltoodud tekst salvestada faili /tmp/auto.master.ldif ning öelda

 $ ldapadd -c -x -D cn=admin,dc=auul -w parool -f /tmp/auto.master.ldif
 adding new entry "ou=autofs,dc=auul"
 adding new entry "ou=auto.master,ou=autofs,dc=auul"
 adding new entry "cn=/home,ou=auto.master,ou=autofs,dc=auul"

Sisestatud andmete kontrollimiseks sobib öelda, nt

 $ ldapsearch -LLL -x -b "ou=auto.master,ou=autofs,dc=auul" "(objectClass=automountMap)"
 dn: ou=auto.master,ou=autofs,dc=auul
 ou: auto.master
 objectClass: top
 objectClass: automountMap

Märkusena olgu öeldud, et selline ldap kataloogi sisu on samaväärne /etc/auto.master faili reaga

 /home ldap:192.168.10.51:ou=auto.home,ou=autofs,dc=auul rsize=8192,wsize=8192 --timeout=10
  • /etc/auto.home failis toodud andmetega on samaväärsed LDAP kataloogi sissekanded
 dn: ou=auto.home,ou=autofs,dc=auul
 ou: auto.home
 objectClass: top
 objectClass: organizationalUnit
 
 
 dn: cn=mart,ou=auto.home,ou=autofs,dc=auul
 cn: mart
 objectClass: automount
 automountInformation: -rsize=8192,wsize=8192,intr 192.168.10.249:/data/export/mart

Selle info sisestamiseks kataloogi tuleb ülaltoodud tekst salvestada faili /tmp/auto.home.ldif ning öelda

 $ ldapadd -c -x -D cn=admin,dc=auul -w parool -f /tmp/auto.home.ldif
 adding new entry "ou=auto.home,ou=autofs,dc=auul"
 adding new entry "cn=mart,ou=auto.home,ou=autofs,dc=auul"

Sisestatud andmete kontrollimiseks sobib öelda

 $ ldapsearch -LLL -x -b "ou=auto.home,ou=autofs,dc=auul" "(objectClass=automount)"
 dn: cn=mart,ou=auto.home,ou=autofs,dc=auul
 cn: mart
 objectClass: top
 objectClass: automount
 automountInformation: -rsize=8192,wsize=8192,intr 192.168.10.249:/data/export

Lisaks neile sissekannetele peab olema kataloogis nö tavaline sissekanne kasutaja mart jaoks.

NSS ettevalmistamine

Selleks, et vastu LDAP kataloogi seadistatud autofs käivituks ning kasutajate kodukatalooge hakataks külge ühendama, tuleb /etc/nsswitch.conf faili lisada

 automount:      files ldap

Süsteemi kasutamine

Kui süsteemi ettevalmistused õnnestusid, siis peab saama logida sisse kasutajana kusjuures kasutaja kodukataloog ühendati külge NFS serverist.

Ldap-nfs-1.gif

Süsteemi kasutajate halduseks saab põhimõtteliselt kasutada ldapadd, ldappasswd jt programme ning nt .ldif faile, kuid tõenäoliselt on mugavam kui tekitada pisike veebipõhine haldusliides. Teine variant oleks kasutada mõnda visuaalsemat utiliiti, nt Apache Directory Studio LDAP kataloogi klienti.

Icedove'i aadressraamatu pidamine

Kui juba LDAP kataloogi pidada, siis on tõenäoliselt mõistlik seal selliseid sissekandeid kasutada, kus on kirjas ka kasutaja eposti aadressi ning sertfikaat, millega saab nt kirju välja saades neid krüptida.

Selleks, et saaks kasutada mail atribuuti võeti alguses kasutusele objectClass inetOrgPerson, ühele sissekandele vastav ldif võiks välja näha nt selline

 dn: uid=imre,ou=people,dc=auul
 uid: imre
 uidNumber: 10007
 gidNumber: 5000
 givenName: Imre
 cn: Imre Oolberg
 sn: Imre
 objectClass: top
 objectClass: person
 objectClass: posixAccount
 objectClass: shadowAccount
 objectClass: inetOrgPerson
 loginShell: /bin/bash
 homeDirectory: /home/imre
 mail: imre.oolberg@eesti.ee
 usercertificate;binary:: MIIEGjCCAwKgAwIBAgIESIQxaDANBgkqhkiG9w0BAQUFADBbMQswC
  QYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEPMA0GA1UECxMGRV
  NURUlEMRcwFQYDVQQDEw5FU1RFSUQtU0sgMjAwNzAeFw0wODA3MjEwNjQ5MTJaFw0xMjA5MTEyMTA
  wMDBaMIGRMQswCQYDVQQGEwJFRTEPMA0GA1UEChMGRVNURUlEMRcwFQYDVQQLEw5hdXRoZW50aWNh
  dGlvbjEhMB8GA1UEAxMYT09MQkVSRyxJTVJFLDM3MDAzMjEyNzEzMRAwDgYDVQQEEwdPT0xCRVJHM
  Q0wCwYDVQQqEwRJTVJFMRQwEgYDVQQFEwszNzAwMzIxMjcxMzCBnzANBgkqhkiG9w0BAQEFAAOBjQ
  AwgYkCgYEA3FR0AP2oX5NCs8+u/hNpnYWyB2eNrnWyG3JXsiqCo14uAaOVmMb82g73SRLPEnAGyxU
  /GtRuKT7iOg4f+HTy9bGBaJp6/N9uH8MNtkOzoDppMn909Rm+OqIaHMQkskFCKd8X3deAtEwI/Yek
  tKKnPbFEZFfLxLKbxvB4WNhFbYECA1W7daOCATEwggEtMA4GA1UdDwEB/wQEAwIEsDAdBgNVHSUEF
  jAUBggrBgEFBQcDAgYIKwYBBQUHAwQwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL3d3dy5zay5lZS
  9jcmxzL2VzdGVpZC9lc3RlaWQyMDA3LmNybDAgBgNVHREEGTAXgRVpbXJlLm9vbGJlcmdAZWVzdGk
  uZWUwUQYDVR0gBEowSDBGBgsrBgEEAc4fAQEBATA3MBIGCCsGAQUFBwICMAYaBG5vbmUwIQYIKwYB
  BQUHAgEWFWh0dHA6Ly93d3cuc2suZWUvY3BzLzAfBgNVHSMEGDAWgBRIBt6+jIdXlYB4Y/qcIysro
  DoYdTAdBgNVHQ4EFgQUvIL+20MDRof3J9Avt6Z3d1obuAUwCQYDVR0TBAIwADANBgkqhkiG9w0BAQ
  UFAAOCAQEAajU/cJ7zVocAkJDgIrV8gXn3hZ9CM5k1/W3GVEEXqkdTHU/clW5D14PmC+f2a7rN2Fx
  J3bQuxU/xB6W4xKDZ9fysY31lGxpPHIsHwqaPl93l1u3iaMo9835yMVfiZOi0Iq2y0ZlnPwVAOjWN
  UzMwikdj1ElhnHacFc4NrevOqgaOZIN2A1DIDgxMXLiR8PAHlPSnK8cXnClRXgcIT3p4OPYyrH6z7
  z5vZN4059dNaqZqVg5rlVrLS5/T+sK8PHxYcO+SKDZYobddJIv6i2XlpVAQLgkChEiXI2Bd3AMfpw
  fVbAjDsHXasblBtut7k1MItT3YLaNZ/xq9BY/B7afXqg==

Icedove aadressraamatu kasutamiseks tuleb esmalt Icedove'is ldap kataloog ära kirjeldada valides

 Edit -> Preferences -> Composition -> Addressing -> Edit Directories -> Add

Icedove-aadressraamat-1.gif

Ning seejärel valida samas Addressing aknas linnuke Directory Server juurde ning nimekirjast valida kirjeldatud kataloog.

Selleks, et saaks kirju krüptida tuleb lisaks valida konto omaduste juures sama addressraamat

 Edit -> Account Settings -> Compositon & Addressing -> Use a different LDAP server -> Edit Directories

Kirjeldatud aadressraamatu kasutamiseks tuleb asuda koostama kirja tavapärasel moel, kuid selle asemel, et käsitsi kirjutada välja To: või Cc: sissekanded sobib valida sama kirja koostamise aknas

 Contacts -> Search For -> märksõna (kogu nimekirja kuvamiseks tühik)

Seejärel esitab Icedove LDAP serverile sellise päringu

 Apr 11 17:44:54 arendus64 slapd[25883]: conn=1447 fd=29 ACCEPT from IP=192.168.10.101:47782 (IP=0.0.0.0:389)
 Apr 11 17:44:54 arendus64 slapd[25883]: conn=1447 op=0 BIND dn="cn=admin,dc=auul" method=128
 Apr 11 17:44:54 arendus64 slapd[25883]: conn=1447 op=0 BIND dn="cn=admin,dc=auul" mech=SIMPLE ssf=0
 Apr 11 17:44:54 arendus64 slapd[25883]: conn=1447 op=0 RESULT tag=97 err=0 text=
 Apr 11 17:44:54 arendus64 slapd[25883]: conn=1447 op=1 SRCH base="ou=people,dc=auul" \
   scope=2 deref=0 filter="(|(mail=**)(cn=* *)(givenName=* *)(sn=* *))"
 Apr 11 17:44:54 arendus64 slapd[25883]: conn=1447 op=1 SRCH attr=cn commonname o company title\
   modifytimestamp mozillaHomeUrl homeurl st region mozillaCustom2 custom2 mozillaHomeCountryName \
   description notes ou department departmentnumber orgunit mobile cellphone carphone \
   mozillaHomeState mozillaCustom1 custom1 mozillaNickname xmozillanickname mozillaWorkUrl workurl \
   fax facsimiletelephonenumber telephoneNumber mozillaHomeStreet mozillaSecondEmail \
   xmozillasecondemail mozillaCustom4 custom4 nsAIMid nscpaimscreenname street streetaddress \
   postOfficeBox homePhone givenName mozillaHomePostalCode mozillaHomeLocalityName \
   mozillaWorkStreet2 mozillaUseHtmlMail xmozillausehtmlmail mozillaHomeStreet2 postalCode zip c \
   countryname pager pagerphone mail sn surname mozillaCustom3 custom3 l locality birthyear

Kui kiri krüptida, siis esitab Icedove LDAP serverile sellise päringu

 Apr 11 17:47:27 arendus64 slapd[25883]: conn=1449 op=1 SRCH base="ou=people,dc=auul" \
   scope=2 deref=0 filter="(mail=imre.oolberg@eesti.ee)"
 Apr 11 17:47:27 arendus64 slapd[25883]: conn=1449 op=1 SRCH attr=usercertificate;binary

Siit on ka näha, miks konkreetselt Eesti oludes võiks erilist huvi pakkuda ID-kaardi sertifikaatide hoidmine lokaalses LDAP serveris. Kuna ldap.sk.ee võimaldab otsida kasutaja sertifikaati ainult kasutaja isikukoodi (serialNumber) alusel, aga Icedove otsib mail attribuudi abil, siis praktiliselt ei saa postiklienti kasutada ldap.sk.ee kataloogiga.

LDAP üle SSL'i

Äärmiselt oluline on seadistada LDAP kataloogi kasutamine nii, et vastav võrguliiklus oleks krüptitud. Vastasel korral on võimalik triviaalselt liiklust salvestades saada teada LDAP kataloogi kasutajate paroolid.

LDAP serveri seadistamine

LDAP klient saab kasutada kataloogi turvaliselt üle avaliku võrgu kui saranaselt veebiserverile kirjelda LDAP serveri seadistusfailis võtmete kasutamine, põhimõtteliselt nt selliselt

 TLSCACertificateFile /etc/ldap/loomaaed-ca.pem
 TLSCertificateFile /etc/ldap/ldap.loomaaed.tartu.ee-cert.pem
 TLSCertificateKeyFile /etc/ldap/ldap.loomaaed.tartu.ee-key.pem

Konkreetselt Lenny puhul tuleb kogu ahel kirjutada TLSCertificateFile parameetriks olevasse faili (seoses GnuTLS iseärasustega), kõige lõppu CA sertifikaat ning üleval kõige täpsem, so selle domeeninimega sertifikaat, mida kasutatakse LDAP kataloogi poole pöördumiseks

 TLSCertificateFile /etc/ldap/ldap.loomaaed.tartu.ee-cert-ja-ahel.pem
 TLSCertificateKeyFile /etc/ldap/ldap.loomaaed.tartu.ee-key.pem

Lisaks tuleb /etc/default/slapd seadistusfailis näidata parameeter

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

Tulemusena kuulab LDAP server pordil 636. Ühendust saab testida nt gnutls-cli abil selliselt

 $ gnutls-cli --print-cert ldap.loomaaed.tartu.ee -p 636 --x509cafile loomaaed-ca.pem
 Processed 1 CA certificate(s).
 Resolving 'ldap.loomaaed.tartu.ee'...
 Connecting to '192.168.10.247:636'...
 - Certificate type: X.509
  - Got a certificate list of 3 certificates.
 ...
 - Peer's certificate is trusted
 - Version: TLS1.1
 - Key Exchange: RSA
 - Cipher: AES-128-CBC
 - MAC: SHA1
 - Compression: NULL
 - Handshake was completed
 
 - Simple Client Mode:
 
 
 ^]quit

Siinjuures on oluline kasutada pöördumisel õiget domeenime, st seda sama, mis sisaldub LDAP serveri sertifikaadi CN väljal.

LDAP kliendi seadistamine

LDAP kliendi kasutamisel, mis kasutab /etc/ldap/ldap.conf faili on oluline kirjeldada selles failis parameetrid, samuti kasutades korrektset domeeninime

 BASE  dc=auul
 URI   ldaps://ldap.loomaaed.tartu.ee:636
 TLS_CACERT /etc/ldap/loomaaed-juur-cert.pem

Kui mingil põhjusel ei ole võimalik korrektset domeenime kasutada, siis sobib kasutada lisaks parameetrit

 TLS_REQCERT    never

/etc/libnss-ldap.conf failis tuleb turvalise andmevahetuse pidamiseks kasutada parameetrit

 uri ldaps://ldap.loomaaed.tartu.ee:636

ning lisaks parameetreid

 ssl on
 tls_cacertfile /etc/ldap/loomaaed-ca.pem

Debugimisel võib olla abi asjalust, kas serveriga ühenduse loomisel TLS läbirääkimised ebaõnnestusid

 Apr 19 20:43:30 ns slapd[1945]: conn=11 fd=18 ACCEPT from IP=192.168.1.4:46069 (IP=0.0.0.0:636)
 Apr 19 20:43:30 ns slapd[1945]: conn=11 fd=18 closed (TLS negotiation failure)

või läbirääkimised iseenesest õnnestusid, aga nt klient lõpetas seejärel suhtlemise (nt kuna ta ei suutnud piisavalt kontrollida serveri autentsust)

 Apr 19 22:55:45 ns slapd[2622]: conn=30 fd=16 ACCEPT from IP=192.168.1.4:59745 (IP=0.0.0.0:636)
 Apr 19 22:55:45 ns slapd[2622]: conn=30 fd=16 TLS established tls_ssf=128 ssf=128
 Apr 19 22:55:45 ns slapd[2622]: conn=30 fd=16 closed (connection lost)

LDAP kliendid

Tundub, et 2009 aastal on populaarsed sellised LDAP kliendid

Apache Directory Studio

Apache Directory Studio http://directory.apache.org/studio/ tundub olevat kõige parem tasuta kasutamiseks mõeldud ja avatud lähtekoodiga graafilise kasutajaliidesega LDAP klient. Apache Directory Studio töötab Java platvormil ja põhinedes Eclipse'il.

Peale tarkvara kopeerimist ning käivitamist

 $ export JAVA_HOME=/usr/local/jdk1.6.0_14 
 $ export PATH=/usr/local/jdk1.6.0_14/bin:$PATH
 $ /usr/local/ads/ApacheDirectoryStudio

tuleb

  • näidata millises arvutis LDAP kataloog asub

Ads-2.gif

  • millise kasutajana ja kuidas autentides kataloogi sisse logida

Ads-3.gif

  • lisaks saab seadistada LDAP brauseri käitumist mõjutavaid parameetreid

Ads-4.gif

Töötavas olekus paistab Apache Directory Studio välja selline

Ads-1.gif

Kasutaja seadistused asuvad kataloogis ~/.ApacheDirectoryStudio, nt failis

~/.ApacheDirectoryStudio/.metadata/.plugins/org.apache.directory.studio.connection.core/connections.xml

Lisaks peab olema kasutajale kirjutatav kataloog

/opt/ApacheDirectoryStudio-linux-x86_64-1.5.3.v20100330/configuration

ldap-utils

Debiani paketihaldusest, ldapsearch jt nn ldap* programmid, kasutamine käsurealt.

Luma

Luma on graafiline LDAP klient Debian Lennile, http://luma.sourceforge.net/, hangub mõõduka sagedusega

Luma-1.gif

GQ

GQ on graafiline LDAP kliend Debian Etchile, http://sourceforge.net/projects/gqclient, ei võimalda salvestada seadistusi LDAP ühenduste kohta st pisut ebamugav seetõttu kasutada

PhpMyLdap

phpmyldap on veebipõhine LDAP server haldusliides, http://sourceforge.net/projects/phpmyldap/.

Märkused

  • Kuid justkui kõik on korras, aga 'id mark' ei vasta, aga samal ajal nt 'finger mart' või getent töötavad, võib põhjuseks olla asjaolu, et nscd on töötanud ning on sooritatud mingil põhjusel negatiivse vastuse andnud päringuid. Aitab /etc/init.d/nscd uuesti käivitamine.

NSS ja libnss-ldapd kasutamine

Pala põhiosas kirjeldati NSS teegi libnss-ldap kasutamist, vähamalt Debiani all on olemas ka alternatiiv libnss-ldapd näol. Kasutamine toimub põhimõtteliselt sarnaselt, mõnel juhul erineb seadistusfailide süntaks.

Süsteemi NSS seadistamiseks tuleb failis /etc/nsswitch.conf kasutada sarnaselt väärtusi

 passwd:         files ldap
 group:          files ldap
 shadow:         files ldap

Lisaks tuleb näidata libnss-ldapd paketist paigaldatud deemoni nslcd seadistusfailis /etc/nss-ldapd.conf LDAP serveri kohta andmed

 uid nslcd
 gid nslcd
 
 # The location at which the LDAP server(s) should be reachable.
 uri ldap://192.168.10.51
 
 # The search base that will be used for all queries.
 base dc=auul
   
 # The DN to bind with for normal lookups.
 # Vaikimisi juhtumil sobib anonüümne serveri poole pöördumine andmete lugemiseks
 # binddn cn=admin,dc=auul
 # bindpw parool

ning deemon käivitada

 # /etc/init.d/nslcd start

Tulemusena peab saama kliendist küsida nö lokaalsete kasutajate andmeid kusjuures tegelikult võetakse andmed LDAP kataloogist, nt

 # finger mart
 Login: mart                             Name: Mart Kask
 Directory: /home/mart                   Shell: /bin/bash
 On since Sat Apr 11 16:04 (UTC) on pts/2 from 192.168.10.10
    1 day idle
 No mail.
 No Plan.
Kasutajate ligipääsemine piiramine erinevatesse arvutitesse

Kui seni kirjeldatud moel saavad kõik LDAP kataloogis kirjeldatud kasutajad sisse logida kõigisse haldusala arvutitesse, siis praktiliselt oleks hea, kui saaks piirata millised kasutajad saavad sisse logida millistesse arvutitesse. Üks võimalus seda korraldada on ühelt poolt kasutajatega seostada täiendavad nö gruppi määratlevad tunnused (pigem võiks see grupp olla mingi muu grupp kui nn unix'i grupp) ning teiselt poolt iga arvuti seada kontrollima seda tunnust.

Nt kui arvutid jagunevad kolme gruppi

  • arenduskeskkonna arvutid
  • testkeskkonna arvutid
  • avaliku keskkonna arvutid

siis võiks iga kasutaja LDAP kataloogi sissekandes näidata ära väljal 'description' millisesse gruppi kuuluva kasutajaga on tegu, kusjuures kasutaja võib korraga omada kõiki kolme rolli.

nslcd abil saab sellist täiendavat kontrolli teostada kasutades seadistusfailis /etc/nss-ldapd.conf parameetrit, nt nõuame, et arvutisse pääsevad ainult arendajad ja testijad

 filter  passwd  (&(uidNumber=*)(|(description=arendaja)(description=testija)))

nslcd deemonit võib olla süsteemi käimaseadmisel hea nt selliselt debugida

 # nslcd -d
 nslcd: DEBUG: add_uri(ldap://192.168.10.51)
 nslcd: version 0.6.7 starting
 nslcd: DEBUG: unlink() of /var/run/nslcd/socket failed (ignored): No such file or directory
 nslcd: DEBUG: setgroups(0,NULL) done
 nslcd: DEBUG: setgid(111) done
 nslcd: DEBUG: setuid(108) done
 nslcd: accepting connections
 
 nslcd: [3c9869] DEBUG: connection from pid=12546 uid=0 gid=0
 nslcd: [3c9869] DEBUG: nslcd_passwd_all()
 nslcd: [3c9869] DEBUG: myldap_search(base="dc=auul", \
   filter="(&(uidNumber=*)(|(description=arendaja)(description=testija)))")
 nslcd: [3c9869] DEBUG: simple bind to ldap://192.168.10.51 as cn=admin,dc=auul
 nslcd: [3c9869] connected to LDAP server ldap://192.168.10.51
 nslcd: [3c9869] DEBUG: ldap_result(): end of results

Selline tulemus on väga soovitav seetõttu, et kõnealuse arvuti jaoks ei olegi olemas muid kasutajaid peale nende, kes vastavad esitatud kriteeriumile '(&(uidNumber=*)(|(description=arendaja)(description=testija)))' nt võrreldes sellega, kui PAM moodulite juures hakata ebasobivaid kasutajaid välja filtreerima.

Kasutajate nimekirja saab küsida käsuga

 # getent passwd

LDAP filtri kasutamine

Küsime grupi arendaja liikmete nimekirja

 $ ldapsearch -LLL -x -H ldaps://ldap.loomaaed.tartu.ee -D "cn=admin,dc=loomaaed,dc=tartu,dc=ee" -w parool -b \
   "dc=group,dc=loomaaed,dc=tartu,dc=ee" "(cn=arendaja)" memberUid

Küsime nimekirja kasutajatest, kelle descriptioniks on arendaja või testija

 $ ldapsearch -LLL -x -H ldaps://ldap.loomaaed.tartu.ee -D "cn=admin,dc=loomaaed,dc=tartu,dc=ee" -w parool -b \
   "dc=loomaaed,dc=tartu,dc=ee" "(&(uidNumber=*)(|(description=arendaja)(description=testija)))" uid

Kasutaja autentimine Kerberosega

Kerberose kasutaja autentimiseks Kerberosega peab olema kasutada Kerberose infrastruktuur, nt selline nagu kirjeldatud tekstis MIT Kerberose kasutamine Debianiga. Esmalt tuleb lisada OpenLDAP serverisse teenuse keytab öeldes seal

# kadmin -p priit/admin -q "addprinc -randkey ldap/ldap.loomaaed"
# kadmin -p priit/admin -q "ktadd -k /etc/ldap/krb5.keytab ldap/ldap.loomaaed"
# chown openldap /etc/ldap/krb5.keytab

OpenLDAP serveri seadistusfaili /etc/ldap/slapd.conf tuleb lisada

sasl-realm LOOMAAED

faili /etc/default/slapd tuleb lisada selleks, et slapd deemon oskaks kasutada oma teenuse keytab faili

export KRB5_KTNAME=/etc/ldap/krb5.keytab

ning tekitada fail /etc/ldap/sasl2/slapd.conf sisuga

mech_list: GSSAPI

OpenLDAP klient tuleb seadistada tavalisel viisil näidates /etc/ldap/ldap.conf failis LDAP kataloogi asukoha, nt

BASE    dc=loomaaed
URI     ldap://ldap.loomaaed

Kontrolliks sobib peale kinit'iga Kerberose pileti hankimist öelda nt

$ ldapwhoami 
SASL/GSSAPI authentication started
SASL username: priit@LOOMAAED
SASL SSF: 56
SASL data security layer installed.
dn:uid=priit,cn=loomaaed,cn=gssapi,cn=auth

Lisaks peaks töötama ka ilma -x liputa ldapsearch, nt öeldes

$ ldapsearch -LLL "(uid=priit)" uid uidNumber gidNumber cn sn
SASL/GSSAPI authentication started
SASL username: priit@LOOMAAED
SASL SSF: 56
SASL data security layer installed.
dn: uid=priit,ou=people,dc=loomaaed
uid: priit
uidNumber: 10001
gidNumber: 10001
cn: Priit Kask
sn: Kask

Kui lisada /etc/ldap/slapd.conf seadistusfaili read

authz-regexp
  uid=(.*),cn=loomaaed,cn=gssapi,cn=auth
  uid=$1,ou=people,dc=loomaaed

siis vastab tehakse teisendus ning OpenLDAP vastab

$ ldapwhoami 
SASL/GSSAPI authentication started
SASL username: priit@LOOMAAED
SASL SSF: 56
SASL data security layer installed.
dn:uid=priit,ou=people,dc=loomaaed

Kasulikud lisamaterjalid