LDAP: Difference between revisions
Line 186: | Line 186: | ||
</pre> | </pre> | ||
===Uitbreiding tot slave=== | ===Uitbreiding tot slave=== | ||
In ldap terminologie spreken we van een '''consumer'''. | In ldap terminologie spreken we van een '''consumer'''. De consumer moet precies zo opgezet worden als de provider maar dan zonder de provider specifieke configuratie. Hiervoor in de plaats komt een consumer-specifieke configuratie. | ||
<pre> | <pre> | ||
#Load the syncprov module. | #Load the syncprov module. |
Revision as of 22:54, 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. De consumer moet precies zo opgezet worden als de provider maar dan zonder de provider specifieke configuratie. Hiervoor in de plaats komt een consumer-specifieke configuratie.
#Load the syncprov module. dn: cn=module{0},cn=config changetype: modify add: olcModuleLoad olcModuleLoad: syncprov # syncrepl specific indices dn: olcDatabase={1}hdb,cn=config changetype: modify add: olcDbIndex olcDbIndex: entryUUID eq - add: olcSyncRepl olcSyncRepl: rid=0 provider=ldap://ldap01.example.com bindmethod=simple binddn="cn=admin,dc=example,dc=com" credentials=secret searchbase="dc=example,dc=com" logbase="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0))" schemachecking=on type=refreshAndPersist retry="60 +" syncdata=accesslog - add: olcUpdateRef olcUpdateRef: ldap://ldap01.example.com