LDAP: Difference between revisions

From Hobbynet Admin Wiki
Jump to navigation Jump to search
Line 194: Line 194:
echo "Done"
echo "Done"
</pre>
</pre>
===SSL/TLS beveiliging===
==SSL/TLS beveiliging==
Gebruik de juiste .pem bestanden in /etc/ssl/certs en /etc/ssl/private. Voer een '''c_rehash .''' uit in /etc/ssl/certs om de cache te updaten (indien CAcert_org.pem nieuw werd toegevoegd). De ownership is belangrijk. Hiertoe wordt de groep "openldap" toegevoegd aan de groep ssl-cert.
Gebruik de juiste .pem bestanden in /etc/ssl/certs en /etc/ssl/private. Voer een '''c_rehash .''' uit in /etc/ssl/certs om de cache te updaten (indien CAcert_org.pem nieuw werd toegevoegd). De ownership is belangrijk. Hiertoe wordt de groep "openldap" toegevoegd aan de groep ssl-cert.
  adduser openldap ssl-cert
  adduser openldap ssl-cert

Revision as of 23:15, 21 December 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 gebruik 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. Dit kan ook een tabel binnen de Drupal omgeving zijn.

LDAP server keuze

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

Loadbalanced

Er zijn twee servers (hcc-ldap-lb1 en hcc-ldap-lb2) die achter een loadbalancer in preferred server mode staat zodat het verkeer altijd naar server1 gestuurd wordt. Beide servers houden elkaar up-to-date. In de gewone situatie zullen alle reads en writes naar server1 gaan en server2 wordt door server1 bijgewerkt. Valt server1 weg, dan zal de loadbalancer overschakelen naar server2 waar vanaf dan de read en writes plaatsvinden. Zodra server1 weer beschikbaar is, wordt die bijgewerkt en zal weer master worden. Dit is nog niet getest en hoe de timing precies is, is nog niet duidelijk...

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.

UPDATE: in Oneiric Ocelot (11.10) is weer wel de mogelijkheid gegeven bij installatie een database aan te maken. Default wordt echter de fqdn hostname gebruikt. Bij dpkg-reconfigure kan het gewenste domein wel opnieuw gegeven worden. De initiële configuratie staat in /usr/share/slapd/slapd.init.ldif.

Locatie bestanden

Om de benodigde bestanden op de server te krijgen zal scp gebruikt moet worden. Upload alles in een privé subdirectory. Copiëer daarna alles naar de juiste plaats en verander de owner in root.

  • Alle ldif bestanden gaan naar /usr/local/hobbynet/lib
  • init_ldap gaat naar /usr/local/hobbynet/bin
  • etc/ldap/schema/hcc_schema.* gaan naar /etc/ldap/schema
  • etc/ldap/schema/ppolicy.ldif gaat naar /etc/ldap/schema

Initiële database

Direct na installatie (of na dpkg-reconfigure slapd) staat er een werkende doch lege directory in OpenLDAP. Access is alleen geregeld voor root. Dit heeft te maken met het feit dat vanaf Karmic Koala OpenLDAP alleen het minst noodzakelijke bevat om slapd te starten.

slapd.init.ldif

Bij installatie/reconfiguratie wordt /usr/share/slapd/slapd.init.ldif ingelezen. Zie aldaar.

init-ldap script

Het lokale script init-ldap doet vervolgens alles wat wij toegevoegd/gewijzigd willen hebben. Dit zou makkelijk in één of twee stappen kunnen maar omwille van de beheerbaarheid wordt in kleinere stappen gewerkt. Het password van cn=admin,dc=hcc,dc=nl moet op de commandline worden meegegeven. Tijdens de dpkg-reconfigure moet het password nog 2x gegeven worden. Gebruik ook de OpenLDAP Admin Guide.

#!/bin/bash
#
if [ -z "$1" ]; then
   echo "Geen password gegeven!"
   exit 1
fi
#
# PASSWD must be given on the commandline
# SERVER will be retrieved from the system
# CACHE default is 2 Mb. For ldap2: 4 Mb, for hcc-ldap-lbX: 512 Mb
# CSIZE, ISIZE cachesizes in entries
# SID ServerID for replicating servers
# RID Replica ID for replicating servers
# PROVIDER Nmae or IP address of provider node
# CERT name of SSL certificate
#
PASSWORD=$1
SERVER=`hostname`
CACHE=4194304
CSIZE=1000
ISIZE=3000
SID=1
RID=001
PROVIDER=172.31.1.206
CERT=hobby.nl
HNET=/usr/local/hobbynet
#
HNET_BIN=$HNET/bin
HNET_LIB=$HNET/lib
#
if [ "$SERVER" != "ldap2" ] && [ "$SERVER" != "hcc-ldap-lb1" ] && [ "$SERVER" != "hcc-ldap-lb2" ]; then
   echo "Running on wrong server"
   exit 1
fi
#
# update .tmpl files
#
# Both HCC servers need bigger caches and syncrepl config
#
if [ "$SERVER" = "hcc-ldap-lb1" ] || [ "$SERVER" = "hcc-ldap-lb2" ]; then
   CACHE=536870912
   CSIZE=100000
   ISIZE=300000
   #
   # The mirror needs another SID, RID and PROVIDER
   #
   if [ "$SERVER" = "hcc-ldap-lb2" ]; then
      SID=2
      RID=002
      PROVIDER=172.31.1.205
   fi
   sed \
    -e "s/@SID@/$SID/" \
    -e "s/@RID@/$RID/" \
    -e "s/@PROVIDER@/$PROVIDER/" \
    -e "s/@PASSWORD@/$PASSWORD/" \
    <$HNET_LIB/add-syncrepl.tmpl \
    >$HNET_LIB/add-syncrepl.ldif
fi
#
# Update the certificate info
#
sed \
    "s/@CERT@/$CERT/" \
    <$HNET_LIB/modify-config.tmpl \
    >$HNET_LIB/modify-config.ldif
#
# Update the cache sizes
#
sed \
    -e "s/@CSIZE@/$CSIZE/" \
    -e "s/@ISIZE@/$ISIZE/" \
    <$HNET_LIB/modify-hdb.tmpl \
    >$HNET_LIB/modify-hdb.ldif
#
# stop de server
#
service slapd stop
#
# Remove database files
#
rm /var/lib/ldap/*
#
# Place the DB_CONFIG file
#
cat > /var/lib/ldap/DB_CONFIG <<END
set_cachesize 0 $CACHE 0
set_lk_max_objects 1500
set_lk_max_locks   1500
set_lk_max_lockers 1500
set_flags DB_LOG_AUTOREMOVE
END
#
# Reset to factory settings
#
dpkg-reconfigure slapd
#
ldapadd    -Y EXTERNAL -H ldapi:/// -f $HNET_LIB/add-schema.ldif
#
ldapmodify -Y EXTERNAL -H ldapi:/// -f $HNET_LIB/modify-config.ldif
#
ldapmodify -Y EXTERNAL -H ldapi:/// -f $HNET_LIB/modify-hdb.ldif
#
ldapmodify -Y EXTERNAL -H ldapi:/// -f $HNET_LIB/add-ppolicy.ldif
#
# sync replication for HCC (only on loadbalanced servers)
#
if [ "$SERVER" = "ldap2" ]; then
   echo "Syncrepl not needed on $SERVER"
elif [ "$SERVER" = "hcc-ldap-lb1" ] || [ "$SERVER" = "hcc-ldap-lb2" ]; then
   ldapmodify -Y EXTERNAL -H ldapi:/// -f $HNET_LIB/add-syncrepl.ldif
   echo "Syncrepl installed on $SERVER"
fi
#
# restart. new modules loaded.
#
service slapd restart
#
# short sleep
#
sleep 5
#
#
# Not needed on hcc-ldap-lb2. Replication will do the job.
if [ "$SERVER" != "hcc-ldap-lb2" ]; then
   # add top level ou's
   ldapadd -x -D cn=admin,dc=hcc,dc=nl -H ldapi:/// -w $PASSWORD -f $HNET_LIB/hcc-ou.ldif
   # create admins in ou=beheer
   ldapadd -x -D cn=admin,dc=hcc,dc=nl -H ldapi:/// -w $PASSWORD -f $HNET_LIB/hcc-beheer.ldif
   # create regio list in ou=regio
   ldapadd -x -D cn=admin,dc=hcc,dc=nl -H ldapi:/// -w $PASSWORD -f $HNET_LIB/hcc-regios.ldif
   # create groeperingen in ou=groeperingen
   ldapadd -x -D cn=admin,dc=hcc,dc=nl -H ldapi:/// -w $PASSWORD -f $HNET_LIB/hcc-groeperingen.ldif
   # create the password policy
   ldapadd -x -D cn=admin,dc=hcc,dc=nl -H ldapi:/// -w $PASSWORD -f $HNET_LIB/hcc-ppolicy.ldif
fi
#
# Add the standalone kader data and test data on ldap2
#
if [ "$SERVER" = "ldap2" ]; then
   echo "Please wait..."
   # create standalone hcc kader data
   ldapadd -x -D cn=admin,dc=hcc,dc=nl -H ldapi:/// -c -w $PASSWORD -S hcckader_compleet.error \
           -f $HNET_LIB/hcckader_compleet.ldif >hcckader_compleet.report
   # create test data
   ldapadd -x -D cn=admin,dc=hcc,dc=nl -H ldapi:/// -c -w $PASSWORD -S testuser.error \
           -f $HNET_LIB/testuser.ldif >testuser.report
fi
#
# Add the lidgg data and the additional kader data on the hcc-ldap servers
#
if [ "$SERVER" = "hcc-ldap-lb1" ]; then
   echo "This takes approx. 25 minutes. Please wait..."
   # create data for all hcc members
   ldapadd -x -D cn=admin,dc=hcc,dc=nl -H ldapi:/// -c -w $PASSWORD -S lidgg_converted.error \
           -f $HNET_LIB/lidgg_converted.ldif >lidgg_converted.report
   # add additional roles for hcc kader
   ldapadd -x -D cn=admin,dc=hcc,dc=nl -H ldapi:/// -c -w $PASSWORD -S hcckader.error \
           -f $HNET_LIB/hcckader.ldif >hcckader.report
fi
#
# Done
echo "Done"

SSL/TLS beveiliging

Gebruik de juiste .pem bestanden in /etc/ssl/certs en /etc/ssl/private. Voer een c_rehash . uit in /etc/ssl/certs om de cache te updaten (indien CAcert_org.pem nieuw werd toegevoegd). De ownership is belangrijk. Hiertoe wordt de groep "openldap" toegevoegd aan de groep ssl-cert.

adduser openldap ssl-cert

Als dit fout gaat, doe dan eerst:

apt-get install ssl-cert

Zet het certificaat en de private key in de juiste groep:

chgrp ssl-cert /etc/ssl/private/hobby.nl.*
chmod 440      /etc/ssl/private/hobby.nl.key

Het resultaat is dan als volgt:

root@hcc-ldap-lb1:~# ls -l /etc/ssl/private/hcc* 
-rw-r--r-- 1 root     ssl-cert 1724 Nov 22 20:47 hobby.nl.crt
-r--r----- 1 root     ssl-cert 1679 Nov 22 20:25 hobby.nl.key
root@hcc-ldap-lb1:~# grep openldap /etc/group
ssl-cert:x:114:openldap
openldap:x:118:

add-schema.ldif

Omdat wij een aantal eigen attributes en Objectclasses hebben toegevoegd aam het schema, moeten deze aan OpenLDAP worden toegevoegd. Het schema moet wel omgezet naar ldif format. Het schema:

# Draft HCC schema
#
attributetype ( 1.3.6.1.4.1.12795.1.1
        NAME 'regio'
        DESC 'regio naam'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )

attributetype ( 1.3.6.1.4.1.12795.1.2
        NAME 'regiocode'
        DESC 'regio code'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )

attributetype ( 1.3.6.1.4.1.12795.1.3
        NAME 'postcoderange'
        DESC 'postcode start tot postcode einde'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )

attributetype ( 1.3.6.1.4.1.12795.1.4
        NAME 'lidnummer'
        DESC 'lidmaatschap nummer'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
        SINGLE-VALUE )

attributetype ( 1.3.6.1.4.1.12795.1.5
        NAME 'rol'
        DESC 'rol als kader/kernlid'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )

attributetype ( 1.3.6.1.4.1.12795.1.6
        NAME 'groepering'
        DESC 'behorend bij regio/ig'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )

objectclass     ( 1.3.6.1.4.1.12795.2.1
    NAME 'hccregio'
        DESC 'HCC Regio Object'
    SUP top
    STRUCTURAL
        MUST ( regiocode $ regio )
        MAY ( postcoderange $ c )
        )

objectclass     ( 1.3.6.1.4.1.12795.2.2
    NAME 'hcclidobject'
        DESC 'HCC Lid Object'
    SUP top
    AUXILIARY
        MUST ( regiocode $ lidnummer )
        MAY ( rol $ groepering )
        )

objectclass ( 1.3.6.1.4.1.12795.2.3
    NAME 'hccgroupofnames'
        DESC 'RFC2256: a group of names (DNs)'
    SUP top
    STRUCTURAL
        MUST ( cn )
        MAY ( member $ businessCategory $ seeAlso $ owner $ ou $ o $ description )
        )

Hiertoe wordt het bovenstaande HCC schema in /etc/ldap/schema/hcc_schema.schema geplaatst. Vervolgens worden de stappen uitgevoerd zoals beschreven in de Ubuntu Server guide, onder Modifying the slapd Configuration Database. De resulterende output file cn=hcc_schema.ldif moet dan nog naar /etc/ldap/schema/hcc_schema.ldif gecopieerd worden. Als dit proces herhaald moet worden, start dan met een lege output directory en verwijder een eventueel achter gebleven cn=hcc_schema.ldif bestand.

modify_config.ldif

SSL/TLS instelling toevoegen in de ldap configuratie. Toegevoegd worden de certificaat gegevens om met TLS te kunnen werken. Het loglevel wordt op STATS gezet. Dit geeft niet teveel logging maar is toch goed bruikbaar. De @...@ strings worden tijdens het draaien van het init_ldap script vervangen door specifieke waarden voor de server. Dit om op alle servers (ook test servers) één en hetzelfde script te kunnen gebruiken. Er zijn nog enkele van deze temmplates.

#######################################
## modify-config.tmpl                ##
#######################################
dn: cn=config
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/CAcert_org.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/private/@CERT@.crt
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/@CERT@.key
-
replace: olcLogLevel
olcLogLevel: stats

Om de logging in een apart bestan te krijgen moet in /etc/rsyslog.d een extra bestand openldap.conf geplaatst worden.

local4.*   -/var/log/openldap.log

Tevens willen we logrotate op dit bestand. Plaats in /etc/logrotate.d het bestand openldap met de volgende inhoud

/var/log/openldap.log
{
        rotate 4
        weekly
        missingok
        notifempty
        compress
        delaycompress
        sharedscripts
        postrotate
                reload rsyslog >/dev/null 2>&1 || true
        endscript
}

modify-hdb.ldif

Hier worden de wijzigingen op de backend db gemaakt. Er worden een aantal attributes ge-indexeerd en de search SizeLimit wordt op unlimited gezet. Cache sizes verschillen per server en worden vervangen door actuele waarden. (zie: init_ldap)

#######################################
## modify-hdb.tmpl                   ##
#######################################
dn: olcDatabase={1}hdb,cn=config
add: olcDbIndex
olcDbIndex: entryUUID,entryCSN eq
olcDbIndex: uid,cn,sn eq,pres,sub
olcDbIndex: lidnummer,rol,groepering eq,pres,sub
-
add: olcSizeLimit
olcSizeLimit: unlimited
-
add: olcDbCachesize
olcDbCachesize: @CSIZE@
-
add: olcDbIDLcacheSize
olcDbIDLcacheSize: @ISIZE@
-
replace: olcDbCheckpoint
olcDbCheckpoint: 1024 5
-
replace: olcAccess
olcAccess: to attrs=userPassword,shadowLastChange
  by self write
  by anonymous auth
  by dn="cn=admin,dc=hcc,dc=nl" write
  by dn="cn=hans,ou=beheer,dc=hcc,dc=nl" write
  by dn="cn=egbert,ou=beheer,dc=hcc,dc=nl" write
  by dn="cn=bas,ou=beheer,dc=hcc,dc=nl" write
  by * none
olcAccess: to dn.base=""
  by * read
olcAccess: to *
  by dn="cn=admin,dc=hcc,dc=nl" write
  by dn="cn=hans,ou=beheer,dc=hcc,dc=nl" write
  by dn="cn=egbert,ou=beheer,dc=hcc,dc=nl" write
  by dn="cn=bas,ou=beheer,dc=hcc,dc=nl" write
  by dn="cn=drupal-hcc-nl,ou=beheer,dc=hcc,dc=nl" read
  by dn="cn=webapps,ou=beheer,dc=hcc,dc=nl" read
  by * none

hcc-*.ldif

Deze stappen vullen de db met entries op ou level en onder hangende data zoals vaste gegevens over regio's en ig's.

Overlays

Ppolicy

  • vanuit LDAP de minimale lengte van een wachtwoord afdwingen
  • in LDAP SSHA versleuteling activeren
    (olcPPolicyHashCleartext: TRUE)
#######################################
## add-ppolicy.ldif                  ##
#######################################
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: ppolicy

dn: olcOverlay=ppolicy,olcDatabase={1}hdb,cn=config
changetype: add
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcPPolicyConfig
olcOverlay: ppolicy
olcPPolicyDefault: cn=default,ou=policies,dc=hcc,dc=nl
olcPPolicyHashCleartext: TRUE

The default ppolicy looks like this:

dn: cn=default,ou=policies,dc=hcc,dc=nl
objectClass: pwdPolicy
objectClass: device
cn: default
pwdCheckQuality: 1
pwdMinLength: 8
pwdAttribute: 2.5.4.35
pwdAllowUserChange: TRUE

Syncrepl

Om twee servers met elkaar in sync te houden is nog wat aanvullende configuratie nodig. In onze situatie zal altijd maar één server bevraagd worden; bij een failover van de loadbancer zal dus de andere server gebruikt worden. Bij het teruggaan naar server 1 zal de directory bijgewerkt worden. Wij gebruiken de z.g. Mirror Mode. Zie de LDAP Admin Guide. Mirror configuratie is specifiek per server!

#######################################
## add-syncrepl.tmpl                 ##
#######################################
dn: cn=config
changetype: modify
replace: olcServerID
olcServerID: @SID@

dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: syncprov

dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov

dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=@RID@
  provider=ldap://@PROVIDER@
  binddn="cn=admin,dc=hcc,dc=nl" bindmethod=simple credentials="@PASSWORD@"
  searchbase="dc=hcc,dc=nl"
  type=refreshAndPersist
  interval=00:00:00:10
  retry="5 5 300 5"
  timeout=1
  starttls=yes
-
add: olcMirrorMode
olcMirrorMode: TRUE

De andere server krijgt ServerID 2 en de provider is de andere server. Voor TLS dient nog starttls=yes onder timeout1 toegevoegd te worden.

Refint

  • vanuit LDAP de verwijzingen bijhouden als een gebruiker hernoemd wordt (of wordt weggegooid)

nog testen, dit zijn de grote lijnen

overlay refint
refint_attributes uid
refint_nothing "cn=webapps,ou=beheer,dc=hcc,dc=nl"

LDAP Clients

Er zijn meerdere LDAP clients. De meest populaire zijn Apache Directory Studio en phpLdapAdmin. De eerste is veel uitgbreider maar vereist een Java Runtime Environment. Onder Windows XP is dat JRE6. PhpLdapAdmin draait onder apache. Beide clients hebben wat configuratie nodig; Bij ADS gaat alles stapsgewijs in de GUI. Voor PLA moet /etc/phpldapadmin/config.php aangepast worden.

StartTLS

Aanbevolen wordt StartTLS op poort 389 te gebruiken. Alternatief is LDAPS op poort 636 maar is depreciated. Voor beide clients is het belangrijk dat de root certificaten gevonden kunnen worden. Als Apache al een server cert kent zou PLA geen probleem mogen zijn. ADS maakt deel uit van de JRE. JRE moet dus de root certificaten kunnen vinden.

ADS onder Windows

Onder Windows moet met keytool.exe gewerkt worden. De uitleg heb ik van [hier]. Het komt erop neer dat de .pem of .der certificaten van CAcert in de keystore gezet worden. Kopieer deze certificaat bestanden in C:\Program Files\Java\jre6\lib\security (jre6 kan ondertussen jre7 zijn in Vista of W7). Doe dan in een terminal window:

cd C:\Program Files\Java\jre6\lib\security
wget http://www.cacert.org/certs/root.der -O root.der
wget http://www.cacert.org/certs/class3.der -O class3.der
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass1 -file root.der
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass3 -file class3.der

De Windows JRE is ook te managen via het Java applet in het configuratiescherm. Toevoegen van root certificaten lijkt niet mogelijk voor system; wel voor user. Niet verder naar gezocht.

ADS onder Linux

Apache Directory Studio volgt nog.

PLA onder Linux

Voor ldap clients (phpldapadmin) dient de client configuratie goed te zijn. Deze bevindt zich in /etc/ldap.ldap.conf. Het is voldoende als de directory met de root certificaten bekend is. Deze client configuratie is meer php-ldap gebonden dan alleen voor PLA. Ook de Drupal LDAPauth module werkt met ditzelfde beatand. Zie ook de [phpldapadmin wiki].

#
# LDAP Defaults
#

# See ldap.conf(5) for details
# This file should be world readable but not world writable.

#BASE   dc=example,dc=com
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666

#SIZELIMIT      12
#TIMELIMIT      15
#DEREF          never
TLS_CACERT      /etc/ssl/certs/CAcert_org.pem
TLS_CERT        /etc/ssl/private/hobby.nl.crt
TLS_KEY         /etc/ssl/private/hobby.nl.key
TLS_REQCERT     allow
#TLS_REQCERT never

Denk er wel aan na wijzigingen Apache te herstarten.

Backup

lokaal

Backups kunnen gemaakt worden terwijl slapd draait. Hiertoe moet slapcat gebruikt worden. Backups kunnen gemaakt worden per database naar een ldif bestand.

slapcat -l hcc-dump.ldif -b "dc=hcc,dc=nl"

Dit maakt een dump van alles onder dc=hcc,dc=nl naar het bestand hcc-dump.ldif. ook is het mogelijk het database nummer te gebruiken, config is altijd nummer 0:

slapcat -l config-dump.ldif -n 0

remote

Er wordt een encrypted remote backup gemaakt naar backup2bit. zie voor meer info Encrypted_backup

crontab

# script dat updates ophaalt (maar niet installeert), zodat nagios ze ook detecteert
0 9 * * * /usr/local/hobbynet/bin/upd_srv >/dev/null
0 18 * * * /usr/local/hobbynet/bin/upd_srv >/dev/null

PHP scripting

Initieel worden alle leden op basis van hun hcc lidnummer ingelezen. Zodra de profielwizard doorlopen is, zal het lidnummer vervangen moeten worden door de gebruikersnaam.

Onderstaande PHP code kan als basis dienen om deze rename-aktie uit te voeren.

<?php
//Rename "uid=0003092,  ou=leden,dc=hcc,dc=nl" to 
//       "uid=h.verbeek,ou=leden,dc=hcc,dc=nl"

$ldaphost = "192.168.11.109";
$ldapport = 389;

$ldap_username = "cn=hans,ou=beheer,dc=hcc,dc=nl";
$ldap_password = "password";

$name_old = "0003092";
$name_new = "h.verbeek";

//Connect to LDAP server.
$ds=ldap_connect( $ldaphost, $ldapport )
          or die("Could not connect to {$ldaphost}");

// $ds is a valid link identifier for a directory server
if (ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3)) {
    echo "Using LDAPv3\n";
} else {
    echo "Failed to set protocol version to 3\n";
    exit;
}

if ($ds) {
 if(ldap_start_tls($ds))
 {
  $r = ldap_bind($ds, $ldap_username, $ldap_password)
          or die("Could not bind to {$ldaphost}\n");

  $dn = "uid=$name_old,ou=leden,dc=hcc,dc=nl";
  $name = "$name_new";
  $newRdn = "uid=" . $name;
  if (ldap_rename($ds, $dn, $newRdn, NULL, true)) {
   echo "Success: rename $name_old ==> $name_new\n";
   }
   else
   {
    echo "Fail: could not rename $name_old ==> $name_new \n";
   }
 }
 ldap_unbind($ds);
}
?>

TODO lijst

Dit is een lijst in wording, graag aanvullen

  • gebruikersrechten verfijnen
    (gebruiker mag zijn eigen naam niet aanpassen, maar de Drupal scripting mag dit wel)
  • gebruikersnaam moet uniek zijn (implementeer de 'unique' policy)
  • logging verminderen
  • script maken om dagelijkse mutaties te verwerken
  • script maken om eenmalig de complete LIDGG in te lezen
    (dit wordt vervolgens aangevuld met de conversie die vanuit de 'oude' hcc.nl omgeving wordt uitgevoerd)
  • 'dun' loadbalancer script maken om te controleren dat LDAP echt luistert