LDAP: Difference between revisions

From Hobbynet Admin Wiki
Jump to navigation Jump to search
Line 123: Line 123:
delete: olcRootDN
delete: olcRootDN
</pre>
</pre>
==Master/Slave bedrijf==
==Replicatie==
Voor master/slave bedrijf kan de configuratie in [https://help.ubuntu.com/10.04/serverguide/C/openldap-server.html Server Guide] gevonden worden.
Voor master/slave replicatie kan de configuratie in [https://help.ubuntu.com/10.04/serverguide/C/openldap-server.html Ubuntu Server Guide] gevonden worden.
===Uitbreiding tot single master===
===Uitbreiding tot single master===
In ldap terminologie spreken we van een '''provider'''. In dit geval en single-master.
In ldap terminologie spreken we van een '''provider'''. In dit geval en single-master. De provider
<pre>
# Add indexes to the frontend db.
dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: entryCSN eq
-
add: olcDbIndex
olcDbIndex: entryUUID eq
 
#Load the syncprov and accesslog modules.
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: syncprov
-
add: olcModuleLoad
olcModuleLoad: accesslog
 
# Accesslog database definitions
dn: olcDatabase={2}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap/accesslog
olcSuffix: cn=accesslog
olcRootDN: cn=admin,dc=example,dc=com
olcDbIndex: default eq
olcDbIndex: entryCSN,objectClass,reqEnd,reqResult,reqStart
 
# Accesslog db syncprov.
dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpNoPresent: TRUE
olcSpReloadHint: TRUE
 
# syncrepl Provider for primary db
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpNoPresent: TRUE
 
# accesslog overlay definitions for primary db
dn: olcOverlay=accesslog,olcDatabase={1}hdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcAccessLogConfig
olcOverlay: accesslog
olcAccessLogDB: cn=accesslog
olcAccessLogOps: writes
olcAccessLogSuccess: TRUE
# scan the accesslog DB every day, and purge entries older than 7 days
olcAccessLogPurge: 07+00:00 01+00:00
</pre>
===Uitbreiding tot slave===
===Uitbreiding tot slave===
In ldap terminologie spreken we van een '''consumer'''.
In ldap terminologie spreken we van een '''consumer'''.

Revision as of 22:51, 19 September 2011

Introductie

Om een centrale plaats te hebben om authenticatie te doen voor www.hcc.nl en sub-sites zoals een forum, is gekozen voor het gebruiken van een LDAP database/directory. Hierin wordt alleen opgeslagen wat nodig is voor het functioneren van de site. Andere persoonsgegevens en HCC specifieke gegevens komen in een MySQL database.

LDAP server keuze

De voor de hand liggen de keuze is OpenLDAP. Echter zijn er geluiden gehoord dat OpenLDAP niet zou schalen. Alternatieven zijn b.v. 389 maar die is erg slecht gesupport onder Ubuntu. Voorlopig starten we met OpenLDAP.

installatie

installatie van OpenLDAP is simpel:

aptitude install slapd ldap-utils

De configuratie van OpenLDAP is sinds Karmic Koala iets gecompliceerder geworden. cn=config wordt nog steeds gebruikt maar tijdens installatie wordt alleen een skeleton configuratie geïnstalleerd. Er wordt niet meer gevraagd om een password tijdens de installatie en met "dpkg-reconfigure slapd" zet alleen de skeleton configuratie terug. Je moet zelf de database, root dn en acl's opzetten (als root of met sudo). Run dpkg-reconfigure slapd om terug te gaan naar een lege directory.

Initiële database

Het volgende script maakt een initiële database zoals beschreven is in HowToForge en de OpenLDAP site:

#!/bin/sh
passwd=secret
dc1=example
dc2=com
hash_pw=`slappasswd -h "{MD5}" -s $passwd`
tmpdir=/tmp

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif

#
# db.ldif
#
cat <<EOF > $tmpdir/db.ldif
# Load dynamic backend modules
dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module
olcModulepath: /usr/lib/ldap
olcModuleload: {0}back_hdb

# Create the database
dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=$dc1,dc=$dc2
olcRootDN: cn=admin,dc=$dc1,dc=$dc2
olcRootPW: $passwd
olcDbConfig: {0}set_cachesize 0 2097152 0
olcDbConfig: {1}set_lk_max_objects 1500
olcDbConfig: {2}set_lk_max_locks 1500
olcDbConfig: {3}set_lk_max_lockers 1500
olcLastMod: TRUE
olcDbCheckpoint: 512 30
olcDbIndex: uid pres,eq
olcDbIndex: cn,sn,mail pres,eq,approx,sub
olcDbIndex: objectClass eq
EOF

#
# base.ldif
#
cat <<EOF > $tmpdir/base.ldif
dn: dc=$dc1,dc=$dc2
objectClass: dcObject
objectclass: organization
o: $dc1.$dc2
dc: $dc1
description: My LDAP Root

dn: cn=admin,dc=$dc1,dc=$dc2
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
userPassword: $hash_pw
description: LDAP administrator
EOF

#
# config.ldif
#
cat <<EOF > $tmpdir/config.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootDN
olcRootDN: cn=admin,cn=config

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: $hash_pw

dn: olcDatabase={0}config,cn=config
changetype: modify
delete: olcAccess
EOF

#
# acl.ldif
#
cat <<EOF > $tmpdir/acl.ldif
dn: olcDatabase={1}hdb,cn=config
add: olcAccess
olcAccess: to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=$dc1,dc=$dc2" write by anonymous auth by self write by * none
olcAccess: to dn.base="" by * read
olcAccess: to * by dn="cn=admin,dc=$dc1,dc=$dc2" write by * read
EOF

ldapadd -Y EXTERNAL -H ldapi:/// -f $tmpdir/db.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f $tmpdir/base.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f $tmpdir/config.ldif
ldapmodify -x -D cn=admin,cn=config -W -f $tmpdir/acl.ldif

De drie kopregels moeten natuurlijk aangepast worden. Het oorspronkelijke script bevatte enige regels in config.ldif die problemen veroorzaken. Die zijn domweg weggelaten. Bovenaan stonden nog de volgende regels:

dn: cn=config
changetype: modify
delete: olcAuthzRegexp

dn: olcDatabase={-1}frontend,cn=config
changetype: modify
delete: olcAccess

dn: olcDatabase={0}config,cn=config
changetype: modify
delete: olcRootDN

Replicatie

Voor master/slave replicatie kan de configuratie in Ubuntu Server Guide gevonden worden.

Uitbreiding tot single master

In ldap terminologie spreken we van een provider. In dit geval en single-master. De provider

# Add indexes to the frontend db.
dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: entryCSN eq
-
add: olcDbIndex
olcDbIndex: entryUUID eq

#Load the syncprov and accesslog modules.
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: syncprov
-
add: olcModuleLoad
olcModuleLoad: accesslog

# Accesslog database definitions
dn: olcDatabase={2}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap/accesslog
olcSuffix: cn=accesslog
olcRootDN: cn=admin,dc=example,dc=com
olcDbIndex: default eq
olcDbIndex: entryCSN,objectClass,reqEnd,reqResult,reqStart

# Accesslog db syncprov.
dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpNoPresent: TRUE
olcSpReloadHint: TRUE

# syncrepl Provider for primary db
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpNoPresent: TRUE

# accesslog overlay definitions for primary db
dn: olcOverlay=accesslog,olcDatabase={1}hdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcAccessLogConfig
olcOverlay: accesslog
olcAccessLogDB: cn=accesslog
olcAccessLogOps: writes
olcAccessLogSuccess: TRUE
# scan the accesslog DB every day, and purge entries older than 7 days
olcAccessLogPurge: 07+00:00 01+00:00

Uitbreiding tot slave

In ldap terminologie spreken we van een consumer.