Usługi katalogowe - OpenLDAP

Instalujemy OpenLDAP w wersji najnowszej (2.6) z wykorzystaniem własnego repozytorium pakietów:

pkg install net/openldap26-client net/openldap26-sasl-server 

Wstępna konfiguracja

Konieczność przegrania pliku konfiguracyjnego dla db1:

cp -p /usr/local/etc/openldap/DB_CONFIG.example /var/db/openldap-data/DB_CONFIG

Przykładowy plik LDIF na początek

dn:     dc=mojadomena,dc=pl
objectClass:    top
objectClass:    dcObject
objectClass:    organization
dc:     mojadomena
o:      Moja Super Organizacja Biznesowa

dn:     cn=ldap-manager,dc=mojadomena,dc=pl
objectClass:    top
objectClass: person
objectClass: uidObject
objectClass: organizationalPerson
cn:     ldap-manager
uid:    ldap-manager
sn:     ldap-manager

dn:     ou=admins,dc=mojadomena,dc=pl
objectClass: organizationalUnit
objectClass: top
ou:     admins

dn:     ou=ftpd,dc=mojadomena,dc=pl
objectClass: organizationalUnit
objectClass: top
ou:     ftpd

dn:     ou=smtpd,dc=mojadomena,dc=pl
objectClass: organizationalUnit
objectClass: top
ou:     smtpd

Aby móc następnie ją dodać (zainicjować):

slapadd -l /usr/local/etc/openldap/base.ldiff
slappasswd -s <MojeHasloDlaRoota>

Dogranie potrzebnych schematów dodatkowych

Za pomocą skryptu updum w razie konieczności trzeba dograć brakujące schematy dla OpenLDAP, takie jak poczta, czy obsługa PureFTPd.

slapd.conf

Właściwie to jest aktualnie najlepszy z możliwych. Może nie ma wypasu jeśli chodzi o SASL do autentykacji, dość otwarty, ale za to działający bez zarzutu:

include         /usr/local/etc/openldap/schema/core.schema
include         /usr/local/etc/openldap/schema/cosine.schema
include         /usr/local/etc/openldap/schema/inetorgperson.schema
include         /usr/local/etc/openldap/schema/nis.schema
include         /usr/local/etc/openldap/schema/openldap.schema
include         /usr/local/etc/openldap/schema/misc.schema
include         /usr/local/etc/openldap/schema/qmail.schema
include         /usr/local/etc/openldap/schema/pureftpd.schema
include         /usr/local/etc/openldap/schema/dnsdomain2.schema   # unused (???)
include         /usr/local/etc/openldap/schema/horde.schema
include         /usr/local/etc/openldap/schema/samba.schema

modulepath      /usr/local/libexec/openldap:/usr/local/lib
moduleload      back_mdb.la
moduleload      back_monitor.la

##schemacheck   on
#security       ssf=1 update_ssf=112 simple_bind=64

pidfile         /var/run/openldap/slapd.pid
argsfile        /var/run/openldap/slapd.args

# Access Control List:
access to dn.subtree="ou=ftpd,dc=mojadomena,dc=local"
        by dn="uid=pureftpd,ou=admins,dc=mojadomena,dc=local" read
        by self write
        by * auth

access to dn.subtree="ou=moind,dc=mojadomena,dc=local"
        by dn="uid=moinmaster,ou=admins,dc=mojadomena,dc=local" read
        by self write
        by * auth

access to attrs=userPassword
        by anonymous auth
        by self write
        by dn="cn=dmv,dc=mojadomena,dc=local" write
        by dn="uid=moinmaster,ou=admins,dc=mojadomena,dc=local" read
        by * none

access to attrs=sambaLMPassword,sambaNTPassword
        by dn.exact="uid=samba_servers,ou=admins,dc=mojadomena,dc=local" read
        by * none

access to *
        by dn="cn=dmv,dc=mojadomena,dc=local" write
        by self write
        by * read

allow           bind_v2

sasl-realm              www.mojadomena.pl
sasl-host               localhost.mojadomena.pl
#sasl-secprops          noanonymous
sasl-secprops           none
sasl-authz-policy       any

#loglevel       23

# mapowanie SASLa
#
sasl-regexp     uid=(.*),cn=mojadomena.pl,cn=.*,cn=auth uid=$1,ou=admins,dc=mojadomena,dc=local

#       ldap:///dc=admins,dc=mojadomena,dc=local?sub?(&(uid=$1)(objectClass=person))

TLSCipherSuite          HIGH:MEDIUM:+SSLv3:RSA
TLSCertificateFile      /usr/local/etc/ssl/server-signed.pem
TLSCertificateKeyFile   /usr/local/etc/ssl/server-crt.pem
#TLSCACerticateFile     /usr/local/etc/ssl/ca-cert.pem
#TLSCACertificatePath   /usr/local/etc/ssl
TLSVerifyClient         allow

database        mdb
suffix          "dc=mojadomena,dc=local"
rootdn          "cn=superadmin,dc=mojadomena,dc=local"
rootpw          <wynik_polecenia_slappasswd>

directory       /var/db/openldap-data

index   objectClass     eq
index   cn              pres,sub,eq
index   sn              pres,sub,eq
index   uid             pres,sub,eq
index   displayName     pres,sub,eq
index   uidNumber                eq
index   gidNumber               eq
index   memberUID               eq
index   sambaSID                eq
index   sambaPrimaryGroupSID    eq
index   sambaDomainName         eq
index   mail            eq,sub
index   givenname       eq
# index mailalias       sub
index   associatedDomain        pres,eq,sub
index   aAAARecord      pres,eq
index   aRecord         pres,eq
index   default                 sub

rc.conf

Do pliku /etc/rc.conf trzeba dodać następujące linie:

slapd_enable="YES"
slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap:/// ldaps:///"'
slapd_sockets="/var/run/openldap/ldapi"

Dodawanie indeksów

Na podstawie logów (/var/log/debug.log) wyszła konieczność dodania indeksów dla atrybutów związanych z kontami mailowymi.

Rozbudowa konfiguracji

# /usr/local/etc/openldap/slapd.conf
index accountStatus eq
index mailAlternateAddress,mailForwardingAddress eq

Wykonanie reindeksacji

Po zapisanie zmian należy wykonać reindeksację bazy OpenLDAP:

service slapd stop
slapindex -v
service slapd start

Replikacja OpenLDAP

Dodanie opcji przy kompilowaniu serwera

Należy się upewnić, że serwer jest skompilowany z opcją SYNCPROV - wymóg, aby replikacja działała

Utworzenie odpowiedniego użytkownika w OpenLDAP

Najlepiej jest utworzyć specjalne konto (SSO) w bazie OpenLDAP, które będzie posiadać uprawnienia do czytania wszystkich atrybutów w celu replikacji danych. Przykładowy użytkownik:

dn: uid=lsyncmaster,ou=admins,dc=bsdserwis,dc=local
objectClass: account
objectClass: simpleSecurityObject
objectClass: top
uid: lsyncmaster

Uprawnienia w slapd.conf

Użytkownik do replikacji musi mieć możliwość "zajrzenia" we wszystkie zakamarki:

access to attrs=userPassword
[...]
        by dn.exact="uid=lsyncmaster,ou=admins,dc=bsdserwis,dc=local" read

access to *
        by dn.exact="uid=lsyncmaster,ou=admins,dc=gdbd,dc=local" read

Analogicznie pozostałe drzewa, atrybuty z ograniczeniami

Dodanie replikacji w serwerze master

# dodanie modu/lu syncprov (w sekcji /ladowania modu/l/ow)
moduleload      syncprov.la

# [...]

index   entryCSN,entryUUID      eq

# timestamp (for replication)
#
lastmod         on

# replication
#
overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 10

Dodanie replikacji w serwerze slave

syncrepl        rid=1
                provider=ldap://192.168.128.16
                type=refreshOnly
                interval=00:00:30:00 retry="60 10 300 +"
                searchbase="dc=bsdserwis,dc=local"
                filter="(objectClass=*)"
                attrs="*"
                scope=sub
                schemachecking=off
                bindmethod=simple
                binddn="uid=lsyncmaster,ou=admins,dc=bsdserwis,dc=local"
                credentials=__hasło_plain_tekst__

updateref       ldap://192.168.128.16

Źródła w sieci internet

Przejście z konfiguracji statycznej do olc (cn=config)

OpenLDAP umożliwia migrację konfiguracji ze statycznych plików, do konfiguracji utrzymywanej w samej bazie (on-line configuraction). Powstaje gałąź cn=config, którą można zasilać poprzez pliki ldapadd/ldapmodify albo poprzez slaptest:

# zatrzymanie serwera
/usr/local/etc/rc.d/slapd stop

cd /usr/local/etc/openldap

# utworzenie katalogu pomoczniczego
mkdir -p slap.d

# konwersja konfiguracji
slaptest -f slapd.conf -F slapd.d

chmod -R 0750 slapd.d

# usuni/ecie pliku konfiguracyjego
mv slapd.conf slapd.conf.bak

rc.conf

slapd_cn_config="YES"

Sprawdzenie zawartości gałęzi konfiguracji

ldapsearch -w config -x -D cn=admin,cn=config -b cn=config

Dodanie schematu (nowego) do olc

Po pierwsze trzeba mieć definicję schmatu. Następnie, trzeba przekonwertować taki schemat do postaci ldif (ręcznie, lub za pomocą slaptest). Poniżej pokazano kroki z wykorzystaniem slaptest. Po pierwsze tworzymy roboczy plik slapd.conf zawierający jedynie dodanie schematu:

include /path/to/test.schema

Następnie należy wykonać konwersję do katalogu roboczego:

mkdir testdir
slaptest -f test.conf -F testdir

A potem już można dodać plik wynikowy poprzez ldapadd...

Źródła w sieci internet


{i}  (c) 2004 - 2026 BSD Serwis Krzysztof Stryjek. W przypadku błędów, poprawek proszę kontaktować się z administratorem wiki.


  1. To jest zapis historyczny. Obecnie korzytanie z mdb nie wymaga tego kroku. (1)

UslugiKatalogowe (ostatnio edytowane 2022-10-24 18:43:34 przez wtps0n)