Spis Treści
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" readAnalogicznie 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
http://www.sysadmin-cookbook.net/openldap/#toc-gen-27 - bardzo dobra stronka. Warto tam zaglądać.
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
(c) 2004 - 2026 BSD Serwis Krzysztof Stryjek. W przypadku błędów, poprawek proszę kontaktować się z administratorem wiki.
To jest zapis historyczny. Obecnie korzytanie z mdb nie wymaga tego kroku. (1)
