LDAP: Difference between revisions

From Hobbynet Admin Wiki
Jump to navigation Jump to search
Line 380: Line 380:


Libnss-ldapd en libpam-ldapd hebben een gezamelijke daemon '''nslcd''' die z'n configuratie uit '''/etc/nslcd.conf''' haalt. Hierin is ook een voorziening voor het helper account. Eventueel kan het daemon proces voor debugging doeleinden ook als command ('''nslcd -d''') gestart worden. Om de bevragingen van de LDAP server wat te verminderen, kan '''nscd''' voor caching zorgen. Deze cache daemon heeft zijn eigen configuratie bestand: '''/etc/nscd.conf'''. De default instellingen zijn goed; eventueel kan de logging naar een bestand gestuurd worden.
Libnss-ldapd en libpam-ldapd hebben een gezamelijke daemon '''nslcd''' die z'n configuratie uit '''/etc/nslcd.conf''' haalt. Hierin is ook een voorziening voor het helper account. Eventueel kan het daemon proces voor debugging doeleinden ook als command ('''nslcd -d''') gestart worden. Om de bevragingen van de LDAP server wat te verminderen, kan '''nscd''' voor caching zorgen. Deze cache daemon heeft zijn eigen configuratie bestand: '''/etc/nscd.conf'''. De default instellingen zijn goed; eventueel kan de logging naar een bestand gestuurd worden.
Verbinding met de LDAP server kan met StartTLS beveiligd worden.
===host-based login===
===host-based login===
Met een kleine uitbreiding in het schema van de LDAP server, kan host-based login gerealiseerd worden. Ook in de '''nslcd.conf''' is een uitbreiding nodig.
Met een kleine uitbreiding in het schema van de LDAP server, kan host-based login gerealiseerd worden. Ook in de '''nslcd.conf''' is een uitbreiding nodig.

Revision as of 21:52, 13 August 2013

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 alles opgeslagen wat nodig is voor het functioneren van de site, inclusief NAW gegevens die op dit moment alleen opgeslagen worden t.b.v. het PC30 beheerscherm.

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.

Installatie

Installatie van OpenLDAP is simpel:

aptitude install slapd ldap-utils

Als er gebruikgemaakt wordt van php scripts, is het ook nodig php5-cli en php5-ldap te installeren. 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 em tmpl bestanden gaan naar /usr/local/hobbynet/lib
  • init_ldap en andere scripts gaan naar /usr/local/hobbynet/bin
  • alle data bestanden (dumps) en update ldifs gaan naar /usr/local/hobbynet/data
  • 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. Wordt echter init_ldap gebruikt dan wordt een werkende directory gemaakt met alle statische data (in diverse ou's) erin. Alleen zijn er geen leden geladen in de ou=leden en ou=inactieve_leden.

slapd.init.ldif

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

init_ldap script

Het lokale script init-ldap doet een reset van de initiële Openldap configuratie. Dit heeft tot gevolg dat de DIT dc=hcc,dc=nl met een rootDN cn=admin,dc=hcc,dc=nl steeds opnieuw aangemaakt wordt. Alles wat we toegevoegd/gewijzigd willen hebben in de cn=config volgt daarna. Dit wordt afgesloten met een restart van de slapd server. Het script restore_ldap laadt vervolgens de laatste dump terug. Bij wijzigingen aan het schema is het raadzaam altijd een dump_ldap te doen zodat een later een actuele dump kan worden teruggeladen.

Het (plain text) password van cn=admin,dc=hcc,dc=nl moet bij het aanroepen van init_ldap op de commandline worden meegegeven. Tijdens de dpkg-reconfigure moet het password nog 2x gegeven worden. Lees eventueel ook de OpenLDAP Admin Guide.

Het init_ldap script bevat allerlei logica om op meerdere ldap servers gedraaid te kunnen worden. In grote lijnen valt het script in een aantal blokken uiteen:

  • voorbereidingen om "dpkg-reconfigure slapd" te draaien
  • definities van input files
  • check host
  • bouwen van het skelet van de nieuwe directory

Zie voor details van de scripts init_ldap, dump_ldap en restore_ldap op een van de servers (in /usr/local/hobbynet/bin).

onderdelen van init_ldap

Init_ldap is opgezet om stap voor stap de database op te bouwen. Hieronder een beschrijving van de losse ldif bestanden die ingelezen worden. Incidenteel wordt een ldif gewijzigd; kijk altijd in de actuele bestanden!

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 nog worden omgezet naar ldif format.

  • Hiertoe wordt het onderstaande schema in /etc/ldap/schema geplaatst als hcc_schema.schema.
  • 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 achtergebleven cn=hcc_schema.ldif bestand.

De extra schema's worden middels een include toegevoegd. Ppolicy is op gelijke wijze als hcc_schema tot .ldif geconverteerd. Alle stappen om een nieuwe hcc-schema.ldif te maken zijn gescript in upd_schema. In init_ldap wordt het eigen schema en de password policy geladen:

#######################################
## add-schema.ldif                   ##
#######################################
include: file:///etc/ldap/schema/hcc_schema.ldif
include: file:///etc/ldap/schema/ppolicy.ldif

modify_config.ldif

Dit template dient om de SSL/TLS instelling toe te voegen in de ldap configuratie. Toegevoegd worden de certificaat gegevens om met TLS te kunnen werken. Het loglevel wordt op STATS en ACL 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 templates.

#######################################
## modify-config.tmpl                ##
#######################################
dn: cn=config
replace: olcLogLevel
olcLogLevel: stats
-
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

Om de logging in een apart bestand 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. De waarden die in DB_CONFIG moeten komen (Berkely DB parameters) staan ook in dit bestand.

#######################################
## modify-hdb.idif                   ##
#######################################
dn: olcDatabase={1}hdb,cn=config
replace: olcDbDirectory
olcDbDirectory: /var/lib/ldap
-
replace: olcAccess
olcAccess: to attrs=userPassword
  by self write
  by anonymous auth
  by dn="cn=admin,dc=hcc,dc=nl" write
  by dn.one="ou=beheer,dc=hcc,dc=nl" write
olcAccess: to attrs=hccLogin,hccPseudoniem
  by self write
  by dn="cn=admin,dc=hcc,dc=nl" write
  by dn.one="ou=beheer,dc=hcc,dc=nl" write
  by dn.one="ou=klanten,dc=hcc,dc=nl" read
  by dn.one="ou=helpdesk,dc=hcc,dc=nl" read
olcAccess: to attrs=hccOptIn
  by self write
  by dn="cn=admin,dc=hcc,dc=nl" write
  by dn.one="ou=beheer,dc=hcc,dc=nl" write
  by dn="cn=drupal-hcc-nl,ou=klanten,dc=hcc,dc=nl" write
  by dn.one="ou=helpdesk,dc=hcc,dc=nl" read
olcAccess: to attrs=hccPostcode,hccPostcodeZoekveld
  by self write
  by dn="cn=admin,dc=hcc,dc=nl" write
  by dn.one="ou=beheer,dc=hcc,dc=nl" write
  by dn.one="ou=klanten,dc=hcc,dc=nl" read
  by dn.one="ou=helpdesk,dc=hcc,dc=nl" read
  by dn.one="ou=partners,dc=hcc,dc=nl" read
olcAccess: to attrs=objectClass,entry
  by dn="cn=admin,dc=hcc,dc=nl" write
  by dn.one="ou=beheer,dc=hcc,dc=nl" write
  by * read
olcAccess: to *
  by self read
  by dn="cn=admin,dc=hcc,dc=nl" write
  by dn.one="ou=beheer,dc=hcc,dc=nl" write
  by dn.one="ou=klanten,dc=hcc,dc=nl" read
  by dn.one="ou=helpdesk,dc=hcc,dc=nl" read
-
replace: olcSizeLimit
olcSizeLimit: 100000
-
replace: olcDbCachesize
olcDbCachesize: 200000
-
replace: olcDbCheckpoint
olcDbCheckpoint: 1024 5
-
replace: olcDbConfig
olcDbConfig: set_cachesize 0 536870912 0
olcDbConfig: set_lk_max_objects 1000
olcDbConfig: set_lk_max_locks 1000
olcDbConfig: set_lk_max_lockers 1000
olcDbConfig: set_flags DB_LOG_AUTOREMOVE
olcDbConfig: set_flags DB_TXN_NOSYNC
-
replace: olcDbIDLcacheSize
olcDbIDLcacheSize: 600000
-
replace: olcDbIndex
olcDbIndex: default pres,eq
olcDbIndex: objectClass,entryUUID,entryCSN eq
olcDbIndex: hccLidNummer,hccLogin,hccIg eq

ppolicy overlay

  • 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 overlay

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
olcSpCheckpoint: 100 5
olcSpSessionlog: 100

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 het IP adres van de andere server.

Unique overlay

Deze overlay dient er voor te zorgen dat o.a het attribuut hccLogin een unieke waarde bevat.

#######################################
## add-unique.ldif                   ##
#######################################
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: unique

dn: olcOverlay=unique,olcDatabase={1}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcUniqueConfig
olcOverlay: unique
olcUniqueAttribute: uid
olcUniqueAttribute: hccLogin
olcUniqueAttribute: hccPseudoniem

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:

LDAP Clients

Er zijn meerdere LDAP clients. De meest populaire zijn Apache Directory Studio ("ADS") en phpLdapAdmin ("PLA"). De eerste is veel uitgbreider maar vereist een Java Runtime Environment ("JRE"). 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.Binnen Hobbynet wordt uitsluitend gebruik gemaakt van ADS.

StartTLS

Aanbevolen wordt StartTLS op poort 389 te gebruiken. Alternatief is LDAPS op poort 636 maar dat 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:

Haal de benodigde bestanden op (op een Linux systeem):
wget http://www.cacert.org/certs/root.der -O root.der
wget http://www.cacert.org/certs/class3.der -O class3.der
copieer de bestanden naar de Windows omgeving in C:\Program Files (x86)\Java\jre6\lib\security.

Open een commandwindow:
cd C:\Program Files (x86)\Java\jre6\lib\security
..\..\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 laat zich uit een tarball installeren. Dit kan geheel in userspace; er is geen make install o.i.d. nodig. ADS loopt vanuit de lokatie waar het uitgepakt is.

ADS gebruik

ADS kan erg handig zijn voor het snel dumpen van hele ou's in .ldif formaat. Zo'n dump kan direct op een andere server worden ingelezen.

PhpLdapAdmin 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.

PAM en NSS via LDAP

Het inloggen van gebruikers kan ook via een LDAP server en client geschieden. Hiervoor dienen enkele pakketten geïnstalleerd en geconfigureerd te worden. Er zijn wijzigingen nodig in /etc/nsswitch.conf en de /etc/pam.d/common-* bestanden. Beide zijn via dedicated tools aan te passen.

Installeer libnss-ldapd om de benodigde libraries te verkrijgen. Apt-get zal tevens libpam-ldap, nslcd en nscd binnen brengen.

apt-get install libnss-ldapd
The following extra packages will be installed:
    libpam-ldapd nscd nslcd

Libnss-ldapd iseen doorontwikkling van libnss-ldad en bevat meerdere verbeteringen. Zie: deze site van de ontwikkelaar.

nsswitch.conf laat zich configureren via auth-client-config (installeer indien nodig het pakket ldap-auth-client):

auth-client-config -t nss -p lac_ldap

Het resultaat is dat nsswitch.conf zowel in files (/etc/passwd etc.) zoekt als in ldap.

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

# pre_auth-client-config # passwd:         compat
passwd: files ldap
# pre_auth-client-config # group:          compat
group: files ldap
# pre_auth-client-config # shadow:         compat
shadow: files ldap

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

# pre_auth-client-config # netgroup:       nis
netgroup: nis

Het aanpassen van de PAM bestanden kan met pam-auth-update. Kies in het menu voor zowel unix als ldap. Dit is in een standaard opzet van LDAP voldoende om zowel lokale gebruikers als gebruikers opgeslagen in LDAP, te laten inloggen. In de Hobbynet setup moet er echter nog meer gebeuren in de ACL's van de LDAP server configuratie. Omdat Hobbynet de laatste ACL regel heeft gewijzigd in een deny-all, is er een helper of proxy account nodig dat read access heeft of een aantal cruciale velden in de posixAccount objectClass.

Libnss-ldapd en libpam-ldapd hebben een gezamelijke daemon nslcd die z'n configuratie uit /etc/nslcd.conf haalt. Hierin is ook een voorziening voor het helper account. Eventueel kan het daemon proces voor debugging doeleinden ook als command (nslcd -d) gestart worden. Om de bevragingen van de LDAP server wat te verminderen, kan nscd voor caching zorgen. Deze cache daemon heeft zijn eigen configuratie bestand: /etc/nscd.conf. De default instellingen zijn goed; eventueel kan de logging naar een bestand gestuurd worden.

Verbinding met de LDAP server kan met StartTLS beveiligd worden.

host-based login

Met een kleine uitbreiding in het schema van de LDAP server, kan host-based login gerealiseerd worden. Ook in de nslcd.conf is een uitbreiding nodig.

In de LDAP server dient de objectClass hostObject aan de entries in de ou=users toegevoegd te worden. Deze (auxilary) objectClass brengt slechts één attribute met zich mee: host. De regel in nslcd.conf checkt of één van de waarden van host gelijk is aan de naam van de server waarop ingelogd wordt. De waarde * geldt als wildcard.

Password aanpassen

Via LDAP ingelogde gebruikers kunnen net als lokale gebruikers hun wachtwoord met passwd wijzigen. Wel moet aan de eisen in de LDAP ppolicy module voldaan worden.

Backup, initialze, restore

Om het hele skelet van ldap in één keer te herstellen dient init_ldap gebruikt te worden. Als argument moet het admin beheer wachtwoord mee gegeven worden.

lokaal

Backups kunnen gemaakt worden terwijl slapd draait maar geadviseerd wordt slapd te stoppen. Voor dumpen moet slapcat gebruikt worden. Backups kunnen gemaakt worden per database of een filter daarop, 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, hdb is gewoonlijk 1.

Het dump_ldap script dumpt de alle ou's in aparte .ldif bestanden; het omgekeerde doet restore_ldap. Terug inlezen kan alleen in een lege directory, dus direct nadat init_ldap is gedaan. Gebruik voor het terugplaatsen slapadd. Aan te bevelen is -c mee te geven zodat ondanks fouten doorgegaan wordt.

Voor slapadd moet slapd gestopt zijn. Denk er om alvorens te slapd starten het ownership van de bestanden in /var/lib/ldap recht te zetten! (dit lijkt niet meer nodig te zijn vbs20130526)

/etc/init.d/slapd stop
slapadd -l hcc-dump.ldif -w -c >errors.txt
chown openldap:openldap /var/lib/ldap/*
/etc/init.d/slapd start

remote

Er wordt dagelijks een encrypted remote backup gemaakt naar backup2bit. Zie voor meer info Encrypted_backup. Dit script maakt gebruik van unieke gpg keys. Op elke server is dus een eigen versie nodig van backup-encrypted. Recente lokale backups zijn te vinden in /usr/local/hobbynet/tmp.

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. Er zijn verschillende php-scripts gemaakt, o.a. om snel alle kaderrollen te verwijderen. Php-scripts staan in de /usr/local/hobbynet/bin directory. Voor de php-scripting zijn enkele php5 pakketten nodig. Installeer deze met apt-get. Het gaat om:

  • php5-cli
  • php5-ldap

Apache authenticatie via LDAP

In plaats van .htpassword authenticatie, kan ook LDAP gebruikt worden. Activeer daartoe de Apache module 'authnz_ldap'.

a2enmod authnz_ldap

Denk er om dat dit in een loadbalanced situatie op beide servers gedaan dient te worden!

Voorbeeld van een .htaccess configuratiebestand

(alleen als voorbeeld, niet zo gebruiken!)

Dit is het configuratiebestand dat op de PC30 beheerpagina op de testserver actief is. Deze configuratie staat zowel de 'nieuwe' (LDAP) manier van aanloggen toe, als ook de 'oude' (.htpassword bestand) manier.

Er is in de LDAP definitie een speciale regel ingebouwd, zodat alleen personen die in de XB_lijst voorkomen toegang tot deze pagina kunnen krijgen.

AuthName "www-test pc30 login (gebruik uw hcc-lidnummer/hcc-code of uw hcc.nl gebruikersnaam/wachtwoord)"
AuthType Basic
AuthBasicProvider file ldap
AuthLDAPURL ldaps://ldap2-int.hobby.nl/ou=leden,dc=hcc,dc=nl?hccLogin?one?(hccRol=*)
AuthLDAPCompareDNOnServer on
AuthLDAPBindDN cn=drupal-hcc-nl,ou=klanten,dc=hcc,dc=nl
AuthLDAPBindPassword xxxxxxxxxxxxxxxxxxxxxxxxxx
AuthzLDAPAuthoritative off
Order deny,allow
Deny from all
AuthUserFile /usr/local/hobbynet/lib/www_homes
require valid-user

Voorbeeld van een LDAP configuratie in de Apache config

(alleen als voorbeeld, niet zo gebruiken!)

Omdat er voor LDAP een wachtwoord noodzakelijk is, dient er geen .htaccess gebruikt te worden, maar dient dit rechtstreeks in de Apache configuratie ingeklopt te worden.

Bovenstaand voorbeeld is speciaal bedoeld voor de map '/pc30'. Het enige dat speciale dat daarvoor gedaan moet worden, is in de eerste regel ('<Location>' de naam van die map neer te zetten.

<Location /pc30>
 AuthName "www-test pc30 login (gebruik uw hcc-lidnummer/hcc-code of uw hcc.nl gebruikersnaam/wachtwoord)"
 AuthType Basic
 AuthBasicProvider file ldap
 AuthLDAPURL ldaps://ldap2-int.hobby.nl/ou=leden,dc=hcc,dc=nl?hccLogin?one?(hccRol=*)
 AuthLDAPCompareDNOnServer on
 AuthLDAPBindDN cn=drupal-hcc-nl,ou=klanten,dc=hcc,dc=nl
 AuthLDAPBindPassword xxxxxxxxxxxxxxxxxxxxxxxxxx
 AuthzLDAPAuthoritative off
 Order deny,allow
 Deny from all
 AuthUserFile /usr/local/hobbynet/lib/www_homes
 require valid-user
</Location>

Hoe kan LDAP veilig gebruikt worden vanuit Apache

Zet een script neer in de gebruikersomgeving, en gebruik mod_authz_external. Doe de controle vervolgens via de XMPRPC server.

Zie Kadernet voor een voorbeeld.

Waar is welke LDAP gebruiker ingeregeld

Deze pagina is out-of-date. PC30 heeft nu meer accounts.

gebruikersnaam welke LDAP
server
servernaam programma bestand
OU=klanten
cn=drupal-hcc-nl ldap2 www-test-lb*
www-beta-lb*
apache Drupal configuratie (t.b.v. LDAP authenticatie module)
cn=drupal-hcc-nl ldap2 www-test-lb*
www-beta-lb*
apache site-config www-test en www-test-ssl
(t.b.v. pc30 beheerpagina)
cn=drupal-hcc-nl hcc-ldap-lb*
(productie)
hcc-ldap xmlrpc server (t.b.v. minimale rechten bij de LDAP server)
/disk/site/hobby.nl/xml-hcc-ldap/www/xml/xml-server.php
cn=drupal-hcc-nl ldap2 ldap2 xmlrpc server (t.b.v. minimale rechten bij de LDAP server)
/disk/site/hobby.nl/xml-ldap2/www/xml/xml-server.php
cn=drupal-hcc-nl hcc-ldap-lb2
(productie)
php-lb* apache gamesbestuur wiki config
cn=forum-hcc-nl ldap2 php-lb* ?
cn=groepen-hcc-nl ldap2 php-joomla-lb* ? joomla 2.5 test site
cn=partner-hcc-nl ldap2 www-test-lb*
www-beta-lb*
test script (t.b.v. partner-koppeling van de xmlrpc server)
~hans/partner-test/test_xml.php
cn=webapps hcc-ldap-lb2 www-hobby-nl-lb2 (productie) apache (t.b.v. Ledenraad en bijeenkomsten module op de kadersite)
/disk/site/hcc.nl/kadernet/config-ldap.php
 
OU=beheer
cn=xml hcc-ldap-lb*
(productie)
hcc-ldap xmlrpc server (t.b.v. maximale rechten bij de LDAP server)
/disk/site/hobby.nl/xml-hcc-ldap/www/xml/xml-server.php
cn=xml ldap2 ldap2 xmlrpc server (t.b.v. maximale rechten bij de LDAP server)
/disk/site/hobby.nl/xml-ldap2/www/xml/xml-server.php
 
OU=helpdesk
cn=pc30-helpdesk ldap2 www-test-lb*
www-beta-lb*
apache t.b.v. pc30 beheerpagina
cn=pc30-testuser ldap2 not in use
 

TODO lijst

Dit is een lijst in wording, graag aanvullen

  • script maken om dagelijkse mutaties te verwerken
  • 'dun' loadbalancer script maken om te controleren dat LDAP echt luistert