<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.hobby.nl/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Egbert</id>
	<title>Hobbynet Admin Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.hobby.nl/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Egbert"/>
	<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php/Special:Contributions/Egbert"/>
	<updated>2026-05-14T14:16:10Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79598</id>
		<title>LDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79598"/>
		<updated>2022-06-07T09:48:29Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* Locatie bestanden */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introductie==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==LDAP server keuze==&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Loadbalanced==&lt;br /&gt;
Er zijn twee servers (ldap-lb1 en ldap-lb2) die achter een loadbalancer in preferred server mode staan 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.&lt;br /&gt;
&lt;br /&gt;
Tevens zijn er een test en een development server: ldap-test en ldap-dev.&lt;br /&gt;
&lt;br /&gt;
==Installatie==&lt;br /&gt;
Installatie van OpenLDAP is simpel:&lt;br /&gt;
 aptitude install slapd ldap-utils&lt;br /&gt;
Omdat er gebruikgemaakt wordt van php scripts, is het ook nodig &#039;&#039;&#039;php-cli&#039;&#039;&#039; en &#039;&#039;&#039;php-ldap&#039;&#039;&#039; te installeren. De configuratie van OpenLDAP is sinds Karmic Koala iets gecompliceerder geworden. &#039;cn=config&#039; 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 &amp;quot;dpkg-reconfigure slapd&amp;quot; zet alleen de skeleton configuratie terug. Je moet zelf de database, root dn en acl&#039;s opzetten (als root of met sudo). Run  &#039;&#039;&#039;dpkg-reconfigure slapd&#039;&#039;&#039; om terug te gaan naar een lege directory. &lt;br /&gt;
&lt;br /&gt;
De volgende pakketten dienen geïnstalleerd te zijn (&#039;php -m&#039; toont de geactiveerde modules):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mogelijk ontbrekende pakketten:&lt;br /&gt;
&lt;br /&gt;
apt-get install aptitude &lt;br /&gt;
apt-get install php-mbstring&lt;br /&gt;
apt-get install php-xmlrpc&lt;br /&gt;
apt-get install php-ldap&lt;br /&gt;
apt-get install ldapscripts&lt;br /&gt;
apt-get install php-xml&lt;br /&gt;
apt-get install slapd&lt;br /&gt;
apt-get install ldap-utils&lt;br /&gt;
&lt;br /&gt;
- openldap moet lid zijn van de groep ssl-cert!&lt;br /&gt;
apt-get install ssl-cert&lt;br /&gt;
adduser openldap ssl-cert&lt;br /&gt;
(of vi /etc/group&lt;br /&gt;
    ssl-cert:x:116:openldap)&lt;br /&gt;
&lt;br /&gt;
- Zorg dat de LDAP daemon bij de certificaten kan komen. &lt;br /&gt;
LET OP: op alle hobbynet servers staan de certificaten in /disk/site/etc/ssl/hobby.nl/&lt;br /&gt;
 chgrp ssl-cert /disk/site/etc/ssl/hobby.nl/hobby.nl.*&lt;br /&gt;
 chmod 440      /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
LET OP: Als apparmor geïnstalleerd is moet het pad naar de certificaten vrijgegeven worden. Als alternatief kan apparmor verwijderd worden.&lt;br /&gt;
&lt;br /&gt;
Het volgende is niet nodig voor ldap. Mischien voor mysql-server???&lt;br /&gt;
- mysql laat het bestand ibdata1 ongelimiteerd groeien (InnoDB bestanden)&lt;br /&gt;
 /etc/mysql/mysql.conf.d/innodb_file_per_table.cnf&lt;br /&gt;
 [mysql]&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
&lt;br /&gt;
Nog meer Hobbynet aanpassingen Waarom??? &lt;br /&gt;
/etc/bash.bashrc&lt;br /&gt;
export http_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export https_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export ftp_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Locatie bestanden===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Alle ldif em tmpl bestanden gaan naar /usr/local/hobbynet/lib&lt;br /&gt;
* init_ldap en andere scripts gaan naar /usr/local/hobbynet/bin&lt;br /&gt;
* alle data bestanden (dumps) en update ldifs gaan naar /usr/local/hobbynet/data&lt;br /&gt;
* /usr/local/hobbynet/etc/ldap/schema/hcc_schema.* gaan naar /etc/ldap/schema&lt;br /&gt;
* /usr/local/hobbynet/etc/ldap/schema/ppolicy.ldif gaat naar /etc/ldap/schema&lt;br /&gt;
* /usr/local/hobbynet/etc/ldap/schema/ldapns.ldif gaat naar /etc/ldap/schema&lt;br /&gt;
&lt;br /&gt;
Ldapns en ppolicy moeten eventueel van een oudere release bewaard blijven! Waarom ze weg in 22.04 zijn is onduidelijk. hcc_schema.ldif wordt middels een script gemaakt. Dit script plaatst de ldif bestand(en) in /etc/ldap/schema. Zie de README en actuele scripts.&lt;br /&gt;
&lt;br /&gt;
==Initiële database==&lt;br /&gt;
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.sh &amp;lt;admin-pw&amp;gt; gebruikt dan wordt een werkende directory gemaakt met alle statische data (in diverse ou&#039;s) erin. Gebruik na het maken van de initiële database restore_ldap.sh om de database te vullen met de data uit de data directory.&lt;br /&gt;
&lt;br /&gt;
===slapd.init.ldif ===&lt;br /&gt;
Bij installatie en reconfiguratie wordt /usr/share/slapd/slapd.init.ldif ingelezen. Zie aldaar indien nodig. Er wordt zowel voor de cn=config als voor de dc=hcc,dc=nl een RootDN aangemaakt. Echter wordt er geen password gezet op de RootDN voor config.&lt;br /&gt;
&lt;br /&gt;
==init_ldap script==&lt;br /&gt;
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 &#039;&#039;&#039;cn=admin,dc=hcc,dc=nl&#039;&#039;&#039; 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 &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; laadt vervolgens de laatste dump terug. Bij wijzigingen aan het schema is het raadzaam altijd een &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; te doen zodat een later een actuele dump kan worden teruggeladen.&lt;br /&gt;
&lt;br /&gt;
Het (plain text) password van cn=admin,dc=hcc,dc=nl moet bij het aanroepen van &#039;&#039;&#039;init_ldap&#039;&#039;&#039; op de commandline worden meegegeven. Tijdens de dpkg-reconfigure moet het password nog 2x gegeven worden. Lees eventueel ook de [http://www.openldap.org/doc/admin/ OpenLDAP Admin Guide].&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* voorbereidingen om &amp;quot;dpkg-reconfigure slapd&amp;quot; te draaien&lt;br /&gt;
* definities van input files&lt;br /&gt;
* check host&lt;br /&gt;
* bouwen van het skelet van de nieuwe directory&lt;br /&gt;
Zie voor details van de scripts &#039;&#039;&#039;init_ldap&#039;&#039;&#039;, &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; en &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; op een van de servers (in /usr/local/hobbynet/bin).&lt;br /&gt;
&lt;br /&gt;
==onderdelen van init_ldap==&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===add-schema.ldif===&lt;br /&gt;
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. &lt;br /&gt;
* Hiertoe wordt het onderstaande schema in /etc/ldap/schema geplaatst als hcc_schema.schema. &lt;br /&gt;
* Vervolgens worden de stappen uitgevoerd zoals beschreven in de [https://help.ubuntu.com/11.10/serverguide/C/openldap-server.html Ubuntu Server guide], onder &#039;&#039;&#039;Modifying the slapd Configuration Database&#039;&#039;&#039;. &lt;br /&gt;
* De resulterende output file &#039;&#039;&#039;cn=hcc_schema.ldif&#039;&#039;&#039; moet dan nog naar /etc/ldap/schema/hcc_schema.ldif gecopieerd worden. &lt;br /&gt;
Als dit proces herhaald moet worden, start dan met een lege output directory en verwijder een eventueel achtergebleven cn=hcc_schema.ldif bestand. &lt;br /&gt;
&lt;br /&gt;
De extra schema&#039;s worden middels een &#039;&#039;&#039;include&#039;&#039;&#039; toegevoegd. &#039;&#039;&#039;Ppolicy&#039;&#039;&#039; is op gelijke wijze als &#039;&#039;&#039;hcc_schema&#039;&#039;&#039; tot .ldif geconverteerd. Alle stappen om een nieuwe &#039;&#039;&#039;hcc-schema.ldif&#039;&#039;&#039; te maken zijn gescript in &#039;&#039;&#039;upd_schema&#039;&#039;&#039;. In &#039;&#039;&#039;init_ldap&#039;&#039;&#039; wordt het eigen schema en de password policy geladen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: add-schema.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
# date: vbs20220511 ppolicy not included to get&lt;br /&gt;
#       of duplicate message&lt;br /&gt;
#&lt;br /&gt;
include: file:///etc/ldap/schema/hcc_schema.ldif&lt;br /&gt;
#include: file:///etc/ldap/schema/ppolicy.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ldapns.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====schema updates====&lt;br /&gt;
Soms wordt een attribute toegevoegd of gewijzigd. Hiertoe dient het bestand hcc_schema.schema in /usr/local/hobbynet/etc/ldap/schema, gewijzigd te worden. Daarna dient er een ldif versie van gemaakt te worden. Gebruik hiervoor &#039;&#039;&#039;upd_schema.sh&#039;&#039;&#039; in dezelfde directory. De resulterende hcc_schema.ldif wordt in dit script naar /etc/ldap/schema gecopieërd. Bij grote wijzigingen is het aan te bevelen door de hele rebuild cycle te gaan (dump, init, restore). Bij triviale aanpassingen zou hcc_schema.ldif ook &#039;&#039;&#039;direct&#039;&#039;&#039; in de actieve directory geplaatst kunnen worden, gevolgd door slechts een &#039;&#039;&#039;service slapd restart&#039;&#039;&#039;. Gebruik hiervoor (blijf in de lokale schema directory):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp &amp;quot;ldif_output/cn=config/cn=schema/cn={14}hcc_schema.ldif&amp;quot; &amp;quot;/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}hcc_schema.ldif&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
LET OP: De nummers tussen accolades zijn bepaald door de volgorde van andere scripts! Zolang geen andere schema&#039;s worden toegevoegd zullen ze niet veranderen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ook kan met de ldap-tools gewerkt worden. Gebruik ldapsearch en ldapmodify, eventueel met de -f optie om een voorbereide serie opdrachten uit te voeren. Gebruik ldapsearch om eerst de structuur te vinden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier een voorbeeld om een objectClass aan te passen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat pas_aan.ldif&lt;br /&gt;
dn: cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
delete: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description ) )&lt;br /&gt;
-&lt;br /&gt;
add: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description $ hccIg ) )&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
$sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f pas_aan.ldif &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_config.ldif===&lt;br /&gt;
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 &#039;&#039;&#039;STATS&#039;&#039;&#039; gezet. Dit geeft niet teveel logging maar is toch goed bruikbaar. Om extra logging te krijgen op b.v. ACL&#039;s, verander olcLogLevel dan in &amp;quot;stats ACL&amp;quot;.  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-config.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcTLSCACertificateFile&lt;br /&gt;
olcTLSCACertificateFile: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
-&lt;br /&gt;
add: olcTLSCertificateFile&lt;br /&gt;
olcTLSCertificateFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
-&lt;br /&gt;
add: olcTLSCertificateKeyFile&lt;br /&gt;
olcTLSCertificateKeyFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
-&lt;br /&gt;
add: olcPasswordHash&lt;br /&gt;
olcPasswordHash: {CRYPT}&lt;br /&gt;
-&lt;br /&gt;
add: olcPasswordCryptSaltFormat&lt;br /&gt;
olcPasswordCryptSaltFormat: $6$%.16s&lt;br /&gt;
-&lt;br /&gt;
replace: olcLogLevel&lt;br /&gt;
olcLogLevel: stats&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Om de logging in een apart bestand te krijgen moet in /etc/rsyslog.d een extra bestand &#039;&#039;&#039;openldap.conf&#039;&#039;&#039; geplaatst worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local4.*   -/var/log/openldap.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Tevens willen we logrotate op dit bestand. Plaats in /etc/logrotate.d het bestand &#039;&#039;&#039;openldap&#039;&#039;&#039; met de volgende inhoud&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/log/openldap.log&lt;br /&gt;
{&lt;br /&gt;
        rotate 4&lt;br /&gt;
        weekly&lt;br /&gt;
        missingok&lt;br /&gt;
        notifempty&lt;br /&gt;
        compress&lt;br /&gt;
        delaycompress&lt;br /&gt;
        sharedscripts&lt;br /&gt;
        postrotate&lt;br /&gt;
                reload rsyslog &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 || true&lt;br /&gt;
        endscript&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify-mdb.ldif===&lt;br /&gt;
Hier worden de wijzigingen op de backend db gemaakt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-mdb.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
# hjv 2020.06.07 (oldSizeLimit toegevoegd)&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcDbCheckpoint&lt;br /&gt;
olcDbCheckpoint: 4096 1&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbNoSync&lt;br /&gt;
olcDbNoSync: TRUE&lt;br /&gt;
-&lt;br /&gt;
replace: olcSizeLimit&lt;br /&gt;
olcSizeLimit: 100000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===modify-acl.ldif===&lt;br /&gt;
Hier worden de rechten bepaald van de diverse rollen en groepen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-acl.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcAccess&lt;br /&gt;
# hobbynetlogin heeft lees rechten t.b.v. MySecureShell aanloggen&lt;br /&gt;
olcAccess: to attrs=@posixAccount,@posixGroup,@shadowAccount,@hostObject&lt;br /&gt;
  by dn=&amp;quot;cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to attrs=@posixAccount&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# sta anonymous search toe (t.b.v. Apache authenticatie)&lt;br /&gt;
olcAccess: to attrs=hccLogin,hccRol,hccProfiel,entry&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# olcAccess: to attrs=hccOptIn&lt;br /&gt;
#   by self write&lt;br /&gt;
#   by dn=&amp;quot;cn=drupal-hcc-nl,ou=klanten,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
#   by * break&lt;br /&gt;
#&lt;br /&gt;
# Anonieme klanten moeten kunnen inloggen&lt;br /&gt;
# en mogen hun eigen password wijzigen&lt;br /&gt;
olcAccess: to attrs=userPassword,shadowLastChange&lt;br /&gt;
  by self write&lt;br /&gt;
  by anonymous auth&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# Gebruiker mag zijn kader email wachtwoord aanpassen&lt;br /&gt;
olcAccess: to attrs=hccKaderPassword,hccKaderForward&lt;br /&gt;
  by self write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# beheerders hebben schrijfrechten op alles (updateDN)&lt;br /&gt;
# klanten hebben alleen lees rechten op alles (readDN)&lt;br /&gt;
# self mag lezen&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by self read&lt;br /&gt;
  by dn=&amp;quot;cn=xml-hoge-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn=&amp;quot;cn=xml-lage-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by dn.one=&amp;quot;ou=beheer,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn.one=&amp;quot;ou=klanten,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# PC30 helpdesk heeft leesrechten op ou=leden&lt;br /&gt;
olcAccess: to attrs=@hccOrgPerson,@hccKaderFunctie&lt;br /&gt;
  by dn.one=&amp;quot;ou=helpdesk,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# partners mogen een paar attrs lezen&lt;br /&gt;
olcAccess: to attrs=hccLidNummer,hccPostcode,hccPostcodeZoekveld,hccIg&lt;br /&gt;
  by dn.one=&amp;quot;ou=partners,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# iedereen moet (pseudo attr) entry en objectClass kunnen lezen&lt;br /&gt;
olcAccess: to attrs=entry,objectClass&lt;br /&gt;
  by * read&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by * none&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_index.ldif===&lt;br /&gt;
Een kale configuratie is heel snel voor wat betreft het opnieuw vullen met gegevens. Bij het aanmaken van een verse LDAP database worden er dan ook zo min mogelijk indexen aangemaakt.&amp;lt;br&amp;gt;&lt;br /&gt;
Zodra de inhoud is ingelezen kunnen de &#039;echte&#039; indexen aangemaakt worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-index.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcDbIndex&lt;br /&gt;
olcDbIndex: default pres,eq&lt;br /&gt;
olcDbIndex: objectClass,entryUUID,entryCSN eq&lt;br /&gt;
olcDbIndex: hccLidNummer,hccLogin,hccForumLogin eq&lt;br /&gt;
olcDbIndex: uid,uidNumber,gidNumber,memberUid,member eq&lt;br /&gt;
olcDbIndex: cn,host,hccPseudoniem,hccOptin,hccLocatie eq&lt;br /&gt;
olcDbIndex: sn,hccPostcodeZoekveld,hccIg,hccRegio eq,subfinal&lt;br /&gt;
olcDbIndex: hccRol,hccBezoek eq,pres,subfinal&lt;br /&gt;
olcDbIndex: hccBulletins pres&lt;br /&gt;
olcDbIndex: aboNummer eq&lt;br /&gt;
olcDbIndex: aboPostcodeZoekveld eq,subfinal&lt;br /&gt;
olcDbIndex: mail,mailHccnet,hccKaderMail,hccKaderForward pres,eq&lt;br /&gt;
olcDbIndex: hccProfiel pres,eq&lt;br /&gt;
olcDbindex: hccKaderUniekeURL eq&lt;br /&gt;
olcDbindex: hccOnderwerp eq,subfinal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ppolicy overlay===&lt;br /&gt;
* vanuit LDAP de minimale lengte van een wachtwoord afdwingen&lt;br /&gt;
* in LDAP SSHA versleuteling activeren&amp;lt;br&amp;gt;&lt;br /&gt;
(olcPPolicyHashCleartext: TRUE)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: add-ppolicy.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: cn=module, cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectClass: olcModuleList&lt;br /&gt;
objectClass: top&lt;br /&gt;
olcModuleLoad: ppolicy&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=ppolicy,olcDatabase={1}mdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcPPolicyConfig&lt;br /&gt;
olcOverlay: ppolicy&lt;br /&gt;
olcPPolicyDefault: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
olcPPolicyUseLockout: TRUE&lt;br /&gt;
olcPPolicyHashCleartext: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The default ppolicy looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dn: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
objectClass: pwdPolicy&lt;br /&gt;
objectClass: device&lt;br /&gt;
cn: default&lt;br /&gt;
pwdCheckQuality: 1&lt;br /&gt;
pwdMinLength: 8&lt;br /&gt;
pwdAttribute: 2.5.4.35&lt;br /&gt;
pwdAllowUserChange: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Syncrepl overlay===&lt;br /&gt;
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 [http://www.openldap.org/doc/admin/ LDAP Admin Guide]. &#039;&#039;&#039;Mirror configuratie is specifiek per server!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-syncrepl.tmpl                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
replace: olcServerID&lt;br /&gt;
olcServerID: @SID@&lt;br /&gt;
&lt;br /&gt;
dn: cn=module{0},cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcModuleLoad&lt;br /&gt;
olcModuleLoad: syncprov&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcSyncProvConfig&lt;br /&gt;
olcOverlay: syncprov&lt;br /&gt;
olcSpCheckpoint: 100 5&lt;br /&gt;
olcSpSessionlog: 100&lt;br /&gt;
&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcSyncRepl&lt;br /&gt;
olcSyncRepl: rid=@RID@&lt;br /&gt;
  provider=ldap://@PROVIDER@&lt;br /&gt;
  binddn=&amp;quot;cn=admin,dc=hcc,dc=nl&amp;quot; bindmethod=simple credentials=&amp;quot;@PASSWORD@&amp;quot;&lt;br /&gt;
  searchbase=&amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
  type=refreshAndPersist&lt;br /&gt;
  interval=00:00:00:10&lt;br /&gt;
  retry=&amp;quot;5 5 300 5&amp;quot;&lt;br /&gt;
  timeout=1&lt;br /&gt;
  starttls=yes&lt;br /&gt;
-&lt;br /&gt;
add: olcMirrorMode&lt;br /&gt;
olcMirrorMode: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
De andere server krijgt ServerID 2 en de provider is het IP adres van de andere server.&lt;br /&gt;
&lt;br /&gt;
===Unique overlay===&lt;br /&gt;
Deze overlay dient er voor te zorgen dat o.a het attribuut hccLogin een unieke waarde bevat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-unique.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module,cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectclass: olcModuleList&lt;br /&gt;
objectclass: top&lt;br /&gt;
olcmoduleload: unique&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=unique,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcUniqueConfig&lt;br /&gt;
olcOverlay: unique&lt;br /&gt;
olcUniqueAttribute: uid uidNumber hccLogin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SSL/TLS beveiliging==&lt;br /&gt;
Gebruik de juiste .pem bestanden in /etc/ssl/certs en /etc/ssl/private.&lt;br /&gt;
&lt;br /&gt;
We maken gebruik van een RapidSSL certificaat. Als dit niet standaard in Ubuntu bekend is, zet dan eerst GeoTrust_RapidSSL_-_ca-bundle.pem in de map /etc/ssl/certs neer. Voer nu een &#039;&#039;&#039;c_rehash .&#039;&#039;&#039; uit in /etc/ssl/certs om de cache te updaten (omdat GeoTrust_RapidSSL_-_ca-bundle.pem nieuw werd toegevoegd). &lt;br /&gt;
&lt;br /&gt;
De ownership is belangrijk. Hiertoe wordt de groep &amp;quot;openldap&amp;quot; toegevoegd aan de groep ssl-cert.&lt;br /&gt;
 adduser openldap ssl-cert&lt;br /&gt;
&lt;br /&gt;
Als dit fout gaat, doe dan eerst:&lt;br /&gt;
 apt-get install ssl-cert&lt;br /&gt;
&lt;br /&gt;
Zet het certificaat en de private key in de juiste groep:&lt;br /&gt;
 chgrp ssl-cert /etc/ssl/private/hobby.nl.*&lt;br /&gt;
 chmod 440      /etc/ssl/private/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
Het resultaat is dan als volgt:&lt;br /&gt;
 root@hcc-ldap-lb1:~# ls -l /etc/ssl/private/hcc* &lt;br /&gt;
 -rw-r--r-- 1 root     ssl-cert 1724 Nov 22 20:47 hobby.nl.crt&lt;br /&gt;
 -r--r----- 1 root     ssl-cert 1679 Nov 22 20:25 hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
 root@hcc-ldap-lb1:~# grep openldap /etc/group&lt;br /&gt;
 ssl-cert:x:114:openldap&lt;br /&gt;
 openldap:x:118:&lt;br /&gt;
&lt;br /&gt;
2020.12.09: Op een nieuwe Ubuntu installatie staat apparmor standaard aan. Weg ermee!&lt;br /&gt;
 apt remove --assume-yes --purge apparmor&lt;br /&gt;
&amp;lt;strike&amp;gt;Per september 2017 staan de certificaten in /disk/site/etc/ssl/hobby.nl, net als op alle andere servers. Omdat apparmor actief is moet deze directory worden toegevoegd aan /etc/apparmor.d/local/usr.sbin.slapd. Die file ziet er dan als volgt uit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Site-specific additions and overrides for usr.sbin.slapd.&lt;br /&gt;
# For more details, please see /etc/apparmor.d/local/README.&lt;br /&gt;
#include &amp;lt;abstractions/ssl_certs&amp;gt;&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/ r,&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/* r,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Openldap ook op poort 636 benaderd wordt (naast TLS op 389), moet in /etc/default/slapd ldaps:/// opgenomen worden bij de SLAPD_SERVICES.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;netstat -an&#039; dient dan 636 te laten zien voor zowel IPv4 als IPv6.&lt;br /&gt;
&lt;br /&gt;
Om de cn=config te zien kan je het volgende commando gebruiken:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config&lt;br /&gt;
&lt;br /&gt;
of, wat botter maar korter:&lt;br /&gt;
cat /etc/ldap/slapd.d/cn\=config.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Backup, initialize, restore==&lt;br /&gt;
Om het hele skelet van ldap in één keer te herstellen dient &#039;&#039;&#039;init_ldap&#039;&#039;&#039; gebruikt te worden. Als argument &#039;&#039;&#039;moet&#039;&#039;&#039; het admin beheer wachtwoord mee gegeven worden.&lt;br /&gt;
&lt;br /&gt;
===lokaal===&lt;br /&gt;
Backups kunnen gemaakt worden terwijl slapd draait maar geadviseerd wordt slapd te stoppen. Voor dumpen moet &#039;&#039;&#039;slapcat&#039;&#039;&#039; gebruikt worden. Backups kunnen gemaakt worden per database of een filter daarop, naar een ldif bestand.&lt;br /&gt;
 slapcat -l hcc-dump.ldif -b &amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
Dit maakt een dump van alles onder &#039;&#039;&#039;dc=hcc,dc=nl&#039;&#039;&#039; naar het bestand hcc-dump.ldif. Ook is het mogelijk het database nummer te gebruiken, config is altijd nummer 0, hdb is gewoonlijk 1.&lt;br /&gt;
&lt;br /&gt;
Het &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; script dumpt alle ou&#039;s in aparte .ldif bestanden; het omgekeerde doet &#039;&#039;&#039;restore_ldap&#039;&#039;&#039;.  &lt;br /&gt;
Terug inlezen kan alleen in een lege directory, dus direct nadat &#039;&#039;&#039;init_ldap&#039;&#039;&#039; is gedaan. Gebruik voor het terugplaatsen &#039;&#039;&#039;slapadd&#039;&#039;&#039;. Aan te bevelen is &#039;&#039;&#039;-c&#039;&#039;&#039; mee te geven zodat ondanks fouten doorgegaan wordt. &lt;br /&gt;
&lt;br /&gt;
Voor slapadd &#039;&#039;&#039;moet&#039;&#039;&#039; 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)&lt;br /&gt;
 /etc/init.d/slapd stop&lt;br /&gt;
 slapadd -l hcc-dump.ldif -w -c &amp;gt;errors.txt&lt;br /&gt;
 chown openldap:openldap /var/lib/ldap/*&lt;br /&gt;
 /etc/init.d/slapd start&lt;br /&gt;
&lt;br /&gt;
===remote===&lt;br /&gt;
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 &#039;&#039;&#039;backup-encrypted&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Recente lokale backups zijn te vinden in &#039;&#039;&#039;/usr/local/hobbynet/tmp&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Verse ldap maken===&lt;br /&gt;
Transactie log bij het toevoegen van b.v. een nieuwe ou:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Op beide servers:&lt;br /&gt;
schema van test server gecopieerd en geactiveerd&lt;br /&gt;
dump-ldap gedraaid&lt;br /&gt;
systemctl stop slapd.service &lt;br /&gt;
&lt;br /&gt;
Er is nu géén ldap service! Werk dus snel...&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb1&lt;br /&gt;
systemctl stop slapd.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
op ldap-lb2:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb2&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
systemctl start slapd.service&lt;br /&gt;
Beide slapd servers zijn in de lucht en moeten synchroniseren.&lt;br /&gt;
&lt;br /&gt;
op beide servers:&lt;br /&gt;
check replicatie (netstat en functioneel)&lt;br /&gt;
&lt;br /&gt;
root@ldap-lb1:/usr/local/hobbynet/bin# netstat -n | grep 389&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:49510 2a02:968:ffff:910:172:31:8:4:389 ESTABLISHED&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:389 2a02:968:ffff:910:172:31:8:4:37490 ESTABLISHED&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:49508 2a02:968:ffff:910:172:31:8:4:389 ESTABLISHED&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:389 2a02:968:ffff:910:172:31:8:4:37488 ESTABLISHED&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Functioneel door met ADS op beide servers in te loggen en een willekeurig veld in je eigen entry te wijzigen op lb1. Kijk of het gebeurd is op lb2 en wijzig het daar terug. Check op de andere server of het gebeurd is. Er kan een zekere vertraging in optreden.&lt;br /&gt;
&lt;br /&gt;
Stel er is een nieuwe ou gemaakt: denk aan het bij werken van de dump en restore scripts.&lt;br /&gt;
&lt;br /&gt;
update dump-ldap.sh en restore-ldap.sh met de nieuwe ou&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
export tarieven.ldif op test server en import op ldap-lb1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==crontab==&lt;br /&gt;
 # script dat updates ophaalt (maar niet installeert), zodat nagios ze ook detecteert&lt;br /&gt;
 0 9 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
==LDAP Clients==&lt;br /&gt;
Er zijn meerdere LDAP clients. De meest populaire zijn Apache Directory Studio (&amp;quot;ADS&amp;quot;) en phpLdapAdmin (&amp;quot;PLA&amp;quot;).&amp;lt;br&amp;gt;&lt;br /&gt;
De eerste is veel uitgbreider maar vereist een Java Runtime Environment (&amp;quot;JRE&amp;quot;). Onder Windows is dat JRE(13) of (open)JDK-(13).&amp;lt;br&amp;gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Binnen Hobbynet wordt uitsluitend gebruik gemaakt van ADS.&lt;br /&gt;
&lt;br /&gt;
===StartTLS===&lt;br /&gt;
Aanbevolen wordt StartTLS op poort 389 te gebruiken. Alternatief is LDAPS op poort 636 maar dat is deprecated. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Windows===&lt;br /&gt;
&amp;lt;i&amp;gt;2019-10-31 HJV: Oude info, als referentie leuk, maar niet meer relevant&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Onder Windows moet met &#039;&#039;&#039;keytool.exe&#039;&#039;&#039; gewerkt worden. De uitleg heb ik van  [http://www.talkingtree.com/blog/index.cfm?mode=entry&amp;amp;entry=25AA75A4-45A6-2844-7CA3EECD842DB576 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:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Haal de benodigde bestanden op (op een Linux systeem):&lt;br /&gt;
wget http://www.cacert.org/certs/root.der -O root.der&lt;br /&gt;
wget http://www.cacert.org/certs/class3.der -O class3.der&lt;br /&gt;
copieer de bestanden naar de Windows omgeving in C:\Program Files (x86)\Java\jre6\lib\security.&lt;br /&gt;
&lt;br /&gt;
Open een commandwindow:&lt;br /&gt;
cd C:\Program Files (x86)\Java\jre6\lib\security&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass1 -file root.der&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass3 -file class3.der&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Linux===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS gebruik===&lt;br /&gt;
ADS kan erg handig zijn voor het snel dumpen van hele ou&#039;s in .ldif formaat. Zo&#039;n dump kan direct op een andere server worden ingelezen.&lt;br /&gt;
&lt;br /&gt;
===PhpLdapAdmin onder Linux===&lt;br /&gt;
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 [http://phpldapadmin.sourceforge.net/wiki/index.php/Server:server:tls phpldapadmin wiki].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# LDAP Defaults&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# See ldap.conf(5) for details&lt;br /&gt;
# This file should be world readable but not world writable.&lt;br /&gt;
&lt;br /&gt;
#BASE   dc=example,dc=com&lt;br /&gt;
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666&lt;br /&gt;
&lt;br /&gt;
#SIZELIMIT      12&lt;br /&gt;
#TIMELIMIT      15&lt;br /&gt;
#DEREF          never&lt;br /&gt;
TLS_CACERT      /etc/ssl/certs/CAcert_org.pem&lt;br /&gt;
TLS_CERT        /etc/ssl/private/hobby.nl.crt&lt;br /&gt;
TLS_KEY         /etc/ssl/private/hobby.nl.key&lt;br /&gt;
TLS_REQCERT     allow&lt;br /&gt;
#TLS_REQCERT never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Denk er wel aan na wijzigingen Apache te herstarten.&lt;br /&gt;
===PAM en NSS via LDAP===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Installeer &#039;&#039;&#039;libnss-ldapd&#039;&#039;&#039; om de benodigde libraries te verkrijgen. Apt-get zal tevens &#039;&#039;&#039;libpam-ldapd&#039;&#039;&#039;, &#039;&#039;&#039;nslcd&#039;&#039;&#039; en &#039;&#039;&#039;nscd&#039;&#039;&#039; binnen brengen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install libnss-ldapd auth-client-config ldap-utils&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
    libpam-ldapd nscd nslcd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Libnss-ldapd is een doorontwikkeling van libnss-ldap en bevat meerdere verbeteringen. Zie: [http://arthurdejong.org/nss-pam-ldapd/ deze site] van de ontwikkelaar. Bij de installatie wordt een user &#039;&#039;&#039;nslcd&#039;&#039;&#039; aangemaakt; denk erom die in de .tmpl bestanden te zetten!&lt;br /&gt;
  &lt;br /&gt;
nsswitch.conf laat zich configureren via &#039;&#039;&#039;auth-client-config&#039;&#039;&#039; maar lac_ldap is alleen aanwezig als &#039;&#039;&#039;ldap-auth-config&#039;&#039;&#039; ook is geinstalleerd. Zo niet gebruik dan de tweede regel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auth-client-config -t nss -p lac_ldap&lt;br /&gt;
auth-client-config -t nss -p ldap_example&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het resultaat is dat nsswitch.conf zowel in files (/etc/passwd etc.) zoekt als in ldap.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nsswitch.conf&lt;br /&gt;
#&lt;br /&gt;
# Example configuration of GNU Name Service Switch functionality.&lt;br /&gt;
# If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
# `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # passwd:         compat&lt;br /&gt;
passwd: files ldap&lt;br /&gt;
# pre_auth-client-config # group:          compat&lt;br /&gt;
group: files ldap&lt;br /&gt;
# pre_auth-client-config # shadow:         compat&lt;br /&gt;
shadow: files ldap&lt;br /&gt;
&lt;br /&gt;
hosts:          files dns&lt;br /&gt;
networks:       files&lt;br /&gt;
&lt;br /&gt;
protocols:      db files&lt;br /&gt;
services:       db files&lt;br /&gt;
ethers:         db files&lt;br /&gt;
rpc:            db files&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # netgroup:       nis&lt;br /&gt;
netgroup: nis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het aanpassen van de PAM bestanden gaat sinds enige releases met &#039;&#039;&#039;pam-auth-update&#039;&#039;&#039;. Kies in het menu voor zowel unix als ldap. Default wordt nu ldap authenticatie gebruikt voor uid &amp;gt;= 1000. Bij Hobbynet willen we vanaf 300 ldap gebruiken. Door een licht gemodificeerde versie van /usr/share/pam-configs/ldap te maken (ldap-hobbynet), kan ook voor de hobbynet instelling gekozen worden. Dit is de ldap-hobbynet versie:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Name: LDAP Authentication (uid&amp;gt;300)&lt;br /&gt;
Default: yes&lt;br /&gt;
Priority: 128&lt;br /&gt;
Auth-Type: Primary&lt;br /&gt;
Auth-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Auth:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 use_first_pass&lt;br /&gt;
Account-Type: Additional&lt;br /&gt;
Account:&lt;br /&gt;
        [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad]        pam_ldap.so minimum_uid=300&lt;br /&gt;
Password-Type: Primary&lt;br /&gt;
Password-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Password:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 try_first_pass&lt;br /&gt;
Session-Type: Additional&lt;br /&gt;
Session:&lt;br /&gt;
        [success=ok default=ignore]     pam_ldap.so minimum_uid=300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dit is in een standaard opzet van LDAP voldoende om zowel lokale gebruikers als gebruikers opgeslagen in LDAP, te laten inloggen en hun password te laten wijzigen. In de Hobbynet setup moet er echter nog meer gebeuren in de ACL&#039;s van de LDAP server configuratie. Omdat Hobbynet de laatste ACL regel heeft gewijzigd in een &#039;&#039;&#039;deny-all&#039;&#039;&#039;, is er een helper of proxy account nodig dat read access heeft of een aantal cruciale velden in de posixAccount objectClass. Zie verder de lsiting van nslcd.conf.&lt;br /&gt;
&lt;br /&gt;
Libnss-ldapd en libpam-ldapd hebben een gezamelijke daemon &#039;&#039;&#039;nslcd&#039;&#039;&#039; die z&#039;n configuratie uit &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039; haalt. Hierin is ook een voorziening voor het helper account. Aan het eind vande &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; staat de voorziening voor host-based login. Als het attribute &#039;&#039;&#039;host&#039;&#039;&#039; de fqdn of alleen de host naam bevat, bepaald dat of inloggen op die host mogelijk is. &#039;&#039;&#039;*&#039;&#039;&#039; staat inloggen op alle hosts toe.&lt;br /&gt;
&lt;br /&gt;
Eventueel kan het daemon proces voor debugging doeleinden ook als command (&#039;&#039;&#039;nslcd -d&#039;&#039;&#039;) gestart worden. Om de bevragingen van de LDAP server wat te verminderen, kan &#039;&#039;&#039;nscd&#039;&#039;&#039; voor caching zorgen. Deze cache daemon heeft zijn eigen configuratie bestand: &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039;. De default instellingen zijn goed; eventueel kan de logging naar een bestand gestuurd worden.&lt;br /&gt;
&lt;br /&gt;
Verbinding met de LDAP server kan met StartTLS beveiligd worden. Hier de inhoud van nslcd.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nslcd.conf&lt;br /&gt;
# nslcd configuration file. See nslcd.conf(5)&lt;br /&gt;
# for details.&lt;br /&gt;
&lt;br /&gt;
# The user and group nslcd should run as.&lt;br /&gt;
uid nslcd&lt;br /&gt;
gid nslcd&lt;br /&gt;
&lt;br /&gt;
# log location and level&lt;br /&gt;
#log /var/log/nslcd.log debug&lt;br /&gt;
&lt;br /&gt;
# The location at which the LDAP server(s) should be reachable.&lt;br /&gt;
uri ldap://ldap2-int.hobby.nl/&lt;br /&gt;
&lt;br /&gt;
# The search base that will be used for all queries.&lt;br /&gt;
base dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# Other base mappings&lt;br /&gt;
base   group  ou=groups,dc=hcc,dc=nl&lt;br /&gt;
base   passwd ou=users,dc=hcc,dc=nl&lt;br /&gt;
base   shadow ou=users,dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# The search scope.&lt;br /&gt;
#scope sub&lt;br /&gt;
&lt;br /&gt;
# The LDAP protocol version to use.&lt;br /&gt;
ldap_version 3&lt;br /&gt;
&lt;br /&gt;
# The DN to bind with for normal lookups.&lt;br /&gt;
#binddn cn=annonymous,dc=example,dc=net&lt;br /&gt;
#bindpw secret&lt;br /&gt;
binddn cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&lt;br /&gt;
bindpw xxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
# The DN used for password modifications by root.&lt;br /&gt;
#rootpwmoddn cn=admin,dc=example,dc=com&lt;br /&gt;
&lt;br /&gt;
# SSL options&lt;br /&gt;
ssl off&lt;br /&gt;
ssl start_tls&lt;br /&gt;
#tls_reqcert never&lt;br /&gt;
tls_cacertfile /etc/ssl/certs/cacert.org.pem&lt;br /&gt;
#tls_cert /etc/ssl/private/server.crt&lt;br /&gt;
#tls_key /etc/ssl/private/server.key&lt;br /&gt;
&lt;br /&gt;
# The minimum uid&lt;br /&gt;
nss_min_uid 300&lt;br /&gt;
&lt;br /&gt;
pam_authz_search (&amp;amp;(objectClass=posixAccount)(uid=$username)(|(host=$hostname)(host=$fqdn)(host=\\*)))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===users en groepen toevoegen===&lt;br /&gt;
Hiervoor moet &#039;&#039;&#039;ldapscripts&#039;&#039;&#039; zijn geïnstalleerd. Dit is het geval op de ldap-lb1 server. Dat levert de volgende extra commando&#039;s op:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldaprenamemachine&lt;br /&gt;
ldapadduser&lt;br /&gt;
ldapdeleteuserfromgroup&lt;br /&gt;
ldapfinger&lt;br /&gt;
ldapid&lt;br /&gt;
ldapgid&lt;br /&gt;
ldapmodifyuser&lt;br /&gt;
ldaprenameuser&lt;br /&gt;
lsldap&lt;br /&gt;
ldapaddusertogroup&lt;br /&gt;
ldapsetpasswd&lt;br /&gt;
ldapinit&lt;br /&gt;
ldapaddgroup&lt;br /&gt;
ldapdeletegroup&lt;br /&gt;
ldapmodifygroup&lt;br /&gt;
ldapdeletemachine&lt;br /&gt;
ldaprenamegroup&lt;br /&gt;
ldapaddmachine&lt;br /&gt;
ldapmodifymachine&lt;br /&gt;
ldapsetprimarygroup&lt;br /&gt;
ldapdeleteuser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Meest gebruikt zijn &#039;&#039;&#039;ldapaddgroup, ldapadduser, ldapsetpasswd&#039;&#039;&#039;.  &lt;br /&gt;
Er zijn manpages maar er is ook uitgebreide uitleg in de [https://help.ubuntu.com/14.04/serverguide/openldap-server.html Ubuntu server guide]. Omdat wij het automatisch maken van de home dir uit hebben staan, moet die met de hand aangemaakt worden en moet de owner goed gezet worden.&lt;br /&gt;
&lt;br /&gt;
===host-based login===&lt;br /&gt;
Met een kleine uitbreiding in het schema van de LDAP server, kan host-based login gerealiseerd worden. Ook in de &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; is een uitbreiding nodig.&lt;br /&gt;
&lt;br /&gt;
In de LDAP server dient de objectClass &#039;&#039;&#039;hostObject&#039;&#039;&#039; aan de entries in de ou=users toegevoegd te worden. Deze (auxilary) objectClass brengt slechts één attribute met zich mee: &#039;&#039;&#039;host&#039;&#039;&#039;. De regel in nslcd.conf checkt of één van de waarden van &#039;&#039;&#039;host&#039;&#039;&#039; gelijk is aan de naam van de server waarop ingelogd wordt. De waarde &#039;&#039;&#039;*&#039;&#039;&#039; geldt als wildcard. Zie de regel &#039;&#039;&lt;br /&gt;
&#039;pam_authz_search&#039;&#039;&#039;&#039; in &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Password aanpassen===&lt;br /&gt;
Via LDAP ingelogde gebruikers kunnen net als lokale gebruikers hun wachtwoord met &#039;&#039;&#039;passwd&#039;&#039;&#039; wijzigen. Wel moet aan de eisen in de LDAP ppolicy module voldaan worden.&lt;br /&gt;
&lt;br /&gt;
==PHP scripting==&lt;br /&gt;
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 &#039;&#039;&#039;/usr/local/hobbynet/bin&#039;&#039;&#039; directory.&lt;br /&gt;
Voor de php-scripting zijn enkele php7.x pakketten nodig. Installeer deze met apt-get. Het gaat om:&lt;br /&gt;
* php-cli&lt;br /&gt;
* php-ldap&lt;br /&gt;
&lt;br /&gt;
== Apache authenticatie via LDAP ==&lt;br /&gt;
In plaats van .htpassword authenticatie, kan ook LDAP gebruikt worden. Activeer daartoe de Apache module&lt;br /&gt;
&#039;authnz_ldap&#039;.&lt;br /&gt;
 a2enmod authnz_ldap&lt;br /&gt;
Denk er om dat dit in een loadbalanced situatie op beide servers gedaan dient te worden!&lt;br /&gt;
&lt;br /&gt;
=== Voorbeeld van een LDAP configuratie in de Apache config ===&lt;br /&gt;
(alleen als voorbeeld, niet zo gebruiken!)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# // 1) Hobbynet webmaster&lt;br /&gt;
# // 2) Vraagbaak medewerker van een willekeurige groepering&lt;br /&gt;
# (|(hccRol=*#VRBK)(hccRol=HN#WM))&lt;br /&gt;
  &amp;lt;Location &amp;quot;/apps/vraagbaak&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;RequireAll&amp;gt;&lt;br /&gt;
      Authname &amp;quot;HCC!vraagbaak (gebruik uw hcc.nl gebruikersnaam/wachtwoord)&amp;quot;&lt;br /&gt;
      AuthType Basic&lt;br /&gt;
      AuthBasicProvider ldap&lt;br /&gt;
      AuthLDAPUrl ldap://hcc-ldap-int.hobby.nl/ou=leden,dc=hcc,dc=nl?hccLogin??(|(hccRol=*#VRBK)(hccRol=HN#WM))(hccProfiel=TRUE) TLS&lt;br /&gt;
      require valid-user&lt;br /&gt;
    &amp;lt;/RequireAll&amp;gt;&lt;br /&gt;
  &amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hoe kan LDAP veilig gebruikt worden vanuit Apache===&lt;br /&gt;
Zet een script neer in de gebruikersomgeving, en gebruik mod_authz_external. Doe de controle vervolgens via de XML-RPC server.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zie [[Kadernet]] voor een voorbeeld.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== TODO lijst ==&lt;br /&gt;
&#039;&#039;Dit is een lijst in wording, graag aanvullen&#039;&#039; &lt;br /&gt;
* &#039;dun&#039; loadbalancer script maken om te controleren dat LDAP echt luistert&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79596</id>
		<title>LDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79596"/>
		<updated>2022-06-07T09:48:04Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* Locatie bestanden */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introductie==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==LDAP server keuze==&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Loadbalanced==&lt;br /&gt;
Er zijn twee servers (ldap-lb1 en ldap-lb2) die achter een loadbalancer in preferred server mode staan 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.&lt;br /&gt;
&lt;br /&gt;
Tevens zijn er een test en een development server: ldap-test en ldap-dev.&lt;br /&gt;
&lt;br /&gt;
==Installatie==&lt;br /&gt;
Installatie van OpenLDAP is simpel:&lt;br /&gt;
 aptitude install slapd ldap-utils&lt;br /&gt;
Omdat er gebruikgemaakt wordt van php scripts, is het ook nodig &#039;&#039;&#039;php-cli&#039;&#039;&#039; en &#039;&#039;&#039;php-ldap&#039;&#039;&#039; te installeren. De configuratie van OpenLDAP is sinds Karmic Koala iets gecompliceerder geworden. &#039;cn=config&#039; 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 &amp;quot;dpkg-reconfigure slapd&amp;quot; zet alleen de skeleton configuratie terug. Je moet zelf de database, root dn en acl&#039;s opzetten (als root of met sudo). Run  &#039;&#039;&#039;dpkg-reconfigure slapd&#039;&#039;&#039; om terug te gaan naar een lege directory. &lt;br /&gt;
&lt;br /&gt;
De volgende pakketten dienen geïnstalleerd te zijn (&#039;php -m&#039; toont de geactiveerde modules):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mogelijk ontbrekende pakketten:&lt;br /&gt;
&lt;br /&gt;
apt-get install aptitude &lt;br /&gt;
apt-get install php-mbstring&lt;br /&gt;
apt-get install php-xmlrpc&lt;br /&gt;
apt-get install php-ldap&lt;br /&gt;
apt-get install ldapscripts&lt;br /&gt;
apt-get install php-xml&lt;br /&gt;
apt-get install slapd&lt;br /&gt;
apt-get install ldap-utils&lt;br /&gt;
&lt;br /&gt;
- openldap moet lid zijn van de groep ssl-cert!&lt;br /&gt;
apt-get install ssl-cert&lt;br /&gt;
adduser openldap ssl-cert&lt;br /&gt;
(of vi /etc/group&lt;br /&gt;
    ssl-cert:x:116:openldap)&lt;br /&gt;
&lt;br /&gt;
- Zorg dat de LDAP daemon bij de certificaten kan komen. &lt;br /&gt;
LET OP: op alle hobbynet servers staan de certificaten in /disk/site/etc/ssl/hobby.nl/&lt;br /&gt;
 chgrp ssl-cert /disk/site/etc/ssl/hobby.nl/hobby.nl.*&lt;br /&gt;
 chmod 440      /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
LET OP: Als apparmor geïnstalleerd is moet het pad naar de certificaten vrijgegeven worden. Als alternatief kan apparmor verwijderd worden.&lt;br /&gt;
&lt;br /&gt;
Het volgende is niet nodig voor ldap. Mischien voor mysql-server???&lt;br /&gt;
- mysql laat het bestand ibdata1 ongelimiteerd groeien (InnoDB bestanden)&lt;br /&gt;
 /etc/mysql/mysql.conf.d/innodb_file_per_table.cnf&lt;br /&gt;
 [mysql]&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
&lt;br /&gt;
Nog meer Hobbynet aanpassingen Waarom??? &lt;br /&gt;
/etc/bash.bashrc&lt;br /&gt;
export http_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export https_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export ftp_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Locatie bestanden===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Alle ldif em tmpl bestanden gaan naar /usr/local/hobbynet/lib&lt;br /&gt;
* init_ldap en andere scripts gaan naar /usr/local/hobbynet/bin&lt;br /&gt;
* alle data bestanden (dumps) en update ldifs gaan naar /usr/local/hobbynet/data&lt;br /&gt;
* /usr/local/hobbynet/etc/ldap/schema/hcc_schema.* gaan naar /etc/ldap/schema&lt;br /&gt;
* /usr/local/hobbynet/etc/ldap/schema/ppolicy.ldif gaat naar /etc/ldap/schema&lt;br /&gt;
* /usr/local/hobbynet/etc/ldap/schema/ldapns.ldif gaat naar /etc/ldap/schema&lt;br /&gt;
&lt;br /&gt;
Ldapns en ppolicy moetn eventueel van een oudere release bewaard blijven! Waarom ze weg in 22.04 zijn is onduidelijk. hcc_schema.ldif wordt middels een script gemaakt. Dit script plaatst de ldif bestand(en) in /etc/ldap/schema. Zie de README en actuele scripts.&lt;br /&gt;
&lt;br /&gt;
==Initiële database==&lt;br /&gt;
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.sh &amp;lt;admin-pw&amp;gt; gebruikt dan wordt een werkende directory gemaakt met alle statische data (in diverse ou&#039;s) erin. Gebruik na het maken van de initiële database restore_ldap.sh om de database te vullen met de data uit de data directory.&lt;br /&gt;
&lt;br /&gt;
===slapd.init.ldif ===&lt;br /&gt;
Bij installatie en reconfiguratie wordt /usr/share/slapd/slapd.init.ldif ingelezen. Zie aldaar indien nodig. Er wordt zowel voor de cn=config als voor de dc=hcc,dc=nl een RootDN aangemaakt. Echter wordt er geen password gezet op de RootDN voor config.&lt;br /&gt;
&lt;br /&gt;
==init_ldap script==&lt;br /&gt;
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 &#039;&#039;&#039;cn=admin,dc=hcc,dc=nl&#039;&#039;&#039; 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 &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; laadt vervolgens de laatste dump terug. Bij wijzigingen aan het schema is het raadzaam altijd een &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; te doen zodat een later een actuele dump kan worden teruggeladen.&lt;br /&gt;
&lt;br /&gt;
Het (plain text) password van cn=admin,dc=hcc,dc=nl moet bij het aanroepen van &#039;&#039;&#039;init_ldap&#039;&#039;&#039; op de commandline worden meegegeven. Tijdens de dpkg-reconfigure moet het password nog 2x gegeven worden. Lees eventueel ook de [http://www.openldap.org/doc/admin/ OpenLDAP Admin Guide].&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* voorbereidingen om &amp;quot;dpkg-reconfigure slapd&amp;quot; te draaien&lt;br /&gt;
* definities van input files&lt;br /&gt;
* check host&lt;br /&gt;
* bouwen van het skelet van de nieuwe directory&lt;br /&gt;
Zie voor details van de scripts &#039;&#039;&#039;init_ldap&#039;&#039;&#039;, &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; en &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; op een van de servers (in /usr/local/hobbynet/bin).&lt;br /&gt;
&lt;br /&gt;
==onderdelen van init_ldap==&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===add-schema.ldif===&lt;br /&gt;
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. &lt;br /&gt;
* Hiertoe wordt het onderstaande schema in /etc/ldap/schema geplaatst als hcc_schema.schema. &lt;br /&gt;
* Vervolgens worden de stappen uitgevoerd zoals beschreven in de [https://help.ubuntu.com/11.10/serverguide/C/openldap-server.html Ubuntu Server guide], onder &#039;&#039;&#039;Modifying the slapd Configuration Database&#039;&#039;&#039;. &lt;br /&gt;
* De resulterende output file &#039;&#039;&#039;cn=hcc_schema.ldif&#039;&#039;&#039; moet dan nog naar /etc/ldap/schema/hcc_schema.ldif gecopieerd worden. &lt;br /&gt;
Als dit proces herhaald moet worden, start dan met een lege output directory en verwijder een eventueel achtergebleven cn=hcc_schema.ldif bestand. &lt;br /&gt;
&lt;br /&gt;
De extra schema&#039;s worden middels een &#039;&#039;&#039;include&#039;&#039;&#039; toegevoegd. &#039;&#039;&#039;Ppolicy&#039;&#039;&#039; is op gelijke wijze als &#039;&#039;&#039;hcc_schema&#039;&#039;&#039; tot .ldif geconverteerd. Alle stappen om een nieuwe &#039;&#039;&#039;hcc-schema.ldif&#039;&#039;&#039; te maken zijn gescript in &#039;&#039;&#039;upd_schema&#039;&#039;&#039;. In &#039;&#039;&#039;init_ldap&#039;&#039;&#039; wordt het eigen schema en de password policy geladen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: add-schema.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
# date: vbs20220511 ppolicy not included to get&lt;br /&gt;
#       of duplicate message&lt;br /&gt;
#&lt;br /&gt;
include: file:///etc/ldap/schema/hcc_schema.ldif&lt;br /&gt;
#include: file:///etc/ldap/schema/ppolicy.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ldapns.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====schema updates====&lt;br /&gt;
Soms wordt een attribute toegevoegd of gewijzigd. Hiertoe dient het bestand hcc_schema.schema in /usr/local/hobbynet/etc/ldap/schema, gewijzigd te worden. Daarna dient er een ldif versie van gemaakt te worden. Gebruik hiervoor &#039;&#039;&#039;upd_schema.sh&#039;&#039;&#039; in dezelfde directory. De resulterende hcc_schema.ldif wordt in dit script naar /etc/ldap/schema gecopieërd. Bij grote wijzigingen is het aan te bevelen door de hele rebuild cycle te gaan (dump, init, restore). Bij triviale aanpassingen zou hcc_schema.ldif ook &#039;&#039;&#039;direct&#039;&#039;&#039; in de actieve directory geplaatst kunnen worden, gevolgd door slechts een &#039;&#039;&#039;service slapd restart&#039;&#039;&#039;. Gebruik hiervoor (blijf in de lokale schema directory):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp &amp;quot;ldif_output/cn=config/cn=schema/cn={14}hcc_schema.ldif&amp;quot; &amp;quot;/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}hcc_schema.ldif&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
LET OP: De nummers tussen accolades zijn bepaald door de volgorde van andere scripts! Zolang geen andere schema&#039;s worden toegevoegd zullen ze niet veranderen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ook kan met de ldap-tools gewerkt worden. Gebruik ldapsearch en ldapmodify, eventueel met de -f optie om een voorbereide serie opdrachten uit te voeren. Gebruik ldapsearch om eerst de structuur te vinden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier een voorbeeld om een objectClass aan te passen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat pas_aan.ldif&lt;br /&gt;
dn: cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
delete: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description ) )&lt;br /&gt;
-&lt;br /&gt;
add: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description $ hccIg ) )&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
$sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f pas_aan.ldif &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_config.ldif===&lt;br /&gt;
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 &#039;&#039;&#039;STATS&#039;&#039;&#039; gezet. Dit geeft niet teveel logging maar is toch goed bruikbaar. Om extra logging te krijgen op b.v. ACL&#039;s, verander olcLogLevel dan in &amp;quot;stats ACL&amp;quot;.  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-config.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcTLSCACertificateFile&lt;br /&gt;
olcTLSCACertificateFile: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
-&lt;br /&gt;
add: olcTLSCertificateFile&lt;br /&gt;
olcTLSCertificateFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
-&lt;br /&gt;
add: olcTLSCertificateKeyFile&lt;br /&gt;
olcTLSCertificateKeyFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
-&lt;br /&gt;
add: olcPasswordHash&lt;br /&gt;
olcPasswordHash: {CRYPT}&lt;br /&gt;
-&lt;br /&gt;
add: olcPasswordCryptSaltFormat&lt;br /&gt;
olcPasswordCryptSaltFormat: $6$%.16s&lt;br /&gt;
-&lt;br /&gt;
replace: olcLogLevel&lt;br /&gt;
olcLogLevel: stats&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Om de logging in een apart bestand te krijgen moet in /etc/rsyslog.d een extra bestand &#039;&#039;&#039;openldap.conf&#039;&#039;&#039; geplaatst worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local4.*   -/var/log/openldap.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Tevens willen we logrotate op dit bestand. Plaats in /etc/logrotate.d het bestand &#039;&#039;&#039;openldap&#039;&#039;&#039; met de volgende inhoud&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/log/openldap.log&lt;br /&gt;
{&lt;br /&gt;
        rotate 4&lt;br /&gt;
        weekly&lt;br /&gt;
        missingok&lt;br /&gt;
        notifempty&lt;br /&gt;
        compress&lt;br /&gt;
        delaycompress&lt;br /&gt;
        sharedscripts&lt;br /&gt;
        postrotate&lt;br /&gt;
                reload rsyslog &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 || true&lt;br /&gt;
        endscript&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify-mdb.ldif===&lt;br /&gt;
Hier worden de wijzigingen op de backend db gemaakt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-mdb.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
# hjv 2020.06.07 (oldSizeLimit toegevoegd)&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcDbCheckpoint&lt;br /&gt;
olcDbCheckpoint: 4096 1&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbNoSync&lt;br /&gt;
olcDbNoSync: TRUE&lt;br /&gt;
-&lt;br /&gt;
replace: olcSizeLimit&lt;br /&gt;
olcSizeLimit: 100000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===modify-acl.ldif===&lt;br /&gt;
Hier worden de rechten bepaald van de diverse rollen en groepen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-acl.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcAccess&lt;br /&gt;
# hobbynetlogin heeft lees rechten t.b.v. MySecureShell aanloggen&lt;br /&gt;
olcAccess: to attrs=@posixAccount,@posixGroup,@shadowAccount,@hostObject&lt;br /&gt;
  by dn=&amp;quot;cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to attrs=@posixAccount&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# sta anonymous search toe (t.b.v. Apache authenticatie)&lt;br /&gt;
olcAccess: to attrs=hccLogin,hccRol,hccProfiel,entry&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# olcAccess: to attrs=hccOptIn&lt;br /&gt;
#   by self write&lt;br /&gt;
#   by dn=&amp;quot;cn=drupal-hcc-nl,ou=klanten,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
#   by * break&lt;br /&gt;
#&lt;br /&gt;
# Anonieme klanten moeten kunnen inloggen&lt;br /&gt;
# en mogen hun eigen password wijzigen&lt;br /&gt;
olcAccess: to attrs=userPassword,shadowLastChange&lt;br /&gt;
  by self write&lt;br /&gt;
  by anonymous auth&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# Gebruiker mag zijn kader email wachtwoord aanpassen&lt;br /&gt;
olcAccess: to attrs=hccKaderPassword,hccKaderForward&lt;br /&gt;
  by self write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# beheerders hebben schrijfrechten op alles (updateDN)&lt;br /&gt;
# klanten hebben alleen lees rechten op alles (readDN)&lt;br /&gt;
# self mag lezen&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by self read&lt;br /&gt;
  by dn=&amp;quot;cn=xml-hoge-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn=&amp;quot;cn=xml-lage-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by dn.one=&amp;quot;ou=beheer,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn.one=&amp;quot;ou=klanten,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# PC30 helpdesk heeft leesrechten op ou=leden&lt;br /&gt;
olcAccess: to attrs=@hccOrgPerson,@hccKaderFunctie&lt;br /&gt;
  by dn.one=&amp;quot;ou=helpdesk,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# partners mogen een paar attrs lezen&lt;br /&gt;
olcAccess: to attrs=hccLidNummer,hccPostcode,hccPostcodeZoekveld,hccIg&lt;br /&gt;
  by dn.one=&amp;quot;ou=partners,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# iedereen moet (pseudo attr) entry en objectClass kunnen lezen&lt;br /&gt;
olcAccess: to attrs=entry,objectClass&lt;br /&gt;
  by * read&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by * none&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_index.ldif===&lt;br /&gt;
Een kale configuratie is heel snel voor wat betreft het opnieuw vullen met gegevens. Bij het aanmaken van een verse LDAP database worden er dan ook zo min mogelijk indexen aangemaakt.&amp;lt;br&amp;gt;&lt;br /&gt;
Zodra de inhoud is ingelezen kunnen de &#039;echte&#039; indexen aangemaakt worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-index.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcDbIndex&lt;br /&gt;
olcDbIndex: default pres,eq&lt;br /&gt;
olcDbIndex: objectClass,entryUUID,entryCSN eq&lt;br /&gt;
olcDbIndex: hccLidNummer,hccLogin,hccForumLogin eq&lt;br /&gt;
olcDbIndex: uid,uidNumber,gidNumber,memberUid,member eq&lt;br /&gt;
olcDbIndex: cn,host,hccPseudoniem,hccOptin,hccLocatie eq&lt;br /&gt;
olcDbIndex: sn,hccPostcodeZoekveld,hccIg,hccRegio eq,subfinal&lt;br /&gt;
olcDbIndex: hccRol,hccBezoek eq,pres,subfinal&lt;br /&gt;
olcDbIndex: hccBulletins pres&lt;br /&gt;
olcDbIndex: aboNummer eq&lt;br /&gt;
olcDbIndex: aboPostcodeZoekveld eq,subfinal&lt;br /&gt;
olcDbIndex: mail,mailHccnet,hccKaderMail,hccKaderForward pres,eq&lt;br /&gt;
olcDbIndex: hccProfiel pres,eq&lt;br /&gt;
olcDbindex: hccKaderUniekeURL eq&lt;br /&gt;
olcDbindex: hccOnderwerp eq,subfinal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ppolicy overlay===&lt;br /&gt;
* vanuit LDAP de minimale lengte van een wachtwoord afdwingen&lt;br /&gt;
* in LDAP SSHA versleuteling activeren&amp;lt;br&amp;gt;&lt;br /&gt;
(olcPPolicyHashCleartext: TRUE)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: add-ppolicy.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: cn=module, cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectClass: olcModuleList&lt;br /&gt;
objectClass: top&lt;br /&gt;
olcModuleLoad: ppolicy&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=ppolicy,olcDatabase={1}mdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcPPolicyConfig&lt;br /&gt;
olcOverlay: ppolicy&lt;br /&gt;
olcPPolicyDefault: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
olcPPolicyUseLockout: TRUE&lt;br /&gt;
olcPPolicyHashCleartext: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The default ppolicy looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dn: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
objectClass: pwdPolicy&lt;br /&gt;
objectClass: device&lt;br /&gt;
cn: default&lt;br /&gt;
pwdCheckQuality: 1&lt;br /&gt;
pwdMinLength: 8&lt;br /&gt;
pwdAttribute: 2.5.4.35&lt;br /&gt;
pwdAllowUserChange: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Syncrepl overlay===&lt;br /&gt;
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 [http://www.openldap.org/doc/admin/ LDAP Admin Guide]. &#039;&#039;&#039;Mirror configuratie is specifiek per server!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-syncrepl.tmpl                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
replace: olcServerID&lt;br /&gt;
olcServerID: @SID@&lt;br /&gt;
&lt;br /&gt;
dn: cn=module{0},cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcModuleLoad&lt;br /&gt;
olcModuleLoad: syncprov&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcSyncProvConfig&lt;br /&gt;
olcOverlay: syncprov&lt;br /&gt;
olcSpCheckpoint: 100 5&lt;br /&gt;
olcSpSessionlog: 100&lt;br /&gt;
&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcSyncRepl&lt;br /&gt;
olcSyncRepl: rid=@RID@&lt;br /&gt;
  provider=ldap://@PROVIDER@&lt;br /&gt;
  binddn=&amp;quot;cn=admin,dc=hcc,dc=nl&amp;quot; bindmethod=simple credentials=&amp;quot;@PASSWORD@&amp;quot;&lt;br /&gt;
  searchbase=&amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
  type=refreshAndPersist&lt;br /&gt;
  interval=00:00:00:10&lt;br /&gt;
  retry=&amp;quot;5 5 300 5&amp;quot;&lt;br /&gt;
  timeout=1&lt;br /&gt;
  starttls=yes&lt;br /&gt;
-&lt;br /&gt;
add: olcMirrorMode&lt;br /&gt;
olcMirrorMode: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
De andere server krijgt ServerID 2 en de provider is het IP adres van de andere server.&lt;br /&gt;
&lt;br /&gt;
===Unique overlay===&lt;br /&gt;
Deze overlay dient er voor te zorgen dat o.a het attribuut hccLogin een unieke waarde bevat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-unique.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module,cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectclass: olcModuleList&lt;br /&gt;
objectclass: top&lt;br /&gt;
olcmoduleload: unique&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=unique,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcUniqueConfig&lt;br /&gt;
olcOverlay: unique&lt;br /&gt;
olcUniqueAttribute: uid uidNumber hccLogin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SSL/TLS beveiliging==&lt;br /&gt;
Gebruik de juiste .pem bestanden in /etc/ssl/certs en /etc/ssl/private.&lt;br /&gt;
&lt;br /&gt;
We maken gebruik van een RapidSSL certificaat. Als dit niet standaard in Ubuntu bekend is, zet dan eerst GeoTrust_RapidSSL_-_ca-bundle.pem in de map /etc/ssl/certs neer. Voer nu een &#039;&#039;&#039;c_rehash .&#039;&#039;&#039; uit in /etc/ssl/certs om de cache te updaten (omdat GeoTrust_RapidSSL_-_ca-bundle.pem nieuw werd toegevoegd). &lt;br /&gt;
&lt;br /&gt;
De ownership is belangrijk. Hiertoe wordt de groep &amp;quot;openldap&amp;quot; toegevoegd aan de groep ssl-cert.&lt;br /&gt;
 adduser openldap ssl-cert&lt;br /&gt;
&lt;br /&gt;
Als dit fout gaat, doe dan eerst:&lt;br /&gt;
 apt-get install ssl-cert&lt;br /&gt;
&lt;br /&gt;
Zet het certificaat en de private key in de juiste groep:&lt;br /&gt;
 chgrp ssl-cert /etc/ssl/private/hobby.nl.*&lt;br /&gt;
 chmod 440      /etc/ssl/private/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
Het resultaat is dan als volgt:&lt;br /&gt;
 root@hcc-ldap-lb1:~# ls -l /etc/ssl/private/hcc* &lt;br /&gt;
 -rw-r--r-- 1 root     ssl-cert 1724 Nov 22 20:47 hobby.nl.crt&lt;br /&gt;
 -r--r----- 1 root     ssl-cert 1679 Nov 22 20:25 hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
 root@hcc-ldap-lb1:~# grep openldap /etc/group&lt;br /&gt;
 ssl-cert:x:114:openldap&lt;br /&gt;
 openldap:x:118:&lt;br /&gt;
&lt;br /&gt;
2020.12.09: Op een nieuwe Ubuntu installatie staat apparmor standaard aan. Weg ermee!&lt;br /&gt;
 apt remove --assume-yes --purge apparmor&lt;br /&gt;
&amp;lt;strike&amp;gt;Per september 2017 staan de certificaten in /disk/site/etc/ssl/hobby.nl, net als op alle andere servers. Omdat apparmor actief is moet deze directory worden toegevoegd aan /etc/apparmor.d/local/usr.sbin.slapd. Die file ziet er dan als volgt uit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Site-specific additions and overrides for usr.sbin.slapd.&lt;br /&gt;
# For more details, please see /etc/apparmor.d/local/README.&lt;br /&gt;
#include &amp;lt;abstractions/ssl_certs&amp;gt;&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/ r,&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/* r,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Openldap ook op poort 636 benaderd wordt (naast TLS op 389), moet in /etc/default/slapd ldaps:/// opgenomen worden bij de SLAPD_SERVICES.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;netstat -an&#039; dient dan 636 te laten zien voor zowel IPv4 als IPv6.&lt;br /&gt;
&lt;br /&gt;
Om de cn=config te zien kan je het volgende commando gebruiken:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config&lt;br /&gt;
&lt;br /&gt;
of, wat botter maar korter:&lt;br /&gt;
cat /etc/ldap/slapd.d/cn\=config.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Backup, initialize, restore==&lt;br /&gt;
Om het hele skelet van ldap in één keer te herstellen dient &#039;&#039;&#039;init_ldap&#039;&#039;&#039; gebruikt te worden. Als argument &#039;&#039;&#039;moet&#039;&#039;&#039; het admin beheer wachtwoord mee gegeven worden.&lt;br /&gt;
&lt;br /&gt;
===lokaal===&lt;br /&gt;
Backups kunnen gemaakt worden terwijl slapd draait maar geadviseerd wordt slapd te stoppen. Voor dumpen moet &#039;&#039;&#039;slapcat&#039;&#039;&#039; gebruikt worden. Backups kunnen gemaakt worden per database of een filter daarop, naar een ldif bestand.&lt;br /&gt;
 slapcat -l hcc-dump.ldif -b &amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
Dit maakt een dump van alles onder &#039;&#039;&#039;dc=hcc,dc=nl&#039;&#039;&#039; naar het bestand hcc-dump.ldif. Ook is het mogelijk het database nummer te gebruiken, config is altijd nummer 0, hdb is gewoonlijk 1.&lt;br /&gt;
&lt;br /&gt;
Het &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; script dumpt alle ou&#039;s in aparte .ldif bestanden; het omgekeerde doet &#039;&#039;&#039;restore_ldap&#039;&#039;&#039;.  &lt;br /&gt;
Terug inlezen kan alleen in een lege directory, dus direct nadat &#039;&#039;&#039;init_ldap&#039;&#039;&#039; is gedaan. Gebruik voor het terugplaatsen &#039;&#039;&#039;slapadd&#039;&#039;&#039;. Aan te bevelen is &#039;&#039;&#039;-c&#039;&#039;&#039; mee te geven zodat ondanks fouten doorgegaan wordt. &lt;br /&gt;
&lt;br /&gt;
Voor slapadd &#039;&#039;&#039;moet&#039;&#039;&#039; 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)&lt;br /&gt;
 /etc/init.d/slapd stop&lt;br /&gt;
 slapadd -l hcc-dump.ldif -w -c &amp;gt;errors.txt&lt;br /&gt;
 chown openldap:openldap /var/lib/ldap/*&lt;br /&gt;
 /etc/init.d/slapd start&lt;br /&gt;
&lt;br /&gt;
===remote===&lt;br /&gt;
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 &#039;&#039;&#039;backup-encrypted&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Recente lokale backups zijn te vinden in &#039;&#039;&#039;/usr/local/hobbynet/tmp&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Verse ldap maken===&lt;br /&gt;
Transactie log bij het toevoegen van b.v. een nieuwe ou:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Op beide servers:&lt;br /&gt;
schema van test server gecopieerd en geactiveerd&lt;br /&gt;
dump-ldap gedraaid&lt;br /&gt;
systemctl stop slapd.service &lt;br /&gt;
&lt;br /&gt;
Er is nu géén ldap service! Werk dus snel...&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb1&lt;br /&gt;
systemctl stop slapd.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
op ldap-lb2:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb2&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
systemctl start slapd.service&lt;br /&gt;
Beide slapd servers zijn in de lucht en moeten synchroniseren.&lt;br /&gt;
&lt;br /&gt;
op beide servers:&lt;br /&gt;
check replicatie (netstat en functioneel)&lt;br /&gt;
&lt;br /&gt;
root@ldap-lb1:/usr/local/hobbynet/bin# netstat -n | grep 389&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:49510 2a02:968:ffff:910:172:31:8:4:389 ESTABLISHED&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:389 2a02:968:ffff:910:172:31:8:4:37490 ESTABLISHED&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:49508 2a02:968:ffff:910:172:31:8:4:389 ESTABLISHED&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:389 2a02:968:ffff:910:172:31:8:4:37488 ESTABLISHED&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Functioneel door met ADS op beide servers in te loggen en een willekeurig veld in je eigen entry te wijzigen op lb1. Kijk of het gebeurd is op lb2 en wijzig het daar terug. Check op de andere server of het gebeurd is. Er kan een zekere vertraging in optreden.&lt;br /&gt;
&lt;br /&gt;
Stel er is een nieuwe ou gemaakt: denk aan het bij werken van de dump en restore scripts.&lt;br /&gt;
&lt;br /&gt;
update dump-ldap.sh en restore-ldap.sh met de nieuwe ou&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
export tarieven.ldif op test server en import op ldap-lb1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==crontab==&lt;br /&gt;
 # script dat updates ophaalt (maar niet installeert), zodat nagios ze ook detecteert&lt;br /&gt;
 0 9 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
==LDAP Clients==&lt;br /&gt;
Er zijn meerdere LDAP clients. De meest populaire zijn Apache Directory Studio (&amp;quot;ADS&amp;quot;) en phpLdapAdmin (&amp;quot;PLA&amp;quot;).&amp;lt;br&amp;gt;&lt;br /&gt;
De eerste is veel uitgbreider maar vereist een Java Runtime Environment (&amp;quot;JRE&amp;quot;). Onder Windows is dat JRE(13) of (open)JDK-(13).&amp;lt;br&amp;gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Binnen Hobbynet wordt uitsluitend gebruik gemaakt van ADS.&lt;br /&gt;
&lt;br /&gt;
===StartTLS===&lt;br /&gt;
Aanbevolen wordt StartTLS op poort 389 te gebruiken. Alternatief is LDAPS op poort 636 maar dat is deprecated. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Windows===&lt;br /&gt;
&amp;lt;i&amp;gt;2019-10-31 HJV: Oude info, als referentie leuk, maar niet meer relevant&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Onder Windows moet met &#039;&#039;&#039;keytool.exe&#039;&#039;&#039; gewerkt worden. De uitleg heb ik van  [http://www.talkingtree.com/blog/index.cfm?mode=entry&amp;amp;entry=25AA75A4-45A6-2844-7CA3EECD842DB576 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:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Haal de benodigde bestanden op (op een Linux systeem):&lt;br /&gt;
wget http://www.cacert.org/certs/root.der -O root.der&lt;br /&gt;
wget http://www.cacert.org/certs/class3.der -O class3.der&lt;br /&gt;
copieer de bestanden naar de Windows omgeving in C:\Program Files (x86)\Java\jre6\lib\security.&lt;br /&gt;
&lt;br /&gt;
Open een commandwindow:&lt;br /&gt;
cd C:\Program Files (x86)\Java\jre6\lib\security&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass1 -file root.der&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass3 -file class3.der&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Linux===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS gebruik===&lt;br /&gt;
ADS kan erg handig zijn voor het snel dumpen van hele ou&#039;s in .ldif formaat. Zo&#039;n dump kan direct op een andere server worden ingelezen.&lt;br /&gt;
&lt;br /&gt;
===PhpLdapAdmin onder Linux===&lt;br /&gt;
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 [http://phpldapadmin.sourceforge.net/wiki/index.php/Server:server:tls phpldapadmin wiki].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# LDAP Defaults&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# See ldap.conf(5) for details&lt;br /&gt;
# This file should be world readable but not world writable.&lt;br /&gt;
&lt;br /&gt;
#BASE   dc=example,dc=com&lt;br /&gt;
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666&lt;br /&gt;
&lt;br /&gt;
#SIZELIMIT      12&lt;br /&gt;
#TIMELIMIT      15&lt;br /&gt;
#DEREF          never&lt;br /&gt;
TLS_CACERT      /etc/ssl/certs/CAcert_org.pem&lt;br /&gt;
TLS_CERT        /etc/ssl/private/hobby.nl.crt&lt;br /&gt;
TLS_KEY         /etc/ssl/private/hobby.nl.key&lt;br /&gt;
TLS_REQCERT     allow&lt;br /&gt;
#TLS_REQCERT never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Denk er wel aan na wijzigingen Apache te herstarten.&lt;br /&gt;
===PAM en NSS via LDAP===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Installeer &#039;&#039;&#039;libnss-ldapd&#039;&#039;&#039; om de benodigde libraries te verkrijgen. Apt-get zal tevens &#039;&#039;&#039;libpam-ldapd&#039;&#039;&#039;, &#039;&#039;&#039;nslcd&#039;&#039;&#039; en &#039;&#039;&#039;nscd&#039;&#039;&#039; binnen brengen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install libnss-ldapd auth-client-config ldap-utils&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
    libpam-ldapd nscd nslcd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Libnss-ldapd is een doorontwikkeling van libnss-ldap en bevat meerdere verbeteringen. Zie: [http://arthurdejong.org/nss-pam-ldapd/ deze site] van de ontwikkelaar. Bij de installatie wordt een user &#039;&#039;&#039;nslcd&#039;&#039;&#039; aangemaakt; denk erom die in de .tmpl bestanden te zetten!&lt;br /&gt;
  &lt;br /&gt;
nsswitch.conf laat zich configureren via &#039;&#039;&#039;auth-client-config&#039;&#039;&#039; maar lac_ldap is alleen aanwezig als &#039;&#039;&#039;ldap-auth-config&#039;&#039;&#039; ook is geinstalleerd. Zo niet gebruik dan de tweede regel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auth-client-config -t nss -p lac_ldap&lt;br /&gt;
auth-client-config -t nss -p ldap_example&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het resultaat is dat nsswitch.conf zowel in files (/etc/passwd etc.) zoekt als in ldap.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nsswitch.conf&lt;br /&gt;
#&lt;br /&gt;
# Example configuration of GNU Name Service Switch functionality.&lt;br /&gt;
# If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
# `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # passwd:         compat&lt;br /&gt;
passwd: files ldap&lt;br /&gt;
# pre_auth-client-config # group:          compat&lt;br /&gt;
group: files ldap&lt;br /&gt;
# pre_auth-client-config # shadow:         compat&lt;br /&gt;
shadow: files ldap&lt;br /&gt;
&lt;br /&gt;
hosts:          files dns&lt;br /&gt;
networks:       files&lt;br /&gt;
&lt;br /&gt;
protocols:      db files&lt;br /&gt;
services:       db files&lt;br /&gt;
ethers:         db files&lt;br /&gt;
rpc:            db files&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # netgroup:       nis&lt;br /&gt;
netgroup: nis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het aanpassen van de PAM bestanden gaat sinds enige releases met &#039;&#039;&#039;pam-auth-update&#039;&#039;&#039;. Kies in het menu voor zowel unix als ldap. Default wordt nu ldap authenticatie gebruikt voor uid &amp;gt;= 1000. Bij Hobbynet willen we vanaf 300 ldap gebruiken. Door een licht gemodificeerde versie van /usr/share/pam-configs/ldap te maken (ldap-hobbynet), kan ook voor de hobbynet instelling gekozen worden. Dit is de ldap-hobbynet versie:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Name: LDAP Authentication (uid&amp;gt;300)&lt;br /&gt;
Default: yes&lt;br /&gt;
Priority: 128&lt;br /&gt;
Auth-Type: Primary&lt;br /&gt;
Auth-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Auth:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 use_first_pass&lt;br /&gt;
Account-Type: Additional&lt;br /&gt;
Account:&lt;br /&gt;
        [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad]        pam_ldap.so minimum_uid=300&lt;br /&gt;
Password-Type: Primary&lt;br /&gt;
Password-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Password:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 try_first_pass&lt;br /&gt;
Session-Type: Additional&lt;br /&gt;
Session:&lt;br /&gt;
        [success=ok default=ignore]     pam_ldap.so minimum_uid=300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dit is in een standaard opzet van LDAP voldoende om zowel lokale gebruikers als gebruikers opgeslagen in LDAP, te laten inloggen en hun password te laten wijzigen. In de Hobbynet setup moet er echter nog meer gebeuren in de ACL&#039;s van de LDAP server configuratie. Omdat Hobbynet de laatste ACL regel heeft gewijzigd in een &#039;&#039;&#039;deny-all&#039;&#039;&#039;, is er een helper of proxy account nodig dat read access heeft of een aantal cruciale velden in de posixAccount objectClass. Zie verder de lsiting van nslcd.conf.&lt;br /&gt;
&lt;br /&gt;
Libnss-ldapd en libpam-ldapd hebben een gezamelijke daemon &#039;&#039;&#039;nslcd&#039;&#039;&#039; die z&#039;n configuratie uit &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039; haalt. Hierin is ook een voorziening voor het helper account. Aan het eind vande &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; staat de voorziening voor host-based login. Als het attribute &#039;&#039;&#039;host&#039;&#039;&#039; de fqdn of alleen de host naam bevat, bepaald dat of inloggen op die host mogelijk is. &#039;&#039;&#039;*&#039;&#039;&#039; staat inloggen op alle hosts toe.&lt;br /&gt;
&lt;br /&gt;
Eventueel kan het daemon proces voor debugging doeleinden ook als command (&#039;&#039;&#039;nslcd -d&#039;&#039;&#039;) gestart worden. Om de bevragingen van de LDAP server wat te verminderen, kan &#039;&#039;&#039;nscd&#039;&#039;&#039; voor caching zorgen. Deze cache daemon heeft zijn eigen configuratie bestand: &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039;. De default instellingen zijn goed; eventueel kan de logging naar een bestand gestuurd worden.&lt;br /&gt;
&lt;br /&gt;
Verbinding met de LDAP server kan met StartTLS beveiligd worden. Hier de inhoud van nslcd.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nslcd.conf&lt;br /&gt;
# nslcd configuration file. See nslcd.conf(5)&lt;br /&gt;
# for details.&lt;br /&gt;
&lt;br /&gt;
# The user and group nslcd should run as.&lt;br /&gt;
uid nslcd&lt;br /&gt;
gid nslcd&lt;br /&gt;
&lt;br /&gt;
# log location and level&lt;br /&gt;
#log /var/log/nslcd.log debug&lt;br /&gt;
&lt;br /&gt;
# The location at which the LDAP server(s) should be reachable.&lt;br /&gt;
uri ldap://ldap2-int.hobby.nl/&lt;br /&gt;
&lt;br /&gt;
# The search base that will be used for all queries.&lt;br /&gt;
base dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# Other base mappings&lt;br /&gt;
base   group  ou=groups,dc=hcc,dc=nl&lt;br /&gt;
base   passwd ou=users,dc=hcc,dc=nl&lt;br /&gt;
base   shadow ou=users,dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# The search scope.&lt;br /&gt;
#scope sub&lt;br /&gt;
&lt;br /&gt;
# The LDAP protocol version to use.&lt;br /&gt;
ldap_version 3&lt;br /&gt;
&lt;br /&gt;
# The DN to bind with for normal lookups.&lt;br /&gt;
#binddn cn=annonymous,dc=example,dc=net&lt;br /&gt;
#bindpw secret&lt;br /&gt;
binddn cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&lt;br /&gt;
bindpw xxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
# The DN used for password modifications by root.&lt;br /&gt;
#rootpwmoddn cn=admin,dc=example,dc=com&lt;br /&gt;
&lt;br /&gt;
# SSL options&lt;br /&gt;
ssl off&lt;br /&gt;
ssl start_tls&lt;br /&gt;
#tls_reqcert never&lt;br /&gt;
tls_cacertfile /etc/ssl/certs/cacert.org.pem&lt;br /&gt;
#tls_cert /etc/ssl/private/server.crt&lt;br /&gt;
#tls_key /etc/ssl/private/server.key&lt;br /&gt;
&lt;br /&gt;
# The minimum uid&lt;br /&gt;
nss_min_uid 300&lt;br /&gt;
&lt;br /&gt;
pam_authz_search (&amp;amp;(objectClass=posixAccount)(uid=$username)(|(host=$hostname)(host=$fqdn)(host=\\*)))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===users en groepen toevoegen===&lt;br /&gt;
Hiervoor moet &#039;&#039;&#039;ldapscripts&#039;&#039;&#039; zijn geïnstalleerd. Dit is het geval op de ldap-lb1 server. Dat levert de volgende extra commando&#039;s op:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldaprenamemachine&lt;br /&gt;
ldapadduser&lt;br /&gt;
ldapdeleteuserfromgroup&lt;br /&gt;
ldapfinger&lt;br /&gt;
ldapid&lt;br /&gt;
ldapgid&lt;br /&gt;
ldapmodifyuser&lt;br /&gt;
ldaprenameuser&lt;br /&gt;
lsldap&lt;br /&gt;
ldapaddusertogroup&lt;br /&gt;
ldapsetpasswd&lt;br /&gt;
ldapinit&lt;br /&gt;
ldapaddgroup&lt;br /&gt;
ldapdeletegroup&lt;br /&gt;
ldapmodifygroup&lt;br /&gt;
ldapdeletemachine&lt;br /&gt;
ldaprenamegroup&lt;br /&gt;
ldapaddmachine&lt;br /&gt;
ldapmodifymachine&lt;br /&gt;
ldapsetprimarygroup&lt;br /&gt;
ldapdeleteuser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Meest gebruikt zijn &#039;&#039;&#039;ldapaddgroup, ldapadduser, ldapsetpasswd&#039;&#039;&#039;.  &lt;br /&gt;
Er zijn manpages maar er is ook uitgebreide uitleg in de [https://help.ubuntu.com/14.04/serverguide/openldap-server.html Ubuntu server guide]. Omdat wij het automatisch maken van de home dir uit hebben staan, moet die met de hand aangemaakt worden en moet de owner goed gezet worden.&lt;br /&gt;
&lt;br /&gt;
===host-based login===&lt;br /&gt;
Met een kleine uitbreiding in het schema van de LDAP server, kan host-based login gerealiseerd worden. Ook in de &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; is een uitbreiding nodig.&lt;br /&gt;
&lt;br /&gt;
In de LDAP server dient de objectClass &#039;&#039;&#039;hostObject&#039;&#039;&#039; aan de entries in de ou=users toegevoegd te worden. Deze (auxilary) objectClass brengt slechts één attribute met zich mee: &#039;&#039;&#039;host&#039;&#039;&#039;. De regel in nslcd.conf checkt of één van de waarden van &#039;&#039;&#039;host&#039;&#039;&#039; gelijk is aan de naam van de server waarop ingelogd wordt. De waarde &#039;&#039;&#039;*&#039;&#039;&#039; geldt als wildcard. Zie de regel &#039;&#039;&lt;br /&gt;
&#039;pam_authz_search&#039;&#039;&#039;&#039; in &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Password aanpassen===&lt;br /&gt;
Via LDAP ingelogde gebruikers kunnen net als lokale gebruikers hun wachtwoord met &#039;&#039;&#039;passwd&#039;&#039;&#039; wijzigen. Wel moet aan de eisen in de LDAP ppolicy module voldaan worden.&lt;br /&gt;
&lt;br /&gt;
==PHP scripting==&lt;br /&gt;
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 &#039;&#039;&#039;/usr/local/hobbynet/bin&#039;&#039;&#039; directory.&lt;br /&gt;
Voor de php-scripting zijn enkele php7.x pakketten nodig. Installeer deze met apt-get. Het gaat om:&lt;br /&gt;
* php-cli&lt;br /&gt;
* php-ldap&lt;br /&gt;
&lt;br /&gt;
== Apache authenticatie via LDAP ==&lt;br /&gt;
In plaats van .htpassword authenticatie, kan ook LDAP gebruikt worden. Activeer daartoe de Apache module&lt;br /&gt;
&#039;authnz_ldap&#039;.&lt;br /&gt;
 a2enmod authnz_ldap&lt;br /&gt;
Denk er om dat dit in een loadbalanced situatie op beide servers gedaan dient te worden!&lt;br /&gt;
&lt;br /&gt;
=== Voorbeeld van een LDAP configuratie in de Apache config ===&lt;br /&gt;
(alleen als voorbeeld, niet zo gebruiken!)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# // 1) Hobbynet webmaster&lt;br /&gt;
# // 2) Vraagbaak medewerker van een willekeurige groepering&lt;br /&gt;
# (|(hccRol=*#VRBK)(hccRol=HN#WM))&lt;br /&gt;
  &amp;lt;Location &amp;quot;/apps/vraagbaak&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;RequireAll&amp;gt;&lt;br /&gt;
      Authname &amp;quot;HCC!vraagbaak (gebruik uw hcc.nl gebruikersnaam/wachtwoord)&amp;quot;&lt;br /&gt;
      AuthType Basic&lt;br /&gt;
      AuthBasicProvider ldap&lt;br /&gt;
      AuthLDAPUrl ldap://hcc-ldap-int.hobby.nl/ou=leden,dc=hcc,dc=nl?hccLogin??(|(hccRol=*#VRBK)(hccRol=HN#WM))(hccProfiel=TRUE) TLS&lt;br /&gt;
      require valid-user&lt;br /&gt;
    &amp;lt;/RequireAll&amp;gt;&lt;br /&gt;
  &amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hoe kan LDAP veilig gebruikt worden vanuit Apache===&lt;br /&gt;
Zet een script neer in de gebruikersomgeving, en gebruik mod_authz_external. Doe de controle vervolgens via de XML-RPC server.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zie [[Kadernet]] voor een voorbeeld.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== TODO lijst ==&lt;br /&gt;
&#039;&#039;Dit is een lijst in wording, graag aanvullen&#039;&#039; &lt;br /&gt;
* &#039;dun&#039; loadbalancer script maken om te controleren dat LDAP echt luistert&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP_scripting&amp;diff=79594</id>
		<title>LDAP scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP_scripting&amp;diff=79594"/>
		<updated>2022-05-16T19:52:08Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* Mailserver */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Inleiding=&lt;br /&gt;
Omdat de ldap server in sneltreinvaart de bron voor allerlei services aan het worden is, ontstaat er ook een migratie van (veelal perl) scripts op scripting-int naar php scripts op ldap-lb1-int. ldap-lb1-int is net als scripting-int een server met verhoogde security. Er mag dus wel &#039;&#039;&#039;van&#039;&#039;&#039; deze server &#039;&#039;&#039;naar&#039;&#039;&#039; andere servers geconnect worden maar niet andersom. Dit is vergelijkbaar met de situatie op scripting-int. Deze mogelijkheid is essentieel voor de goede werking van sommige scripts.&lt;br /&gt;
&lt;br /&gt;
==Type scripts==&lt;br /&gt;
Er zijn globaal een aantal soorten scripts te onderscheiden:&lt;br /&gt;
* De eigenlijke scripts die een bepaalde taak uitvoeren en vaak naar stdout schrijven (.php soms geen extensie).&lt;br /&gt;
* De cronjob scripts. Gewoonlijk herkenbaar aan de &#039;&#039;&#039;.sh&#039;&#039;&#039; extensie. Deze scripts bundelen vaak meerdere php scripts tot complete oplossingen.&lt;br /&gt;
* Scripts die voor initialiseren en backuppen van de ldap directory nodig zijn (&#039;&#039;&#039;init_ldap, dump_ldap en restore_ldap&#039;&#039;&#039;). Behalve dump_ldap mogen deze scripts nooit zomaar gedraaid worden; de ldap directory zou vernield worden.&lt;br /&gt;
&lt;br /&gt;
==Overzicht scripts==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0_DIT_IS_EEN_LOCAL_DIR            gen_passwd_code2.php              LDAP_include_telefoon.php         sync_hccforums.php&lt;br /&gt;
check_ms                          gen_passwd_hcc.php                LDAP_lid_weg.php                  sync_hobbynetbin_2.sh&lt;br /&gt;
cron_joomla.php                   gen_shadow_admin.php              LDAP_maak_hccOptOutTokens.php     sync_hobbynetdata_2.sh&lt;br /&gt;
cron_joomla.sh                    gen_shadow_code2.php              _LDAP_schoon_4045431_op.php       sync_hobbynetetc_2.sh&lt;br /&gt;
database-onderhoud.sh             gen_shadow_hcc.php                LDAP_schoon_database.php          sync_hobbynetfw_2.sh&lt;br /&gt;
dump_ldap.sh                      gen_xml_fw_ip4.php                LDAP_schoon_mysql_op.php          sync_hobbynetlib_2.sh&lt;br /&gt;
enquete-specials                  gen_xml_fw_ip6.php                LDAP_schoon_testleden_op.php      tel_unieke_bezoekers-volgens-LDAP_en_SQL.php&lt;br /&gt;
forum-specials                    get_all_mailbox_sizes.sh          LDAP_vul_leden.php                tel_unieke_bezoekers-volgens-LDAP.php&lt;br /&gt;
gen_bezoekersstatistiek_xml.php   get_ip4                           LDAP_vul_profielbekend.php        tel_unieke_bezoekers-volgens-LDAP.sh&lt;br /&gt;
gen_compusers_csv.php             get_ip6                           mailman-specials                  test.php&lt;br /&gt;
gen_dmarc_hcc.php                 getip-http                        mail_tripolis_export_report.sh    tripolis_import&lt;br /&gt;
gen_fw.sh                         hccforums_db.php                  optouts                           unblock_joomla.php&lt;br /&gt;
gen_group_admin.php               hcc.nl.mx.fallback                other-specials                    unblock_joomla.sh&lt;br /&gt;
gen_group_code2.php               huisgenoot_lidmaatschappen.php    popbull-specials                  update_domeinen.php&lt;br /&gt;
gen_group_hcc.php                 huisgenoot_lidmaatschappen.sh     postcode-specials                 update_domeinen.sh&lt;br /&gt;
gen_hobbyabon.php                 init_ldap_mdb.sh                  purge_hccforums.php               update_hccforums.sh&lt;br /&gt;
gen_iplist_partners.php           init_ldap.sh                      renameusers_joomla.php            update_joomla.php&lt;br /&gt;
gen_iplist_partners.sh            kader_maak_html.php               renameusers_joomla.sh             update_joomla.sh&lt;br /&gt;
gen_kader_csv.php                 kader_maak_lijsten.sh             restore_ldap.sh                   upd_code2_accounts.sh&lt;br /&gt;
gen_kaderfunc.php                 kader_maak_txt.php                rss_joomla.php                    upd_hcc_accounts.sh&lt;br /&gt;
gen_kaderlist.php                 kader_maak_xb_csv.php             rss_joomla.sh                     upd_ldap_dev.sh&lt;br /&gt;
gen_ldap_bul_export.php           LDAP_bepaal_startconditie.php     ruim_lock_files_op.sh             upd_ldap-test-dev.expect&lt;br /&gt;
gen_ldap_cor_export.php           ldap.conf.ldif                    ruim_pdf_facturen_op.sh           upd_ldap_test.sh&lt;br /&gt;
gen_ldap_hoofdbestuur_export.php  LDAP_controleer_groeperingen.php  ruimsmsverstuurdsmsop.sql         upd_mailserver_report.sh&lt;br /&gt;
gen_ldap_kader_export.php         LDAP_controleer_kader.php         run_maand_rapport.sh              upd_mailserver.sh&lt;br /&gt;
gen_ldap_ledenraad_export.php     LDAP_controleer_users.php         run_tripolis_export.sh            upd_nameserver.sh&lt;br /&gt;
gen_ldap_niet_leden_export.php    LDAP_copyright.txt                schoon_alles_op_include.php       upd_srv&lt;br /&gt;
gen_leden_csv.php                 LDAP_cronjob.sh                   schoon_alles_op.sh                upg_vmware_tools&lt;br /&gt;
gen_leden_dubbel.log              LDAP_forceer_CSV.sh               schoon_breg_token_tabel_op.php    upload_bezoekersstatistiek.sh&lt;br /&gt;
gen_leden_dubbel.php              LDAP_ftps_lget_CRM_leden.sh       schoon_forms_database_op.php      upload_compusers_csv.sh&lt;br /&gt;
gen_maand_rap.php                 LDAP_herstel_profielbekend.php    schoon_JoomlaTokens_tabel_op.php  upload_kader_csv.sh&lt;br /&gt;
gen_mail_exclude_txt.php          LDAP_include_henz.php             schoon_LDAP_en_hcc_Bezoek_op.php  upload_leden_csv.sh&lt;br /&gt;
gen_mx_hcc-fallback.php           LDAP_include_ISO.php              set_menu_joomla.sh                vergelijk_scripts.readme&lt;br /&gt;
gen_mx_hcc.php                    LDAP_include_Joomla_db.php        set_menu.php                      verrijk_factuur.php&lt;br /&gt;
gen_mx_hobby.php                  LDAP_include_mail.php             statistiek_xml.php                verrijk_factuur.sh&lt;br /&gt;
gen_passwd_admin.php              LDAP_include.php                  statistiek_xml.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Crontab==&lt;br /&gt;
===Wijzigingen===&lt;br /&gt;
vbs20220516: Tripolis Import en rapportage uitgeschakeld. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##############################################################################################################&lt;br /&gt;
# Wijzigingen graag ook aanbrengen op deze wiki pagina: https://wiki.hobby.nl/index.php?title=LDAP_scripting #&lt;br /&gt;
##############################################################################################################&lt;br /&gt;
&lt;br /&gt;
# Edit this file to introduce tasks to be run by cron.&lt;br /&gt;
#&lt;br /&gt;
# Each task to run has to be defined through a single line&lt;br /&gt;
# indicating with different fields when the task will be run&lt;br /&gt;
# and what command to run for the task&lt;br /&gt;
#&lt;br /&gt;
# To define the time you can provide concrete values for&lt;br /&gt;
# minute (m), hour (h), day of month (dom), month (mon),&lt;br /&gt;
# and day of week (dow) or use &#039;*&#039; in these fields (for &#039;any&#039;).#&lt;br /&gt;
# Notice that tasks will be started based on the cron&#039;s system&lt;br /&gt;
# daemon&#039;s notion of time and timezones.&lt;br /&gt;
#&lt;br /&gt;
# Output of the crontab jobs (including errors) is sent through&lt;br /&gt;
# email to the user the crontab file belongs to (unless redirected).&lt;br /&gt;
#&lt;br /&gt;
# For example, you can run a backup of all your user accounts&lt;br /&gt;
# at 5 a.m every week with:&lt;br /&gt;
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/&lt;br /&gt;
#&lt;br /&gt;
# For more information see the manual pages of crontab(5) and cron(8)&lt;br /&gt;
#&lt;br /&gt;
# m h  dom mon dow   command&lt;br /&gt;
&lt;br /&gt;
# Update rssfeeds joomla&lt;br /&gt;
1 */1 * * * /usr/local/hobbynet/bin/rss_joomla.sh &amp;gt;&amp;gt;/var/log/rss_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Synchroniseer firewall regels van ldap-lb1 naar ldap-lb2&lt;br /&gt;
55  5 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh&lt;br /&gt;
55 11 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh&lt;br /&gt;
55 17 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh&lt;br /&gt;
55 23 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh&lt;br /&gt;
&lt;br /&gt;
# Herstart Firewall&lt;br /&gt;
 0  6 * * * /etc/init.d/hobby-firewall restart &amp;gt;/dev/null&lt;br /&gt;
 0 12 * * * /etc/init.d/hobby-firewall restart &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /etc/init.d/hobby-firewall restart &amp;gt;/dev/null&lt;br /&gt;
 0  0 * * * /etc/init.d/hobby-firewall restart &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Check op updates en download deze alvast ivm Nagios detectie&lt;br /&gt;
 0  6 * * * apt-get clean -y &amp;gt;/dev/null ; apt-get update &amp;gt;/dev/null ;apt-get upgrade -d -y &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * apt-get clean -y &amp;gt;/dev/null ; apt-get update &amp;gt;/dev/null ;apt-get upgrade -d -y &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Maak een beveiligde backup&lt;br /&gt;
45 23 * * * /usr/local/hobbynet/local/backup-encrypted.bash &amp;gt;&amp;gt;/var/log/backup_encrypted.log&lt;br /&gt;
&lt;br /&gt;
# Sync bin dir naar ldap-lb2&lt;br /&gt;
50 23 * * * /usr/local/hobbynet/bin/sync_hobbynetbin_2.sh&lt;br /&gt;
# Sync etc dir naar ldap-lb2&lt;br /&gt;
51 23 * * * /usr/local/hobbynet/bin/sync_hobbynetetc_2.sh&lt;br /&gt;
# Sync lib dir naar ldap-lb2&lt;br /&gt;
52 23 * * * /usr/local/hobbynet/bin/sync_hobbynetlib_2.sh&lt;br /&gt;
&lt;br /&gt;
# Voer de cron_joomla.sh cronjob uit voor de bit backup&lt;br /&gt;
01  0 * * * /usr/local/hobbynet/bin/cron_joomla.sh &amp;gt;&amp;gt;/var/log/cron_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Voer de cron_joomla.sh cronjob uit voor &#039;update_joomla.sh&#039;&lt;br /&gt;
15  1 * * * /usr/local/hobbynet/bin/cron_joomla.sh &amp;gt;&amp;gt;/var/log/cron_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Forceer dat er een verse set CSV bestanden klaar wordt gezet&lt;br /&gt;
05  3 * * * /usr/local/hobbynet/bin/LDAP_forceer_CSV.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Doe alle processing CRM-&amp;gt;LDAP&lt;br /&gt;
10  3 * * * /usr/local/hobbynet/bin/LDAP_cronjob.sh &amp;gt;&amp;gt;/var/log/LDAP_cronjob.log&lt;br /&gt;
&lt;br /&gt;
# Maak /usr/local/hobbynet/apache2conf/iplists/iplist-partners-24 aan&lt;br /&gt;
 7  3 * * * /usr/local/hobbynet/bin/gen_iplist_partners.sh&lt;br /&gt;
&lt;br /&gt;
# Ververs postfixadmin op mail-lb1 en mail-lb2. Mail report&lt;br /&gt;
26  3 * * * /usr/local/hobbynet/bin/upd_mailserver.sh &amp;gt;/var/log/upd_mailserver.log&lt;br /&gt;
30  3 * * * /usr/local/hobbynet/bin/upd_mailserver_report.sh&lt;br /&gt;
&lt;br /&gt;
# Haal de opt-outs op van Tripolis&lt;br /&gt;
### disabled 20220516&lt;br /&gt;
###15  3 * * * /usr/local/hobbynet/bin/run_tripolis_import.sh &amp;gt;/var/log/run_tripolis_import.log&lt;br /&gt;
&lt;br /&gt;
# Haal de handmatige Tripolis opt-outs op, en mail die naar Egbert&lt;br /&gt;
### disabled 20220516&lt;br /&gt;
###31  3 * * * /usr/local/hobbynet/bin/mail_tripolis_import_report.sh&lt;br /&gt;
&lt;br /&gt;
# Maak en plaats de ledenlijst voor Kantoor&lt;br /&gt;
35  3 * * * /usr/local/hobbynet/bin/upload_leden_csv.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Maak en plaats de kaderlijst voor Kantoor&lt;br /&gt;
40  3 * * * /usr/local/hobbynet/bin/upload_kader_csv.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Deblokkeer actieve joomla gebruikers&lt;br /&gt;
45  3 * * * /usr/local/hobbynet/bin/unblock_joomla.sh &amp;gt;&amp;gt;/var/log/unblock_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Haal de aantallen bezoekers, en zet die over naar de beschermde kantoor omgeving&lt;br /&gt;
47  3 * * * /usr/local/hobbynet/bin/upload_bezoekersstatistiek.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Maak overzicht van alle opt-ins voor Tripolis&lt;br /&gt;
50  3 * * * /usr/local/hobbynet/bin/run_tripolis_export.sh &amp;gt;/var/log/run_tripolis_export.log&lt;br /&gt;
&lt;br /&gt;
# Hernoem in Joomla de users die zijn hernoemd in ldap&lt;br /&gt;
50 3 * * * /usr/local/hobbynet/bin/renameusers_joomla.sh &amp;gt;&amp;gt;/var/log/renameusers_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Haal het resultaat van de Tripolis export op, en mail die naar Egbert&lt;br /&gt;
52  3 * * * /usr/local/hobbynet/bin/mail_tripolis_export_report.sh&lt;br /&gt;
&lt;br /&gt;
# Maak en plaats statistiek overzicht van alle HCC groeperingen&lt;br /&gt;
55  3 * * * /usr/local/hobbynet/bin/statistiek_xml.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Start joomla onderhoud&lt;br /&gt;
0  4 * * * /usr/local/hobbynet/bin/update_joomla.sh &amp;gt;&amp;gt;/var/log/update_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Doe de Hobbynet maand rapportage&lt;br /&gt;
 0  4 1 * * /usr/local/hobbynet/bin/run_maand_rapport.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Bepaal het aantal unieke (en totaal aantal) bezoekers van de laatste 12 maanden, mail dat aan VB&lt;br /&gt;
 5  4 1 * * /usr/local/hobbynet/bin/tel_unieke_bezoekers-volgens-LDAP.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Maak een lijst van onjuiste huisgenoot-lidmaatschappen&lt;br /&gt;
10  4 1 * * /usr/local/hobbynet/bin/huisgenoot_lidmaatschappen.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Schoon mySQL en LDAP op&lt;br /&gt;
 5  4 2 * * /usr/local/hobbynet/bin/schoon_alles_op.sh&lt;br /&gt;
&lt;br /&gt;
# Verrijk een naar SFTP geupload factuur bestand met factuurtokens&lt;br /&gt;
15  * * * * /bin/bash /usr/local/hobbynet/bin/verrijk_factuur.sh &amp;gt;&amp;gt;/var/log/verrijk_factuur.log&lt;br /&gt;
&lt;br /&gt;
# ruim sms database op&lt;br /&gt;
42 12 * * * cat /usr/local/hobbynet/bin/ruimsmsverstuurdsmsop.sql |mysql &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# corigeer menu elke 4 uur&lt;br /&gt;
#42 */4 * * * /usr/local/hobbynet/bin/set_menu_joomla.sh &amp;gt;&amp;gt;/var/log/set_menu_joomla.log&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Toepassingen=&lt;br /&gt;
Soms zijn er een aantal scripts die bij elkaar horen en er voor een bepaalde toepassing zijn, zoals om de mailserver te updaten, dagelijkse bestanden voor Kantoor te maken, dagelijkse bestanden voor het Tripolis mail systeem en niet geheel onbelangrijk, scripts die ldap dagelijks bijwerken met de &#039;&#039;&#039;master&#039;&#039;&#039; data die in het HCC CRM wordt bijgehouden (als er een mutatie gemist is, b.v. omdat een JSON aanroep vanuit het CRM naar de Hobbynet XML-RPC server overdag mislukt is).&lt;br /&gt;
&lt;br /&gt;
==LDAP==&lt;br /&gt;
Drie scripts zijn essentieel om de hele LDAP database te dumpen, te initialiseren en weer te vullen. Dit proces is nodig als een schema change moet worden aangebracht in de LDAP configuratie. Zie ook de pagina over de LDAP server.&lt;br /&gt;
* &#039;&#039;&#039;dump_ldap.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;Dumpt alle ou&#039;s in afzonderlijke ldif bestanden in de data directory en maakt er ook een tarball van.&lt;br /&gt;
* &#039;&#039;&#039;init_ldap.sh &amp;lt;beheer-password&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Bouwt de hele LDAP structuur van de grond af op.&lt;br /&gt;
* &#039;&#039;&#039;restore_ldap.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;Vult de hele LDAP structuur met file uit de dump_ldap stap.&lt;br /&gt;
&lt;br /&gt;
==Statistieken==&lt;br /&gt;
Iedere nacht worden er door het script &#039;&#039;&#039;statistiek_xml.sh&#039;&#039;&#039; van alle groeperingen en van de complete HCC leden database statistieken in XML formaat gemaakt. Daarna worden deze statistieken met het script &#039;&#039;&#039;statistiek_xml.sh&#039;&#039;&#039; naar de kadernet server overgezet.&lt;br /&gt;
&lt;br /&gt;
==Mailserver==&lt;br /&gt;
De mailserver kreeg tot voor kort 2 bestanden van scripting-int, husers en b3a.txt. De inhoud van beide bestanden kan ook uit ldap gehaald worden. Hiervoor zijn de volgende scripts in gebruik:&lt;br /&gt;
* &#039;&#039;&#039;gen_hobbyabon.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Dit script maakt een equivalent aan van husers en bevat alleen de betalende Hobbynet abonnees (enige tientallen regels).&lt;br /&gt;
* &#039;&#039;&#039;gen_kaderfunc.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Dit script is de vervanger van b3a.txt, de lijst van alle kaderfuncties (ongeveer 1200).&lt;br /&gt;
* &#039;&#039;&#039;gen_kaderlist.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Een hulp bestand met alleen de 7 cijferige lidnummers van alle kaderleden (ruim 700). Deze lijst wordt op de mailserver gebruikt om incidenteel kadermailboxen op te ruimen.&lt;br /&gt;
* &#039;&#039;&#039;gen_mail_exclude_txt.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Nog een hulp bestand waar in de interessegroepen staan die geen functionele mailadressen nodig hebben. Dit zijn vooral de ig&#039;s die geen echte ig zijn zoals de HCC zelf en de RvA en RvT maar wel als zodanig in ldap staan. Ook de cursus presentatoren vallen hieronder.&lt;br /&gt;
* &#039;&#039;&#039;upd_mailserver_report.sh&#039;&#039;&#039;.&amp;lt;br&amp;gt;Dit script mailt de dagelijkse logs ter controle of alles goed is gegaan.&lt;br /&gt;
* &#039;&#039;&#039;upd_mailserver.sh&#039;&#039;&#039;.&amp;lt;br&amp;gt;Bundelt de php scripts tot een cronjob die elke nacht loopt. Dit script draait de 4 php scripts, doet wat na bewerking, kopieert de output naar mail-lb1-int en start &#039;&#039;&#039;upd_mailserver_all&#039;&#039;&#039; op mail-lb1-int. Tenslotte worden nog de relay-domains opgehaald van mail-lb1-int (dat bestand is pas up-to-date nadat upd_mailserver_all op mail-lb1-int heeft gelopen).Hierna is mail-lb2 nog niet geheel up-to-date. Het script dat door ldap-lb1 is gestart, doet aan het eind een rsync van de datadir op mail-lb1 naar mail-lb2. Tenslotte start mail-lb1 een script op mail-lb2 om die ook up-to-date te maken. Dit is dus een drietraps systeem.&lt;br /&gt;
&lt;br /&gt;
==Maandrapportage==&lt;br /&gt;
* &#039;&#039;&#039;gen_maand_rap.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Verzamelt alle data van Hobbynet abonnees en alle andere users in ldap. Optie &#039;&#039;&#039;-m&#039;&#039;&#039; mailt naar de accounthouder in het ldap record. Sinds medio 2020 krijgen hcc groepering webmasters deze mail niet meer, omdat ze nu allemaal gebruik maken van een Joomla template site, en daar geen &#039;eigenaar&#039; meer van zijn.&lt;br /&gt;
* &#039;&#039;&#039;run_maand_rapport.sh&#039;&#039;&#039;.&amp;lt;br&amp;gt;Cronjob die bovenstaande scripts 1x per maand draait.&lt;br /&gt;
&lt;br /&gt;
==Passwd, shadow en group==&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
* gen_group_admin.php&lt;br /&gt;
* gen_group_code2.php&lt;br /&gt;
* gen_group_hcc.php&lt;br /&gt;
* gen_passwd_admin.php&lt;br /&gt;
* gen_passwd_code2.php&lt;br /&gt;
* gen_passwd_hcc.php&lt;br /&gt;
* gen_shadow_admin.php&lt;br /&gt;
* gen_shadow_code2.php&lt;br /&gt;
* gen_shadow_hcc.php&lt;br /&gt;
* upd_admin_accounts.sh (is er niet)&lt;br /&gt;
* upd_code2_accounts.sh&lt;br /&gt;
* upd_hcc_accounts.sh&lt;br /&gt;
&lt;br /&gt;
Deze scripts genereren de passwd, shadow en group entries voor de betalende leden (_code2), de admins (_admin, de lagere goden, op het moment niet gebruikt; er is wel een .hobby met alleen Roel v.d. Bussche erin) en voor de HCC groeperingen (_hcc). De output wordt op de shared etc omgeving neergezet zodat elke (web)server ze kan toevoegen aan de passwd.temp/shadow.temp/group.temp files. Hiervoor wordt de lokale job upd_usr (of upd_hobby_only) gedraaid.&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==HCC Verenigingsbureau==&lt;br /&gt;
Het HCC Verenigingsbureau (&#039;VB&#039;) heeft beschikking over een ledenlijst en een kader/kernledenlijst die dagelijks up-to-date zijn. Deze lijsten zijn in CSV formaat zodat men zelf in de hand heeft hoe het bestand gebruikt wordt. Ze worden dagelijks op de Hobbynet sftp server (dedicated server t.b.v. gebuik vanaf het VB) geplaatst.&lt;br /&gt;
&lt;br /&gt;
Daarnaast krijgt VB iedere dag een actueel overzicht van de aantallen bezoekers (bezoekers statistiek).&lt;br /&gt;
  &lt;br /&gt;
* &#039;&#039;&#039;upload_kader_csv.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de cronjob &lt;br /&gt;
* &#039;&#039;&#039;gen_kader_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;het php script dat een bestand in CSV formaat maakt met de door VB gewenste velden.&lt;br /&gt;
* &#039;&#039;&#039;upload_leden_csv.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de cronjob&lt;br /&gt;
* &#039;&#039;&#039;gen_leden_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;het php script dat een bestand in CSV formaat maakt met de door VB gewenste velden.&lt;br /&gt;
* &#039;&#039;&#039;upload_bezoekersstatistiek.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de cronjob&lt;br /&gt;
* &#039;&#039;&#039;gen_bezoekersstatistiek_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;het php script dat een bestand in CSV formaat maakt met de bezoekersstatistieken.&lt;br /&gt;
&lt;br /&gt;
==CompUsers==&lt;br /&gt;
2020: VB heeft &#039;eigen&#039; afspraken met CU gemaakt, en stuurt ze op eigen houtje zomaar ledenbestanden toe. Onze scripts zijn daarmee zinloos geworden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;Met CompUsers zijn speciale afspraken gemaakt door Kantoor in januari 2014. Zij krijgen een sterk verkorte lijst van ALLE leden voor hun administratie. Het streven is dit zo spoedig mogelijk te vervangen door een ander mechanisme zoals de partner check.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;upload_compusers_csv.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de cronjob&lt;br /&gt;
* &#039;&#039;&#039;gen_compusers_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;het script dat een CSV maakt. Dit is een afgeslankt vorm van het &#039;&#039;&#039;gen_leden_csv.php&#039;&#039;&#039; script.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Koppeling met Tripolis=&lt;br /&gt;
Het oude &amp;quot;popbull&amp;quot; systeem dat bij HenZ draait is in de zomer van 2013 vervangen door Tripolis. Tripolis wordt al jaren gebruikt door kantoor voor het versturen van Digizine en de Nieuwsflash. Per groepering wordt een account aangemaakt met beperkte rechten waar mee de Correspondent van de groepering mailings kan versturen. Om Tripolis en ldap in sync te houden wordt er elke nacht data uitgewisseld. Ldap is leidend in deze maar als mensen zich uitschrijven (opt-out) via de knop onder aan de mailing, moet dat doorgegeven worden aan ldap. &lt;br /&gt;
&lt;br /&gt;
==Sync van Tripolis naar ldap (uitgeschakeld vbs20220516)==&lt;br /&gt;
* &#039;&#039;&#039;run_tripolis_import.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de eigenlijke cronjob&lt;br /&gt;
* &#039;&#039;&#039;import_tripolis_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;vertaalt de CSV van opt-outs naar het wissen van de individuele optins.&lt;br /&gt;
&lt;br /&gt;
Tripolis plaatst elke nacht om 00:01 een CSV bestand met de opt-outs per bulletin van de vorige dag. Dit gebeurt met datums. Als de datum van gisteren ingevuld staat is daar een optout geweest. Als er geen opt-outs zijn, bevat het veld slechts een lege string. Het  bestand wordt naar de ldap server gehaald waar een aantal versies bewaard worden. De bestanden wordt verwijderd van de sftp omgeving. Vervolgens worden het gedownloade bestand verwerkt om bij het lid de hccOptIn van dit bulletin te verwijderen.&lt;br /&gt;
&lt;br /&gt;
==Sync van ldap naar Tripolis==&lt;br /&gt;
* &#039;&#039;&#039;run_tripolis_export.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de eigenlijk cronjob&lt;br /&gt;
* &#039;&#039;&#039;gen_ldap_bul_export.php&#039;&#039;&#039;&amp;lt;br&amp;gt;maakt een volledige lijst aan van emailadres, lidnr en optins. Dit bestand gaat naar de sftp omgeving van Tripolis.&lt;br /&gt;
* &#039;&#039;&#039;gen_ldap_cor_export.php&#039;&#039;&#039;&amp;lt;br&amp;gt;maakt een lijst van alle correspondenten voor kantoor. Dit bestand gaat naar de sftp omgeving van Kantoor.&lt;br /&gt;
&lt;br /&gt;
Het export bestand wordt elke nacht (om 02:50) op de sftp omgeving voor Tripolis klaargezet. Tripolis haalt het om 05:00 op. Omdat de opt-outs van Tripolis om 02:15 verwerkt worden, is dit bestand dus al bijgewerkt voor wat betreft die opt-outs. Alle andere wijzigingen komen van de hcc.nl profielpagina&#039;s of mutaties door derden op ldap (mutaties door Hobbynet staff of PC30).&lt;br /&gt;
&lt;br /&gt;
==Rapportage==&lt;br /&gt;
&amp;lt;strike&amp;gt;Om ook de ledenadministratie in te lichten over leden die een optout op één of meer Tripolis mailings hebben gedaan, wordt na het verwerken van de optouts een mail gestuurd naar ledenadministratie@hcc.nl. Elke dag is er een nieuwe log file maar die wordt door dezelfde cronjob aan een archive geplakt. Zie mail_tripolis_reports.sh.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Egbert laat zich iedere nacht een rapportage mail sturen, zie mail_tripolis_export_report.sh.&lt;br /&gt;
&lt;br /&gt;
==Eénmalige jobs==&lt;br /&gt;
Er zijn een aantal php scripts voor éénmalig gebruik gemaakt. Deze worden niet in de cronjobs gebruikt maar waren slechts bedoeld om de lijsten opgeleverd door VB in LDAP te krijgen. Deze scripts zijn in de subdirectory &#039;&#039;&#039;popbull-specials&#039;&#039;&#039; geplaatst. &lt;br /&gt;
* &#039;&#039;&#039;import_digizine_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;de initiële Digizine lijst&lt;br /&gt;
* &#039;&#039;&#039;import_nieuwsflash_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;de initiële Nieuwsflash lijst&lt;br /&gt;
* &#039;&#039;&#039;import_popbull_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;de initiële lijst zoals die van HenZ (popbull provider) komt&lt;br /&gt;
&lt;br /&gt;
=ISIZ enquête=&lt;br /&gt;
Op verzoek geschreven scripts voor eenmalig gebruik. Terug te vinden in in de &#039;&#039;&#039;enquete-specials&#039;&#039;&#039; subdirectory. &lt;br /&gt;
* &#039;&#039;&#039;gen_enquete_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;enquête per email&lt;br /&gt;
* &#039;&#039;&#039;gen_enquete_csv_no_mail.php&#039;&#039;&#039;&amp;lt;br&amp;gt;enquête per post&lt;br /&gt;
&lt;br /&gt;
=Nameserver=&lt;br /&gt;
* gen_mx_hcc.php&lt;br /&gt;
* gen_mx_hobby.php&lt;br /&gt;
* upd_nameserver.sh&lt;br /&gt;
&lt;br /&gt;
=Firewall (op ldap servers)=&lt;br /&gt;
* gen_xml_fw_ip4.php&lt;br /&gt;
* gen_xml_fw_ip6.php&lt;br /&gt;
* sync_hobbynetfw.sh&lt;br /&gt;
* gen_fw.sh&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP_scripting&amp;diff=79592</id>
		<title>LDAP scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP_scripting&amp;diff=79592"/>
		<updated>2022-05-16T19:44:15Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* Sync van Tripolis naar ldap */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Inleiding=&lt;br /&gt;
Omdat de ldap server in sneltreinvaart de bron voor allerlei services aan het worden is, ontstaat er ook een migratie van (veelal perl) scripts op scripting-int naar php scripts op ldap-lb1-int. ldap-lb1-int is net als scripting-int een server met verhoogde security. Er mag dus wel &#039;&#039;&#039;van&#039;&#039;&#039; deze server &#039;&#039;&#039;naar&#039;&#039;&#039; andere servers geconnect worden maar niet andersom. Dit is vergelijkbaar met de situatie op scripting-int. Deze mogelijkheid is essentieel voor de goede werking van sommige scripts.&lt;br /&gt;
&lt;br /&gt;
==Type scripts==&lt;br /&gt;
Er zijn globaal een aantal soorten scripts te onderscheiden:&lt;br /&gt;
* De eigenlijke scripts die een bepaalde taak uitvoeren en vaak naar stdout schrijven (.php soms geen extensie).&lt;br /&gt;
* De cronjob scripts. Gewoonlijk herkenbaar aan de &#039;&#039;&#039;.sh&#039;&#039;&#039; extensie. Deze scripts bundelen vaak meerdere php scripts tot complete oplossingen.&lt;br /&gt;
* Scripts die voor initialiseren en backuppen van de ldap directory nodig zijn (&#039;&#039;&#039;init_ldap, dump_ldap en restore_ldap&#039;&#039;&#039;). Behalve dump_ldap mogen deze scripts nooit zomaar gedraaid worden; de ldap directory zou vernield worden.&lt;br /&gt;
&lt;br /&gt;
==Overzicht scripts==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0_DIT_IS_EEN_LOCAL_DIR            gen_passwd_code2.php              LDAP_include_telefoon.php         sync_hccforums.php&lt;br /&gt;
check_ms                          gen_passwd_hcc.php                LDAP_lid_weg.php                  sync_hobbynetbin_2.sh&lt;br /&gt;
cron_joomla.php                   gen_shadow_admin.php              LDAP_maak_hccOptOutTokens.php     sync_hobbynetdata_2.sh&lt;br /&gt;
cron_joomla.sh                    gen_shadow_code2.php              _LDAP_schoon_4045431_op.php       sync_hobbynetetc_2.sh&lt;br /&gt;
database-onderhoud.sh             gen_shadow_hcc.php                LDAP_schoon_database.php          sync_hobbynetfw_2.sh&lt;br /&gt;
dump_ldap.sh                      gen_xml_fw_ip4.php                LDAP_schoon_mysql_op.php          sync_hobbynetlib_2.sh&lt;br /&gt;
enquete-specials                  gen_xml_fw_ip6.php                LDAP_schoon_testleden_op.php      tel_unieke_bezoekers-volgens-LDAP_en_SQL.php&lt;br /&gt;
forum-specials                    get_all_mailbox_sizes.sh          LDAP_vul_leden.php                tel_unieke_bezoekers-volgens-LDAP.php&lt;br /&gt;
gen_bezoekersstatistiek_xml.php   get_ip4                           LDAP_vul_profielbekend.php        tel_unieke_bezoekers-volgens-LDAP.sh&lt;br /&gt;
gen_compusers_csv.php             get_ip6                           mailman-specials                  test.php&lt;br /&gt;
gen_dmarc_hcc.php                 getip-http                        mail_tripolis_export_report.sh    tripolis_import&lt;br /&gt;
gen_fw.sh                         hccforums_db.php                  optouts                           unblock_joomla.php&lt;br /&gt;
gen_group_admin.php               hcc.nl.mx.fallback                other-specials                    unblock_joomla.sh&lt;br /&gt;
gen_group_code2.php               huisgenoot_lidmaatschappen.php    popbull-specials                  update_domeinen.php&lt;br /&gt;
gen_group_hcc.php                 huisgenoot_lidmaatschappen.sh     postcode-specials                 update_domeinen.sh&lt;br /&gt;
gen_hobbyabon.php                 init_ldap_mdb.sh                  purge_hccforums.php               update_hccforums.sh&lt;br /&gt;
gen_iplist_partners.php           init_ldap.sh                      renameusers_joomla.php            update_joomla.php&lt;br /&gt;
gen_iplist_partners.sh            kader_maak_html.php               renameusers_joomla.sh             update_joomla.sh&lt;br /&gt;
gen_kader_csv.php                 kader_maak_lijsten.sh             restore_ldap.sh                   upd_code2_accounts.sh&lt;br /&gt;
gen_kaderfunc.php                 kader_maak_txt.php                rss_joomla.php                    upd_hcc_accounts.sh&lt;br /&gt;
gen_kaderlist.php                 kader_maak_xb_csv.php             rss_joomla.sh                     upd_ldap_dev.sh&lt;br /&gt;
gen_ldap_bul_export.php           LDAP_bepaal_startconditie.php     ruim_lock_files_op.sh             upd_ldap-test-dev.expect&lt;br /&gt;
gen_ldap_cor_export.php           ldap.conf.ldif                    ruim_pdf_facturen_op.sh           upd_ldap_test.sh&lt;br /&gt;
gen_ldap_hoofdbestuur_export.php  LDAP_controleer_groeperingen.php  ruimsmsverstuurdsmsop.sql         upd_mailserver_report.sh&lt;br /&gt;
gen_ldap_kader_export.php         LDAP_controleer_kader.php         run_maand_rapport.sh              upd_mailserver.sh&lt;br /&gt;
gen_ldap_ledenraad_export.php     LDAP_controleer_users.php         run_tripolis_export.sh            upd_nameserver.sh&lt;br /&gt;
gen_ldap_niet_leden_export.php    LDAP_copyright.txt                schoon_alles_op_include.php       upd_srv&lt;br /&gt;
gen_leden_csv.php                 LDAP_cronjob.sh                   schoon_alles_op.sh                upg_vmware_tools&lt;br /&gt;
gen_leden_dubbel.log              LDAP_forceer_CSV.sh               schoon_breg_token_tabel_op.php    upload_bezoekersstatistiek.sh&lt;br /&gt;
gen_leden_dubbel.php              LDAP_ftps_lget_CRM_leden.sh       schoon_forms_database_op.php      upload_compusers_csv.sh&lt;br /&gt;
gen_maand_rap.php                 LDAP_herstel_profielbekend.php    schoon_JoomlaTokens_tabel_op.php  upload_kader_csv.sh&lt;br /&gt;
gen_mail_exclude_txt.php          LDAP_include_henz.php             schoon_LDAP_en_hcc_Bezoek_op.php  upload_leden_csv.sh&lt;br /&gt;
gen_mx_hcc-fallback.php           LDAP_include_ISO.php              set_menu_joomla.sh                vergelijk_scripts.readme&lt;br /&gt;
gen_mx_hcc.php                    LDAP_include_Joomla_db.php        set_menu.php                      verrijk_factuur.php&lt;br /&gt;
gen_mx_hobby.php                  LDAP_include_mail.php             statistiek_xml.php                verrijk_factuur.sh&lt;br /&gt;
gen_passwd_admin.php              LDAP_include.php                  statistiek_xml.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Crontab==&lt;br /&gt;
===Wijzigingen===&lt;br /&gt;
vbs20220516: Tripolis Import en rapportage uitgeschakeld. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##############################################################################################################&lt;br /&gt;
# Wijzigingen graag ook aanbrengen op deze wiki pagina: https://wiki.hobby.nl/index.php?title=LDAP_scripting #&lt;br /&gt;
##############################################################################################################&lt;br /&gt;
&lt;br /&gt;
# Edit this file to introduce tasks to be run by cron.&lt;br /&gt;
#&lt;br /&gt;
# Each task to run has to be defined through a single line&lt;br /&gt;
# indicating with different fields when the task will be run&lt;br /&gt;
# and what command to run for the task&lt;br /&gt;
#&lt;br /&gt;
# To define the time you can provide concrete values for&lt;br /&gt;
# minute (m), hour (h), day of month (dom), month (mon),&lt;br /&gt;
# and day of week (dow) or use &#039;*&#039; in these fields (for &#039;any&#039;).#&lt;br /&gt;
# Notice that tasks will be started based on the cron&#039;s system&lt;br /&gt;
# daemon&#039;s notion of time and timezones.&lt;br /&gt;
#&lt;br /&gt;
# Output of the crontab jobs (including errors) is sent through&lt;br /&gt;
# email to the user the crontab file belongs to (unless redirected).&lt;br /&gt;
#&lt;br /&gt;
# For example, you can run a backup of all your user accounts&lt;br /&gt;
# at 5 a.m every week with:&lt;br /&gt;
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/&lt;br /&gt;
#&lt;br /&gt;
# For more information see the manual pages of crontab(5) and cron(8)&lt;br /&gt;
#&lt;br /&gt;
# m h  dom mon dow   command&lt;br /&gt;
&lt;br /&gt;
# Update rssfeeds joomla&lt;br /&gt;
1 */1 * * * /usr/local/hobbynet/bin/rss_joomla.sh &amp;gt;&amp;gt;/var/log/rss_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Synchroniseer firewall regels van ldap-lb1 naar ldap-lb2&lt;br /&gt;
55  5 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh&lt;br /&gt;
55 11 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh&lt;br /&gt;
55 17 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh&lt;br /&gt;
55 23 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh&lt;br /&gt;
&lt;br /&gt;
# Herstart Firewall&lt;br /&gt;
 0  6 * * * /etc/init.d/hobby-firewall restart &amp;gt;/dev/null&lt;br /&gt;
 0 12 * * * /etc/init.d/hobby-firewall restart &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /etc/init.d/hobby-firewall restart &amp;gt;/dev/null&lt;br /&gt;
 0  0 * * * /etc/init.d/hobby-firewall restart &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Check op updates en download deze alvast ivm Nagios detectie&lt;br /&gt;
 0  6 * * * apt-get clean -y &amp;gt;/dev/null ; apt-get update &amp;gt;/dev/null ;apt-get upgrade -d -y &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * apt-get clean -y &amp;gt;/dev/null ; apt-get update &amp;gt;/dev/null ;apt-get upgrade -d -y &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Maak een beveiligde backup&lt;br /&gt;
45 23 * * * /usr/local/hobbynet/local/backup-encrypted.bash &amp;gt;&amp;gt;/var/log/backup_encrypted.log&lt;br /&gt;
&lt;br /&gt;
# Sync bin dir naar ldap-lb2&lt;br /&gt;
50 23 * * * /usr/local/hobbynet/bin/sync_hobbynetbin_2.sh&lt;br /&gt;
# Sync etc dir naar ldap-lb2&lt;br /&gt;
51 23 * * * /usr/local/hobbynet/bin/sync_hobbynetetc_2.sh&lt;br /&gt;
# Sync lib dir naar ldap-lb2&lt;br /&gt;
52 23 * * * /usr/local/hobbynet/bin/sync_hobbynetlib_2.sh&lt;br /&gt;
&lt;br /&gt;
# Voer de cron_joomla.sh cronjob uit voor de bit backup&lt;br /&gt;
01  0 * * * /usr/local/hobbynet/bin/cron_joomla.sh &amp;gt;&amp;gt;/var/log/cron_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Voer de cron_joomla.sh cronjob uit voor &#039;update_joomla.sh&#039;&lt;br /&gt;
15  1 * * * /usr/local/hobbynet/bin/cron_joomla.sh &amp;gt;&amp;gt;/var/log/cron_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Forceer dat er een verse set CSV bestanden klaar wordt gezet&lt;br /&gt;
05  3 * * * /usr/local/hobbynet/bin/LDAP_forceer_CSV.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Doe alle processing CRM-&amp;gt;LDAP&lt;br /&gt;
10  3 * * * /usr/local/hobbynet/bin/LDAP_cronjob.sh &amp;gt;&amp;gt;/var/log/LDAP_cronjob.log&lt;br /&gt;
&lt;br /&gt;
# Maak /usr/local/hobbynet/apache2conf/iplists/iplist-partners-24 aan&lt;br /&gt;
 7  3 * * * /usr/local/hobbynet/bin/gen_iplist_partners.sh&lt;br /&gt;
&lt;br /&gt;
# Ververs postfixadmin op mail-lb1 en mail-lb2. Mail report&lt;br /&gt;
26  3 * * * /usr/local/hobbynet/bin/upd_mailserver.sh &amp;gt;/var/log/upd_mailserver.log&lt;br /&gt;
30  3 * * * /usr/local/hobbynet/bin/upd_mailserver_report.sh&lt;br /&gt;
&lt;br /&gt;
# Haal de opt-outs op van Tripolis&lt;br /&gt;
### disabled 20220516&lt;br /&gt;
###15  3 * * * /usr/local/hobbynet/bin/run_tripolis_import.sh &amp;gt;/var/log/run_tripolis_import.log&lt;br /&gt;
&lt;br /&gt;
# Haal de handmatige Tripolis opt-outs op, en mail die naar Egbert&lt;br /&gt;
### disabled 20220516&lt;br /&gt;
###31  3 * * * /usr/local/hobbynet/bin/mail_tripolis_import_report.sh&lt;br /&gt;
&lt;br /&gt;
# Maak en plaats de ledenlijst voor Kantoor&lt;br /&gt;
35  3 * * * /usr/local/hobbynet/bin/upload_leden_csv.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Maak en plaats de kaderlijst voor Kantoor&lt;br /&gt;
40  3 * * * /usr/local/hobbynet/bin/upload_kader_csv.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Deblokkeer actieve joomla gebruikers&lt;br /&gt;
45  3 * * * /usr/local/hobbynet/bin/unblock_joomla.sh &amp;gt;&amp;gt;/var/log/unblock_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Haal de aantallen bezoekers, en zet die over naar de beschermde kantoor omgeving&lt;br /&gt;
47  3 * * * /usr/local/hobbynet/bin/upload_bezoekersstatistiek.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Maak overzicht van alle opt-ins voor Tripolis&lt;br /&gt;
50  3 * * * /usr/local/hobbynet/bin/run_tripolis_export.sh &amp;gt;/var/log/run_tripolis_export.log&lt;br /&gt;
&lt;br /&gt;
# Hernoem in Joomla de users die zijn hernoemd in ldap&lt;br /&gt;
50 3 * * * /usr/local/hobbynet/bin/renameusers_joomla.sh &amp;gt;&amp;gt;/var/log/renameusers_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Haal het resultaat van de Tripolis export op, en mail die naar Egbert&lt;br /&gt;
52  3 * * * /usr/local/hobbynet/bin/mail_tripolis_export_report.sh&lt;br /&gt;
&lt;br /&gt;
# Maak en plaats statistiek overzicht van alle HCC groeperingen&lt;br /&gt;
55  3 * * * /usr/local/hobbynet/bin/statistiek_xml.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Start joomla onderhoud&lt;br /&gt;
0  4 * * * /usr/local/hobbynet/bin/update_joomla.sh &amp;gt;&amp;gt;/var/log/update_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Doe de Hobbynet maand rapportage&lt;br /&gt;
 0  4 1 * * /usr/local/hobbynet/bin/run_maand_rapport.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Bepaal het aantal unieke (en totaal aantal) bezoekers van de laatste 12 maanden, mail dat aan VB&lt;br /&gt;
 5  4 1 * * /usr/local/hobbynet/bin/tel_unieke_bezoekers-volgens-LDAP.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Maak een lijst van onjuiste huisgenoot-lidmaatschappen&lt;br /&gt;
10  4 1 * * /usr/local/hobbynet/bin/huisgenoot_lidmaatschappen.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Schoon mySQL en LDAP op&lt;br /&gt;
 5  4 2 * * /usr/local/hobbynet/bin/schoon_alles_op.sh&lt;br /&gt;
&lt;br /&gt;
# Verrijk een naar SFTP geupload factuur bestand met factuurtokens&lt;br /&gt;
15  * * * * /bin/bash /usr/local/hobbynet/bin/verrijk_factuur.sh &amp;gt;&amp;gt;/var/log/verrijk_factuur.log&lt;br /&gt;
&lt;br /&gt;
# ruim sms database op&lt;br /&gt;
42 12 * * * cat /usr/local/hobbynet/bin/ruimsmsverstuurdsmsop.sql |mysql &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# corigeer menu elke 4 uur&lt;br /&gt;
#42 */4 * * * /usr/local/hobbynet/bin/set_menu_joomla.sh &amp;gt;&amp;gt;/var/log/set_menu_joomla.log&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Toepassingen=&lt;br /&gt;
Soms zijn er een aantal scripts die bij elkaar horen en er voor een bepaalde toepassing zijn, zoals om de mailserver te updaten, dagelijkse bestanden voor Kantoor te maken, dagelijkse bestanden voor het Tripolis mail systeem en niet geheel onbelangrijk, scripts die ldap dagelijks bijwerken met de &#039;&#039;&#039;master&#039;&#039;&#039; data die in het HCC CRM wordt bijgehouden (als er een mutatie gemist is, b.v. omdat een JSON aanroep vanuit het CRM naar de Hobbynet XML-RPC server overdag mislukt is).&lt;br /&gt;
&lt;br /&gt;
==LDAP==&lt;br /&gt;
Drie scripts zijn essentieel om de hele LDAP database te dumpen, te initialiseren en weer te vullen. Dit proces is nodig als een schema change moet worden aangebracht in de LDAP configuratie. Zie ook de pagina over de LDAP server.&lt;br /&gt;
* &#039;&#039;&#039;dump_ldap.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;Dumpt alle ou&#039;s in afzonderlijke ldif bestanden in de data directory en maakt er ook een tarball van.&lt;br /&gt;
* &#039;&#039;&#039;init_ldap.sh &amp;lt;beheer-password&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Bouwt de hele LDAP structuur van de grond af op.&lt;br /&gt;
* &#039;&#039;&#039;restore_ldap.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;Vult de hele LDAP structuur met file uit de dump_ldap stap.&lt;br /&gt;
&lt;br /&gt;
==Statistieken==&lt;br /&gt;
Iedere nacht worden er door het script &#039;&#039;&#039;statistiek_xml.sh&#039;&#039;&#039; van alle groeperingen en van de complete HCC leden database statistieken in XML formaat gemaakt. Daarna worden deze statistieken met het script &#039;&#039;&#039;statistiek_xml.sh&#039;&#039;&#039; naar de kadernet server overgezet.&lt;br /&gt;
&lt;br /&gt;
==Mailserver==&lt;br /&gt;
&amp;lt;strike&amp;gt;De mailserver kreeg tot voor kort 2 bestanden van scripting-int, husers en b3a.txt. De inhoud van beide bestanden kan ook uit ldap gehaald worden. Hiervoor zijn de volgende scripts in gebruik:&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;gen_hobbyabon.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Dit script maakt een equivalent aan van husers en bevat alleen de betalende Hobbynet abonnees (enige tientallen regels).&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;gen_kaderfunc.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Dit script is de vervanger van b3a.txt, de lijst van alle kaderfuncties (ongeveer 1200).&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;gen_kaderlist.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Een hulp bestand met alleen de 7 cijferige lidnummers van alle kaderleden (ruim 700). Deze lijst wordt op de mailserver gebruikt om incidenteel kadermailboxen op te ruimen.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;gen_mail_exclude_txt.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Nog een hulp bestand waar in de interessegroepen staan die geen functionele mailadressen nodig hebben. Dit zijn vooral de ig&#039;s die geen echte ig zijn zoals de HCC zelf en de RvA en RvT maar wel als zodanig in ldap staan. Ook de cursus presentatoren vallen hieronder.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;upd_mailserver_report.sh&#039;&#039;&#039;.&amp;lt;br&amp;gt;Dit script mailt de dagelijkse logs ter controle of alles goed is gegaan.&lt;br /&gt;
* &#039;&#039;&#039;upd_mailserver.sh&#039;&#039;&#039;.&amp;lt;br&amp;gt;Bundelt de php scripts tot een cronjob die elke nacht loopt. Dit script draait de 4 php scripts, doet wat na bewerking, kopieert de output naar mail-lb1-int en start &#039;&#039;&#039;upd_mailserver_all&#039;&#039;&#039; op mail-lb1-int. Tenslotte worden nog de relay-domains opgehaald van mail-lb1-int (dat bestand is pas up-to-date nadat upd_mailserver_all op mail-lb1-int heeft gelopen).Hierna is mail-lb2 nog niet geheel up-to-date. Het script dat door ldap-lb1 is gestart, doet aan het eind een rsync van de datadir op mail-lb1 naar mail-lb2. Tenslotte start mail-lb1 een script op mail-lb2 om die ook up-to-date te maken. Dit is dus een drietraps systeem.&lt;br /&gt;
&lt;br /&gt;
==Maandrapportage==&lt;br /&gt;
* &#039;&#039;&#039;gen_maand_rap.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Verzamelt alle data van Hobbynet abonnees en alle andere users in ldap. Optie &#039;&#039;&#039;-m&#039;&#039;&#039; mailt naar de accounthouder in het ldap record. Sinds medio 2020 krijgen hcc groepering webmasters deze mail niet meer, omdat ze nu allemaal gebruik maken van een Joomla template site, en daar geen &#039;eigenaar&#039; meer van zijn.&lt;br /&gt;
* &#039;&#039;&#039;run_maand_rapport.sh&#039;&#039;&#039;.&amp;lt;br&amp;gt;Cronjob die bovenstaande scripts 1x per maand draait.&lt;br /&gt;
&lt;br /&gt;
==Passwd, shadow en group==&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
* gen_group_admin.php&lt;br /&gt;
* gen_group_code2.php&lt;br /&gt;
* gen_group_hcc.php&lt;br /&gt;
* gen_passwd_admin.php&lt;br /&gt;
* gen_passwd_code2.php&lt;br /&gt;
* gen_passwd_hcc.php&lt;br /&gt;
* gen_shadow_admin.php&lt;br /&gt;
* gen_shadow_code2.php&lt;br /&gt;
* gen_shadow_hcc.php&lt;br /&gt;
* upd_admin_accounts.sh (is er niet)&lt;br /&gt;
* upd_code2_accounts.sh&lt;br /&gt;
* upd_hcc_accounts.sh&lt;br /&gt;
&lt;br /&gt;
Deze scripts genereren de passwd, shadow en group entries voor de betalende leden (_code2), de admins (_admin, de lagere goden, op het moment niet gebruikt; er is wel een .hobby met alleen Roel v.d. Bussche erin) en voor de HCC groeperingen (_hcc). De output wordt op de shared etc omgeving neergezet zodat elke (web)server ze kan toevoegen aan de passwd.temp/shadow.temp/group.temp files. Hiervoor wordt de lokale job upd_usr (of upd_hobby_only) gedraaid.&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==HCC Verenigingsbureau==&lt;br /&gt;
Het HCC Verenigingsbureau (&#039;VB&#039;) heeft beschikking over een ledenlijst en een kader/kernledenlijst die dagelijks up-to-date zijn. Deze lijsten zijn in CSV formaat zodat men zelf in de hand heeft hoe het bestand gebruikt wordt. Ze worden dagelijks op de Hobbynet sftp server (dedicated server t.b.v. gebuik vanaf het VB) geplaatst.&lt;br /&gt;
&lt;br /&gt;
Daarnaast krijgt VB iedere dag een actueel overzicht van de aantallen bezoekers (bezoekers statistiek).&lt;br /&gt;
  &lt;br /&gt;
* &#039;&#039;&#039;upload_kader_csv.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de cronjob &lt;br /&gt;
* &#039;&#039;&#039;gen_kader_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;het php script dat een bestand in CSV formaat maakt met de door VB gewenste velden.&lt;br /&gt;
* &#039;&#039;&#039;upload_leden_csv.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de cronjob&lt;br /&gt;
* &#039;&#039;&#039;gen_leden_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;het php script dat een bestand in CSV formaat maakt met de door VB gewenste velden.&lt;br /&gt;
* &#039;&#039;&#039;upload_bezoekersstatistiek.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de cronjob&lt;br /&gt;
* &#039;&#039;&#039;gen_bezoekersstatistiek_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;het php script dat een bestand in CSV formaat maakt met de bezoekersstatistieken.&lt;br /&gt;
&lt;br /&gt;
==CompUsers==&lt;br /&gt;
2020: VB heeft &#039;eigen&#039; afspraken met CU gemaakt, en stuurt ze op eigen houtje zomaar ledenbestanden toe. Onze scripts zijn daarmee zinloos geworden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;Met CompUsers zijn speciale afspraken gemaakt door Kantoor in januari 2014. Zij krijgen een sterk verkorte lijst van ALLE leden voor hun administratie. Het streven is dit zo spoedig mogelijk te vervangen door een ander mechanisme zoals de partner check.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;upload_compusers_csv.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de cronjob&lt;br /&gt;
* &#039;&#039;&#039;gen_compusers_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;het script dat een CSV maakt. Dit is een afgeslankt vorm van het &#039;&#039;&#039;gen_leden_csv.php&#039;&#039;&#039; script.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Koppeling met Tripolis=&lt;br /&gt;
Het oude &amp;quot;popbull&amp;quot; systeem dat bij HenZ draait is in de zomer van 2013 vervangen door Tripolis. Tripolis wordt al jaren gebruikt door kantoor voor het versturen van Digizine en de Nieuwsflash. Per groepering wordt een account aangemaakt met beperkte rechten waar mee de Correspondent van de groepering mailings kan versturen. Om Tripolis en ldap in sync te houden wordt er elke nacht data uitgewisseld. Ldap is leidend in deze maar als mensen zich uitschrijven (opt-out) via de knop onder aan de mailing, moet dat doorgegeven worden aan ldap. &lt;br /&gt;
&lt;br /&gt;
==Sync van Tripolis naar ldap (uitgeschakeld vbs20220516)==&lt;br /&gt;
* &#039;&#039;&#039;run_tripolis_import.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de eigenlijke cronjob&lt;br /&gt;
* &#039;&#039;&#039;import_tripolis_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;vertaalt de CSV van opt-outs naar het wissen van de individuele optins.&lt;br /&gt;
&lt;br /&gt;
Tripolis plaatst elke nacht om 00:01 een CSV bestand met de opt-outs per bulletin van de vorige dag. Dit gebeurt met datums. Als de datum van gisteren ingevuld staat is daar een optout geweest. Als er geen opt-outs zijn, bevat het veld slechts een lege string. Het  bestand wordt naar de ldap server gehaald waar een aantal versies bewaard worden. De bestanden wordt verwijderd van de sftp omgeving. Vervolgens worden het gedownloade bestand verwerkt om bij het lid de hccOptIn van dit bulletin te verwijderen.&lt;br /&gt;
&lt;br /&gt;
==Sync van ldap naar Tripolis==&lt;br /&gt;
* &#039;&#039;&#039;run_tripolis_export.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de eigenlijk cronjob&lt;br /&gt;
* &#039;&#039;&#039;gen_ldap_bul_export.php&#039;&#039;&#039;&amp;lt;br&amp;gt;maakt een volledige lijst aan van emailadres, lidnr en optins. Dit bestand gaat naar de sftp omgeving van Tripolis.&lt;br /&gt;
* &#039;&#039;&#039;gen_ldap_cor_export.php&#039;&#039;&#039;&amp;lt;br&amp;gt;maakt een lijst van alle correspondenten voor kantoor. Dit bestand gaat naar de sftp omgeving van Kantoor.&lt;br /&gt;
&lt;br /&gt;
Het export bestand wordt elke nacht (om 02:50) op de sftp omgeving voor Tripolis klaargezet. Tripolis haalt het om 05:00 op. Omdat de opt-outs van Tripolis om 02:15 verwerkt worden, is dit bestand dus al bijgewerkt voor wat betreft die opt-outs. Alle andere wijzigingen komen van de hcc.nl profielpagina&#039;s of mutaties door derden op ldap (mutaties door Hobbynet staff of PC30).&lt;br /&gt;
&lt;br /&gt;
==Rapportage==&lt;br /&gt;
&amp;lt;strike&amp;gt;Om ook de ledenadministratie in te lichten over leden die een optout op één of meer Tripolis mailings hebben gedaan, wordt na het verwerken van de optouts een mail gestuurd naar ledenadministratie@hcc.nl. Elke dag is er een nieuwe log file maar die wordt door dezelfde cronjob aan een archive geplakt. Zie mail_tripolis_reports.sh.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Egbert laat zich iedere nacht een rapportage mail sturen, zie mail_tripolis_export_report.sh.&lt;br /&gt;
&lt;br /&gt;
==Eénmalige jobs==&lt;br /&gt;
Er zijn een aantal php scripts voor éénmalig gebruik gemaakt. Deze worden niet in de cronjobs gebruikt maar waren slechts bedoeld om de lijsten opgeleverd door VB in LDAP te krijgen. Deze scripts zijn in de subdirectory &#039;&#039;&#039;popbull-specials&#039;&#039;&#039; geplaatst. &lt;br /&gt;
* &#039;&#039;&#039;import_digizine_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;de initiële Digizine lijst&lt;br /&gt;
* &#039;&#039;&#039;import_nieuwsflash_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;de initiële Nieuwsflash lijst&lt;br /&gt;
* &#039;&#039;&#039;import_popbull_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;de initiële lijst zoals die van HenZ (popbull provider) komt&lt;br /&gt;
&lt;br /&gt;
=ISIZ enquête=&lt;br /&gt;
Op verzoek geschreven scripts voor eenmalig gebruik. Terug te vinden in in de &#039;&#039;&#039;enquete-specials&#039;&#039;&#039; subdirectory. &lt;br /&gt;
* &#039;&#039;&#039;gen_enquete_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;enquête per email&lt;br /&gt;
* &#039;&#039;&#039;gen_enquete_csv_no_mail.php&#039;&#039;&#039;&amp;lt;br&amp;gt;enquête per post&lt;br /&gt;
&lt;br /&gt;
=Nameserver=&lt;br /&gt;
* gen_mx_hcc.php&lt;br /&gt;
* gen_mx_hobby.php&lt;br /&gt;
* upd_nameserver.sh&lt;br /&gt;
&lt;br /&gt;
=Firewall (op ldap servers)=&lt;br /&gt;
* gen_xml_fw_ip4.php&lt;br /&gt;
* gen_xml_fw_ip6.php&lt;br /&gt;
* sync_hobbynetfw.sh&lt;br /&gt;
* gen_fw.sh&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP_scripting&amp;diff=79590</id>
		<title>LDAP scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP_scripting&amp;diff=79590"/>
		<updated>2022-05-16T19:41:27Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* Maandrapportage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Inleiding=&lt;br /&gt;
Omdat de ldap server in sneltreinvaart de bron voor allerlei services aan het worden is, ontstaat er ook een migratie van (veelal perl) scripts op scripting-int naar php scripts op ldap-lb1-int. ldap-lb1-int is net als scripting-int een server met verhoogde security. Er mag dus wel &#039;&#039;&#039;van&#039;&#039;&#039; deze server &#039;&#039;&#039;naar&#039;&#039;&#039; andere servers geconnect worden maar niet andersom. Dit is vergelijkbaar met de situatie op scripting-int. Deze mogelijkheid is essentieel voor de goede werking van sommige scripts.&lt;br /&gt;
&lt;br /&gt;
==Type scripts==&lt;br /&gt;
Er zijn globaal een aantal soorten scripts te onderscheiden:&lt;br /&gt;
* De eigenlijke scripts die een bepaalde taak uitvoeren en vaak naar stdout schrijven (.php soms geen extensie).&lt;br /&gt;
* De cronjob scripts. Gewoonlijk herkenbaar aan de &#039;&#039;&#039;.sh&#039;&#039;&#039; extensie. Deze scripts bundelen vaak meerdere php scripts tot complete oplossingen.&lt;br /&gt;
* Scripts die voor initialiseren en backuppen van de ldap directory nodig zijn (&#039;&#039;&#039;init_ldap, dump_ldap en restore_ldap&#039;&#039;&#039;). Behalve dump_ldap mogen deze scripts nooit zomaar gedraaid worden; de ldap directory zou vernield worden.&lt;br /&gt;
&lt;br /&gt;
==Overzicht scripts==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0_DIT_IS_EEN_LOCAL_DIR            gen_passwd_code2.php              LDAP_include_telefoon.php         sync_hccforums.php&lt;br /&gt;
check_ms                          gen_passwd_hcc.php                LDAP_lid_weg.php                  sync_hobbynetbin_2.sh&lt;br /&gt;
cron_joomla.php                   gen_shadow_admin.php              LDAP_maak_hccOptOutTokens.php     sync_hobbynetdata_2.sh&lt;br /&gt;
cron_joomla.sh                    gen_shadow_code2.php              _LDAP_schoon_4045431_op.php       sync_hobbynetetc_2.sh&lt;br /&gt;
database-onderhoud.sh             gen_shadow_hcc.php                LDAP_schoon_database.php          sync_hobbynetfw_2.sh&lt;br /&gt;
dump_ldap.sh                      gen_xml_fw_ip4.php                LDAP_schoon_mysql_op.php          sync_hobbynetlib_2.sh&lt;br /&gt;
enquete-specials                  gen_xml_fw_ip6.php                LDAP_schoon_testleden_op.php      tel_unieke_bezoekers-volgens-LDAP_en_SQL.php&lt;br /&gt;
forum-specials                    get_all_mailbox_sizes.sh          LDAP_vul_leden.php                tel_unieke_bezoekers-volgens-LDAP.php&lt;br /&gt;
gen_bezoekersstatistiek_xml.php   get_ip4                           LDAP_vul_profielbekend.php        tel_unieke_bezoekers-volgens-LDAP.sh&lt;br /&gt;
gen_compusers_csv.php             get_ip6                           mailman-specials                  test.php&lt;br /&gt;
gen_dmarc_hcc.php                 getip-http                        mail_tripolis_export_report.sh    tripolis_import&lt;br /&gt;
gen_fw.sh                         hccforums_db.php                  optouts                           unblock_joomla.php&lt;br /&gt;
gen_group_admin.php               hcc.nl.mx.fallback                other-specials                    unblock_joomla.sh&lt;br /&gt;
gen_group_code2.php               huisgenoot_lidmaatschappen.php    popbull-specials                  update_domeinen.php&lt;br /&gt;
gen_group_hcc.php                 huisgenoot_lidmaatschappen.sh     postcode-specials                 update_domeinen.sh&lt;br /&gt;
gen_hobbyabon.php                 init_ldap_mdb.sh                  purge_hccforums.php               update_hccforums.sh&lt;br /&gt;
gen_iplist_partners.php           init_ldap.sh                      renameusers_joomla.php            update_joomla.php&lt;br /&gt;
gen_iplist_partners.sh            kader_maak_html.php               renameusers_joomla.sh             update_joomla.sh&lt;br /&gt;
gen_kader_csv.php                 kader_maak_lijsten.sh             restore_ldap.sh                   upd_code2_accounts.sh&lt;br /&gt;
gen_kaderfunc.php                 kader_maak_txt.php                rss_joomla.php                    upd_hcc_accounts.sh&lt;br /&gt;
gen_kaderlist.php                 kader_maak_xb_csv.php             rss_joomla.sh                     upd_ldap_dev.sh&lt;br /&gt;
gen_ldap_bul_export.php           LDAP_bepaal_startconditie.php     ruim_lock_files_op.sh             upd_ldap-test-dev.expect&lt;br /&gt;
gen_ldap_cor_export.php           ldap.conf.ldif                    ruim_pdf_facturen_op.sh           upd_ldap_test.sh&lt;br /&gt;
gen_ldap_hoofdbestuur_export.php  LDAP_controleer_groeperingen.php  ruimsmsverstuurdsmsop.sql         upd_mailserver_report.sh&lt;br /&gt;
gen_ldap_kader_export.php         LDAP_controleer_kader.php         run_maand_rapport.sh              upd_mailserver.sh&lt;br /&gt;
gen_ldap_ledenraad_export.php     LDAP_controleer_users.php         run_tripolis_export.sh            upd_nameserver.sh&lt;br /&gt;
gen_ldap_niet_leden_export.php    LDAP_copyright.txt                schoon_alles_op_include.php       upd_srv&lt;br /&gt;
gen_leden_csv.php                 LDAP_cronjob.sh                   schoon_alles_op.sh                upg_vmware_tools&lt;br /&gt;
gen_leden_dubbel.log              LDAP_forceer_CSV.sh               schoon_breg_token_tabel_op.php    upload_bezoekersstatistiek.sh&lt;br /&gt;
gen_leden_dubbel.php              LDAP_ftps_lget_CRM_leden.sh       schoon_forms_database_op.php      upload_compusers_csv.sh&lt;br /&gt;
gen_maand_rap.php                 LDAP_herstel_profielbekend.php    schoon_JoomlaTokens_tabel_op.php  upload_kader_csv.sh&lt;br /&gt;
gen_mail_exclude_txt.php          LDAP_include_henz.php             schoon_LDAP_en_hcc_Bezoek_op.php  upload_leden_csv.sh&lt;br /&gt;
gen_mx_hcc-fallback.php           LDAP_include_ISO.php              set_menu_joomla.sh                vergelijk_scripts.readme&lt;br /&gt;
gen_mx_hcc.php                    LDAP_include_Joomla_db.php        set_menu.php                      verrijk_factuur.php&lt;br /&gt;
gen_mx_hobby.php                  LDAP_include_mail.php             statistiek_xml.php                verrijk_factuur.sh&lt;br /&gt;
gen_passwd_admin.php              LDAP_include.php                  statistiek_xml.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Crontab==&lt;br /&gt;
===Wijzigingen===&lt;br /&gt;
vbs20220516: Tripolis Import en rapportage uitgeschakeld. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##############################################################################################################&lt;br /&gt;
# Wijzigingen graag ook aanbrengen op deze wiki pagina: https://wiki.hobby.nl/index.php?title=LDAP_scripting #&lt;br /&gt;
##############################################################################################################&lt;br /&gt;
&lt;br /&gt;
# Edit this file to introduce tasks to be run by cron.&lt;br /&gt;
#&lt;br /&gt;
# Each task to run has to be defined through a single line&lt;br /&gt;
# indicating with different fields when the task will be run&lt;br /&gt;
# and what command to run for the task&lt;br /&gt;
#&lt;br /&gt;
# To define the time you can provide concrete values for&lt;br /&gt;
# minute (m), hour (h), day of month (dom), month (mon),&lt;br /&gt;
# and day of week (dow) or use &#039;*&#039; in these fields (for &#039;any&#039;).#&lt;br /&gt;
# Notice that tasks will be started based on the cron&#039;s system&lt;br /&gt;
# daemon&#039;s notion of time and timezones.&lt;br /&gt;
#&lt;br /&gt;
# Output of the crontab jobs (including errors) is sent through&lt;br /&gt;
# email to the user the crontab file belongs to (unless redirected).&lt;br /&gt;
#&lt;br /&gt;
# For example, you can run a backup of all your user accounts&lt;br /&gt;
# at 5 a.m every week with:&lt;br /&gt;
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/&lt;br /&gt;
#&lt;br /&gt;
# For more information see the manual pages of crontab(5) and cron(8)&lt;br /&gt;
#&lt;br /&gt;
# m h  dom mon dow   command&lt;br /&gt;
&lt;br /&gt;
# Update rssfeeds joomla&lt;br /&gt;
1 */1 * * * /usr/local/hobbynet/bin/rss_joomla.sh &amp;gt;&amp;gt;/var/log/rss_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Synchroniseer firewall regels van ldap-lb1 naar ldap-lb2&lt;br /&gt;
55  5 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh&lt;br /&gt;
55 11 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh&lt;br /&gt;
55 17 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh&lt;br /&gt;
55 23 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh&lt;br /&gt;
&lt;br /&gt;
# Herstart Firewall&lt;br /&gt;
 0  6 * * * /etc/init.d/hobby-firewall restart &amp;gt;/dev/null&lt;br /&gt;
 0 12 * * * /etc/init.d/hobby-firewall restart &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /etc/init.d/hobby-firewall restart &amp;gt;/dev/null&lt;br /&gt;
 0  0 * * * /etc/init.d/hobby-firewall restart &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Check op updates en download deze alvast ivm Nagios detectie&lt;br /&gt;
 0  6 * * * apt-get clean -y &amp;gt;/dev/null ; apt-get update &amp;gt;/dev/null ;apt-get upgrade -d -y &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * apt-get clean -y &amp;gt;/dev/null ; apt-get update &amp;gt;/dev/null ;apt-get upgrade -d -y &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Maak een beveiligde backup&lt;br /&gt;
45 23 * * * /usr/local/hobbynet/local/backup-encrypted.bash &amp;gt;&amp;gt;/var/log/backup_encrypted.log&lt;br /&gt;
&lt;br /&gt;
# Sync bin dir naar ldap-lb2&lt;br /&gt;
50 23 * * * /usr/local/hobbynet/bin/sync_hobbynetbin_2.sh&lt;br /&gt;
# Sync etc dir naar ldap-lb2&lt;br /&gt;
51 23 * * * /usr/local/hobbynet/bin/sync_hobbynetetc_2.sh&lt;br /&gt;
# Sync lib dir naar ldap-lb2&lt;br /&gt;
52 23 * * * /usr/local/hobbynet/bin/sync_hobbynetlib_2.sh&lt;br /&gt;
&lt;br /&gt;
# Voer de cron_joomla.sh cronjob uit voor de bit backup&lt;br /&gt;
01  0 * * * /usr/local/hobbynet/bin/cron_joomla.sh &amp;gt;&amp;gt;/var/log/cron_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Voer de cron_joomla.sh cronjob uit voor &#039;update_joomla.sh&#039;&lt;br /&gt;
15  1 * * * /usr/local/hobbynet/bin/cron_joomla.sh &amp;gt;&amp;gt;/var/log/cron_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Forceer dat er een verse set CSV bestanden klaar wordt gezet&lt;br /&gt;
05  3 * * * /usr/local/hobbynet/bin/LDAP_forceer_CSV.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Doe alle processing CRM-&amp;gt;LDAP&lt;br /&gt;
10  3 * * * /usr/local/hobbynet/bin/LDAP_cronjob.sh &amp;gt;&amp;gt;/var/log/LDAP_cronjob.log&lt;br /&gt;
&lt;br /&gt;
# Maak /usr/local/hobbynet/apache2conf/iplists/iplist-partners-24 aan&lt;br /&gt;
 7  3 * * * /usr/local/hobbynet/bin/gen_iplist_partners.sh&lt;br /&gt;
&lt;br /&gt;
# Ververs postfixadmin op mail-lb1 en mail-lb2. Mail report&lt;br /&gt;
26  3 * * * /usr/local/hobbynet/bin/upd_mailserver.sh &amp;gt;/var/log/upd_mailserver.log&lt;br /&gt;
30  3 * * * /usr/local/hobbynet/bin/upd_mailserver_report.sh&lt;br /&gt;
&lt;br /&gt;
# Haal de opt-outs op van Tripolis&lt;br /&gt;
### disabled 20220516&lt;br /&gt;
###15  3 * * * /usr/local/hobbynet/bin/run_tripolis_import.sh &amp;gt;/var/log/run_tripolis_import.log&lt;br /&gt;
&lt;br /&gt;
# Haal de handmatige Tripolis opt-outs op, en mail die naar Egbert&lt;br /&gt;
### disabled 20220516&lt;br /&gt;
###31  3 * * * /usr/local/hobbynet/bin/mail_tripolis_import_report.sh&lt;br /&gt;
&lt;br /&gt;
# Maak en plaats de ledenlijst voor Kantoor&lt;br /&gt;
35  3 * * * /usr/local/hobbynet/bin/upload_leden_csv.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Maak en plaats de kaderlijst voor Kantoor&lt;br /&gt;
40  3 * * * /usr/local/hobbynet/bin/upload_kader_csv.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Deblokkeer actieve joomla gebruikers&lt;br /&gt;
45  3 * * * /usr/local/hobbynet/bin/unblock_joomla.sh &amp;gt;&amp;gt;/var/log/unblock_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Haal de aantallen bezoekers, en zet die over naar de beschermde kantoor omgeving&lt;br /&gt;
47  3 * * * /usr/local/hobbynet/bin/upload_bezoekersstatistiek.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Maak overzicht van alle opt-ins voor Tripolis&lt;br /&gt;
50  3 * * * /usr/local/hobbynet/bin/run_tripolis_export.sh &amp;gt;/var/log/run_tripolis_export.log&lt;br /&gt;
&lt;br /&gt;
# Hernoem in Joomla de users die zijn hernoemd in ldap&lt;br /&gt;
50 3 * * * /usr/local/hobbynet/bin/renameusers_joomla.sh &amp;gt;&amp;gt;/var/log/renameusers_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Haal het resultaat van de Tripolis export op, en mail die naar Egbert&lt;br /&gt;
52  3 * * * /usr/local/hobbynet/bin/mail_tripolis_export_report.sh&lt;br /&gt;
&lt;br /&gt;
# Maak en plaats statistiek overzicht van alle HCC groeperingen&lt;br /&gt;
55  3 * * * /usr/local/hobbynet/bin/statistiek_xml.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Start joomla onderhoud&lt;br /&gt;
0  4 * * * /usr/local/hobbynet/bin/update_joomla.sh &amp;gt;&amp;gt;/var/log/update_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Doe de Hobbynet maand rapportage&lt;br /&gt;
 0  4 1 * * /usr/local/hobbynet/bin/run_maand_rapport.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Bepaal het aantal unieke (en totaal aantal) bezoekers van de laatste 12 maanden, mail dat aan VB&lt;br /&gt;
 5  4 1 * * /usr/local/hobbynet/bin/tel_unieke_bezoekers-volgens-LDAP.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Maak een lijst van onjuiste huisgenoot-lidmaatschappen&lt;br /&gt;
10  4 1 * * /usr/local/hobbynet/bin/huisgenoot_lidmaatschappen.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Schoon mySQL en LDAP op&lt;br /&gt;
 5  4 2 * * /usr/local/hobbynet/bin/schoon_alles_op.sh&lt;br /&gt;
&lt;br /&gt;
# Verrijk een naar SFTP geupload factuur bestand met factuurtokens&lt;br /&gt;
15  * * * * /bin/bash /usr/local/hobbynet/bin/verrijk_factuur.sh &amp;gt;&amp;gt;/var/log/verrijk_factuur.log&lt;br /&gt;
&lt;br /&gt;
# ruim sms database op&lt;br /&gt;
42 12 * * * cat /usr/local/hobbynet/bin/ruimsmsverstuurdsmsop.sql |mysql &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# corigeer menu elke 4 uur&lt;br /&gt;
#42 */4 * * * /usr/local/hobbynet/bin/set_menu_joomla.sh &amp;gt;&amp;gt;/var/log/set_menu_joomla.log&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Toepassingen=&lt;br /&gt;
Soms zijn er een aantal scripts die bij elkaar horen en er voor een bepaalde toepassing zijn, zoals om de mailserver te updaten, dagelijkse bestanden voor Kantoor te maken, dagelijkse bestanden voor het Tripolis mail systeem en niet geheel onbelangrijk, scripts die ldap dagelijks bijwerken met de &#039;&#039;&#039;master&#039;&#039;&#039; data die in het HCC CRM wordt bijgehouden (als er een mutatie gemist is, b.v. omdat een JSON aanroep vanuit het CRM naar de Hobbynet XML-RPC server overdag mislukt is).&lt;br /&gt;
&lt;br /&gt;
==LDAP==&lt;br /&gt;
Drie scripts zijn essentieel om de hele LDAP database te dumpen, te initialiseren en weer te vullen. Dit proces is nodig als een schema change moet worden aangebracht in de LDAP configuratie. Zie ook de pagina over de LDAP server.&lt;br /&gt;
* &#039;&#039;&#039;dump_ldap.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;Dumpt alle ou&#039;s in afzonderlijke ldif bestanden in de data directory en maakt er ook een tarball van.&lt;br /&gt;
* &#039;&#039;&#039;init_ldap.sh &amp;lt;beheer-password&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Bouwt de hele LDAP structuur van de grond af op.&lt;br /&gt;
* &#039;&#039;&#039;restore_ldap.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;Vult de hele LDAP structuur met file uit de dump_ldap stap.&lt;br /&gt;
&lt;br /&gt;
==Statistieken==&lt;br /&gt;
Iedere nacht worden er door het script &#039;&#039;&#039;statistiek_xml.sh&#039;&#039;&#039; van alle groeperingen en van de complete HCC leden database statistieken in XML formaat gemaakt. Daarna worden deze statistieken met het script &#039;&#039;&#039;statistiek_xml.sh&#039;&#039;&#039; naar de kadernet server overgezet.&lt;br /&gt;
&lt;br /&gt;
==Mailserver==&lt;br /&gt;
&amp;lt;strike&amp;gt;De mailserver kreeg tot voor kort 2 bestanden van scripting-int, husers en b3a.txt. De inhoud van beide bestanden kan ook uit ldap gehaald worden. Hiervoor zijn de volgende scripts in gebruik:&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;gen_hobbyabon.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Dit script maakt een equivalent aan van husers en bevat alleen de betalende Hobbynet abonnees (enige tientallen regels).&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;gen_kaderfunc.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Dit script is de vervanger van b3a.txt, de lijst van alle kaderfuncties (ongeveer 1200).&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;gen_kaderlist.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Een hulp bestand met alleen de 7 cijferige lidnummers van alle kaderleden (ruim 700). Deze lijst wordt op de mailserver gebruikt om incidenteel kadermailboxen op te ruimen.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;gen_mail_exclude_txt.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Nog een hulp bestand waar in de interessegroepen staan die geen functionele mailadressen nodig hebben. Dit zijn vooral de ig&#039;s die geen echte ig zijn zoals de HCC zelf en de RvA en RvT maar wel als zodanig in ldap staan. Ook de cursus presentatoren vallen hieronder.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;upd_mailserver_report.sh&#039;&#039;&#039;.&amp;lt;br&amp;gt;Dit script mailt de dagelijkse logs ter controle of alles goed is gegaan.&lt;br /&gt;
* &#039;&#039;&#039;upd_mailserver.sh&#039;&#039;&#039;.&amp;lt;br&amp;gt;Bundelt de php scripts tot een cronjob die elke nacht loopt. Dit script draait de 4 php scripts, doet wat na bewerking, kopieert de output naar mail-lb1-int en start &#039;&#039;&#039;upd_mailserver_all&#039;&#039;&#039; op mail-lb1-int. Tenslotte worden nog de relay-domains opgehaald van mail-lb1-int (dat bestand is pas up-to-date nadat upd_mailserver_all op mail-lb1-int heeft gelopen).Hierna is mail-lb2 nog niet geheel up-to-date. Het script dat door ldap-lb1 is gestart, doet aan het eind een rsync van de datadir op mail-lb1 naar mail-lb2. Tenslotte start mail-lb1 een script op mail-lb2 om die ook up-to-date te maken. Dit is dus een drietraps systeem.&lt;br /&gt;
&lt;br /&gt;
==Maandrapportage==&lt;br /&gt;
* &#039;&#039;&#039;gen_maand_rap.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Verzamelt alle data van Hobbynet abonnees en alle andere users in ldap. Optie &#039;&#039;&#039;-m&#039;&#039;&#039; mailt naar de accounthouder in het ldap record. Sinds medio 2020 krijgen hcc groepering webmasters deze mail niet meer, omdat ze nu allemaal gebruik maken van een Joomla template site, en daar geen &#039;eigenaar&#039; meer van zijn.&lt;br /&gt;
* &#039;&#039;&#039;run_maand_rapport.sh&#039;&#039;&#039;.&amp;lt;br&amp;gt;Cronjob die bovenstaande scripts 1x per maand draait.&lt;br /&gt;
&lt;br /&gt;
==Passwd, shadow en group==&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
* gen_group_admin.php&lt;br /&gt;
* gen_group_code2.php&lt;br /&gt;
* gen_group_hcc.php&lt;br /&gt;
* gen_passwd_admin.php&lt;br /&gt;
* gen_passwd_code2.php&lt;br /&gt;
* gen_passwd_hcc.php&lt;br /&gt;
* gen_shadow_admin.php&lt;br /&gt;
* gen_shadow_code2.php&lt;br /&gt;
* gen_shadow_hcc.php&lt;br /&gt;
* upd_admin_accounts.sh (is er niet)&lt;br /&gt;
* upd_code2_accounts.sh&lt;br /&gt;
* upd_hcc_accounts.sh&lt;br /&gt;
&lt;br /&gt;
Deze scripts genereren de passwd, shadow en group entries voor de betalende leden (_code2), de admins (_admin, de lagere goden, op het moment niet gebruikt; er is wel een .hobby met alleen Roel v.d. Bussche erin) en voor de HCC groeperingen (_hcc). De output wordt op de shared etc omgeving neergezet zodat elke (web)server ze kan toevoegen aan de passwd.temp/shadow.temp/group.temp files. Hiervoor wordt de lokale job upd_usr (of upd_hobby_only) gedraaid.&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==HCC Verenigingsbureau==&lt;br /&gt;
Het HCC Verenigingsbureau (&#039;VB&#039;) heeft beschikking over een ledenlijst en een kader/kernledenlijst die dagelijks up-to-date zijn. Deze lijsten zijn in CSV formaat zodat men zelf in de hand heeft hoe het bestand gebruikt wordt. Ze worden dagelijks op de Hobbynet sftp server (dedicated server t.b.v. gebuik vanaf het VB) geplaatst.&lt;br /&gt;
&lt;br /&gt;
Daarnaast krijgt VB iedere dag een actueel overzicht van de aantallen bezoekers (bezoekers statistiek).&lt;br /&gt;
  &lt;br /&gt;
* &#039;&#039;&#039;upload_kader_csv.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de cronjob &lt;br /&gt;
* &#039;&#039;&#039;gen_kader_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;het php script dat een bestand in CSV formaat maakt met de door VB gewenste velden.&lt;br /&gt;
* &#039;&#039;&#039;upload_leden_csv.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de cronjob&lt;br /&gt;
* &#039;&#039;&#039;gen_leden_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;het php script dat een bestand in CSV formaat maakt met de door VB gewenste velden.&lt;br /&gt;
* &#039;&#039;&#039;upload_bezoekersstatistiek.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de cronjob&lt;br /&gt;
* &#039;&#039;&#039;gen_bezoekersstatistiek_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;het php script dat een bestand in CSV formaat maakt met de bezoekersstatistieken.&lt;br /&gt;
&lt;br /&gt;
==CompUsers==&lt;br /&gt;
2020: VB heeft &#039;eigen&#039; afspraken met CU gemaakt, en stuurt ze op eigen houtje zomaar ledenbestanden toe. Onze scripts zijn daarmee zinloos geworden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;Met CompUsers zijn speciale afspraken gemaakt door Kantoor in januari 2014. Zij krijgen een sterk verkorte lijst van ALLE leden voor hun administratie. Het streven is dit zo spoedig mogelijk te vervangen door een ander mechanisme zoals de partner check.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;upload_compusers_csv.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de cronjob&lt;br /&gt;
* &#039;&#039;&#039;gen_compusers_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;het script dat een CSV maakt. Dit is een afgeslankt vorm van het &#039;&#039;&#039;gen_leden_csv.php&#039;&#039;&#039; script.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Koppeling met Tripolis=&lt;br /&gt;
Het oude &amp;quot;popbull&amp;quot; systeem dat bij HenZ draait is in de zomer van 2013 vervangen door Tripolis. Tripolis wordt al jaren gebruikt door kantoor voor het versturen van Digizine en de Nieuwsflash. Per groepering wordt een account aangemaakt met beperkte rechten waar mee de Correspondent van de groepering mailings kan versturen. Om Tripolis en ldap in sync te houden wordt er elke nacht data uitgewisseld. Ldap is leidend in deze maar als mensen zich uitschrijven (opt-out) via de knop onder aan de mailing, moet dat doorgegeven worden aan ldap. &lt;br /&gt;
&lt;br /&gt;
==Sync van Tripolis naar ldap==&lt;br /&gt;
* &#039;&#039;&#039;run_tripolis_import.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de eigenlijke cronjob&lt;br /&gt;
* &#039;&#039;&#039;import_tripolis_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;vertaalt de CSV van opt-outs naar het wissen van de individuele optins.&lt;br /&gt;
&lt;br /&gt;
Tripolis plaatst elke nacht om 00:01 een CSV bestand met de opt-outs per bulletin van de vorige dag. Dit gebeurt met datums. Als de datum van gisteren ingevuld staat is daar een optout geweest. Als er geen opt-outs zijn, bevat het veld slechts een lege string. Het  bestand wordt naar de ldap server gehaald waar een aantal versies bewaard worden. De bestanden wordt verwijderd van de sftp omgeving. Vervolgens worden het gedownloade bestand verwerkt om bij het lid de hccOptIn van dit bulletin te verwijderen.&lt;br /&gt;
&lt;br /&gt;
==Sync van ldap naar Tripolis==&lt;br /&gt;
* &#039;&#039;&#039;run_tripolis_export.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de eigenlijk cronjob&lt;br /&gt;
* &#039;&#039;&#039;gen_ldap_bul_export.php&#039;&#039;&#039;&amp;lt;br&amp;gt;maakt een volledige lijst aan van emailadres, lidnr en optins. Dit bestand gaat naar de sftp omgeving van Tripolis.&lt;br /&gt;
* &#039;&#039;&#039;gen_ldap_cor_export.php&#039;&#039;&#039;&amp;lt;br&amp;gt;maakt een lijst van alle correspondenten voor kantoor. Dit bestand gaat naar de sftp omgeving van Kantoor.&lt;br /&gt;
&lt;br /&gt;
Het export bestand wordt elke nacht (om 02:50) op de sftp omgeving voor Tripolis klaargezet. Tripolis haalt het om 05:00 op. Omdat de opt-outs van Tripolis om 02:15 verwerkt worden, is dit bestand dus al bijgewerkt voor wat betreft die opt-outs. Alle andere wijzigingen komen van de hcc.nl profielpagina&#039;s of mutaties door derden op ldap (mutaties door Hobbynet staff of PC30).&lt;br /&gt;
&lt;br /&gt;
==Rapportage==&lt;br /&gt;
&amp;lt;strike&amp;gt;Om ook de ledenadministratie in te lichten over leden die een optout op één of meer Tripolis mailings hebben gedaan, wordt na het verwerken van de optouts een mail gestuurd naar ledenadministratie@hcc.nl. Elke dag is er een nieuwe log file maar die wordt door dezelfde cronjob aan een archive geplakt. Zie mail_tripolis_reports.sh.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Egbert laat zich iedere nacht een rapportage mail sturen, zie mail_tripolis_export_report.sh.&lt;br /&gt;
&lt;br /&gt;
==Eénmalige jobs==&lt;br /&gt;
Er zijn een aantal php scripts voor éénmalig gebruik gemaakt. Deze worden niet in de cronjobs gebruikt maar waren slechts bedoeld om de lijsten opgeleverd door VB in LDAP te krijgen. Deze scripts zijn in de subdirectory &#039;&#039;&#039;popbull-specials&#039;&#039;&#039; geplaatst. &lt;br /&gt;
* &#039;&#039;&#039;import_digizine_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;de initiële Digizine lijst&lt;br /&gt;
* &#039;&#039;&#039;import_nieuwsflash_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;de initiële Nieuwsflash lijst&lt;br /&gt;
* &#039;&#039;&#039;import_popbull_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;de initiële lijst zoals die van HenZ (popbull provider) komt&lt;br /&gt;
&lt;br /&gt;
=ISIZ enquête=&lt;br /&gt;
Op verzoek geschreven scripts voor eenmalig gebruik. Terug te vinden in in de &#039;&#039;&#039;enquete-specials&#039;&#039;&#039; subdirectory. &lt;br /&gt;
* &#039;&#039;&#039;gen_enquete_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;enquête per email&lt;br /&gt;
* &#039;&#039;&#039;gen_enquete_csv_no_mail.php&#039;&#039;&#039;&amp;lt;br&amp;gt;enquête per post&lt;br /&gt;
&lt;br /&gt;
=Nameserver=&lt;br /&gt;
* gen_mx_hcc.php&lt;br /&gt;
* gen_mx_hobby.php&lt;br /&gt;
* upd_nameserver.sh&lt;br /&gt;
&lt;br /&gt;
=Firewall (op ldap servers)=&lt;br /&gt;
* gen_xml_fw_ip4.php&lt;br /&gt;
* gen_xml_fw_ip6.php&lt;br /&gt;
* sync_hobbynetfw.sh&lt;br /&gt;
* gen_fw.sh&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP_scripting&amp;diff=79588</id>
		<title>LDAP scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP_scripting&amp;diff=79588"/>
		<updated>2022-05-16T19:29:33Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* Crontab */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Inleiding=&lt;br /&gt;
Omdat de ldap server in sneltreinvaart de bron voor allerlei services aan het worden is, ontstaat er ook een migratie van (veelal perl) scripts op scripting-int naar php scripts op ldap-lb1-int. ldap-lb1-int is net als scripting-int een server met verhoogde security. Er mag dus wel &#039;&#039;&#039;van&#039;&#039;&#039; deze server &#039;&#039;&#039;naar&#039;&#039;&#039; andere servers geconnect worden maar niet andersom. Dit is vergelijkbaar met de situatie op scripting-int. Deze mogelijkheid is essentieel voor de goede werking van sommige scripts.&lt;br /&gt;
&lt;br /&gt;
==Type scripts==&lt;br /&gt;
Er zijn globaal een aantal soorten scripts te onderscheiden:&lt;br /&gt;
* De eigenlijke scripts die een bepaalde taak uitvoeren en vaak naar stdout schrijven (.php soms geen extensie).&lt;br /&gt;
* De cronjob scripts. Gewoonlijk herkenbaar aan de &#039;&#039;&#039;.sh&#039;&#039;&#039; extensie. Deze scripts bundelen vaak meerdere php scripts tot complete oplossingen.&lt;br /&gt;
* Scripts die voor initialiseren en backuppen van de ldap directory nodig zijn (&#039;&#039;&#039;init_ldap, dump_ldap en restore_ldap&#039;&#039;&#039;). Behalve dump_ldap mogen deze scripts nooit zomaar gedraaid worden; de ldap directory zou vernield worden.&lt;br /&gt;
&lt;br /&gt;
==Overzicht scripts==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0_DIT_IS_EEN_LOCAL_DIR            gen_passwd_code2.php              LDAP_include_telefoon.php         sync_hccforums.php&lt;br /&gt;
check_ms                          gen_passwd_hcc.php                LDAP_lid_weg.php                  sync_hobbynetbin_2.sh&lt;br /&gt;
cron_joomla.php                   gen_shadow_admin.php              LDAP_maak_hccOptOutTokens.php     sync_hobbynetdata_2.sh&lt;br /&gt;
cron_joomla.sh                    gen_shadow_code2.php              _LDAP_schoon_4045431_op.php       sync_hobbynetetc_2.sh&lt;br /&gt;
database-onderhoud.sh             gen_shadow_hcc.php                LDAP_schoon_database.php          sync_hobbynetfw_2.sh&lt;br /&gt;
dump_ldap.sh                      gen_xml_fw_ip4.php                LDAP_schoon_mysql_op.php          sync_hobbynetlib_2.sh&lt;br /&gt;
enquete-specials                  gen_xml_fw_ip6.php                LDAP_schoon_testleden_op.php      tel_unieke_bezoekers-volgens-LDAP_en_SQL.php&lt;br /&gt;
forum-specials                    get_all_mailbox_sizes.sh          LDAP_vul_leden.php                tel_unieke_bezoekers-volgens-LDAP.php&lt;br /&gt;
gen_bezoekersstatistiek_xml.php   get_ip4                           LDAP_vul_profielbekend.php        tel_unieke_bezoekers-volgens-LDAP.sh&lt;br /&gt;
gen_compusers_csv.php             get_ip6                           mailman-specials                  test.php&lt;br /&gt;
gen_dmarc_hcc.php                 getip-http                        mail_tripolis_export_report.sh    tripolis_import&lt;br /&gt;
gen_fw.sh                         hccforums_db.php                  optouts                           unblock_joomla.php&lt;br /&gt;
gen_group_admin.php               hcc.nl.mx.fallback                other-specials                    unblock_joomla.sh&lt;br /&gt;
gen_group_code2.php               huisgenoot_lidmaatschappen.php    popbull-specials                  update_domeinen.php&lt;br /&gt;
gen_group_hcc.php                 huisgenoot_lidmaatschappen.sh     postcode-specials                 update_domeinen.sh&lt;br /&gt;
gen_hobbyabon.php                 init_ldap_mdb.sh                  purge_hccforums.php               update_hccforums.sh&lt;br /&gt;
gen_iplist_partners.php           init_ldap.sh                      renameusers_joomla.php            update_joomla.php&lt;br /&gt;
gen_iplist_partners.sh            kader_maak_html.php               renameusers_joomla.sh             update_joomla.sh&lt;br /&gt;
gen_kader_csv.php                 kader_maak_lijsten.sh             restore_ldap.sh                   upd_code2_accounts.sh&lt;br /&gt;
gen_kaderfunc.php                 kader_maak_txt.php                rss_joomla.php                    upd_hcc_accounts.sh&lt;br /&gt;
gen_kaderlist.php                 kader_maak_xb_csv.php             rss_joomla.sh                     upd_ldap_dev.sh&lt;br /&gt;
gen_ldap_bul_export.php           LDAP_bepaal_startconditie.php     ruim_lock_files_op.sh             upd_ldap-test-dev.expect&lt;br /&gt;
gen_ldap_cor_export.php           ldap.conf.ldif                    ruim_pdf_facturen_op.sh           upd_ldap_test.sh&lt;br /&gt;
gen_ldap_hoofdbestuur_export.php  LDAP_controleer_groeperingen.php  ruimsmsverstuurdsmsop.sql         upd_mailserver_report.sh&lt;br /&gt;
gen_ldap_kader_export.php         LDAP_controleer_kader.php         run_maand_rapport.sh              upd_mailserver.sh&lt;br /&gt;
gen_ldap_ledenraad_export.php     LDAP_controleer_users.php         run_tripolis_export.sh            upd_nameserver.sh&lt;br /&gt;
gen_ldap_niet_leden_export.php    LDAP_copyright.txt                schoon_alles_op_include.php       upd_srv&lt;br /&gt;
gen_leden_csv.php                 LDAP_cronjob.sh                   schoon_alles_op.sh                upg_vmware_tools&lt;br /&gt;
gen_leden_dubbel.log              LDAP_forceer_CSV.sh               schoon_breg_token_tabel_op.php    upload_bezoekersstatistiek.sh&lt;br /&gt;
gen_leden_dubbel.php              LDAP_ftps_lget_CRM_leden.sh       schoon_forms_database_op.php      upload_compusers_csv.sh&lt;br /&gt;
gen_maand_rap.php                 LDAP_herstel_profielbekend.php    schoon_JoomlaTokens_tabel_op.php  upload_kader_csv.sh&lt;br /&gt;
gen_mail_exclude_txt.php          LDAP_include_henz.php             schoon_LDAP_en_hcc_Bezoek_op.php  upload_leden_csv.sh&lt;br /&gt;
gen_mx_hcc-fallback.php           LDAP_include_ISO.php              set_menu_joomla.sh                vergelijk_scripts.readme&lt;br /&gt;
gen_mx_hcc.php                    LDAP_include_Joomla_db.php        set_menu.php                      verrijk_factuur.php&lt;br /&gt;
gen_mx_hobby.php                  LDAP_include_mail.php             statistiek_xml.php                verrijk_factuur.sh&lt;br /&gt;
gen_passwd_admin.php              LDAP_include.php                  statistiek_xml.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Crontab==&lt;br /&gt;
===Wijzigingen===&lt;br /&gt;
vbs20220516: Tripolis Import en rapportage uitgeschakeld. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##############################################################################################################&lt;br /&gt;
# Wijzigingen graag ook aanbrengen op deze wiki pagina: https://wiki.hobby.nl/index.php?title=LDAP_scripting #&lt;br /&gt;
##############################################################################################################&lt;br /&gt;
&lt;br /&gt;
# Edit this file to introduce tasks to be run by cron.&lt;br /&gt;
#&lt;br /&gt;
# Each task to run has to be defined through a single line&lt;br /&gt;
# indicating with different fields when the task will be run&lt;br /&gt;
# and what command to run for the task&lt;br /&gt;
#&lt;br /&gt;
# To define the time you can provide concrete values for&lt;br /&gt;
# minute (m), hour (h), day of month (dom), month (mon),&lt;br /&gt;
# and day of week (dow) or use &#039;*&#039; in these fields (for &#039;any&#039;).#&lt;br /&gt;
# Notice that tasks will be started based on the cron&#039;s system&lt;br /&gt;
# daemon&#039;s notion of time and timezones.&lt;br /&gt;
#&lt;br /&gt;
# Output of the crontab jobs (including errors) is sent through&lt;br /&gt;
# email to the user the crontab file belongs to (unless redirected).&lt;br /&gt;
#&lt;br /&gt;
# For example, you can run a backup of all your user accounts&lt;br /&gt;
# at 5 a.m every week with:&lt;br /&gt;
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/&lt;br /&gt;
#&lt;br /&gt;
# For more information see the manual pages of crontab(5) and cron(8)&lt;br /&gt;
#&lt;br /&gt;
# m h  dom mon dow   command&lt;br /&gt;
&lt;br /&gt;
# Update rssfeeds joomla&lt;br /&gt;
1 */1 * * * /usr/local/hobbynet/bin/rss_joomla.sh &amp;gt;&amp;gt;/var/log/rss_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Synchroniseer firewall regels van ldap-lb1 naar ldap-lb2&lt;br /&gt;
55  5 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh&lt;br /&gt;
55 11 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh&lt;br /&gt;
55 17 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh&lt;br /&gt;
55 23 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh&lt;br /&gt;
&lt;br /&gt;
# Herstart Firewall&lt;br /&gt;
 0  6 * * * /etc/init.d/hobby-firewall restart &amp;gt;/dev/null&lt;br /&gt;
 0 12 * * * /etc/init.d/hobby-firewall restart &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /etc/init.d/hobby-firewall restart &amp;gt;/dev/null&lt;br /&gt;
 0  0 * * * /etc/init.d/hobby-firewall restart &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Check op updates en download deze alvast ivm Nagios detectie&lt;br /&gt;
 0  6 * * * apt-get clean -y &amp;gt;/dev/null ; apt-get update &amp;gt;/dev/null ;apt-get upgrade -d -y &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * apt-get clean -y &amp;gt;/dev/null ; apt-get update &amp;gt;/dev/null ;apt-get upgrade -d -y &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Maak een beveiligde backup&lt;br /&gt;
45 23 * * * /usr/local/hobbynet/local/backup-encrypted.bash &amp;gt;&amp;gt;/var/log/backup_encrypted.log&lt;br /&gt;
&lt;br /&gt;
# Sync bin dir naar ldap-lb2&lt;br /&gt;
50 23 * * * /usr/local/hobbynet/bin/sync_hobbynetbin_2.sh&lt;br /&gt;
# Sync etc dir naar ldap-lb2&lt;br /&gt;
51 23 * * * /usr/local/hobbynet/bin/sync_hobbynetetc_2.sh&lt;br /&gt;
# Sync lib dir naar ldap-lb2&lt;br /&gt;
52 23 * * * /usr/local/hobbynet/bin/sync_hobbynetlib_2.sh&lt;br /&gt;
&lt;br /&gt;
# Voer de cron_joomla.sh cronjob uit voor de bit backup&lt;br /&gt;
01  0 * * * /usr/local/hobbynet/bin/cron_joomla.sh &amp;gt;&amp;gt;/var/log/cron_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Voer de cron_joomla.sh cronjob uit voor &#039;update_joomla.sh&#039;&lt;br /&gt;
15  1 * * * /usr/local/hobbynet/bin/cron_joomla.sh &amp;gt;&amp;gt;/var/log/cron_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Forceer dat er een verse set CSV bestanden klaar wordt gezet&lt;br /&gt;
05  3 * * * /usr/local/hobbynet/bin/LDAP_forceer_CSV.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Doe alle processing CRM-&amp;gt;LDAP&lt;br /&gt;
10  3 * * * /usr/local/hobbynet/bin/LDAP_cronjob.sh &amp;gt;&amp;gt;/var/log/LDAP_cronjob.log&lt;br /&gt;
&lt;br /&gt;
# Maak /usr/local/hobbynet/apache2conf/iplists/iplist-partners-24 aan&lt;br /&gt;
 7  3 * * * /usr/local/hobbynet/bin/gen_iplist_partners.sh&lt;br /&gt;
&lt;br /&gt;
# Ververs postfixadmin op mail-lb1 en mail-lb2. Mail report&lt;br /&gt;
26  3 * * * /usr/local/hobbynet/bin/upd_mailserver.sh &amp;gt;/var/log/upd_mailserver.log&lt;br /&gt;
30  3 * * * /usr/local/hobbynet/bin/upd_mailserver_report.sh&lt;br /&gt;
&lt;br /&gt;
# Haal de opt-outs op van Tripolis&lt;br /&gt;
### disabled 20220516&lt;br /&gt;
###15  3 * * * /usr/local/hobbynet/bin/run_tripolis_import.sh &amp;gt;/var/log/run_tripolis_import.log&lt;br /&gt;
&lt;br /&gt;
# Haal de handmatige Tripolis opt-outs op, en mail die naar Egbert&lt;br /&gt;
### disabled 20220516&lt;br /&gt;
###31  3 * * * /usr/local/hobbynet/bin/mail_tripolis_import_report.sh&lt;br /&gt;
&lt;br /&gt;
# Maak en plaats de ledenlijst voor Kantoor&lt;br /&gt;
35  3 * * * /usr/local/hobbynet/bin/upload_leden_csv.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Maak en plaats de kaderlijst voor Kantoor&lt;br /&gt;
40  3 * * * /usr/local/hobbynet/bin/upload_kader_csv.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Deblokkeer actieve joomla gebruikers&lt;br /&gt;
45  3 * * * /usr/local/hobbynet/bin/unblock_joomla.sh &amp;gt;&amp;gt;/var/log/unblock_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Haal de aantallen bezoekers, en zet die over naar de beschermde kantoor omgeving&lt;br /&gt;
47  3 * * * /usr/local/hobbynet/bin/upload_bezoekersstatistiek.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Maak overzicht van alle opt-ins voor Tripolis&lt;br /&gt;
50  3 * * * /usr/local/hobbynet/bin/run_tripolis_export.sh &amp;gt;/var/log/run_tripolis_export.log&lt;br /&gt;
&lt;br /&gt;
# Hernoem in Joomla de users die zijn hernoemd in ldap&lt;br /&gt;
50 3 * * * /usr/local/hobbynet/bin/renameusers_joomla.sh &amp;gt;&amp;gt;/var/log/renameusers_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Haal het resultaat van de Tripolis export op, en mail die naar Egbert&lt;br /&gt;
52  3 * * * /usr/local/hobbynet/bin/mail_tripolis_export_report.sh&lt;br /&gt;
&lt;br /&gt;
# Maak en plaats statistiek overzicht van alle HCC groeperingen&lt;br /&gt;
55  3 * * * /usr/local/hobbynet/bin/statistiek_xml.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Start joomla onderhoud&lt;br /&gt;
0  4 * * * /usr/local/hobbynet/bin/update_joomla.sh &amp;gt;&amp;gt;/var/log/update_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Doe de Hobbynet maand rapportage&lt;br /&gt;
 0  4 1 * * /usr/local/hobbynet/bin/run_maand_rapport.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Bepaal het aantal unieke (en totaal aantal) bezoekers van de laatste 12 maanden, mail dat aan VB&lt;br /&gt;
 5  4 1 * * /usr/local/hobbynet/bin/tel_unieke_bezoekers-volgens-LDAP.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Maak een lijst van onjuiste huisgenoot-lidmaatschappen&lt;br /&gt;
10  4 1 * * /usr/local/hobbynet/bin/huisgenoot_lidmaatschappen.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Schoon mySQL en LDAP op&lt;br /&gt;
 5  4 2 * * /usr/local/hobbynet/bin/schoon_alles_op.sh&lt;br /&gt;
&lt;br /&gt;
# Verrijk een naar SFTP geupload factuur bestand met factuurtokens&lt;br /&gt;
15  * * * * /bin/bash /usr/local/hobbynet/bin/verrijk_factuur.sh &amp;gt;&amp;gt;/var/log/verrijk_factuur.log&lt;br /&gt;
&lt;br /&gt;
# ruim sms database op&lt;br /&gt;
42 12 * * * cat /usr/local/hobbynet/bin/ruimsmsverstuurdsmsop.sql |mysql &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# corigeer menu elke 4 uur&lt;br /&gt;
#42 */4 * * * /usr/local/hobbynet/bin/set_menu_joomla.sh &amp;gt;&amp;gt;/var/log/set_menu_joomla.log&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Toepassingen=&lt;br /&gt;
Soms zijn er een aantal scripts die bij elkaar horen en er voor een bepaalde toepassing zijn, zoals om de mailserver te updaten, dagelijkse bestanden voor Kantoor te maken, dagelijkse bestanden voor het Tripolis mail systeem en niet geheel onbelangrijk, scripts die ldap dagelijks bijwerken met de &#039;&#039;&#039;master&#039;&#039;&#039; data die in het HCC CRM wordt bijgehouden (als er een mutatie gemist is, b.v. omdat een JSON aanroep vanuit het CRM naar de Hobbynet XML-RPC server overdag mislukt is).&lt;br /&gt;
&lt;br /&gt;
==LDAP==&lt;br /&gt;
Drie scripts zijn essentieel om de hele LDAP database te dumpen, te initialiseren en weer te vullen. Dit proces is nodig als een schema change moet worden aangebracht in de LDAP configuratie. Zie ook de pagina over de LDAP server.&lt;br /&gt;
* &#039;&#039;&#039;dump_ldap.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;Dumpt alle ou&#039;s in afzonderlijke ldif bestanden in de data directory en maakt er ook een tarball van.&lt;br /&gt;
* &#039;&#039;&#039;init_ldap.sh &amp;lt;beheer-password&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Bouwt de hele LDAP structuur van de grond af op.&lt;br /&gt;
* &#039;&#039;&#039;restore_ldap.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;Vult de hele LDAP structuur met file uit de dump_ldap stap.&lt;br /&gt;
&lt;br /&gt;
==Statistieken==&lt;br /&gt;
Iedere nacht worden er door het script &#039;&#039;&#039;statistiek_xml.sh&#039;&#039;&#039; van alle groeperingen en van de complete HCC leden database statistieken in XML formaat gemaakt. Daarna worden deze statistieken met het script &#039;&#039;&#039;statistiek_xml.sh&#039;&#039;&#039; naar de kadernet server overgezet.&lt;br /&gt;
&lt;br /&gt;
==Mailserver==&lt;br /&gt;
&amp;lt;strike&amp;gt;De mailserver kreeg tot voor kort 2 bestanden van scripting-int, husers en b3a.txt. De inhoud van beide bestanden kan ook uit ldap gehaald worden. Hiervoor zijn de volgende scripts in gebruik:&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;gen_hobbyabon.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Dit script maakt een equivalent aan van husers en bevat alleen de betalende Hobbynet abonnees (enige tientallen regels).&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;gen_kaderfunc.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Dit script is de vervanger van b3a.txt, de lijst van alle kaderfuncties (ongeveer 1200).&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;gen_kaderlist.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Een hulp bestand met alleen de 7 cijferige lidnummers van alle kaderleden (ruim 700). Deze lijst wordt op de mailserver gebruikt om incidenteel kadermailboxen op te ruimen.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;gen_mail_exclude_txt.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Nog een hulp bestand waar in de interessegroepen staan die geen functionele mailadressen nodig hebben. Dit zijn vooral de ig&#039;s die geen echte ig zijn zoals de HCC zelf en de RvA en RvT maar wel als zodanig in ldap staan. Ook de cursus presentatoren vallen hieronder.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;upd_mailserver_report.sh&#039;&#039;&#039;.&amp;lt;br&amp;gt;Dit script mailt de dagelijkse logs ter controle of alles goed is gegaan.&lt;br /&gt;
* &#039;&#039;&#039;upd_mailserver.sh&#039;&#039;&#039;.&amp;lt;br&amp;gt;Bundelt de php scripts tot een cronjob die elke nacht loopt. Dit script draait de 4 php scripts, doet wat na bewerking, kopieert de output naar mail-lb1-int en start &#039;&#039;&#039;upd_mailserver_all&#039;&#039;&#039; op mail-lb1-int. Tenslotte worden nog de relay-domains opgehaald van mail-lb1-int (dat bestand is pas up-to-date nadat upd_mailserver_all op mail-lb1-int heeft gelopen).Hierna is mail-lb2 nog niet geheel up-to-date. Het script dat door ldap-lb1 is gestart, doet aan het eind een rsync van de datadir op mail-lb1 naar mail-lb2. Tenslotte start mail-lb1 een script op mail-lb2 om die ook up-to-date te maken. Dit is dus een drietraps systeem.&lt;br /&gt;
&lt;br /&gt;
==Maandrapportage==&lt;br /&gt;
* &#039;&#039;&#039;gen_maand_rap.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Verzamelt alle data van Hobbynet abonnees en alle andere users in ldap. Optie &#039;&#039;&#039;-m&#039;&#039;&#039; mailt naar de accounthouder in het ldap record. Sinds medio 2020 krijgen hcc groepering webmasters deze mail niet meer, omdat ze nu allemaal gebruik maken van een Joomla template site, en daar geen &#039;eigenaar&#039; meer van zijn.&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;gen_pc30_maand_rap.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Mailt specifiek de gegevens van de PC30 agents naar de teamleider.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;run_maand_rapport.sh&#039;&#039;&#039;.&amp;lt;br&amp;gt;Cronjob die bovenstaande scripts 1x per maand draait.&lt;br /&gt;
&lt;br /&gt;
==Passwd, shadow en group==&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
* gen_group_admin.php&lt;br /&gt;
* gen_group_code2.php&lt;br /&gt;
* gen_group_hcc.php&lt;br /&gt;
* gen_passwd_admin.php&lt;br /&gt;
* gen_passwd_code2.php&lt;br /&gt;
* gen_passwd_hcc.php&lt;br /&gt;
* gen_shadow_admin.php&lt;br /&gt;
* gen_shadow_code2.php&lt;br /&gt;
* gen_shadow_hcc.php&lt;br /&gt;
* upd_admin_accounts.sh (is er niet)&lt;br /&gt;
* upd_code2_accounts.sh&lt;br /&gt;
* upd_hcc_accounts.sh&lt;br /&gt;
&lt;br /&gt;
Deze scripts genereren de passwd, shadow en group entries voor de betalende leden (_code2), de admins (_admin, de lagere goden, op het moment niet gebruikt; er is wel een .hobby met alleen Roel v.d. Bussche erin) en voor de HCC groeperingen (_hcc). De output wordt op de shared etc omgeving neergezet zodat elke (web)server ze kan toevoegen aan de passwd.temp/shadow.temp/group.temp files. Hiervoor wordt de lokale job upd_usr (of upd_hobby_only) gedraaid.&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==HCC Verenigingsbureau==&lt;br /&gt;
Het HCC Verenigingsbureau (&#039;VB&#039;) heeft beschikking over een ledenlijst en een kader/kernledenlijst die dagelijks up-to-date zijn. Deze lijsten zijn in CSV formaat zodat men zelf in de hand heeft hoe het bestand gebruikt wordt. Ze worden dagelijks op de Hobbynet sftp server (dedicated server t.b.v. gebuik vanaf het VB) geplaatst.&lt;br /&gt;
&lt;br /&gt;
Daarnaast krijgt VB iedere dag een actueel overzicht van de aantallen bezoekers (bezoekers statistiek).&lt;br /&gt;
  &lt;br /&gt;
* &#039;&#039;&#039;upload_kader_csv.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de cronjob &lt;br /&gt;
* &#039;&#039;&#039;gen_kader_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;het php script dat een bestand in CSV formaat maakt met de door VB gewenste velden.&lt;br /&gt;
* &#039;&#039;&#039;upload_leden_csv.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de cronjob&lt;br /&gt;
* &#039;&#039;&#039;gen_leden_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;het php script dat een bestand in CSV formaat maakt met de door VB gewenste velden.&lt;br /&gt;
* &#039;&#039;&#039;upload_bezoekersstatistiek.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de cronjob&lt;br /&gt;
* &#039;&#039;&#039;gen_bezoekersstatistiek_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;het php script dat een bestand in CSV formaat maakt met de bezoekersstatistieken.&lt;br /&gt;
&lt;br /&gt;
==CompUsers==&lt;br /&gt;
2020: VB heeft &#039;eigen&#039; afspraken met CU gemaakt, en stuurt ze op eigen houtje zomaar ledenbestanden toe. Onze scripts zijn daarmee zinloos geworden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;Met CompUsers zijn speciale afspraken gemaakt door Kantoor in januari 2014. Zij krijgen een sterk verkorte lijst van ALLE leden voor hun administratie. Het streven is dit zo spoedig mogelijk te vervangen door een ander mechanisme zoals de partner check.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;upload_compusers_csv.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de cronjob&lt;br /&gt;
* &#039;&#039;&#039;gen_compusers_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;het script dat een CSV maakt. Dit is een afgeslankt vorm van het &#039;&#039;&#039;gen_leden_csv.php&#039;&#039;&#039; script.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Koppeling met Tripolis=&lt;br /&gt;
Het oude &amp;quot;popbull&amp;quot; systeem dat bij HenZ draait is in de zomer van 2013 vervangen door Tripolis. Tripolis wordt al jaren gebruikt door kantoor voor het versturen van Digizine en de Nieuwsflash. Per groepering wordt een account aangemaakt met beperkte rechten waar mee de Correspondent van de groepering mailings kan versturen. Om Tripolis en ldap in sync te houden wordt er elke nacht data uitgewisseld. Ldap is leidend in deze maar als mensen zich uitschrijven (opt-out) via de knop onder aan de mailing, moet dat doorgegeven worden aan ldap. &lt;br /&gt;
&lt;br /&gt;
==Sync van Tripolis naar ldap==&lt;br /&gt;
* &#039;&#039;&#039;run_tripolis_import.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de eigenlijke cronjob&lt;br /&gt;
* &#039;&#039;&#039;import_tripolis_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;vertaalt de CSV van opt-outs naar het wissen van de individuele optins.&lt;br /&gt;
&lt;br /&gt;
Tripolis plaatst elke nacht om 00:01 een CSV bestand met de opt-outs per bulletin van de vorige dag. Dit gebeurt met datums. Als de datum van gisteren ingevuld staat is daar een optout geweest. Als er geen opt-outs zijn, bevat het veld slechts een lege string. Het  bestand wordt naar de ldap server gehaald waar een aantal versies bewaard worden. De bestanden wordt verwijderd van de sftp omgeving. Vervolgens worden het gedownloade bestand verwerkt om bij het lid de hccOptIn van dit bulletin te verwijderen.&lt;br /&gt;
&lt;br /&gt;
==Sync van ldap naar Tripolis==&lt;br /&gt;
* &#039;&#039;&#039;run_tripolis_export.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de eigenlijk cronjob&lt;br /&gt;
* &#039;&#039;&#039;gen_ldap_bul_export.php&#039;&#039;&#039;&amp;lt;br&amp;gt;maakt een volledige lijst aan van emailadres, lidnr en optins. Dit bestand gaat naar de sftp omgeving van Tripolis.&lt;br /&gt;
* &#039;&#039;&#039;gen_ldap_cor_export.php&#039;&#039;&#039;&amp;lt;br&amp;gt;maakt een lijst van alle correspondenten voor kantoor. Dit bestand gaat naar de sftp omgeving van Kantoor.&lt;br /&gt;
&lt;br /&gt;
Het export bestand wordt elke nacht (om 02:50) op de sftp omgeving voor Tripolis klaargezet. Tripolis haalt het om 05:00 op. Omdat de opt-outs van Tripolis om 02:15 verwerkt worden, is dit bestand dus al bijgewerkt voor wat betreft die opt-outs. Alle andere wijzigingen komen van de hcc.nl profielpagina&#039;s of mutaties door derden op ldap (mutaties door Hobbynet staff of PC30).&lt;br /&gt;
&lt;br /&gt;
==Rapportage==&lt;br /&gt;
&amp;lt;strike&amp;gt;Om ook de ledenadministratie in te lichten over leden die een optout op één of meer Tripolis mailings hebben gedaan, wordt na het verwerken van de optouts een mail gestuurd naar ledenadministratie@hcc.nl. Elke dag is er een nieuwe log file maar die wordt door dezelfde cronjob aan een archive geplakt. Zie mail_tripolis_reports.sh.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Egbert laat zich iedere nacht een rapportage mail sturen, zie mail_tripolis_export_report.sh.&lt;br /&gt;
&lt;br /&gt;
==Eénmalige jobs==&lt;br /&gt;
Er zijn een aantal php scripts voor éénmalig gebruik gemaakt. Deze worden niet in de cronjobs gebruikt maar waren slechts bedoeld om de lijsten opgeleverd door VB in LDAP te krijgen. Deze scripts zijn in de subdirectory &#039;&#039;&#039;popbull-specials&#039;&#039;&#039; geplaatst. &lt;br /&gt;
* &#039;&#039;&#039;import_digizine_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;de initiële Digizine lijst&lt;br /&gt;
* &#039;&#039;&#039;import_nieuwsflash_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;de initiële Nieuwsflash lijst&lt;br /&gt;
* &#039;&#039;&#039;import_popbull_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;de initiële lijst zoals die van HenZ (popbull provider) komt&lt;br /&gt;
&lt;br /&gt;
=ISIZ enquête=&lt;br /&gt;
Op verzoek geschreven scripts voor eenmalig gebruik. Terug te vinden in in de &#039;&#039;&#039;enquete-specials&#039;&#039;&#039; subdirectory. &lt;br /&gt;
* &#039;&#039;&#039;gen_enquete_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;enquête per email&lt;br /&gt;
* &#039;&#039;&#039;gen_enquete_csv_no_mail.php&#039;&#039;&#039;&amp;lt;br&amp;gt;enquête per post&lt;br /&gt;
&lt;br /&gt;
=Nameserver=&lt;br /&gt;
* gen_mx_hcc.php&lt;br /&gt;
* gen_mx_hobby.php&lt;br /&gt;
* upd_nameserver.sh&lt;br /&gt;
&lt;br /&gt;
=Firewall (op ldap servers)=&lt;br /&gt;
* gen_xml_fw_ip4.php&lt;br /&gt;
* gen_xml_fw_ip6.php&lt;br /&gt;
* sync_hobbynetfw.sh&lt;br /&gt;
* gen_fw.sh&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP_scripting&amp;diff=79586</id>
		<title>LDAP scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP_scripting&amp;diff=79586"/>
		<updated>2022-05-16T19:25:23Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* Mailman */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Inleiding=&lt;br /&gt;
Omdat de ldap server in sneltreinvaart de bron voor allerlei services aan het worden is, ontstaat er ook een migratie van (veelal perl) scripts op scripting-int naar php scripts op ldap-lb1-int. ldap-lb1-int is net als scripting-int een server met verhoogde security. Er mag dus wel &#039;&#039;&#039;van&#039;&#039;&#039; deze server &#039;&#039;&#039;naar&#039;&#039;&#039; andere servers geconnect worden maar niet andersom. Dit is vergelijkbaar met de situatie op scripting-int. Deze mogelijkheid is essentieel voor de goede werking van sommige scripts.&lt;br /&gt;
&lt;br /&gt;
==Type scripts==&lt;br /&gt;
Er zijn globaal een aantal soorten scripts te onderscheiden:&lt;br /&gt;
* De eigenlijke scripts die een bepaalde taak uitvoeren en vaak naar stdout schrijven (.php soms geen extensie).&lt;br /&gt;
* De cronjob scripts. Gewoonlijk herkenbaar aan de &#039;&#039;&#039;.sh&#039;&#039;&#039; extensie. Deze scripts bundelen vaak meerdere php scripts tot complete oplossingen.&lt;br /&gt;
* Scripts die voor initialiseren en backuppen van de ldap directory nodig zijn (&#039;&#039;&#039;init_ldap, dump_ldap en restore_ldap&#039;&#039;&#039;). Behalve dump_ldap mogen deze scripts nooit zomaar gedraaid worden; de ldap directory zou vernield worden.&lt;br /&gt;
&lt;br /&gt;
==Overzicht scripts==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0_DIT_IS_EEN_LOCAL_DIR            gen_passwd_code2.php              LDAP_include_telefoon.php         sync_hccforums.php&lt;br /&gt;
check_ms                          gen_passwd_hcc.php                LDAP_lid_weg.php                  sync_hobbynetbin_2.sh&lt;br /&gt;
cron_joomla.php                   gen_shadow_admin.php              LDAP_maak_hccOptOutTokens.php     sync_hobbynetdata_2.sh&lt;br /&gt;
cron_joomla.sh                    gen_shadow_code2.php              _LDAP_schoon_4045431_op.php       sync_hobbynetetc_2.sh&lt;br /&gt;
database-onderhoud.sh             gen_shadow_hcc.php                LDAP_schoon_database.php          sync_hobbynetfw_2.sh&lt;br /&gt;
dump_ldap.sh                      gen_xml_fw_ip4.php                LDAP_schoon_mysql_op.php          sync_hobbynetlib_2.sh&lt;br /&gt;
enquete-specials                  gen_xml_fw_ip6.php                LDAP_schoon_testleden_op.php      tel_unieke_bezoekers-volgens-LDAP_en_SQL.php&lt;br /&gt;
forum-specials                    get_all_mailbox_sizes.sh          LDAP_vul_leden.php                tel_unieke_bezoekers-volgens-LDAP.php&lt;br /&gt;
gen_bezoekersstatistiek_xml.php   get_ip4                           LDAP_vul_profielbekend.php        tel_unieke_bezoekers-volgens-LDAP.sh&lt;br /&gt;
gen_compusers_csv.php             get_ip6                           mailman-specials                  test.php&lt;br /&gt;
gen_dmarc_hcc.php                 getip-http                        mail_tripolis_export_report.sh    tripolis_import&lt;br /&gt;
gen_fw.sh                         hccforums_db.php                  optouts                           unblock_joomla.php&lt;br /&gt;
gen_group_admin.php               hcc.nl.mx.fallback                other-specials                    unblock_joomla.sh&lt;br /&gt;
gen_group_code2.php               huisgenoot_lidmaatschappen.php    popbull-specials                  update_domeinen.php&lt;br /&gt;
gen_group_hcc.php                 huisgenoot_lidmaatschappen.sh     postcode-specials                 update_domeinen.sh&lt;br /&gt;
gen_hobbyabon.php                 init_ldap_mdb.sh                  purge_hccforums.php               update_hccforums.sh&lt;br /&gt;
gen_iplist_partners.php           init_ldap.sh                      renameusers_joomla.php            update_joomla.php&lt;br /&gt;
gen_iplist_partners.sh            kader_maak_html.php               renameusers_joomla.sh             update_joomla.sh&lt;br /&gt;
gen_kader_csv.php                 kader_maak_lijsten.sh             restore_ldap.sh                   upd_code2_accounts.sh&lt;br /&gt;
gen_kaderfunc.php                 kader_maak_txt.php                rss_joomla.php                    upd_hcc_accounts.sh&lt;br /&gt;
gen_kaderlist.php                 kader_maak_xb_csv.php             rss_joomla.sh                     upd_ldap_dev.sh&lt;br /&gt;
gen_ldap_bul_export.php           LDAP_bepaal_startconditie.php     ruim_lock_files_op.sh             upd_ldap-test-dev.expect&lt;br /&gt;
gen_ldap_cor_export.php           ldap.conf.ldif                    ruim_pdf_facturen_op.sh           upd_ldap_test.sh&lt;br /&gt;
gen_ldap_hoofdbestuur_export.php  LDAP_controleer_groeperingen.php  ruimsmsverstuurdsmsop.sql         upd_mailserver_report.sh&lt;br /&gt;
gen_ldap_kader_export.php         LDAP_controleer_kader.php         run_maand_rapport.sh              upd_mailserver.sh&lt;br /&gt;
gen_ldap_ledenraad_export.php     LDAP_controleer_users.php         run_tripolis_export.sh            upd_nameserver.sh&lt;br /&gt;
gen_ldap_niet_leden_export.php    LDAP_copyright.txt                schoon_alles_op_include.php       upd_srv&lt;br /&gt;
gen_leden_csv.php                 LDAP_cronjob.sh                   schoon_alles_op.sh                upg_vmware_tools&lt;br /&gt;
gen_leden_dubbel.log              LDAP_forceer_CSV.sh               schoon_breg_token_tabel_op.php    upload_bezoekersstatistiek.sh&lt;br /&gt;
gen_leden_dubbel.php              LDAP_ftps_lget_CRM_leden.sh       schoon_forms_database_op.php      upload_compusers_csv.sh&lt;br /&gt;
gen_maand_rap.php                 LDAP_herstel_profielbekend.php    schoon_JoomlaTokens_tabel_op.php  upload_kader_csv.sh&lt;br /&gt;
gen_mail_exclude_txt.php          LDAP_include_henz.php             schoon_LDAP_en_hcc_Bezoek_op.php  upload_leden_csv.sh&lt;br /&gt;
gen_mx_hcc-fallback.php           LDAP_include_ISO.php              set_menu_joomla.sh                vergelijk_scripts.readme&lt;br /&gt;
gen_mx_hcc.php                    LDAP_include_Joomla_db.php        set_menu.php                      verrijk_factuur.php&lt;br /&gt;
gen_mx_hobby.php                  LDAP_include_mail.php             statistiek_xml.php                verrijk_factuur.sh&lt;br /&gt;
gen_passwd_admin.php              LDAP_include.php                  statistiek_xml.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Crontab==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##############################################################################################################&lt;br /&gt;
# Wijzigingen graag ook aanbrengen op deze wiki pagina: https://wiki.hobby.nl/index.php?title=LDAP_scripting #&lt;br /&gt;
##############################################################################################################&lt;br /&gt;
&lt;br /&gt;
# Edit this file to introduce tasks to be run by cron.&lt;br /&gt;
#&lt;br /&gt;
# Each task to run has to be defined through a single line&lt;br /&gt;
# indicating with different fields when the task will be run&lt;br /&gt;
# and what command to run for the task&lt;br /&gt;
#&lt;br /&gt;
# To define the time you can provide concrete values for&lt;br /&gt;
# minute (m), hour (h), day of month (dom), month (mon),&lt;br /&gt;
# and day of week (dow) or use &#039;*&#039; in these fields (for &#039;any&#039;).#&lt;br /&gt;
# Notice that tasks will be started based on the cron&#039;s system&lt;br /&gt;
# daemon&#039;s notion of time and timezones.&lt;br /&gt;
#&lt;br /&gt;
# Output of the crontab jobs (including errors) is sent through&lt;br /&gt;
# email to the user the crontab file belongs to (unless redirected).&lt;br /&gt;
#&lt;br /&gt;
# For example, you can run a backup of all your user accounts&lt;br /&gt;
# at 5 a.m every week with:&lt;br /&gt;
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/&lt;br /&gt;
#&lt;br /&gt;
# For more information see the manual pages of crontab(5) and cron(8)&lt;br /&gt;
#&lt;br /&gt;
# m h  dom mon dow   command&lt;br /&gt;
&lt;br /&gt;
# Update rssfeeds joomla&lt;br /&gt;
1 */1 * * * /usr/local/hobbynet/bin/rss_joomla.sh &amp;gt;&amp;gt;/var/log/rss_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Synchroniseer firewall regels van ldap-lb1 naar ldap-lb2&lt;br /&gt;
55  5 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh&lt;br /&gt;
55 11 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh&lt;br /&gt;
55 17 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh&lt;br /&gt;
55 23 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh&lt;br /&gt;
&lt;br /&gt;
# Herstart Firewall&lt;br /&gt;
 0  6 * * * /etc/init.d/hobby-firewall restart &amp;gt;/dev/null&lt;br /&gt;
 0 12 * * * /etc/init.d/hobby-firewall restart &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /etc/init.d/hobby-firewall restart &amp;gt;/dev/null&lt;br /&gt;
 0  0 * * * /etc/init.d/hobby-firewall restart &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Check op updates en download deze alvast ivm Nagios detectie&lt;br /&gt;
 0  6 * * * apt-get clean -y &amp;gt;/dev/null ; apt-get update &amp;gt;/dev/null ;apt-get upgrade -d -y &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * apt-get clean -y &amp;gt;/dev/null ; apt-get update &amp;gt;/dev/null ;apt-get upgrade -d -y &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Maak een beveiligde backup&lt;br /&gt;
45 23 * * * /usr/local/hobbynet/local/backup-encrypted.bash &amp;gt;&amp;gt;/var/log/backup_encrypted.log&lt;br /&gt;
&lt;br /&gt;
# Sync bin dir naar ldap-lb2&lt;br /&gt;
50 23 * * * /usr/local/hobbynet/bin/sync_hobbynetbin_2.sh&lt;br /&gt;
# Sync etc dir naar ldap-lb2&lt;br /&gt;
51 23 * * * /usr/local/hobbynet/bin/sync_hobbynetetc_2.sh&lt;br /&gt;
# Sync lib dir naar ldap-lb2&lt;br /&gt;
52 23 * * * /usr/local/hobbynet/bin/sync_hobbynetlib_2.sh&lt;br /&gt;
&lt;br /&gt;
# Voer de cron_joomla.sh cronjob uit voor de bit backup&lt;br /&gt;
01  0 * * * /usr/local/hobbynet/bin/cron_joomla.sh &amp;gt;&amp;gt;/var/log/cron_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Voer de cron_joomla.sh cronjob uit voor &#039;update_joomla.sh&#039;&lt;br /&gt;
15  1 * * * /usr/local/hobbynet/bin/cron_joomla.sh &amp;gt;&amp;gt;/var/log/cron_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Forceer dat er een verse set CSV bestanden klaar wordt gezet&lt;br /&gt;
05  3 * * * /usr/local/hobbynet/bin/LDAP_forceer_CSV.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Doe alle processing CRM-&amp;gt;LDAP&lt;br /&gt;
10  3 * * * /usr/local/hobbynet/bin/LDAP_cronjob.sh &amp;gt;&amp;gt;/var/log/LDAP_cronjob.log&lt;br /&gt;
&lt;br /&gt;
# Maak /usr/local/hobbynet/apache2conf/iplists/iplist-partners-24 aan&lt;br /&gt;
 7  3 * * * /usr/local/hobbynet/bin/gen_iplist_partners.sh&lt;br /&gt;
&lt;br /&gt;
# Ververs postfixadmin op mail-lb1 en mail-lb2. Mail report&lt;br /&gt;
26  3 * * * /usr/local/hobbynet/bin/upd_mailserver.sh &amp;gt;/var/log/upd_mailserver.log&lt;br /&gt;
30  3 * * * /usr/local/hobbynet/bin/upd_mailserver_report.sh&lt;br /&gt;
&lt;br /&gt;
# Haal de opt-outs op van Tripolis&lt;br /&gt;
### disabled 20220516&lt;br /&gt;
###15  3 * * * /usr/local/hobbynet/bin/run_tripolis_import.sh &amp;gt;/var/log/run_tripolis_import.log&lt;br /&gt;
&lt;br /&gt;
# Haal de handmatige Tripolis opt-outs op, en mail die naar Egbert&lt;br /&gt;
### disabled 20220516&lt;br /&gt;
###31  3 * * * /usr/local/hobbynet/bin/mail_tripolis_import_report.sh&lt;br /&gt;
&lt;br /&gt;
# Maak en plaats de ledenlijst voor Kantoor&lt;br /&gt;
35  3 * * * /usr/local/hobbynet/bin/upload_leden_csv.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Maak en plaats de kaderlijst voor Kantoor&lt;br /&gt;
40  3 * * * /usr/local/hobbynet/bin/upload_kader_csv.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Deblokkeer actieve joomla gebruikers&lt;br /&gt;
45  3 * * * /usr/local/hobbynet/bin/unblock_joomla.sh &amp;gt;&amp;gt;/var/log/unblock_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Haal de aantallen bezoekers, en zet die over naar de beschermde kantoor omgeving&lt;br /&gt;
47  3 * * * /usr/local/hobbynet/bin/upload_bezoekersstatistiek.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Maak overzicht van alle opt-ins voor Tripolis&lt;br /&gt;
50  3 * * * /usr/local/hobbynet/bin/run_tripolis_export.sh &amp;gt;/var/log/run_tripolis_export.log&lt;br /&gt;
&lt;br /&gt;
# Hernoem in Joomla de users die zijn hernoemd in ldap&lt;br /&gt;
50 3 * * * /usr/local/hobbynet/bin/renameusers_joomla.sh &amp;gt;&amp;gt;/var/log/renameusers_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Haal het resultaat van de Tripolis export op, en mail die naar Egbert&lt;br /&gt;
52  3 * * * /usr/local/hobbynet/bin/mail_tripolis_export_report.sh&lt;br /&gt;
&lt;br /&gt;
# Maak en plaats statistiek overzicht van alle HCC groeperingen&lt;br /&gt;
55  3 * * * /usr/local/hobbynet/bin/statistiek_xml.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Start joomla onderhoud&lt;br /&gt;
0  4 * * * /usr/local/hobbynet/bin/update_joomla.sh &amp;gt;&amp;gt;/var/log/update_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Doe de Hobbynet maand rapportage&lt;br /&gt;
 0  4 1 * * /usr/local/hobbynet/bin/run_maand_rapport.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Bepaal het aantal unieke (en totaal aantal) bezoekers van de laatste 12 maanden, mail dat aan VB&lt;br /&gt;
 5  4 1 * * /usr/local/hobbynet/bin/tel_unieke_bezoekers-volgens-LDAP.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Maak een lijst van onjuiste huisgenoot-lidmaatschappen&lt;br /&gt;
10  4 1 * * /usr/local/hobbynet/bin/huisgenoot_lidmaatschappen.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Schoon mySQL en LDAP op&lt;br /&gt;
 5  4 2 * * /usr/local/hobbynet/bin/schoon_alles_op.sh&lt;br /&gt;
&lt;br /&gt;
# Verrijk een naar SFTP geupload factuur bestand met factuurtokens&lt;br /&gt;
15  * * * * /bin/bash /usr/local/hobbynet/bin/verrijk_factuur.sh &amp;gt;&amp;gt;/var/log/verrijk_factuur.log&lt;br /&gt;
&lt;br /&gt;
# ruim sms database op&lt;br /&gt;
42 12 * * * cat /usr/local/hobbynet/bin/ruimsmsverstuurdsmsop.sql |mysql &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# corigeer menu elke 4 uur&lt;br /&gt;
#42 */4 * * * /usr/local/hobbynet/bin/set_menu_joomla.sh &amp;gt;&amp;gt;/var/log/set_menu_joomla.log&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Toepassingen=&lt;br /&gt;
Soms zijn er een aantal scripts die bij elkaar horen en er voor een bepaalde toepassing zijn, zoals om de mailserver te updaten, dagelijkse bestanden voor Kantoor te maken, dagelijkse bestanden voor het Tripolis mail systeem en niet geheel onbelangrijk, scripts die ldap dagelijks bijwerken met de &#039;&#039;&#039;master&#039;&#039;&#039; data die in het HCC CRM wordt bijgehouden (als er een mutatie gemist is, b.v. omdat een JSON aanroep vanuit het CRM naar de Hobbynet XML-RPC server overdag mislukt is).&lt;br /&gt;
&lt;br /&gt;
==LDAP==&lt;br /&gt;
Drie scripts zijn essentieel om de hele LDAP database te dumpen, te initialiseren en weer te vullen. Dit proces is nodig als een schema change moet worden aangebracht in de LDAP configuratie. Zie ook de pagina over de LDAP server.&lt;br /&gt;
* &#039;&#039;&#039;dump_ldap.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;Dumpt alle ou&#039;s in afzonderlijke ldif bestanden in de data directory en maakt er ook een tarball van.&lt;br /&gt;
* &#039;&#039;&#039;init_ldap.sh &amp;lt;beheer-password&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Bouwt de hele LDAP structuur van de grond af op.&lt;br /&gt;
* &#039;&#039;&#039;restore_ldap.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;Vult de hele LDAP structuur met file uit de dump_ldap stap.&lt;br /&gt;
&lt;br /&gt;
==Statistieken==&lt;br /&gt;
Iedere nacht worden er door het script &#039;&#039;&#039;statistiek_xml.sh&#039;&#039;&#039; van alle groeperingen en van de complete HCC leden database statistieken in XML formaat gemaakt. Daarna worden deze statistieken met het script &#039;&#039;&#039;statistiek_xml.sh&#039;&#039;&#039; naar de kadernet server overgezet.&lt;br /&gt;
&lt;br /&gt;
==Mailserver==&lt;br /&gt;
&amp;lt;strike&amp;gt;De mailserver kreeg tot voor kort 2 bestanden van scripting-int, husers en b3a.txt. De inhoud van beide bestanden kan ook uit ldap gehaald worden. Hiervoor zijn de volgende scripts in gebruik:&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;gen_hobbyabon.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Dit script maakt een equivalent aan van husers en bevat alleen de betalende Hobbynet abonnees (enige tientallen regels).&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;gen_kaderfunc.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Dit script is de vervanger van b3a.txt, de lijst van alle kaderfuncties (ongeveer 1200).&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;gen_kaderlist.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Een hulp bestand met alleen de 7 cijferige lidnummers van alle kaderleden (ruim 700). Deze lijst wordt op de mailserver gebruikt om incidenteel kadermailboxen op te ruimen.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;gen_mail_exclude_txt.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Nog een hulp bestand waar in de interessegroepen staan die geen functionele mailadressen nodig hebben. Dit zijn vooral de ig&#039;s die geen echte ig zijn zoals de HCC zelf en de RvA en RvT maar wel als zodanig in ldap staan. Ook de cursus presentatoren vallen hieronder.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;upd_mailserver_report.sh&#039;&#039;&#039;.&amp;lt;br&amp;gt;Dit script mailt de dagelijkse logs ter controle of alles goed is gegaan.&lt;br /&gt;
* &#039;&#039;&#039;upd_mailserver.sh&#039;&#039;&#039;.&amp;lt;br&amp;gt;Bundelt de php scripts tot een cronjob die elke nacht loopt. Dit script draait de 4 php scripts, doet wat na bewerking, kopieert de output naar mail-lb1-int en start &#039;&#039;&#039;upd_mailserver_all&#039;&#039;&#039; op mail-lb1-int. Tenslotte worden nog de relay-domains opgehaald van mail-lb1-int (dat bestand is pas up-to-date nadat upd_mailserver_all op mail-lb1-int heeft gelopen).Hierna is mail-lb2 nog niet geheel up-to-date. Het script dat door ldap-lb1 is gestart, doet aan het eind een rsync van de datadir op mail-lb1 naar mail-lb2. Tenslotte start mail-lb1 een script op mail-lb2 om die ook up-to-date te maken. Dit is dus een drietraps systeem.&lt;br /&gt;
&lt;br /&gt;
==Maandrapportage==&lt;br /&gt;
* &#039;&#039;&#039;gen_maand_rap.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Verzamelt alle data van Hobbynet abonnees en alle andere users in ldap. Optie &#039;&#039;&#039;-m&#039;&#039;&#039; mailt naar de accounthouder in het ldap record. Sinds medio 2020 krijgen hcc groepering webmasters deze mail niet meer, omdat ze nu allemaal gebruik maken van een Joomla template site, en daar geen &#039;eigenaar&#039; meer van zijn.&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;gen_pc30_maand_rap.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Mailt specifiek de gegevens van de PC30 agents naar de teamleider.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;run_maand_rapport.sh&#039;&#039;&#039;.&amp;lt;br&amp;gt;Cronjob die bovenstaande scripts 1x per maand draait.&lt;br /&gt;
&lt;br /&gt;
==Passwd, shadow en group==&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
* gen_group_admin.php&lt;br /&gt;
* gen_group_code2.php&lt;br /&gt;
* gen_group_hcc.php&lt;br /&gt;
* gen_passwd_admin.php&lt;br /&gt;
* gen_passwd_code2.php&lt;br /&gt;
* gen_passwd_hcc.php&lt;br /&gt;
* gen_shadow_admin.php&lt;br /&gt;
* gen_shadow_code2.php&lt;br /&gt;
* gen_shadow_hcc.php&lt;br /&gt;
* upd_admin_accounts.sh (is er niet)&lt;br /&gt;
* upd_code2_accounts.sh&lt;br /&gt;
* upd_hcc_accounts.sh&lt;br /&gt;
&lt;br /&gt;
Deze scripts genereren de passwd, shadow en group entries voor de betalende leden (_code2), de admins (_admin, de lagere goden, op het moment niet gebruikt; er is wel een .hobby met alleen Roel v.d. Bussche erin) en voor de HCC groeperingen (_hcc). De output wordt op de shared etc omgeving neergezet zodat elke (web)server ze kan toevoegen aan de passwd.temp/shadow.temp/group.temp files. Hiervoor wordt de lokale job upd_usr (of upd_hobby_only) gedraaid.&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==HCC Verenigingsbureau==&lt;br /&gt;
Het HCC Verenigingsbureau (&#039;VB&#039;) heeft beschikking over een ledenlijst en een kader/kernledenlijst die dagelijks up-to-date zijn. Deze lijsten zijn in CSV formaat zodat men zelf in de hand heeft hoe het bestand gebruikt wordt. Ze worden dagelijks op de Hobbynet sftp server (dedicated server t.b.v. gebuik vanaf het VB) geplaatst.&lt;br /&gt;
&lt;br /&gt;
Daarnaast krijgt VB iedere dag een actueel overzicht van de aantallen bezoekers (bezoekers statistiek).&lt;br /&gt;
  &lt;br /&gt;
* &#039;&#039;&#039;upload_kader_csv.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de cronjob &lt;br /&gt;
* &#039;&#039;&#039;gen_kader_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;het php script dat een bestand in CSV formaat maakt met de door VB gewenste velden.&lt;br /&gt;
* &#039;&#039;&#039;upload_leden_csv.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de cronjob&lt;br /&gt;
* &#039;&#039;&#039;gen_leden_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;het php script dat een bestand in CSV formaat maakt met de door VB gewenste velden.&lt;br /&gt;
* &#039;&#039;&#039;upload_bezoekersstatistiek.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de cronjob&lt;br /&gt;
* &#039;&#039;&#039;gen_bezoekersstatistiek_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;het php script dat een bestand in CSV formaat maakt met de bezoekersstatistieken.&lt;br /&gt;
&lt;br /&gt;
==CompUsers==&lt;br /&gt;
2020: VB heeft &#039;eigen&#039; afspraken met CU gemaakt, en stuurt ze op eigen houtje zomaar ledenbestanden toe. Onze scripts zijn daarmee zinloos geworden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;Met CompUsers zijn speciale afspraken gemaakt door Kantoor in januari 2014. Zij krijgen een sterk verkorte lijst van ALLE leden voor hun administratie. Het streven is dit zo spoedig mogelijk te vervangen door een ander mechanisme zoals de partner check.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;upload_compusers_csv.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de cronjob&lt;br /&gt;
* &#039;&#039;&#039;gen_compusers_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;het script dat een CSV maakt. Dit is een afgeslankt vorm van het &#039;&#039;&#039;gen_leden_csv.php&#039;&#039;&#039; script.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Koppeling met Tripolis=&lt;br /&gt;
Het oude &amp;quot;popbull&amp;quot; systeem dat bij HenZ draait is in de zomer van 2013 vervangen door Tripolis. Tripolis wordt al jaren gebruikt door kantoor voor het versturen van Digizine en de Nieuwsflash. Per groepering wordt een account aangemaakt met beperkte rechten waar mee de Correspondent van de groepering mailings kan versturen. Om Tripolis en ldap in sync te houden wordt er elke nacht data uitgewisseld. Ldap is leidend in deze maar als mensen zich uitschrijven (opt-out) via de knop onder aan de mailing, moet dat doorgegeven worden aan ldap. &lt;br /&gt;
&lt;br /&gt;
==Sync van Tripolis naar ldap==&lt;br /&gt;
* &#039;&#039;&#039;run_tripolis_import.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de eigenlijke cronjob&lt;br /&gt;
* &#039;&#039;&#039;import_tripolis_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;vertaalt de CSV van opt-outs naar het wissen van de individuele optins.&lt;br /&gt;
&lt;br /&gt;
Tripolis plaatst elke nacht om 00:01 een CSV bestand met de opt-outs per bulletin van de vorige dag. Dit gebeurt met datums. Als de datum van gisteren ingevuld staat is daar een optout geweest. Als er geen opt-outs zijn, bevat het veld slechts een lege string. Het  bestand wordt naar de ldap server gehaald waar een aantal versies bewaard worden. De bestanden wordt verwijderd van de sftp omgeving. Vervolgens worden het gedownloade bestand verwerkt om bij het lid de hccOptIn van dit bulletin te verwijderen.&lt;br /&gt;
&lt;br /&gt;
==Sync van ldap naar Tripolis==&lt;br /&gt;
* &#039;&#039;&#039;run_tripolis_export.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de eigenlijk cronjob&lt;br /&gt;
* &#039;&#039;&#039;gen_ldap_bul_export.php&#039;&#039;&#039;&amp;lt;br&amp;gt;maakt een volledige lijst aan van emailadres, lidnr en optins. Dit bestand gaat naar de sftp omgeving van Tripolis.&lt;br /&gt;
* &#039;&#039;&#039;gen_ldap_cor_export.php&#039;&#039;&#039;&amp;lt;br&amp;gt;maakt een lijst van alle correspondenten voor kantoor. Dit bestand gaat naar de sftp omgeving van Kantoor.&lt;br /&gt;
&lt;br /&gt;
Het export bestand wordt elke nacht (om 02:50) op de sftp omgeving voor Tripolis klaargezet. Tripolis haalt het om 05:00 op. Omdat de opt-outs van Tripolis om 02:15 verwerkt worden, is dit bestand dus al bijgewerkt voor wat betreft die opt-outs. Alle andere wijzigingen komen van de hcc.nl profielpagina&#039;s of mutaties door derden op ldap (mutaties door Hobbynet staff of PC30).&lt;br /&gt;
&lt;br /&gt;
==Rapportage==&lt;br /&gt;
&amp;lt;strike&amp;gt;Om ook de ledenadministratie in te lichten over leden die een optout op één of meer Tripolis mailings hebben gedaan, wordt na het verwerken van de optouts een mail gestuurd naar ledenadministratie@hcc.nl. Elke dag is er een nieuwe log file maar die wordt door dezelfde cronjob aan een archive geplakt. Zie mail_tripolis_reports.sh.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Egbert laat zich iedere nacht een rapportage mail sturen, zie mail_tripolis_export_report.sh.&lt;br /&gt;
&lt;br /&gt;
==Eénmalige jobs==&lt;br /&gt;
Er zijn een aantal php scripts voor éénmalig gebruik gemaakt. Deze worden niet in de cronjobs gebruikt maar waren slechts bedoeld om de lijsten opgeleverd door VB in LDAP te krijgen. Deze scripts zijn in de subdirectory &#039;&#039;&#039;popbull-specials&#039;&#039;&#039; geplaatst. &lt;br /&gt;
* &#039;&#039;&#039;import_digizine_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;de initiële Digizine lijst&lt;br /&gt;
* &#039;&#039;&#039;import_nieuwsflash_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;de initiële Nieuwsflash lijst&lt;br /&gt;
* &#039;&#039;&#039;import_popbull_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;de initiële lijst zoals die van HenZ (popbull provider) komt&lt;br /&gt;
&lt;br /&gt;
=ISIZ enquête=&lt;br /&gt;
Op verzoek geschreven scripts voor eenmalig gebruik. Terug te vinden in in de &#039;&#039;&#039;enquete-specials&#039;&#039;&#039; subdirectory. &lt;br /&gt;
* &#039;&#039;&#039;gen_enquete_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;enquête per email&lt;br /&gt;
* &#039;&#039;&#039;gen_enquete_csv_no_mail.php&#039;&#039;&#039;&amp;lt;br&amp;gt;enquête per post&lt;br /&gt;
&lt;br /&gt;
=Nameserver=&lt;br /&gt;
* gen_mx_hcc.php&lt;br /&gt;
* gen_mx_hobby.php&lt;br /&gt;
* upd_nameserver.sh&lt;br /&gt;
&lt;br /&gt;
=Firewall (op ldap servers)=&lt;br /&gt;
* gen_xml_fw_ip4.php&lt;br /&gt;
* gen_xml_fw_ip6.php&lt;br /&gt;
* sync_hobbynetfw.sh&lt;br /&gt;
* gen_fw.sh&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP_scripting&amp;diff=79584</id>
		<title>LDAP scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP_scripting&amp;diff=79584"/>
		<updated>2022-05-16T19:23:52Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* Crontab */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Inleiding=&lt;br /&gt;
Omdat de ldap server in sneltreinvaart de bron voor allerlei services aan het worden is, ontstaat er ook een migratie van (veelal perl) scripts op scripting-int naar php scripts op ldap-lb1-int. ldap-lb1-int is net als scripting-int een server met verhoogde security. Er mag dus wel &#039;&#039;&#039;van&#039;&#039;&#039; deze server &#039;&#039;&#039;naar&#039;&#039;&#039; andere servers geconnect worden maar niet andersom. Dit is vergelijkbaar met de situatie op scripting-int. Deze mogelijkheid is essentieel voor de goede werking van sommige scripts.&lt;br /&gt;
&lt;br /&gt;
==Type scripts==&lt;br /&gt;
Er zijn globaal een aantal soorten scripts te onderscheiden:&lt;br /&gt;
* De eigenlijke scripts die een bepaalde taak uitvoeren en vaak naar stdout schrijven (.php soms geen extensie).&lt;br /&gt;
* De cronjob scripts. Gewoonlijk herkenbaar aan de &#039;&#039;&#039;.sh&#039;&#039;&#039; extensie. Deze scripts bundelen vaak meerdere php scripts tot complete oplossingen.&lt;br /&gt;
* Scripts die voor initialiseren en backuppen van de ldap directory nodig zijn (&#039;&#039;&#039;init_ldap, dump_ldap en restore_ldap&#039;&#039;&#039;). Behalve dump_ldap mogen deze scripts nooit zomaar gedraaid worden; de ldap directory zou vernield worden.&lt;br /&gt;
&lt;br /&gt;
==Overzicht scripts==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0_DIT_IS_EEN_LOCAL_DIR            gen_passwd_code2.php              LDAP_include_telefoon.php         sync_hccforums.php&lt;br /&gt;
check_ms                          gen_passwd_hcc.php                LDAP_lid_weg.php                  sync_hobbynetbin_2.sh&lt;br /&gt;
cron_joomla.php                   gen_shadow_admin.php              LDAP_maak_hccOptOutTokens.php     sync_hobbynetdata_2.sh&lt;br /&gt;
cron_joomla.sh                    gen_shadow_code2.php              _LDAP_schoon_4045431_op.php       sync_hobbynetetc_2.sh&lt;br /&gt;
database-onderhoud.sh             gen_shadow_hcc.php                LDAP_schoon_database.php          sync_hobbynetfw_2.sh&lt;br /&gt;
dump_ldap.sh                      gen_xml_fw_ip4.php                LDAP_schoon_mysql_op.php          sync_hobbynetlib_2.sh&lt;br /&gt;
enquete-specials                  gen_xml_fw_ip6.php                LDAP_schoon_testleden_op.php      tel_unieke_bezoekers-volgens-LDAP_en_SQL.php&lt;br /&gt;
forum-specials                    get_all_mailbox_sizes.sh          LDAP_vul_leden.php                tel_unieke_bezoekers-volgens-LDAP.php&lt;br /&gt;
gen_bezoekersstatistiek_xml.php   get_ip4                           LDAP_vul_profielbekend.php        tel_unieke_bezoekers-volgens-LDAP.sh&lt;br /&gt;
gen_compusers_csv.php             get_ip6                           mailman-specials                  test.php&lt;br /&gt;
gen_dmarc_hcc.php                 getip-http                        mail_tripolis_export_report.sh    tripolis_import&lt;br /&gt;
gen_fw.sh                         hccforums_db.php                  optouts                           unblock_joomla.php&lt;br /&gt;
gen_group_admin.php               hcc.nl.mx.fallback                other-specials                    unblock_joomla.sh&lt;br /&gt;
gen_group_code2.php               huisgenoot_lidmaatschappen.php    popbull-specials                  update_domeinen.php&lt;br /&gt;
gen_group_hcc.php                 huisgenoot_lidmaatschappen.sh     postcode-specials                 update_domeinen.sh&lt;br /&gt;
gen_hobbyabon.php                 init_ldap_mdb.sh                  purge_hccforums.php               update_hccforums.sh&lt;br /&gt;
gen_iplist_partners.php           init_ldap.sh                      renameusers_joomla.php            update_joomla.php&lt;br /&gt;
gen_iplist_partners.sh            kader_maak_html.php               renameusers_joomla.sh             update_joomla.sh&lt;br /&gt;
gen_kader_csv.php                 kader_maak_lijsten.sh             restore_ldap.sh                   upd_code2_accounts.sh&lt;br /&gt;
gen_kaderfunc.php                 kader_maak_txt.php                rss_joomla.php                    upd_hcc_accounts.sh&lt;br /&gt;
gen_kaderlist.php                 kader_maak_xb_csv.php             rss_joomla.sh                     upd_ldap_dev.sh&lt;br /&gt;
gen_ldap_bul_export.php           LDAP_bepaal_startconditie.php     ruim_lock_files_op.sh             upd_ldap-test-dev.expect&lt;br /&gt;
gen_ldap_cor_export.php           ldap.conf.ldif                    ruim_pdf_facturen_op.sh           upd_ldap_test.sh&lt;br /&gt;
gen_ldap_hoofdbestuur_export.php  LDAP_controleer_groeperingen.php  ruimsmsverstuurdsmsop.sql         upd_mailserver_report.sh&lt;br /&gt;
gen_ldap_kader_export.php         LDAP_controleer_kader.php         run_maand_rapport.sh              upd_mailserver.sh&lt;br /&gt;
gen_ldap_ledenraad_export.php     LDAP_controleer_users.php         run_tripolis_export.sh            upd_nameserver.sh&lt;br /&gt;
gen_ldap_niet_leden_export.php    LDAP_copyright.txt                schoon_alles_op_include.php       upd_srv&lt;br /&gt;
gen_leden_csv.php                 LDAP_cronjob.sh                   schoon_alles_op.sh                upg_vmware_tools&lt;br /&gt;
gen_leden_dubbel.log              LDAP_forceer_CSV.sh               schoon_breg_token_tabel_op.php    upload_bezoekersstatistiek.sh&lt;br /&gt;
gen_leden_dubbel.php              LDAP_ftps_lget_CRM_leden.sh       schoon_forms_database_op.php      upload_compusers_csv.sh&lt;br /&gt;
gen_maand_rap.php                 LDAP_herstel_profielbekend.php    schoon_JoomlaTokens_tabel_op.php  upload_kader_csv.sh&lt;br /&gt;
gen_mail_exclude_txt.php          LDAP_include_henz.php             schoon_LDAP_en_hcc_Bezoek_op.php  upload_leden_csv.sh&lt;br /&gt;
gen_mx_hcc-fallback.php           LDAP_include_ISO.php              set_menu_joomla.sh                vergelijk_scripts.readme&lt;br /&gt;
gen_mx_hcc.php                    LDAP_include_Joomla_db.php        set_menu.php                      verrijk_factuur.php&lt;br /&gt;
gen_mx_hobby.php                  LDAP_include_mail.php             statistiek_xml.php                verrijk_factuur.sh&lt;br /&gt;
gen_passwd_admin.php              LDAP_include.php                  statistiek_xml.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Crontab==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##############################################################################################################&lt;br /&gt;
# Wijzigingen graag ook aanbrengen op deze wiki pagina: https://wiki.hobby.nl/index.php?title=LDAP_scripting #&lt;br /&gt;
##############################################################################################################&lt;br /&gt;
&lt;br /&gt;
# Edit this file to introduce tasks to be run by cron.&lt;br /&gt;
#&lt;br /&gt;
# Each task to run has to be defined through a single line&lt;br /&gt;
# indicating with different fields when the task will be run&lt;br /&gt;
# and what command to run for the task&lt;br /&gt;
#&lt;br /&gt;
# To define the time you can provide concrete values for&lt;br /&gt;
# minute (m), hour (h), day of month (dom), month (mon),&lt;br /&gt;
# and day of week (dow) or use &#039;*&#039; in these fields (for &#039;any&#039;).#&lt;br /&gt;
# Notice that tasks will be started based on the cron&#039;s system&lt;br /&gt;
# daemon&#039;s notion of time and timezones.&lt;br /&gt;
#&lt;br /&gt;
# Output of the crontab jobs (including errors) is sent through&lt;br /&gt;
# email to the user the crontab file belongs to (unless redirected).&lt;br /&gt;
#&lt;br /&gt;
# For example, you can run a backup of all your user accounts&lt;br /&gt;
# at 5 a.m every week with:&lt;br /&gt;
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/&lt;br /&gt;
#&lt;br /&gt;
# For more information see the manual pages of crontab(5) and cron(8)&lt;br /&gt;
#&lt;br /&gt;
# m h  dom mon dow   command&lt;br /&gt;
&lt;br /&gt;
# Update rssfeeds joomla&lt;br /&gt;
1 */1 * * * /usr/local/hobbynet/bin/rss_joomla.sh &amp;gt;&amp;gt;/var/log/rss_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Synchroniseer firewall regels van ldap-lb1 naar ldap-lb2&lt;br /&gt;
55  5 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh&lt;br /&gt;
55 11 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh&lt;br /&gt;
55 17 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh&lt;br /&gt;
55 23 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh&lt;br /&gt;
&lt;br /&gt;
# Herstart Firewall&lt;br /&gt;
 0  6 * * * /etc/init.d/hobby-firewall restart &amp;gt;/dev/null&lt;br /&gt;
 0 12 * * * /etc/init.d/hobby-firewall restart &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /etc/init.d/hobby-firewall restart &amp;gt;/dev/null&lt;br /&gt;
 0  0 * * * /etc/init.d/hobby-firewall restart &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Check op updates en download deze alvast ivm Nagios detectie&lt;br /&gt;
 0  6 * * * apt-get clean -y &amp;gt;/dev/null ; apt-get update &amp;gt;/dev/null ;apt-get upgrade -d -y &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * apt-get clean -y &amp;gt;/dev/null ; apt-get update &amp;gt;/dev/null ;apt-get upgrade -d -y &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Maak een beveiligde backup&lt;br /&gt;
45 23 * * * /usr/local/hobbynet/local/backup-encrypted.bash &amp;gt;&amp;gt;/var/log/backup_encrypted.log&lt;br /&gt;
&lt;br /&gt;
# Sync bin dir naar ldap-lb2&lt;br /&gt;
50 23 * * * /usr/local/hobbynet/bin/sync_hobbynetbin_2.sh&lt;br /&gt;
# Sync etc dir naar ldap-lb2&lt;br /&gt;
51 23 * * * /usr/local/hobbynet/bin/sync_hobbynetetc_2.sh&lt;br /&gt;
# Sync lib dir naar ldap-lb2&lt;br /&gt;
52 23 * * * /usr/local/hobbynet/bin/sync_hobbynetlib_2.sh&lt;br /&gt;
&lt;br /&gt;
# Voer de cron_joomla.sh cronjob uit voor de bit backup&lt;br /&gt;
01  0 * * * /usr/local/hobbynet/bin/cron_joomla.sh &amp;gt;&amp;gt;/var/log/cron_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Voer de cron_joomla.sh cronjob uit voor &#039;update_joomla.sh&#039;&lt;br /&gt;
15  1 * * * /usr/local/hobbynet/bin/cron_joomla.sh &amp;gt;&amp;gt;/var/log/cron_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Forceer dat er een verse set CSV bestanden klaar wordt gezet&lt;br /&gt;
05  3 * * * /usr/local/hobbynet/bin/LDAP_forceer_CSV.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Doe alle processing CRM-&amp;gt;LDAP&lt;br /&gt;
10  3 * * * /usr/local/hobbynet/bin/LDAP_cronjob.sh &amp;gt;&amp;gt;/var/log/LDAP_cronjob.log&lt;br /&gt;
&lt;br /&gt;
# Maak /usr/local/hobbynet/apache2conf/iplists/iplist-partners-24 aan&lt;br /&gt;
 7  3 * * * /usr/local/hobbynet/bin/gen_iplist_partners.sh&lt;br /&gt;
&lt;br /&gt;
# Ververs postfixadmin op mail-lb1 en mail-lb2. Mail report&lt;br /&gt;
26  3 * * * /usr/local/hobbynet/bin/upd_mailserver.sh &amp;gt;/var/log/upd_mailserver.log&lt;br /&gt;
30  3 * * * /usr/local/hobbynet/bin/upd_mailserver_report.sh&lt;br /&gt;
&lt;br /&gt;
# Haal de opt-outs op van Tripolis&lt;br /&gt;
### disabled 20220516&lt;br /&gt;
###15  3 * * * /usr/local/hobbynet/bin/run_tripolis_import.sh &amp;gt;/var/log/run_tripolis_import.log&lt;br /&gt;
&lt;br /&gt;
# Haal de handmatige Tripolis opt-outs op, en mail die naar Egbert&lt;br /&gt;
### disabled 20220516&lt;br /&gt;
###31  3 * * * /usr/local/hobbynet/bin/mail_tripolis_import_report.sh&lt;br /&gt;
&lt;br /&gt;
# Maak en plaats de ledenlijst voor Kantoor&lt;br /&gt;
35  3 * * * /usr/local/hobbynet/bin/upload_leden_csv.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Maak en plaats de kaderlijst voor Kantoor&lt;br /&gt;
40  3 * * * /usr/local/hobbynet/bin/upload_kader_csv.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Deblokkeer actieve joomla gebruikers&lt;br /&gt;
45  3 * * * /usr/local/hobbynet/bin/unblock_joomla.sh &amp;gt;&amp;gt;/var/log/unblock_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Haal de aantallen bezoekers, en zet die over naar de beschermde kantoor omgeving&lt;br /&gt;
47  3 * * * /usr/local/hobbynet/bin/upload_bezoekersstatistiek.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Maak overzicht van alle opt-ins voor Tripolis&lt;br /&gt;
50  3 * * * /usr/local/hobbynet/bin/run_tripolis_export.sh &amp;gt;/var/log/run_tripolis_export.log&lt;br /&gt;
&lt;br /&gt;
# Hernoem in Joomla de users die zijn hernoemd in ldap&lt;br /&gt;
50 3 * * * /usr/local/hobbynet/bin/renameusers_joomla.sh &amp;gt;&amp;gt;/var/log/renameusers_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Haal het resultaat van de Tripolis export op, en mail die naar Egbert&lt;br /&gt;
52  3 * * * /usr/local/hobbynet/bin/mail_tripolis_export_report.sh&lt;br /&gt;
&lt;br /&gt;
# Maak en plaats statistiek overzicht van alle HCC groeperingen&lt;br /&gt;
55  3 * * * /usr/local/hobbynet/bin/statistiek_xml.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Start joomla onderhoud&lt;br /&gt;
0  4 * * * /usr/local/hobbynet/bin/update_joomla.sh &amp;gt;&amp;gt;/var/log/update_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Doe de Hobbynet maand rapportage&lt;br /&gt;
 0  4 1 * * /usr/local/hobbynet/bin/run_maand_rapport.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Bepaal het aantal unieke (en totaal aantal) bezoekers van de laatste 12 maanden, mail dat aan VB&lt;br /&gt;
 5  4 1 * * /usr/local/hobbynet/bin/tel_unieke_bezoekers-volgens-LDAP.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Maak een lijst van onjuiste huisgenoot-lidmaatschappen&lt;br /&gt;
10  4 1 * * /usr/local/hobbynet/bin/huisgenoot_lidmaatschappen.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Schoon mySQL en LDAP op&lt;br /&gt;
 5  4 2 * * /usr/local/hobbynet/bin/schoon_alles_op.sh&lt;br /&gt;
&lt;br /&gt;
# Verrijk een naar SFTP geupload factuur bestand met factuurtokens&lt;br /&gt;
15  * * * * /bin/bash /usr/local/hobbynet/bin/verrijk_factuur.sh &amp;gt;&amp;gt;/var/log/verrijk_factuur.log&lt;br /&gt;
&lt;br /&gt;
# ruim sms database op&lt;br /&gt;
42 12 * * * cat /usr/local/hobbynet/bin/ruimsmsverstuurdsmsop.sql |mysql &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# corigeer menu elke 4 uur&lt;br /&gt;
#42 */4 * * * /usr/local/hobbynet/bin/set_menu_joomla.sh &amp;gt;&amp;gt;/var/log/set_menu_joomla.log&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Toepassingen=&lt;br /&gt;
Soms zijn er een aantal scripts die bij elkaar horen en er voor een bepaalde toepassing zijn, zoals om de mailserver te updaten, dagelijkse bestanden voor Kantoor te maken, dagelijkse bestanden voor het Tripolis mail systeem en niet geheel onbelangrijk, scripts die ldap dagelijks bijwerken met de &#039;&#039;&#039;master&#039;&#039;&#039; data die in het HCC CRM wordt bijgehouden (als er een mutatie gemist is, b.v. omdat een JSON aanroep vanuit het CRM naar de Hobbynet XML-RPC server overdag mislukt is).&lt;br /&gt;
&lt;br /&gt;
==LDAP==&lt;br /&gt;
Drie scripts zijn essentieel om de hele LDAP database te dumpen, te initialiseren en weer te vullen. Dit proces is nodig als een schema change moet worden aangebracht in de LDAP configuratie. Zie ook de pagina over de LDAP server.&lt;br /&gt;
* &#039;&#039;&#039;dump_ldap.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;Dumpt alle ou&#039;s in afzonderlijke ldif bestanden in de data directory en maakt er ook een tarball van.&lt;br /&gt;
* &#039;&#039;&#039;init_ldap.sh &amp;lt;beheer-password&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Bouwt de hele LDAP structuur van de grond af op.&lt;br /&gt;
* &#039;&#039;&#039;restore_ldap.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;Vult de hele LDAP structuur met file uit de dump_ldap stap.&lt;br /&gt;
&lt;br /&gt;
==Statistieken==&lt;br /&gt;
Iedere nacht worden er door het script &#039;&#039;&#039;statistiek_xml.sh&#039;&#039;&#039; van alle groeperingen en van de complete HCC leden database statistieken in XML formaat gemaakt. Daarna worden deze statistieken met het script &#039;&#039;&#039;statistiek_xml.sh&#039;&#039;&#039; naar de kadernet server overgezet.&lt;br /&gt;
&lt;br /&gt;
==Mailserver==&lt;br /&gt;
&amp;lt;strike&amp;gt;De mailserver kreeg tot voor kort 2 bestanden van scripting-int, husers en b3a.txt. De inhoud van beide bestanden kan ook uit ldap gehaald worden. Hiervoor zijn de volgende scripts in gebruik:&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;gen_hobbyabon.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Dit script maakt een equivalent aan van husers en bevat alleen de betalende Hobbynet abonnees (enige tientallen regels).&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;gen_kaderfunc.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Dit script is de vervanger van b3a.txt, de lijst van alle kaderfuncties (ongeveer 1200).&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;gen_kaderlist.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Een hulp bestand met alleen de 7 cijferige lidnummers van alle kaderleden (ruim 700). Deze lijst wordt op de mailserver gebruikt om incidenteel kadermailboxen op te ruimen.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;gen_mail_exclude_txt.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Nog een hulp bestand waar in de interessegroepen staan die geen functionele mailadressen nodig hebben. Dit zijn vooral de ig&#039;s die geen echte ig zijn zoals de HCC zelf en de RvA en RvT maar wel als zodanig in ldap staan. Ook de cursus presentatoren vallen hieronder.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;upd_mailserver_report.sh&#039;&#039;&#039;.&amp;lt;br&amp;gt;Dit script mailt de dagelijkse logs ter controle of alles goed is gegaan.&lt;br /&gt;
* &#039;&#039;&#039;upd_mailserver.sh&#039;&#039;&#039;.&amp;lt;br&amp;gt;Bundelt de php scripts tot een cronjob die elke nacht loopt. Dit script draait de 4 php scripts, doet wat na bewerking, kopieert de output naar mail-lb1-int en start &#039;&#039;&#039;upd_mailserver_all&#039;&#039;&#039; op mail-lb1-int. Tenslotte worden nog de relay-domains opgehaald van mail-lb1-int (dat bestand is pas up-to-date nadat upd_mailserver_all op mail-lb1-int heeft gelopen).Hierna is mail-lb2 nog niet geheel up-to-date. Het script dat door ldap-lb1 is gestart, doet aan het eind een rsync van de datadir op mail-lb1 naar mail-lb2. Tenslotte start mail-lb1 een script op mail-lb2 om die ook up-to-date te maken. Dit is dus een drietraps systeem.&lt;br /&gt;
&lt;br /&gt;
==Mailman==&lt;br /&gt;
&amp;lt;strike&amp;gt;Omdat ter zijner tijd een aantal Mailman mailinglijsten naar Tripolis gaan, is een script gemaakt om de Mailman info over de abonnees op te halen. Om aan die summiere gegevens te herkennen of iemand lid of niet-lid is een php script gemaakt (te vinden in mailman-specials).&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;import_mailman_lists.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;Haalt de abonnee gegevens op. Er is een aanroep in dit script van een script op de mailserver. Dat script maakt bestanden aan met zinvolle namen. Die worden opgehaald en worden in de lokale data (sub)directory geplaatst.&amp;lt;/strike&amp;gt; &lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;import_mailman_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;Leest alle opgehaalde bestanden in de lokale data (sub)directory, maakt zo nodig niet-leden aan en plaatst &#039;&#039;&#039;optins&#039;&#039;&#039; voor de locatie bulletins bij de leden en de niet-leden. Het bepalen van lid of niet-lid gebeurt puur op email adres. Als een lid op een mailinglist staat meteen adres dat &#039;&#039;&#039;niet&#039;&#039;&#039; in zijn record in LDAP staat, wordt er een niet-lid record aangemaakt! Het netto effect is dat dit lid het bulletin dubbbel zal ontvangen.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Maandrapportage==&lt;br /&gt;
* &#039;&#039;&#039;gen_maand_rap.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Verzamelt alle data van Hobbynet abonnees en alle andere users in ldap. Optie &#039;&#039;&#039;-m&#039;&#039;&#039; mailt naar de accounthouder in het ldap record. Sinds medio 2020 krijgen hcc groepering webmasters deze mail niet meer, omdat ze nu allemaal gebruik maken van een Joomla template site, en daar geen &#039;eigenaar&#039; meer van zijn.&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;gen_pc30_maand_rap.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Mailt specifiek de gegevens van de PC30 agents naar de teamleider.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;run_maand_rapport.sh&#039;&#039;&#039;.&amp;lt;br&amp;gt;Cronjob die bovenstaande scripts 1x per maand draait.&lt;br /&gt;
&lt;br /&gt;
==Passwd, shadow en group==&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
* gen_group_admin.php&lt;br /&gt;
* gen_group_code2.php&lt;br /&gt;
* gen_group_hcc.php&lt;br /&gt;
* gen_passwd_admin.php&lt;br /&gt;
* gen_passwd_code2.php&lt;br /&gt;
* gen_passwd_hcc.php&lt;br /&gt;
* gen_shadow_admin.php&lt;br /&gt;
* gen_shadow_code2.php&lt;br /&gt;
* gen_shadow_hcc.php&lt;br /&gt;
* upd_admin_accounts.sh (is er niet)&lt;br /&gt;
* upd_code2_accounts.sh&lt;br /&gt;
* upd_hcc_accounts.sh&lt;br /&gt;
&lt;br /&gt;
Deze scripts genereren de passwd, shadow en group entries voor de betalende leden (_code2), de admins (_admin, de lagere goden, op het moment niet gebruikt; er is wel een .hobby met alleen Roel v.d. Bussche erin) en voor de HCC groeperingen (_hcc). De output wordt op de shared etc omgeving neergezet zodat elke (web)server ze kan toevoegen aan de passwd.temp/shadow.temp/group.temp files. Hiervoor wordt de lokale job upd_usr (of upd_hobby_only) gedraaid.&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==HCC Verenigingsbureau==&lt;br /&gt;
Het HCC Verenigingsbureau (&#039;VB&#039;) heeft beschikking over een ledenlijst en een kader/kernledenlijst die dagelijks up-to-date zijn. Deze lijsten zijn in CSV formaat zodat men zelf in de hand heeft hoe het bestand gebruikt wordt. Ze worden dagelijks op de Hobbynet sftp server (dedicated server t.b.v. gebuik vanaf het VB) geplaatst.&lt;br /&gt;
&lt;br /&gt;
Daarnaast krijgt VB iedere dag een actueel overzicht van de aantallen bezoekers (bezoekers statistiek).&lt;br /&gt;
  &lt;br /&gt;
* &#039;&#039;&#039;upload_kader_csv.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de cronjob &lt;br /&gt;
* &#039;&#039;&#039;gen_kader_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;het php script dat een bestand in CSV formaat maakt met de door VB gewenste velden.&lt;br /&gt;
* &#039;&#039;&#039;upload_leden_csv.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de cronjob&lt;br /&gt;
* &#039;&#039;&#039;gen_leden_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;het php script dat een bestand in CSV formaat maakt met de door VB gewenste velden.&lt;br /&gt;
* &#039;&#039;&#039;upload_bezoekersstatistiek.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de cronjob&lt;br /&gt;
* &#039;&#039;&#039;gen_bezoekersstatistiek_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;het php script dat een bestand in CSV formaat maakt met de bezoekersstatistieken.&lt;br /&gt;
&lt;br /&gt;
==CompUsers==&lt;br /&gt;
2020: VB heeft &#039;eigen&#039; afspraken met CU gemaakt, en stuurt ze op eigen houtje zomaar ledenbestanden toe. Onze scripts zijn daarmee zinloos geworden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;Met CompUsers zijn speciale afspraken gemaakt door Kantoor in januari 2014. Zij krijgen een sterk verkorte lijst van ALLE leden voor hun administratie. Het streven is dit zo spoedig mogelijk te vervangen door een ander mechanisme zoals de partner check.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;upload_compusers_csv.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de cronjob&lt;br /&gt;
* &#039;&#039;&#039;gen_compusers_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;het script dat een CSV maakt. Dit is een afgeslankt vorm van het &#039;&#039;&#039;gen_leden_csv.php&#039;&#039;&#039; script.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Koppeling met Tripolis=&lt;br /&gt;
Het oude &amp;quot;popbull&amp;quot; systeem dat bij HenZ draait is in de zomer van 2013 vervangen door Tripolis. Tripolis wordt al jaren gebruikt door kantoor voor het versturen van Digizine en de Nieuwsflash. Per groepering wordt een account aangemaakt met beperkte rechten waar mee de Correspondent van de groepering mailings kan versturen. Om Tripolis en ldap in sync te houden wordt er elke nacht data uitgewisseld. Ldap is leidend in deze maar als mensen zich uitschrijven (opt-out) via de knop onder aan de mailing, moet dat doorgegeven worden aan ldap. &lt;br /&gt;
&lt;br /&gt;
==Sync van Tripolis naar ldap==&lt;br /&gt;
* &#039;&#039;&#039;run_tripolis_import.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de eigenlijke cronjob&lt;br /&gt;
* &#039;&#039;&#039;import_tripolis_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;vertaalt de CSV van opt-outs naar het wissen van de individuele optins.&lt;br /&gt;
&lt;br /&gt;
Tripolis plaatst elke nacht om 00:01 een CSV bestand met de opt-outs per bulletin van de vorige dag. Dit gebeurt met datums. Als de datum van gisteren ingevuld staat is daar een optout geweest. Als er geen opt-outs zijn, bevat het veld slechts een lege string. Het  bestand wordt naar de ldap server gehaald waar een aantal versies bewaard worden. De bestanden wordt verwijderd van de sftp omgeving. Vervolgens worden het gedownloade bestand verwerkt om bij het lid de hccOptIn van dit bulletin te verwijderen.&lt;br /&gt;
&lt;br /&gt;
==Sync van ldap naar Tripolis==&lt;br /&gt;
* &#039;&#039;&#039;run_tripolis_export.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de eigenlijk cronjob&lt;br /&gt;
* &#039;&#039;&#039;gen_ldap_bul_export.php&#039;&#039;&#039;&amp;lt;br&amp;gt;maakt een volledige lijst aan van emailadres, lidnr en optins. Dit bestand gaat naar de sftp omgeving van Tripolis.&lt;br /&gt;
* &#039;&#039;&#039;gen_ldap_cor_export.php&#039;&#039;&#039;&amp;lt;br&amp;gt;maakt een lijst van alle correspondenten voor kantoor. Dit bestand gaat naar de sftp omgeving van Kantoor.&lt;br /&gt;
&lt;br /&gt;
Het export bestand wordt elke nacht (om 02:50) op de sftp omgeving voor Tripolis klaargezet. Tripolis haalt het om 05:00 op. Omdat de opt-outs van Tripolis om 02:15 verwerkt worden, is dit bestand dus al bijgewerkt voor wat betreft die opt-outs. Alle andere wijzigingen komen van de hcc.nl profielpagina&#039;s of mutaties door derden op ldap (mutaties door Hobbynet staff of PC30).&lt;br /&gt;
&lt;br /&gt;
==Rapportage==&lt;br /&gt;
&amp;lt;strike&amp;gt;Om ook de ledenadministratie in te lichten over leden die een optout op één of meer Tripolis mailings hebben gedaan, wordt na het verwerken van de optouts een mail gestuurd naar ledenadministratie@hcc.nl. Elke dag is er een nieuwe log file maar die wordt door dezelfde cronjob aan een archive geplakt. Zie mail_tripolis_reports.sh.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Egbert laat zich iedere nacht een rapportage mail sturen, zie mail_tripolis_export_report.sh.&lt;br /&gt;
&lt;br /&gt;
==Eénmalige jobs==&lt;br /&gt;
Er zijn een aantal php scripts voor éénmalig gebruik gemaakt. Deze worden niet in de cronjobs gebruikt maar waren slechts bedoeld om de lijsten opgeleverd door VB in LDAP te krijgen. Deze scripts zijn in de subdirectory &#039;&#039;&#039;popbull-specials&#039;&#039;&#039; geplaatst. &lt;br /&gt;
* &#039;&#039;&#039;import_digizine_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;de initiële Digizine lijst&lt;br /&gt;
* &#039;&#039;&#039;import_nieuwsflash_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;de initiële Nieuwsflash lijst&lt;br /&gt;
* &#039;&#039;&#039;import_popbull_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;de initiële lijst zoals die van HenZ (popbull provider) komt&lt;br /&gt;
&lt;br /&gt;
=ISIZ enquête=&lt;br /&gt;
Op verzoek geschreven scripts voor eenmalig gebruik. Terug te vinden in in de &#039;&#039;&#039;enquete-specials&#039;&#039;&#039; subdirectory. &lt;br /&gt;
* &#039;&#039;&#039;gen_enquete_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;enquête per email&lt;br /&gt;
* &#039;&#039;&#039;gen_enquete_csv_no_mail.php&#039;&#039;&#039;&amp;lt;br&amp;gt;enquête per post&lt;br /&gt;
&lt;br /&gt;
=Nameserver=&lt;br /&gt;
* gen_mx_hcc.php&lt;br /&gt;
* gen_mx_hobby.php&lt;br /&gt;
* upd_nameserver.sh&lt;br /&gt;
&lt;br /&gt;
=Firewall (op ldap servers)=&lt;br /&gt;
* gen_xml_fw_ip4.php&lt;br /&gt;
* gen_xml_fw_ip6.php&lt;br /&gt;
* sync_hobbynetfw.sh&lt;br /&gt;
* gen_fw.sh&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP_scripting&amp;diff=79582</id>
		<title>LDAP scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP_scripting&amp;diff=79582"/>
		<updated>2022-05-16T19:22:05Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* Overzicht scripts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Inleiding=&lt;br /&gt;
Omdat de ldap server in sneltreinvaart de bron voor allerlei services aan het worden is, ontstaat er ook een migratie van (veelal perl) scripts op scripting-int naar php scripts op ldap-lb1-int. ldap-lb1-int is net als scripting-int een server met verhoogde security. Er mag dus wel &#039;&#039;&#039;van&#039;&#039;&#039; deze server &#039;&#039;&#039;naar&#039;&#039;&#039; andere servers geconnect worden maar niet andersom. Dit is vergelijkbaar met de situatie op scripting-int. Deze mogelijkheid is essentieel voor de goede werking van sommige scripts.&lt;br /&gt;
&lt;br /&gt;
==Type scripts==&lt;br /&gt;
Er zijn globaal een aantal soorten scripts te onderscheiden:&lt;br /&gt;
* De eigenlijke scripts die een bepaalde taak uitvoeren en vaak naar stdout schrijven (.php soms geen extensie).&lt;br /&gt;
* De cronjob scripts. Gewoonlijk herkenbaar aan de &#039;&#039;&#039;.sh&#039;&#039;&#039; extensie. Deze scripts bundelen vaak meerdere php scripts tot complete oplossingen.&lt;br /&gt;
* Scripts die voor initialiseren en backuppen van de ldap directory nodig zijn (&#039;&#039;&#039;init_ldap, dump_ldap en restore_ldap&#039;&#039;&#039;). Behalve dump_ldap mogen deze scripts nooit zomaar gedraaid worden; de ldap directory zou vernield worden.&lt;br /&gt;
&lt;br /&gt;
==Overzicht scripts==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0_DIT_IS_EEN_LOCAL_DIR            gen_passwd_code2.php              LDAP_include_telefoon.php         sync_hccforums.php&lt;br /&gt;
check_ms                          gen_passwd_hcc.php                LDAP_lid_weg.php                  sync_hobbynetbin_2.sh&lt;br /&gt;
cron_joomla.php                   gen_shadow_admin.php              LDAP_maak_hccOptOutTokens.php     sync_hobbynetdata_2.sh&lt;br /&gt;
cron_joomla.sh                    gen_shadow_code2.php              _LDAP_schoon_4045431_op.php       sync_hobbynetetc_2.sh&lt;br /&gt;
database-onderhoud.sh             gen_shadow_hcc.php                LDAP_schoon_database.php          sync_hobbynetfw_2.sh&lt;br /&gt;
dump_ldap.sh                      gen_xml_fw_ip4.php                LDAP_schoon_mysql_op.php          sync_hobbynetlib_2.sh&lt;br /&gt;
enquete-specials                  gen_xml_fw_ip6.php                LDAP_schoon_testleden_op.php      tel_unieke_bezoekers-volgens-LDAP_en_SQL.php&lt;br /&gt;
forum-specials                    get_all_mailbox_sizes.sh          LDAP_vul_leden.php                tel_unieke_bezoekers-volgens-LDAP.php&lt;br /&gt;
gen_bezoekersstatistiek_xml.php   get_ip4                           LDAP_vul_profielbekend.php        tel_unieke_bezoekers-volgens-LDAP.sh&lt;br /&gt;
gen_compusers_csv.php             get_ip6                           mailman-specials                  test.php&lt;br /&gt;
gen_dmarc_hcc.php                 getip-http                        mail_tripolis_export_report.sh    tripolis_import&lt;br /&gt;
gen_fw.sh                         hccforums_db.php                  optouts                           unblock_joomla.php&lt;br /&gt;
gen_group_admin.php               hcc.nl.mx.fallback                other-specials                    unblock_joomla.sh&lt;br /&gt;
gen_group_code2.php               huisgenoot_lidmaatschappen.php    popbull-specials                  update_domeinen.php&lt;br /&gt;
gen_group_hcc.php                 huisgenoot_lidmaatschappen.sh     postcode-specials                 update_domeinen.sh&lt;br /&gt;
gen_hobbyabon.php                 init_ldap_mdb.sh                  purge_hccforums.php               update_hccforums.sh&lt;br /&gt;
gen_iplist_partners.php           init_ldap.sh                      renameusers_joomla.php            update_joomla.php&lt;br /&gt;
gen_iplist_partners.sh            kader_maak_html.php               renameusers_joomla.sh             update_joomla.sh&lt;br /&gt;
gen_kader_csv.php                 kader_maak_lijsten.sh             restore_ldap.sh                   upd_code2_accounts.sh&lt;br /&gt;
gen_kaderfunc.php                 kader_maak_txt.php                rss_joomla.php                    upd_hcc_accounts.sh&lt;br /&gt;
gen_kaderlist.php                 kader_maak_xb_csv.php             rss_joomla.sh                     upd_ldap_dev.sh&lt;br /&gt;
gen_ldap_bul_export.php           LDAP_bepaal_startconditie.php     ruim_lock_files_op.sh             upd_ldap-test-dev.expect&lt;br /&gt;
gen_ldap_cor_export.php           ldap.conf.ldif                    ruim_pdf_facturen_op.sh           upd_ldap_test.sh&lt;br /&gt;
gen_ldap_hoofdbestuur_export.php  LDAP_controleer_groeperingen.php  ruimsmsverstuurdsmsop.sql         upd_mailserver_report.sh&lt;br /&gt;
gen_ldap_kader_export.php         LDAP_controleer_kader.php         run_maand_rapport.sh              upd_mailserver.sh&lt;br /&gt;
gen_ldap_ledenraad_export.php     LDAP_controleer_users.php         run_tripolis_export.sh            upd_nameserver.sh&lt;br /&gt;
gen_ldap_niet_leden_export.php    LDAP_copyright.txt                schoon_alles_op_include.php       upd_srv&lt;br /&gt;
gen_leden_csv.php                 LDAP_cronjob.sh                   schoon_alles_op.sh                upg_vmware_tools&lt;br /&gt;
gen_leden_dubbel.log              LDAP_forceer_CSV.sh               schoon_breg_token_tabel_op.php    upload_bezoekersstatistiek.sh&lt;br /&gt;
gen_leden_dubbel.php              LDAP_ftps_lget_CRM_leden.sh       schoon_forms_database_op.php      upload_compusers_csv.sh&lt;br /&gt;
gen_maand_rap.php                 LDAP_herstel_profielbekend.php    schoon_JoomlaTokens_tabel_op.php  upload_kader_csv.sh&lt;br /&gt;
gen_mail_exclude_txt.php          LDAP_include_henz.php             schoon_LDAP_en_hcc_Bezoek_op.php  upload_leden_csv.sh&lt;br /&gt;
gen_mx_hcc-fallback.php           LDAP_include_ISO.php              set_menu_joomla.sh                vergelijk_scripts.readme&lt;br /&gt;
gen_mx_hcc.php                    LDAP_include_Joomla_db.php        set_menu.php                      verrijk_factuur.php&lt;br /&gt;
gen_mx_hobby.php                  LDAP_include_mail.php             statistiek_xml.php                verrijk_factuur.sh&lt;br /&gt;
gen_passwd_admin.php              LDAP_include.php                  statistiek_xml.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Crontab==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# For more information see the manual pages of crontab(5) and cron(8)&lt;br /&gt;
##############################################################################################################&lt;br /&gt;
# Wijzigingen graag ook aanbrengen op deze wiki pagina: https://wiki.hobby.nl/index.php?title=LDAP_scripting #&lt;br /&gt;
##############################################################################################################&lt;br /&gt;
# m h dom mon dow   command&lt;br /&gt;
&lt;br /&gt;
# Update rssfeeds joomla&lt;br /&gt;
1 */1 * * * /usr/local/hobbynet/bin/rss_joomla.sh &amp;gt;&amp;gt;/var/log/rss_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Synchroniseer firewall regels van ldap-lb1 naar ldap-lb2&lt;br /&gt;
55  5 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh&lt;br /&gt;
55 11 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh&lt;br /&gt;
55 17 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh&lt;br /&gt;
55 23 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh&lt;br /&gt;
&lt;br /&gt;
# Herstart Firewall&lt;br /&gt;
 0  6 * * * /etc/init.d/hobby-firewall restart &amp;gt;/dev/null&lt;br /&gt;
 0 12 * * * /etc/init.d/hobby-firewall restart &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /etc/init.d/hobby-firewall restart &amp;gt;/dev/null&lt;br /&gt;
 0  0 * * * /etc/init.d/hobby-firewall restart &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Check op updates en download deze alvast ivm Nagios detectie&lt;br /&gt;
 0  6 * * * apt-get clean -y &amp;gt;/dev/null ; apt-get update &amp;gt;/dev/null ;apt-get upgrade -d -y &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * apt-get clean -y &amp;gt;/dev/null ; apt-get update &amp;gt;/dev/null ;apt-get upgrade -d -y &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Maak een beveiligde backup&lt;br /&gt;
45 23 * * * /usr/local/hobbynet/local/backup-encrypted.bash &amp;gt;&amp;gt;/var/log/backup_encrypted.log&lt;br /&gt;
&lt;br /&gt;
# Sync bin dir naar ldap-lb2&lt;br /&gt;
50 23 * * * /usr/local/hobbynet/bin/sync_hobbynetbin_2.sh&lt;br /&gt;
# Sync etc dir naar ldap-lb2&lt;br /&gt;
51 23 * * * /usr/local/hobbynet/bin/sync_hobbynetetc_2.sh&lt;br /&gt;
# Sync lib dir naar ldap-lb2&lt;br /&gt;
52 23 * * * /usr/local/hobbynet/bin/sync_hobbynetlib_2.sh&lt;br /&gt;
&lt;br /&gt;
# Voer de cron_joomla.sh cronjob uit voor de bit backup&lt;br /&gt;
01  0 * * * /usr/local/hobbynet/bin/cron_joomla.sh &amp;gt;&amp;gt;/var/log/cron_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Voer de cron_joomla.sh cronjob uit voor &#039;update_joomla.sh&#039;&lt;br /&gt;
15  1 * * * /usr/local/hobbynet/bin/cron_joomla.sh &amp;gt;&amp;gt;/var/log/cron_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Forceer dat er een verse set CSV bestanden klaar wordt gezet&lt;br /&gt;
05  3 * * * /usr/local/hobbynet/bin/LDAP_forceer_CSV.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Doe alle processing CRM-&amp;gt;LDAP&lt;br /&gt;
10  3 * * * /usr/local/hobbynet/bin/LDAP_cronjob.sh &amp;gt;&amp;gt;/var/log/LDAP_cronjob.log&lt;br /&gt;
&lt;br /&gt;
# Maak /usr/local/hobbynet/apache2conf/iplists/iplist-partners-24 aan&lt;br /&gt;
 7  3 * * * /usr/local/hobbynet/bin/gen_iplist_partners.sh&lt;br /&gt;
&lt;br /&gt;
# Ververs postfixadmin op mail-lb1 en mail-lb2. Mail report&lt;br /&gt;
26  3 * * * /usr/local/hobbynet/bin/upd_mailserver.sh &amp;gt;/var/log/upd_mailserver.log&lt;br /&gt;
30  3 * * * /usr/local/hobbynet/bin/upd_mailserver_report.sh&lt;br /&gt;
&lt;br /&gt;
# Haal de opt-outs op van Tripolis&lt;br /&gt;
15  3 * * * /usr/local/hobbynet/bin/run_tripolis_import.sh &amp;gt;/var/log/run_tripolis_import.log&lt;br /&gt;
&lt;br /&gt;
# Haal de handmatige Tripolis opt-outs op, en mail die naar Egbert&lt;br /&gt;
31  3 * * * /usr/local/hobbynet/bin/mail_tripolis_import_report.sh&lt;br /&gt;
&lt;br /&gt;
# Maak en plaats de ledenlijst voor Kantoor&lt;br /&gt;
35  3 * * * /usr/local/hobbynet/bin/upload_leden_csv.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Maak en plaats de kaderlijst voor Kantoor&lt;br /&gt;
40  3 * * * /usr/local/hobbynet/bin/upload_kader_csv.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Deblokkeer actieve joomla gebruikers&lt;br /&gt;
45  3 * * * /usr/local/hobbynet/bin/unblock_joomla.sh &amp;gt;&amp;gt;/var/log/unblock_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Haal de aantallen bezoekers, en zet die over naar de beschermde kantoor omgeving&lt;br /&gt;
47  3 * * * /usr/local/hobbynet/bin/upload_bezoekersstatistiek.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Maak overzicht van alle opt-ins voor Tripolis&lt;br /&gt;
50  3 * * * /usr/local/hobbynet/bin/run_tripolis_export.sh &amp;gt;/var/log/run_tripolis_export.log&lt;br /&gt;
&lt;br /&gt;
# Hernoem in Joomla de users die zijn hernoemd in ldap&lt;br /&gt;
50 3 * * * /usr/local/hobbynet/bin/renameusers_joomla.sh &amp;gt;&amp;gt;/var/log/renameusers_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Haal het resultaat van de Tripolis export op, en mail die naar Egbert&lt;br /&gt;
52  3 * * * /usr/local/hobbynet/bin/mail_tripolis_export_report.sh&lt;br /&gt;
&lt;br /&gt;
# Maak en plaats statistiek overzicht van alle HCC groeperingen&lt;br /&gt;
55  3 * * * /usr/local/hobbynet/bin/statistiek_xml.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Start joomla onderhoud&lt;br /&gt;
0  4 * * * /usr/local/hobbynet/bin/update_joomla.sh &amp;gt;&amp;gt;/var/log/update_joomla.log&lt;br /&gt;
&lt;br /&gt;
# Doe de Hobbynet maand rapportage&lt;br /&gt;
 0  4 1 * * /usr/local/hobbynet/bin/run_maand_rapport.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Bepaal het aantal unieke (en totaal aantal) bezoekers van de laatste 12 maanden, mail dat aan VB&lt;br /&gt;
 5  4 1 * * /usr/local/hobbynet/bin/tel_unieke_bezoekers-volgens-LDAP.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Maak een lijst van onjuiste huisgenoot-lidmaatschappen&lt;br /&gt;
10  4 1 * * /usr/local/hobbynet/bin/huisgenoot_lidmaatschappen.sh &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Schoon mySQL en LDAP op&lt;br /&gt;
 5  4 2 * * /usr/local/hobbynet/bin/schoon_alles_op.sh&lt;br /&gt;
&lt;br /&gt;
# Verrijk een naar SFTP geupload factuur bestand met factuurtokens&lt;br /&gt;
15  * * * * /bin/bash /usr/local/hobbynet/bin/verrijk_factuur.sh &amp;gt;&amp;gt;/var/log/verrijk_factuur.log&lt;br /&gt;
&lt;br /&gt;
# ruim sms database op&lt;br /&gt;
42 12 * * * cat /usr/local/hobbynet/bin/ruimsmsverstuurdsmsop.sql |mysql &amp;gt;/dev/null&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Toepassingen=&lt;br /&gt;
Soms zijn er een aantal scripts die bij elkaar horen en er voor een bepaalde toepassing zijn, zoals om de mailserver te updaten, dagelijkse bestanden voor Kantoor te maken, dagelijkse bestanden voor het Tripolis mail systeem en niet geheel onbelangrijk, scripts die ldap dagelijks bijwerken met de &#039;&#039;&#039;master&#039;&#039;&#039; data die in het HCC CRM wordt bijgehouden (als er een mutatie gemist is, b.v. omdat een JSON aanroep vanuit het CRM naar de Hobbynet XML-RPC server overdag mislukt is).&lt;br /&gt;
&lt;br /&gt;
==LDAP==&lt;br /&gt;
Drie scripts zijn essentieel om de hele LDAP database te dumpen, te initialiseren en weer te vullen. Dit proces is nodig als een schema change moet worden aangebracht in de LDAP configuratie. Zie ook de pagina over de LDAP server.&lt;br /&gt;
* &#039;&#039;&#039;dump_ldap.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;Dumpt alle ou&#039;s in afzonderlijke ldif bestanden in de data directory en maakt er ook een tarball van.&lt;br /&gt;
* &#039;&#039;&#039;init_ldap.sh &amp;lt;beheer-password&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Bouwt de hele LDAP structuur van de grond af op.&lt;br /&gt;
* &#039;&#039;&#039;restore_ldap.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;Vult de hele LDAP structuur met file uit de dump_ldap stap.&lt;br /&gt;
&lt;br /&gt;
==Statistieken==&lt;br /&gt;
Iedere nacht worden er door het script &#039;&#039;&#039;statistiek_xml.sh&#039;&#039;&#039; van alle groeperingen en van de complete HCC leden database statistieken in XML formaat gemaakt. Daarna worden deze statistieken met het script &#039;&#039;&#039;statistiek_xml.sh&#039;&#039;&#039; naar de kadernet server overgezet.&lt;br /&gt;
&lt;br /&gt;
==Mailserver==&lt;br /&gt;
&amp;lt;strike&amp;gt;De mailserver kreeg tot voor kort 2 bestanden van scripting-int, husers en b3a.txt. De inhoud van beide bestanden kan ook uit ldap gehaald worden. Hiervoor zijn de volgende scripts in gebruik:&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;gen_hobbyabon.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Dit script maakt een equivalent aan van husers en bevat alleen de betalende Hobbynet abonnees (enige tientallen regels).&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;gen_kaderfunc.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Dit script is de vervanger van b3a.txt, de lijst van alle kaderfuncties (ongeveer 1200).&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;gen_kaderlist.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Een hulp bestand met alleen de 7 cijferige lidnummers van alle kaderleden (ruim 700). Deze lijst wordt op de mailserver gebruikt om incidenteel kadermailboxen op te ruimen.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;gen_mail_exclude_txt.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Nog een hulp bestand waar in de interessegroepen staan die geen functionele mailadressen nodig hebben. Dit zijn vooral de ig&#039;s die geen echte ig zijn zoals de HCC zelf en de RvA en RvT maar wel als zodanig in ldap staan. Ook de cursus presentatoren vallen hieronder.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;upd_mailserver_report.sh&#039;&#039;&#039;.&amp;lt;br&amp;gt;Dit script mailt de dagelijkse logs ter controle of alles goed is gegaan.&lt;br /&gt;
* &#039;&#039;&#039;upd_mailserver.sh&#039;&#039;&#039;.&amp;lt;br&amp;gt;Bundelt de php scripts tot een cronjob die elke nacht loopt. Dit script draait de 4 php scripts, doet wat na bewerking, kopieert de output naar mail-lb1-int en start &#039;&#039;&#039;upd_mailserver_all&#039;&#039;&#039; op mail-lb1-int. Tenslotte worden nog de relay-domains opgehaald van mail-lb1-int (dat bestand is pas up-to-date nadat upd_mailserver_all op mail-lb1-int heeft gelopen).Hierna is mail-lb2 nog niet geheel up-to-date. Het script dat door ldap-lb1 is gestart, doet aan het eind een rsync van de datadir op mail-lb1 naar mail-lb2. Tenslotte start mail-lb1 een script op mail-lb2 om die ook up-to-date te maken. Dit is dus een drietraps systeem.&lt;br /&gt;
&lt;br /&gt;
==Mailman==&lt;br /&gt;
&amp;lt;strike&amp;gt;Omdat ter zijner tijd een aantal Mailman mailinglijsten naar Tripolis gaan, is een script gemaakt om de Mailman info over de abonnees op te halen. Om aan die summiere gegevens te herkennen of iemand lid of niet-lid is een php script gemaakt (te vinden in mailman-specials).&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;import_mailman_lists.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;Haalt de abonnee gegevens op. Er is een aanroep in dit script van een script op de mailserver. Dat script maakt bestanden aan met zinvolle namen. Die worden opgehaald en worden in de lokale data (sub)directory geplaatst.&amp;lt;/strike&amp;gt; &lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;import_mailman_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;Leest alle opgehaalde bestanden in de lokale data (sub)directory, maakt zo nodig niet-leden aan en plaatst &#039;&#039;&#039;optins&#039;&#039;&#039; voor de locatie bulletins bij de leden en de niet-leden. Het bepalen van lid of niet-lid gebeurt puur op email adres. Als een lid op een mailinglist staat meteen adres dat &#039;&#039;&#039;niet&#039;&#039;&#039; in zijn record in LDAP staat, wordt er een niet-lid record aangemaakt! Het netto effect is dat dit lid het bulletin dubbbel zal ontvangen.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Maandrapportage==&lt;br /&gt;
* &#039;&#039;&#039;gen_maand_rap.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Verzamelt alle data van Hobbynet abonnees en alle andere users in ldap. Optie &#039;&#039;&#039;-m&#039;&#039;&#039; mailt naar de accounthouder in het ldap record. Sinds medio 2020 krijgen hcc groepering webmasters deze mail niet meer, omdat ze nu allemaal gebruik maken van een Joomla template site, en daar geen &#039;eigenaar&#039; meer van zijn.&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;gen_pc30_maand_rap.php&#039;&#039;&#039;.&amp;lt;br&amp;gt;Mailt specifiek de gegevens van de PC30 agents naar de teamleider.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;run_maand_rapport.sh&#039;&#039;&#039;.&amp;lt;br&amp;gt;Cronjob die bovenstaande scripts 1x per maand draait.&lt;br /&gt;
&lt;br /&gt;
==Passwd, shadow en group==&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
* gen_group_admin.php&lt;br /&gt;
* gen_group_code2.php&lt;br /&gt;
* gen_group_hcc.php&lt;br /&gt;
* gen_passwd_admin.php&lt;br /&gt;
* gen_passwd_code2.php&lt;br /&gt;
* gen_passwd_hcc.php&lt;br /&gt;
* gen_shadow_admin.php&lt;br /&gt;
* gen_shadow_code2.php&lt;br /&gt;
* gen_shadow_hcc.php&lt;br /&gt;
* upd_admin_accounts.sh (is er niet)&lt;br /&gt;
* upd_code2_accounts.sh&lt;br /&gt;
* upd_hcc_accounts.sh&lt;br /&gt;
&lt;br /&gt;
Deze scripts genereren de passwd, shadow en group entries voor de betalende leden (_code2), de admins (_admin, de lagere goden, op het moment niet gebruikt; er is wel een .hobby met alleen Roel v.d. Bussche erin) en voor de HCC groeperingen (_hcc). De output wordt op de shared etc omgeving neergezet zodat elke (web)server ze kan toevoegen aan de passwd.temp/shadow.temp/group.temp files. Hiervoor wordt de lokale job upd_usr (of upd_hobby_only) gedraaid.&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==HCC Verenigingsbureau==&lt;br /&gt;
Het HCC Verenigingsbureau (&#039;VB&#039;) heeft beschikking over een ledenlijst en een kader/kernledenlijst die dagelijks up-to-date zijn. Deze lijsten zijn in CSV formaat zodat men zelf in de hand heeft hoe het bestand gebruikt wordt. Ze worden dagelijks op de Hobbynet sftp server (dedicated server t.b.v. gebuik vanaf het VB) geplaatst.&lt;br /&gt;
&lt;br /&gt;
Daarnaast krijgt VB iedere dag een actueel overzicht van de aantallen bezoekers (bezoekers statistiek).&lt;br /&gt;
  &lt;br /&gt;
* &#039;&#039;&#039;upload_kader_csv.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de cronjob &lt;br /&gt;
* &#039;&#039;&#039;gen_kader_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;het php script dat een bestand in CSV formaat maakt met de door VB gewenste velden.&lt;br /&gt;
* &#039;&#039;&#039;upload_leden_csv.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de cronjob&lt;br /&gt;
* &#039;&#039;&#039;gen_leden_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;het php script dat een bestand in CSV formaat maakt met de door VB gewenste velden.&lt;br /&gt;
* &#039;&#039;&#039;upload_bezoekersstatistiek.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de cronjob&lt;br /&gt;
* &#039;&#039;&#039;gen_bezoekersstatistiek_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;het php script dat een bestand in CSV formaat maakt met de bezoekersstatistieken.&lt;br /&gt;
&lt;br /&gt;
==CompUsers==&lt;br /&gt;
2020: VB heeft &#039;eigen&#039; afspraken met CU gemaakt, en stuurt ze op eigen houtje zomaar ledenbestanden toe. Onze scripts zijn daarmee zinloos geworden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;Met CompUsers zijn speciale afspraken gemaakt door Kantoor in januari 2014. Zij krijgen een sterk verkorte lijst van ALLE leden voor hun administratie. Het streven is dit zo spoedig mogelijk te vervangen door een ander mechanisme zoals de partner check.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;upload_compusers_csv.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de cronjob&lt;br /&gt;
* &#039;&#039;&#039;gen_compusers_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;het script dat een CSV maakt. Dit is een afgeslankt vorm van het &#039;&#039;&#039;gen_leden_csv.php&#039;&#039;&#039; script.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Koppeling met Tripolis=&lt;br /&gt;
Het oude &amp;quot;popbull&amp;quot; systeem dat bij HenZ draait is in de zomer van 2013 vervangen door Tripolis. Tripolis wordt al jaren gebruikt door kantoor voor het versturen van Digizine en de Nieuwsflash. Per groepering wordt een account aangemaakt met beperkte rechten waar mee de Correspondent van de groepering mailings kan versturen. Om Tripolis en ldap in sync te houden wordt er elke nacht data uitgewisseld. Ldap is leidend in deze maar als mensen zich uitschrijven (opt-out) via de knop onder aan de mailing, moet dat doorgegeven worden aan ldap. &lt;br /&gt;
&lt;br /&gt;
==Sync van Tripolis naar ldap==&lt;br /&gt;
* &#039;&#039;&#039;run_tripolis_import.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de eigenlijke cronjob&lt;br /&gt;
* &#039;&#039;&#039;import_tripolis_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;vertaalt de CSV van opt-outs naar het wissen van de individuele optins.&lt;br /&gt;
&lt;br /&gt;
Tripolis plaatst elke nacht om 00:01 een CSV bestand met de opt-outs per bulletin van de vorige dag. Dit gebeurt met datums. Als de datum van gisteren ingevuld staat is daar een optout geweest. Als er geen opt-outs zijn, bevat het veld slechts een lege string. Het  bestand wordt naar de ldap server gehaald waar een aantal versies bewaard worden. De bestanden wordt verwijderd van de sftp omgeving. Vervolgens worden het gedownloade bestand verwerkt om bij het lid de hccOptIn van dit bulletin te verwijderen.&lt;br /&gt;
&lt;br /&gt;
==Sync van ldap naar Tripolis==&lt;br /&gt;
* &#039;&#039;&#039;run_tripolis_export.sh&#039;&#039;&#039;&amp;lt;br&amp;gt;de eigenlijk cronjob&lt;br /&gt;
* &#039;&#039;&#039;gen_ldap_bul_export.php&#039;&#039;&#039;&amp;lt;br&amp;gt;maakt een volledige lijst aan van emailadres, lidnr en optins. Dit bestand gaat naar de sftp omgeving van Tripolis.&lt;br /&gt;
* &#039;&#039;&#039;gen_ldap_cor_export.php&#039;&#039;&#039;&amp;lt;br&amp;gt;maakt een lijst van alle correspondenten voor kantoor. Dit bestand gaat naar de sftp omgeving van Kantoor.&lt;br /&gt;
&lt;br /&gt;
Het export bestand wordt elke nacht (om 02:50) op de sftp omgeving voor Tripolis klaargezet. Tripolis haalt het om 05:00 op. Omdat de opt-outs van Tripolis om 02:15 verwerkt worden, is dit bestand dus al bijgewerkt voor wat betreft die opt-outs. Alle andere wijzigingen komen van de hcc.nl profielpagina&#039;s of mutaties door derden op ldap (mutaties door Hobbynet staff of PC30).&lt;br /&gt;
&lt;br /&gt;
==Rapportage==&lt;br /&gt;
&amp;lt;strike&amp;gt;Om ook de ledenadministratie in te lichten over leden die een optout op één of meer Tripolis mailings hebben gedaan, wordt na het verwerken van de optouts een mail gestuurd naar ledenadministratie@hcc.nl. Elke dag is er een nieuwe log file maar die wordt door dezelfde cronjob aan een archive geplakt. Zie mail_tripolis_reports.sh.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Egbert laat zich iedere nacht een rapportage mail sturen, zie mail_tripolis_export_report.sh.&lt;br /&gt;
&lt;br /&gt;
==Eénmalige jobs==&lt;br /&gt;
Er zijn een aantal php scripts voor éénmalig gebruik gemaakt. Deze worden niet in de cronjobs gebruikt maar waren slechts bedoeld om de lijsten opgeleverd door VB in LDAP te krijgen. Deze scripts zijn in de subdirectory &#039;&#039;&#039;popbull-specials&#039;&#039;&#039; geplaatst. &lt;br /&gt;
* &#039;&#039;&#039;import_digizine_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;de initiële Digizine lijst&lt;br /&gt;
* &#039;&#039;&#039;import_nieuwsflash_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;de initiële Nieuwsflash lijst&lt;br /&gt;
* &#039;&#039;&#039;import_popbull_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;de initiële lijst zoals die van HenZ (popbull provider) komt&lt;br /&gt;
&lt;br /&gt;
=ISIZ enquête=&lt;br /&gt;
Op verzoek geschreven scripts voor eenmalig gebruik. Terug te vinden in in de &#039;&#039;&#039;enquete-specials&#039;&#039;&#039; subdirectory. &lt;br /&gt;
* &#039;&#039;&#039;gen_enquete_csv.php&#039;&#039;&#039;&amp;lt;br&amp;gt;enquête per email&lt;br /&gt;
* &#039;&#039;&#039;gen_enquete_csv_no_mail.php&#039;&#039;&#039;&amp;lt;br&amp;gt;enquête per post&lt;br /&gt;
&lt;br /&gt;
=Nameserver=&lt;br /&gt;
* gen_mx_hcc.php&lt;br /&gt;
* gen_mx_hobby.php&lt;br /&gt;
* upd_nameserver.sh&lt;br /&gt;
&lt;br /&gt;
=Firewall (op ldap servers)=&lt;br /&gt;
* gen_xml_fw_ip4.php&lt;br /&gt;
* gen_xml_fw_ip6.php&lt;br /&gt;
* sync_hobbynetfw.sh&lt;br /&gt;
* gen_fw.sh&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79580</id>
		<title>LDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79580"/>
		<updated>2022-05-11T14:20:57Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* add-schema.ldif */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introductie==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==LDAP server keuze==&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Loadbalanced==&lt;br /&gt;
Er zijn twee servers (ldap-lb1 en ldap-lb2) die achter een loadbalancer in preferred server mode staan 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.&lt;br /&gt;
&lt;br /&gt;
Tevens zijn er een test en een development server: ldap-test en ldap-dev.&lt;br /&gt;
&lt;br /&gt;
==Installatie==&lt;br /&gt;
Installatie van OpenLDAP is simpel:&lt;br /&gt;
 aptitude install slapd ldap-utils&lt;br /&gt;
Omdat er gebruikgemaakt wordt van php scripts, is het ook nodig &#039;&#039;&#039;php-cli&#039;&#039;&#039; en &#039;&#039;&#039;php-ldap&#039;&#039;&#039; te installeren. De configuratie van OpenLDAP is sinds Karmic Koala iets gecompliceerder geworden. &#039;cn=config&#039; 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 &amp;quot;dpkg-reconfigure slapd&amp;quot; zet alleen de skeleton configuratie terug. Je moet zelf de database, root dn en acl&#039;s opzetten (als root of met sudo). Run  &#039;&#039;&#039;dpkg-reconfigure slapd&#039;&#039;&#039; om terug te gaan naar een lege directory. &lt;br /&gt;
&lt;br /&gt;
De volgende pakketten dienen geïnstalleerd te zijn (&#039;php -m&#039; toont de geactiveerde modules):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mogelijk ontbrekende pakketten:&lt;br /&gt;
&lt;br /&gt;
apt-get install aptitude &lt;br /&gt;
apt-get install php-mbstring&lt;br /&gt;
apt-get install php-xmlrpc&lt;br /&gt;
apt-get install php-ldap&lt;br /&gt;
apt-get install ldapscripts&lt;br /&gt;
apt-get install php-xml&lt;br /&gt;
apt-get install slapd&lt;br /&gt;
apt-get install ldap-utils&lt;br /&gt;
&lt;br /&gt;
- openldap moet lid zijn van de groep ssl-cert!&lt;br /&gt;
apt-get install ssl-cert&lt;br /&gt;
adduser openldap ssl-cert&lt;br /&gt;
(of vi /etc/group&lt;br /&gt;
    ssl-cert:x:116:openldap)&lt;br /&gt;
&lt;br /&gt;
- Zorg dat de LDAP daemon bij de certificaten kan komen. &lt;br /&gt;
LET OP: op alle hobbynet servers staan de certificaten in /disk/site/etc/ssl/hobby.nl/&lt;br /&gt;
 chgrp ssl-cert /disk/site/etc/ssl/hobby.nl/hobby.nl.*&lt;br /&gt;
 chmod 440      /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
LET OP: Als apparmor geïnstalleerd is moet het pad naar de certificaten vrijgegeven worden. Als alternatief kan apparmor verwijderd worden.&lt;br /&gt;
&lt;br /&gt;
Het volgende is niet nodig voor ldap. Mischien voor mysql-server???&lt;br /&gt;
- mysql laat het bestand ibdata1 ongelimiteerd groeien (InnoDB bestanden)&lt;br /&gt;
 /etc/mysql/mysql.conf.d/innodb_file_per_table.cnf&lt;br /&gt;
 [mysql]&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
&lt;br /&gt;
Nog meer Hobbynet aanpassingen Waarom??? &lt;br /&gt;
/etc/bash.bashrc&lt;br /&gt;
export http_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export https_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export ftp_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Locatie bestanden===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Alle ldif em tmpl bestanden gaan naar /usr/local/hobbynet/lib&lt;br /&gt;
* init_ldap en andere scripts gaan naar /usr/local/hobbynet/bin&lt;br /&gt;
* alle data bestanden (dumps) en update ldifs gaan naar /usr/local/hobbynet/data&lt;br /&gt;
* etc/ldap/schema/hcc_schema.* gaan naar /etc/ldap/schema&lt;br /&gt;
* etc/ldap/schema/ppolicy.ldif gaat naar /etc/ldap/schema&lt;br /&gt;
&lt;br /&gt;
hcc_schema.ldif wordt middels een script gemaakt. Dit script plaatst de ldif bestand(en) in /etc/ldap/schema. Zie hieronder.&lt;br /&gt;
&lt;br /&gt;
==Initiële database==&lt;br /&gt;
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.sh &amp;lt;admin-pw&amp;gt; gebruikt dan wordt een werkende directory gemaakt met alle statische data (in diverse ou&#039;s) erin. Gebruik na het maken van de initiële database restore_ldap.sh om de database te vullen met de data uit de data directory.&lt;br /&gt;
&lt;br /&gt;
===slapd.init.ldif ===&lt;br /&gt;
Bij installatie en reconfiguratie wordt /usr/share/slapd/slapd.init.ldif ingelezen. Zie aldaar indien nodig. Er wordt zowel voor de cn=config als voor de dc=hcc,dc=nl een RootDN aangemaakt. Echter wordt er geen password gezet op de RootDN voor config.&lt;br /&gt;
&lt;br /&gt;
==init_ldap script==&lt;br /&gt;
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 &#039;&#039;&#039;cn=admin,dc=hcc,dc=nl&#039;&#039;&#039; 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 &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; laadt vervolgens de laatste dump terug. Bij wijzigingen aan het schema is het raadzaam altijd een &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; te doen zodat een later een actuele dump kan worden teruggeladen.&lt;br /&gt;
&lt;br /&gt;
Het (plain text) password van cn=admin,dc=hcc,dc=nl moet bij het aanroepen van &#039;&#039;&#039;init_ldap&#039;&#039;&#039; op de commandline worden meegegeven. Tijdens de dpkg-reconfigure moet het password nog 2x gegeven worden. Lees eventueel ook de [http://www.openldap.org/doc/admin/ OpenLDAP Admin Guide].&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* voorbereidingen om &amp;quot;dpkg-reconfigure slapd&amp;quot; te draaien&lt;br /&gt;
* definities van input files&lt;br /&gt;
* check host&lt;br /&gt;
* bouwen van het skelet van de nieuwe directory&lt;br /&gt;
Zie voor details van de scripts &#039;&#039;&#039;init_ldap&#039;&#039;&#039;, &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; en &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; op een van de servers (in /usr/local/hobbynet/bin).&lt;br /&gt;
&lt;br /&gt;
==onderdelen van init_ldap==&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===add-schema.ldif===&lt;br /&gt;
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. &lt;br /&gt;
* Hiertoe wordt het onderstaande schema in /etc/ldap/schema geplaatst als hcc_schema.schema. &lt;br /&gt;
* Vervolgens worden de stappen uitgevoerd zoals beschreven in de [https://help.ubuntu.com/11.10/serverguide/C/openldap-server.html Ubuntu Server guide], onder &#039;&#039;&#039;Modifying the slapd Configuration Database&#039;&#039;&#039;. &lt;br /&gt;
* De resulterende output file &#039;&#039;&#039;cn=hcc_schema.ldif&#039;&#039;&#039; moet dan nog naar /etc/ldap/schema/hcc_schema.ldif gecopieerd worden. &lt;br /&gt;
Als dit proces herhaald moet worden, start dan met een lege output directory en verwijder een eventueel achtergebleven cn=hcc_schema.ldif bestand. &lt;br /&gt;
&lt;br /&gt;
De extra schema&#039;s worden middels een &#039;&#039;&#039;include&#039;&#039;&#039; toegevoegd. &#039;&#039;&#039;Ppolicy&#039;&#039;&#039; is op gelijke wijze als &#039;&#039;&#039;hcc_schema&#039;&#039;&#039; tot .ldif geconverteerd. Alle stappen om een nieuwe &#039;&#039;&#039;hcc-schema.ldif&#039;&#039;&#039; te maken zijn gescript in &#039;&#039;&#039;upd_schema&#039;&#039;&#039;. In &#039;&#039;&#039;init_ldap&#039;&#039;&#039; wordt het eigen schema en de password policy geladen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: add-schema.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
# date: vbs20220511 ppolicy not included to get&lt;br /&gt;
#       of duplicate message&lt;br /&gt;
#&lt;br /&gt;
include: file:///etc/ldap/schema/hcc_schema.ldif&lt;br /&gt;
#include: file:///etc/ldap/schema/ppolicy.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ldapns.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====schema updates====&lt;br /&gt;
Soms wordt een attribute toegevoegd of gewijzigd. Hiertoe dient het bestand hcc_schema.schema in /usr/local/hobbynet/etc/ldap/schema, gewijzigd te worden. Daarna dient er een ldif versie van gemaakt te worden. Gebruik hiervoor &#039;&#039;&#039;upd_schema.sh&#039;&#039;&#039; in dezelfde directory. De resulterende hcc_schema.ldif wordt in dit script naar /etc/ldap/schema gecopieërd. Bij grote wijzigingen is het aan te bevelen door de hele rebuild cycle te gaan (dump, init, restore). Bij triviale aanpassingen zou hcc_schema.ldif ook &#039;&#039;&#039;direct&#039;&#039;&#039; in de actieve directory geplaatst kunnen worden, gevolgd door slechts een &#039;&#039;&#039;service slapd restart&#039;&#039;&#039;. Gebruik hiervoor (blijf in de lokale schema directory):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp &amp;quot;ldif_output/cn=config/cn=schema/cn={14}hcc_schema.ldif&amp;quot; &amp;quot;/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}hcc_schema.ldif&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
LET OP: De nummers tussen accolades zijn bepaald door de volgorde van andere scripts! Zolang geen andere schema&#039;s worden toegevoegd zullen ze niet veranderen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ook kan met de ldap-tools gewerkt worden. Gebruik ldapsearch en ldapmodify, eventueel met de -f optie om een voorbereide serie opdrachten uit te voeren. Gebruik ldapsearch om eerst de structuur te vinden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier een voorbeeld om een objectClass aan te passen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat pas_aan.ldif&lt;br /&gt;
dn: cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
delete: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description ) )&lt;br /&gt;
-&lt;br /&gt;
add: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description $ hccIg ) )&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
$sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f pas_aan.ldif &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_config.ldif===&lt;br /&gt;
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 &#039;&#039;&#039;STATS&#039;&#039;&#039; gezet. Dit geeft niet teveel logging maar is toch goed bruikbaar. Om extra logging te krijgen op b.v. ACL&#039;s, verander olcLogLevel dan in &amp;quot;stats ACL&amp;quot;.  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-config.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcTLSCACertificateFile&lt;br /&gt;
olcTLSCACertificateFile: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
-&lt;br /&gt;
add: olcTLSCertificateFile&lt;br /&gt;
olcTLSCertificateFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
-&lt;br /&gt;
add: olcTLSCertificateKeyFile&lt;br /&gt;
olcTLSCertificateKeyFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
-&lt;br /&gt;
add: olcPasswordHash&lt;br /&gt;
olcPasswordHash: {CRYPT}&lt;br /&gt;
-&lt;br /&gt;
add: olcPasswordCryptSaltFormat&lt;br /&gt;
olcPasswordCryptSaltFormat: $6$%.16s&lt;br /&gt;
-&lt;br /&gt;
replace: olcLogLevel&lt;br /&gt;
olcLogLevel: stats&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Om de logging in een apart bestand te krijgen moet in /etc/rsyslog.d een extra bestand &#039;&#039;&#039;openldap.conf&#039;&#039;&#039; geplaatst worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local4.*   -/var/log/openldap.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Tevens willen we logrotate op dit bestand. Plaats in /etc/logrotate.d het bestand &#039;&#039;&#039;openldap&#039;&#039;&#039; met de volgende inhoud&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/log/openldap.log&lt;br /&gt;
{&lt;br /&gt;
        rotate 4&lt;br /&gt;
        weekly&lt;br /&gt;
        missingok&lt;br /&gt;
        notifempty&lt;br /&gt;
        compress&lt;br /&gt;
        delaycompress&lt;br /&gt;
        sharedscripts&lt;br /&gt;
        postrotate&lt;br /&gt;
                reload rsyslog &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 || true&lt;br /&gt;
        endscript&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify-mdb.ldif===&lt;br /&gt;
Hier worden de wijzigingen op de backend db gemaakt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-mdb.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
# hjv 2020.06.07 (oldSizeLimit toegevoegd)&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcDbCheckpoint&lt;br /&gt;
olcDbCheckpoint: 4096 1&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbNoSync&lt;br /&gt;
olcDbNoSync: TRUE&lt;br /&gt;
-&lt;br /&gt;
replace: olcSizeLimit&lt;br /&gt;
olcSizeLimit: 100000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===modify-acl.ldif===&lt;br /&gt;
Hier worden de rechten bepaald van de diverse rollen en groepen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-acl.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcAccess&lt;br /&gt;
# hobbynetlogin heeft lees rechten t.b.v. MySecureShell aanloggen&lt;br /&gt;
olcAccess: to attrs=@posixAccount,@posixGroup,@shadowAccount,@hostObject&lt;br /&gt;
  by dn=&amp;quot;cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to attrs=@posixAccount&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# sta anonymous search toe (t.b.v. Apache authenticatie)&lt;br /&gt;
olcAccess: to attrs=hccLogin,hccRol,hccProfiel,entry&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# olcAccess: to attrs=hccOptIn&lt;br /&gt;
#   by self write&lt;br /&gt;
#   by dn=&amp;quot;cn=drupal-hcc-nl,ou=klanten,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
#   by * break&lt;br /&gt;
#&lt;br /&gt;
# Anonieme klanten moeten kunnen inloggen&lt;br /&gt;
# en mogen hun eigen password wijzigen&lt;br /&gt;
olcAccess: to attrs=userPassword,shadowLastChange&lt;br /&gt;
  by self write&lt;br /&gt;
  by anonymous auth&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# Gebruiker mag zijn kader email wachtwoord aanpassen&lt;br /&gt;
olcAccess: to attrs=hccKaderPassword,hccKaderForward&lt;br /&gt;
  by self write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# beheerders hebben schrijfrechten op alles (updateDN)&lt;br /&gt;
# klanten hebben alleen lees rechten op alles (readDN)&lt;br /&gt;
# self mag lezen&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by self read&lt;br /&gt;
  by dn=&amp;quot;cn=xml-hoge-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn=&amp;quot;cn=xml-lage-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by dn.one=&amp;quot;ou=beheer,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn.one=&amp;quot;ou=klanten,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# PC30 helpdesk heeft leesrechten op ou=leden&lt;br /&gt;
olcAccess: to attrs=@hccOrgPerson,@hccKaderFunctie&lt;br /&gt;
  by dn.one=&amp;quot;ou=helpdesk,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# partners mogen een paar attrs lezen&lt;br /&gt;
olcAccess: to attrs=hccLidNummer,hccPostcode,hccPostcodeZoekveld,hccIg&lt;br /&gt;
  by dn.one=&amp;quot;ou=partners,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# iedereen moet (pseudo attr) entry en objectClass kunnen lezen&lt;br /&gt;
olcAccess: to attrs=entry,objectClass&lt;br /&gt;
  by * read&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by * none&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_index.ldif===&lt;br /&gt;
Een kale configuratie is heel snel voor wat betreft het opnieuw vullen met gegevens. Bij het aanmaken van een verse LDAP database worden er dan ook zo min mogelijk indexen aangemaakt.&amp;lt;br&amp;gt;&lt;br /&gt;
Zodra de inhoud is ingelezen kunnen de &#039;echte&#039; indexen aangemaakt worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-index.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcDbIndex&lt;br /&gt;
olcDbIndex: default pres,eq&lt;br /&gt;
olcDbIndex: objectClass,entryUUID,entryCSN eq&lt;br /&gt;
olcDbIndex: hccLidNummer,hccLogin,hccForumLogin eq&lt;br /&gt;
olcDbIndex: uid,uidNumber,gidNumber,memberUid,member eq&lt;br /&gt;
olcDbIndex: cn,host,hccPseudoniem,hccOptin,hccLocatie eq&lt;br /&gt;
olcDbIndex: sn,hccPostcodeZoekveld,hccIg,hccRegio eq,subfinal&lt;br /&gt;
olcDbIndex: hccRol,hccBezoek eq,pres,subfinal&lt;br /&gt;
olcDbIndex: hccBulletins pres&lt;br /&gt;
olcDbIndex: aboNummer eq&lt;br /&gt;
olcDbIndex: aboPostcodeZoekveld eq,subfinal&lt;br /&gt;
olcDbIndex: mail,mailHccnet,hccKaderMail,hccKaderForward pres,eq&lt;br /&gt;
olcDbIndex: hccProfiel pres,eq&lt;br /&gt;
olcDbindex: hccKaderUniekeURL eq&lt;br /&gt;
olcDbindex: hccOnderwerp eq,subfinal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ppolicy overlay===&lt;br /&gt;
* vanuit LDAP de minimale lengte van een wachtwoord afdwingen&lt;br /&gt;
* in LDAP SSHA versleuteling activeren&amp;lt;br&amp;gt;&lt;br /&gt;
(olcPPolicyHashCleartext: TRUE)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: add-ppolicy.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: cn=module, cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectClass: olcModuleList&lt;br /&gt;
objectClass: top&lt;br /&gt;
olcModuleLoad: ppolicy&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=ppolicy,olcDatabase={1}mdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcPPolicyConfig&lt;br /&gt;
olcOverlay: ppolicy&lt;br /&gt;
olcPPolicyDefault: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
olcPPolicyUseLockout: TRUE&lt;br /&gt;
olcPPolicyHashCleartext: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The default ppolicy looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dn: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
objectClass: pwdPolicy&lt;br /&gt;
objectClass: device&lt;br /&gt;
cn: default&lt;br /&gt;
pwdCheckQuality: 1&lt;br /&gt;
pwdMinLength: 8&lt;br /&gt;
pwdAttribute: 2.5.4.35&lt;br /&gt;
pwdAllowUserChange: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Syncrepl overlay===&lt;br /&gt;
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 [http://www.openldap.org/doc/admin/ LDAP Admin Guide]. &#039;&#039;&#039;Mirror configuratie is specifiek per server!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-syncrepl.tmpl                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
replace: olcServerID&lt;br /&gt;
olcServerID: @SID@&lt;br /&gt;
&lt;br /&gt;
dn: cn=module{0},cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcModuleLoad&lt;br /&gt;
olcModuleLoad: syncprov&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcSyncProvConfig&lt;br /&gt;
olcOverlay: syncprov&lt;br /&gt;
olcSpCheckpoint: 100 5&lt;br /&gt;
olcSpSessionlog: 100&lt;br /&gt;
&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcSyncRepl&lt;br /&gt;
olcSyncRepl: rid=@RID@&lt;br /&gt;
  provider=ldap://@PROVIDER@&lt;br /&gt;
  binddn=&amp;quot;cn=admin,dc=hcc,dc=nl&amp;quot; bindmethod=simple credentials=&amp;quot;@PASSWORD@&amp;quot;&lt;br /&gt;
  searchbase=&amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
  type=refreshAndPersist&lt;br /&gt;
  interval=00:00:00:10&lt;br /&gt;
  retry=&amp;quot;5 5 300 5&amp;quot;&lt;br /&gt;
  timeout=1&lt;br /&gt;
  starttls=yes&lt;br /&gt;
-&lt;br /&gt;
add: olcMirrorMode&lt;br /&gt;
olcMirrorMode: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
De andere server krijgt ServerID 2 en de provider is het IP adres van de andere server.&lt;br /&gt;
&lt;br /&gt;
===Unique overlay===&lt;br /&gt;
Deze overlay dient er voor te zorgen dat o.a het attribuut hccLogin een unieke waarde bevat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-unique.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module,cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectclass: olcModuleList&lt;br /&gt;
objectclass: top&lt;br /&gt;
olcmoduleload: unique&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=unique,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcUniqueConfig&lt;br /&gt;
olcOverlay: unique&lt;br /&gt;
olcUniqueAttribute: uid uidNumber hccLogin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SSL/TLS beveiliging==&lt;br /&gt;
Gebruik de juiste .pem bestanden in /etc/ssl/certs en /etc/ssl/private.&lt;br /&gt;
&lt;br /&gt;
We maken gebruik van een RapidSSL certificaat. Als dit niet standaard in Ubuntu bekend is, zet dan eerst GeoTrust_RapidSSL_-_ca-bundle.pem in de map /etc/ssl/certs neer. Voer nu een &#039;&#039;&#039;c_rehash .&#039;&#039;&#039; uit in /etc/ssl/certs om de cache te updaten (omdat GeoTrust_RapidSSL_-_ca-bundle.pem nieuw werd toegevoegd). &lt;br /&gt;
&lt;br /&gt;
De ownership is belangrijk. Hiertoe wordt de groep &amp;quot;openldap&amp;quot; toegevoegd aan de groep ssl-cert.&lt;br /&gt;
 adduser openldap ssl-cert&lt;br /&gt;
&lt;br /&gt;
Als dit fout gaat, doe dan eerst:&lt;br /&gt;
 apt-get install ssl-cert&lt;br /&gt;
&lt;br /&gt;
Zet het certificaat en de private key in de juiste groep:&lt;br /&gt;
 chgrp ssl-cert /etc/ssl/private/hobby.nl.*&lt;br /&gt;
 chmod 440      /etc/ssl/private/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
Het resultaat is dan als volgt:&lt;br /&gt;
 root@hcc-ldap-lb1:~# ls -l /etc/ssl/private/hcc* &lt;br /&gt;
 -rw-r--r-- 1 root     ssl-cert 1724 Nov 22 20:47 hobby.nl.crt&lt;br /&gt;
 -r--r----- 1 root     ssl-cert 1679 Nov 22 20:25 hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
 root@hcc-ldap-lb1:~# grep openldap /etc/group&lt;br /&gt;
 ssl-cert:x:114:openldap&lt;br /&gt;
 openldap:x:118:&lt;br /&gt;
&lt;br /&gt;
2020.12.09: Op een nieuwe Ubuntu installatie staat apparmor standaard aan. Weg ermee!&lt;br /&gt;
 apt remove --assume-yes --purge apparmor&lt;br /&gt;
&amp;lt;strike&amp;gt;Per september 2017 staan de certificaten in /disk/site/etc/ssl/hobby.nl, net als op alle andere servers. Omdat apparmor actief is moet deze directory worden toegevoegd aan /etc/apparmor.d/local/usr.sbin.slapd. Die file ziet er dan als volgt uit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Site-specific additions and overrides for usr.sbin.slapd.&lt;br /&gt;
# For more details, please see /etc/apparmor.d/local/README.&lt;br /&gt;
#include &amp;lt;abstractions/ssl_certs&amp;gt;&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/ r,&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/* r,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Openldap ook op poort 636 benaderd wordt (naast TLS op 389), moet in /etc/default/slapd ldaps:/// opgenomen worden bij de SLAPD_SERVICES.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;netstat -an&#039; dient dan 636 te laten zien voor zowel IPv4 als IPv6.&lt;br /&gt;
&lt;br /&gt;
Om de cn=config te zien kan je het volgende commando gebruiken:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config&lt;br /&gt;
&lt;br /&gt;
of, wat botter maar korter:&lt;br /&gt;
cat /etc/ldap/slapd.d/cn\=config.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Backup, initialize, restore==&lt;br /&gt;
Om het hele skelet van ldap in één keer te herstellen dient &#039;&#039;&#039;init_ldap&#039;&#039;&#039; gebruikt te worden. Als argument &#039;&#039;&#039;moet&#039;&#039;&#039; het admin beheer wachtwoord mee gegeven worden.&lt;br /&gt;
&lt;br /&gt;
===lokaal===&lt;br /&gt;
Backups kunnen gemaakt worden terwijl slapd draait maar geadviseerd wordt slapd te stoppen. Voor dumpen moet &#039;&#039;&#039;slapcat&#039;&#039;&#039; gebruikt worden. Backups kunnen gemaakt worden per database of een filter daarop, naar een ldif bestand.&lt;br /&gt;
 slapcat -l hcc-dump.ldif -b &amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
Dit maakt een dump van alles onder &#039;&#039;&#039;dc=hcc,dc=nl&#039;&#039;&#039; naar het bestand hcc-dump.ldif. Ook is het mogelijk het database nummer te gebruiken, config is altijd nummer 0, hdb is gewoonlijk 1.&lt;br /&gt;
&lt;br /&gt;
Het &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; script dumpt alle ou&#039;s in aparte .ldif bestanden; het omgekeerde doet &#039;&#039;&#039;restore_ldap&#039;&#039;&#039;.  &lt;br /&gt;
Terug inlezen kan alleen in een lege directory, dus direct nadat &#039;&#039;&#039;init_ldap&#039;&#039;&#039; is gedaan. Gebruik voor het terugplaatsen &#039;&#039;&#039;slapadd&#039;&#039;&#039;. Aan te bevelen is &#039;&#039;&#039;-c&#039;&#039;&#039; mee te geven zodat ondanks fouten doorgegaan wordt. &lt;br /&gt;
&lt;br /&gt;
Voor slapadd &#039;&#039;&#039;moet&#039;&#039;&#039; 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)&lt;br /&gt;
 /etc/init.d/slapd stop&lt;br /&gt;
 slapadd -l hcc-dump.ldif -w -c &amp;gt;errors.txt&lt;br /&gt;
 chown openldap:openldap /var/lib/ldap/*&lt;br /&gt;
 /etc/init.d/slapd start&lt;br /&gt;
&lt;br /&gt;
===remote===&lt;br /&gt;
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 &#039;&#039;&#039;backup-encrypted&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Recente lokale backups zijn te vinden in &#039;&#039;&#039;/usr/local/hobbynet/tmp&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Verse ldap maken===&lt;br /&gt;
Transactie log bij het toevoegen van b.v. een nieuwe ou:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Op beide servers:&lt;br /&gt;
schema van test server gecopieerd en geactiveerd&lt;br /&gt;
dump-ldap gedraaid&lt;br /&gt;
systemctl stop slapd.service &lt;br /&gt;
&lt;br /&gt;
Er is nu géén ldap service! Werk dus snel...&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb1&lt;br /&gt;
systemctl stop slapd.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
op ldap-lb2:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb2&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
systemctl start slapd.service&lt;br /&gt;
Beide slapd servers zijn in de lucht en moeten synchroniseren.&lt;br /&gt;
&lt;br /&gt;
op beide servers:&lt;br /&gt;
check replicatie (netstat en functioneel)&lt;br /&gt;
&lt;br /&gt;
root@ldap-lb1:/usr/local/hobbynet/bin# netstat -n | grep 389&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:49510 2a02:968:ffff:910:172:31:8:4:389 ESTABLISHED&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:389 2a02:968:ffff:910:172:31:8:4:37490 ESTABLISHED&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:49508 2a02:968:ffff:910:172:31:8:4:389 ESTABLISHED&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:389 2a02:968:ffff:910:172:31:8:4:37488 ESTABLISHED&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Functioneel door met ADS op beide servers in te loggen en een willekeurig veld in je eigen entry te wijzigen op lb1. Kijk of het gebeurd is op lb2 en wijzig het daar terug. Check op de andere server of het gebeurd is. Er kan een zekere vertraging in optreden.&lt;br /&gt;
&lt;br /&gt;
Stel er is een nieuwe ou gemaakt: denk aan het bij werken van de dump en restore scripts.&lt;br /&gt;
&lt;br /&gt;
update dump-ldap.sh en restore-ldap.sh met de nieuwe ou&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
export tarieven.ldif op test server en import op ldap-lb1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==crontab==&lt;br /&gt;
 # script dat updates ophaalt (maar niet installeert), zodat nagios ze ook detecteert&lt;br /&gt;
 0 9 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
==LDAP Clients==&lt;br /&gt;
Er zijn meerdere LDAP clients. De meest populaire zijn Apache Directory Studio (&amp;quot;ADS&amp;quot;) en phpLdapAdmin (&amp;quot;PLA&amp;quot;).&amp;lt;br&amp;gt;&lt;br /&gt;
De eerste is veel uitgbreider maar vereist een Java Runtime Environment (&amp;quot;JRE&amp;quot;). Onder Windows is dat JRE(13) of (open)JDK-(13).&amp;lt;br&amp;gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Binnen Hobbynet wordt uitsluitend gebruik gemaakt van ADS.&lt;br /&gt;
&lt;br /&gt;
===StartTLS===&lt;br /&gt;
Aanbevolen wordt StartTLS op poort 389 te gebruiken. Alternatief is LDAPS op poort 636 maar dat is deprecated. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Windows===&lt;br /&gt;
&amp;lt;i&amp;gt;2019-10-31 HJV: Oude info, als referentie leuk, maar niet meer relevant&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Onder Windows moet met &#039;&#039;&#039;keytool.exe&#039;&#039;&#039; gewerkt worden. De uitleg heb ik van  [http://www.talkingtree.com/blog/index.cfm?mode=entry&amp;amp;entry=25AA75A4-45A6-2844-7CA3EECD842DB576 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:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Haal de benodigde bestanden op (op een Linux systeem):&lt;br /&gt;
wget http://www.cacert.org/certs/root.der -O root.der&lt;br /&gt;
wget http://www.cacert.org/certs/class3.der -O class3.der&lt;br /&gt;
copieer de bestanden naar de Windows omgeving in C:\Program Files (x86)\Java\jre6\lib\security.&lt;br /&gt;
&lt;br /&gt;
Open een commandwindow:&lt;br /&gt;
cd C:\Program Files (x86)\Java\jre6\lib\security&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass1 -file root.der&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass3 -file class3.der&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Linux===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS gebruik===&lt;br /&gt;
ADS kan erg handig zijn voor het snel dumpen van hele ou&#039;s in .ldif formaat. Zo&#039;n dump kan direct op een andere server worden ingelezen.&lt;br /&gt;
&lt;br /&gt;
===PhpLdapAdmin onder Linux===&lt;br /&gt;
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 [http://phpldapadmin.sourceforge.net/wiki/index.php/Server:server:tls phpldapadmin wiki].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# LDAP Defaults&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# See ldap.conf(5) for details&lt;br /&gt;
# This file should be world readable but not world writable.&lt;br /&gt;
&lt;br /&gt;
#BASE   dc=example,dc=com&lt;br /&gt;
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666&lt;br /&gt;
&lt;br /&gt;
#SIZELIMIT      12&lt;br /&gt;
#TIMELIMIT      15&lt;br /&gt;
#DEREF          never&lt;br /&gt;
TLS_CACERT      /etc/ssl/certs/CAcert_org.pem&lt;br /&gt;
TLS_CERT        /etc/ssl/private/hobby.nl.crt&lt;br /&gt;
TLS_KEY         /etc/ssl/private/hobby.nl.key&lt;br /&gt;
TLS_REQCERT     allow&lt;br /&gt;
#TLS_REQCERT never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Denk er wel aan na wijzigingen Apache te herstarten.&lt;br /&gt;
===PAM en NSS via LDAP===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Installeer &#039;&#039;&#039;libnss-ldapd&#039;&#039;&#039; om de benodigde libraries te verkrijgen. Apt-get zal tevens &#039;&#039;&#039;libpam-ldapd&#039;&#039;&#039;, &#039;&#039;&#039;nslcd&#039;&#039;&#039; en &#039;&#039;&#039;nscd&#039;&#039;&#039; binnen brengen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install libnss-ldapd auth-client-config ldap-utils&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
    libpam-ldapd nscd nslcd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Libnss-ldapd is een doorontwikkeling van libnss-ldap en bevat meerdere verbeteringen. Zie: [http://arthurdejong.org/nss-pam-ldapd/ deze site] van de ontwikkelaar. Bij de installatie wordt een user &#039;&#039;&#039;nslcd&#039;&#039;&#039; aangemaakt; denk erom die in de .tmpl bestanden te zetten!&lt;br /&gt;
  &lt;br /&gt;
nsswitch.conf laat zich configureren via &#039;&#039;&#039;auth-client-config&#039;&#039;&#039; maar lac_ldap is alleen aanwezig als &#039;&#039;&#039;ldap-auth-config&#039;&#039;&#039; ook is geinstalleerd. Zo niet gebruik dan de tweede regel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auth-client-config -t nss -p lac_ldap&lt;br /&gt;
auth-client-config -t nss -p ldap_example&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het resultaat is dat nsswitch.conf zowel in files (/etc/passwd etc.) zoekt als in ldap.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nsswitch.conf&lt;br /&gt;
#&lt;br /&gt;
# Example configuration of GNU Name Service Switch functionality.&lt;br /&gt;
# If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
# `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # passwd:         compat&lt;br /&gt;
passwd: files ldap&lt;br /&gt;
# pre_auth-client-config # group:          compat&lt;br /&gt;
group: files ldap&lt;br /&gt;
# pre_auth-client-config # shadow:         compat&lt;br /&gt;
shadow: files ldap&lt;br /&gt;
&lt;br /&gt;
hosts:          files dns&lt;br /&gt;
networks:       files&lt;br /&gt;
&lt;br /&gt;
protocols:      db files&lt;br /&gt;
services:       db files&lt;br /&gt;
ethers:         db files&lt;br /&gt;
rpc:            db files&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # netgroup:       nis&lt;br /&gt;
netgroup: nis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het aanpassen van de PAM bestanden gaat sinds enige releases met &#039;&#039;&#039;pam-auth-update&#039;&#039;&#039;. Kies in het menu voor zowel unix als ldap. Default wordt nu ldap authenticatie gebruikt voor uid &amp;gt;= 1000. Bij Hobbynet willen we vanaf 300 ldap gebruiken. Door een licht gemodificeerde versie van /usr/share/pam-configs/ldap te maken (ldap-hobbynet), kan ook voor de hobbynet instelling gekozen worden. Dit is de ldap-hobbynet versie:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Name: LDAP Authentication (uid&amp;gt;300)&lt;br /&gt;
Default: yes&lt;br /&gt;
Priority: 128&lt;br /&gt;
Auth-Type: Primary&lt;br /&gt;
Auth-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Auth:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 use_first_pass&lt;br /&gt;
Account-Type: Additional&lt;br /&gt;
Account:&lt;br /&gt;
        [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad]        pam_ldap.so minimum_uid=300&lt;br /&gt;
Password-Type: Primary&lt;br /&gt;
Password-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Password:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 try_first_pass&lt;br /&gt;
Session-Type: Additional&lt;br /&gt;
Session:&lt;br /&gt;
        [success=ok default=ignore]     pam_ldap.so minimum_uid=300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dit is in een standaard opzet van LDAP voldoende om zowel lokale gebruikers als gebruikers opgeslagen in LDAP, te laten inloggen en hun password te laten wijzigen. In de Hobbynet setup moet er echter nog meer gebeuren in de ACL&#039;s van de LDAP server configuratie. Omdat Hobbynet de laatste ACL regel heeft gewijzigd in een &#039;&#039;&#039;deny-all&#039;&#039;&#039;, is er een helper of proxy account nodig dat read access heeft of een aantal cruciale velden in de posixAccount objectClass. Zie verder de lsiting van nslcd.conf.&lt;br /&gt;
&lt;br /&gt;
Libnss-ldapd en libpam-ldapd hebben een gezamelijke daemon &#039;&#039;&#039;nslcd&#039;&#039;&#039; die z&#039;n configuratie uit &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039; haalt. Hierin is ook een voorziening voor het helper account. Aan het eind vande &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; staat de voorziening voor host-based login. Als het attribute &#039;&#039;&#039;host&#039;&#039;&#039; de fqdn of alleen de host naam bevat, bepaald dat of inloggen op die host mogelijk is. &#039;&#039;&#039;*&#039;&#039;&#039; staat inloggen op alle hosts toe.&lt;br /&gt;
&lt;br /&gt;
Eventueel kan het daemon proces voor debugging doeleinden ook als command (&#039;&#039;&#039;nslcd -d&#039;&#039;&#039;) gestart worden. Om de bevragingen van de LDAP server wat te verminderen, kan &#039;&#039;&#039;nscd&#039;&#039;&#039; voor caching zorgen. Deze cache daemon heeft zijn eigen configuratie bestand: &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039;. De default instellingen zijn goed; eventueel kan de logging naar een bestand gestuurd worden.&lt;br /&gt;
&lt;br /&gt;
Verbinding met de LDAP server kan met StartTLS beveiligd worden. Hier de inhoud van nslcd.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nslcd.conf&lt;br /&gt;
# nslcd configuration file. See nslcd.conf(5)&lt;br /&gt;
# for details.&lt;br /&gt;
&lt;br /&gt;
# The user and group nslcd should run as.&lt;br /&gt;
uid nslcd&lt;br /&gt;
gid nslcd&lt;br /&gt;
&lt;br /&gt;
# log location and level&lt;br /&gt;
#log /var/log/nslcd.log debug&lt;br /&gt;
&lt;br /&gt;
# The location at which the LDAP server(s) should be reachable.&lt;br /&gt;
uri ldap://ldap2-int.hobby.nl/&lt;br /&gt;
&lt;br /&gt;
# The search base that will be used for all queries.&lt;br /&gt;
base dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# Other base mappings&lt;br /&gt;
base   group  ou=groups,dc=hcc,dc=nl&lt;br /&gt;
base   passwd ou=users,dc=hcc,dc=nl&lt;br /&gt;
base   shadow ou=users,dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# The search scope.&lt;br /&gt;
#scope sub&lt;br /&gt;
&lt;br /&gt;
# The LDAP protocol version to use.&lt;br /&gt;
ldap_version 3&lt;br /&gt;
&lt;br /&gt;
# The DN to bind with for normal lookups.&lt;br /&gt;
#binddn cn=annonymous,dc=example,dc=net&lt;br /&gt;
#bindpw secret&lt;br /&gt;
binddn cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&lt;br /&gt;
bindpw xxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
# The DN used for password modifications by root.&lt;br /&gt;
#rootpwmoddn cn=admin,dc=example,dc=com&lt;br /&gt;
&lt;br /&gt;
# SSL options&lt;br /&gt;
ssl off&lt;br /&gt;
ssl start_tls&lt;br /&gt;
#tls_reqcert never&lt;br /&gt;
tls_cacertfile /etc/ssl/certs/cacert.org.pem&lt;br /&gt;
#tls_cert /etc/ssl/private/server.crt&lt;br /&gt;
#tls_key /etc/ssl/private/server.key&lt;br /&gt;
&lt;br /&gt;
# The minimum uid&lt;br /&gt;
nss_min_uid 300&lt;br /&gt;
&lt;br /&gt;
pam_authz_search (&amp;amp;(objectClass=posixAccount)(uid=$username)(|(host=$hostname)(host=$fqdn)(host=\\*)))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===users en groepen toevoegen===&lt;br /&gt;
Hiervoor moet &#039;&#039;&#039;ldapscripts&#039;&#039;&#039; zijn geïnstalleerd. Dit is het geval op de ldap-lb1 server. Dat levert de volgende extra commando&#039;s op:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldaprenamemachine&lt;br /&gt;
ldapadduser&lt;br /&gt;
ldapdeleteuserfromgroup&lt;br /&gt;
ldapfinger&lt;br /&gt;
ldapid&lt;br /&gt;
ldapgid&lt;br /&gt;
ldapmodifyuser&lt;br /&gt;
ldaprenameuser&lt;br /&gt;
lsldap&lt;br /&gt;
ldapaddusertogroup&lt;br /&gt;
ldapsetpasswd&lt;br /&gt;
ldapinit&lt;br /&gt;
ldapaddgroup&lt;br /&gt;
ldapdeletegroup&lt;br /&gt;
ldapmodifygroup&lt;br /&gt;
ldapdeletemachine&lt;br /&gt;
ldaprenamegroup&lt;br /&gt;
ldapaddmachine&lt;br /&gt;
ldapmodifymachine&lt;br /&gt;
ldapsetprimarygroup&lt;br /&gt;
ldapdeleteuser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Meest gebruikt zijn &#039;&#039;&#039;ldapaddgroup, ldapadduser, ldapsetpasswd&#039;&#039;&#039;.  &lt;br /&gt;
Er zijn manpages maar er is ook uitgebreide uitleg in de [https://help.ubuntu.com/14.04/serverguide/openldap-server.html Ubuntu server guide]. Omdat wij het automatisch maken van de home dir uit hebben staan, moet die met de hand aangemaakt worden en moet de owner goed gezet worden.&lt;br /&gt;
&lt;br /&gt;
===host-based login===&lt;br /&gt;
Met een kleine uitbreiding in het schema van de LDAP server, kan host-based login gerealiseerd worden. Ook in de &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; is een uitbreiding nodig.&lt;br /&gt;
&lt;br /&gt;
In de LDAP server dient de objectClass &#039;&#039;&#039;hostObject&#039;&#039;&#039; aan de entries in de ou=users toegevoegd te worden. Deze (auxilary) objectClass brengt slechts één attribute met zich mee: &#039;&#039;&#039;host&#039;&#039;&#039;. De regel in nslcd.conf checkt of één van de waarden van &#039;&#039;&#039;host&#039;&#039;&#039; gelijk is aan de naam van de server waarop ingelogd wordt. De waarde &#039;&#039;&#039;*&#039;&#039;&#039; geldt als wildcard. Zie de regel &#039;&#039;&lt;br /&gt;
&#039;pam_authz_search&#039;&#039;&#039;&#039; in &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Password aanpassen===&lt;br /&gt;
Via LDAP ingelogde gebruikers kunnen net als lokale gebruikers hun wachtwoord met &#039;&#039;&#039;passwd&#039;&#039;&#039; wijzigen. Wel moet aan de eisen in de LDAP ppolicy module voldaan worden.&lt;br /&gt;
&lt;br /&gt;
==PHP scripting==&lt;br /&gt;
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 &#039;&#039;&#039;/usr/local/hobbynet/bin&#039;&#039;&#039; directory.&lt;br /&gt;
Voor de php-scripting zijn enkele php7.x pakketten nodig. Installeer deze met apt-get. Het gaat om:&lt;br /&gt;
* php-cli&lt;br /&gt;
* php-ldap&lt;br /&gt;
&lt;br /&gt;
== Apache authenticatie via LDAP ==&lt;br /&gt;
In plaats van .htpassword authenticatie, kan ook LDAP gebruikt worden. Activeer daartoe de Apache module&lt;br /&gt;
&#039;authnz_ldap&#039;.&lt;br /&gt;
 a2enmod authnz_ldap&lt;br /&gt;
Denk er om dat dit in een loadbalanced situatie op beide servers gedaan dient te worden!&lt;br /&gt;
&lt;br /&gt;
=== Voorbeeld van een LDAP configuratie in de Apache config ===&lt;br /&gt;
(alleen als voorbeeld, niet zo gebruiken!)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# // 1) Hobbynet webmaster&lt;br /&gt;
# // 2) Vraagbaak medewerker van een willekeurige groepering&lt;br /&gt;
# (|(hccRol=*#VRBK)(hccRol=HN#WM))&lt;br /&gt;
  &amp;lt;Location &amp;quot;/apps/vraagbaak&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;RequireAll&amp;gt;&lt;br /&gt;
      Authname &amp;quot;HCC!vraagbaak (gebruik uw hcc.nl gebruikersnaam/wachtwoord)&amp;quot;&lt;br /&gt;
      AuthType Basic&lt;br /&gt;
      AuthBasicProvider ldap&lt;br /&gt;
      AuthLDAPUrl ldap://hcc-ldap-int.hobby.nl/ou=leden,dc=hcc,dc=nl?hccLogin??(|(hccRol=*#VRBK)(hccRol=HN#WM))(hccProfiel=TRUE) TLS&lt;br /&gt;
      require valid-user&lt;br /&gt;
    &amp;lt;/RequireAll&amp;gt;&lt;br /&gt;
  &amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hoe kan LDAP veilig gebruikt worden vanuit Apache===&lt;br /&gt;
Zet een script neer in de gebruikersomgeving, en gebruik mod_authz_external. Doe de controle vervolgens via de XML-RPC server.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zie [[Kadernet]] voor een voorbeeld.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== TODO lijst ==&lt;br /&gt;
&#039;&#039;Dit is een lijst in wording, graag aanvullen&#039;&#039; &lt;br /&gt;
* &#039;dun&#039; loadbalancer script maken om te controleren dat LDAP echt luistert&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79578</id>
		<title>LDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79578"/>
		<updated>2022-05-11T14:04:07Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* slapd.init.ldif */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introductie==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==LDAP server keuze==&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Loadbalanced==&lt;br /&gt;
Er zijn twee servers (ldap-lb1 en ldap-lb2) die achter een loadbalancer in preferred server mode staan 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.&lt;br /&gt;
&lt;br /&gt;
Tevens zijn er een test en een development server: ldap-test en ldap-dev.&lt;br /&gt;
&lt;br /&gt;
==Installatie==&lt;br /&gt;
Installatie van OpenLDAP is simpel:&lt;br /&gt;
 aptitude install slapd ldap-utils&lt;br /&gt;
Omdat er gebruikgemaakt wordt van php scripts, is het ook nodig &#039;&#039;&#039;php-cli&#039;&#039;&#039; en &#039;&#039;&#039;php-ldap&#039;&#039;&#039; te installeren. De configuratie van OpenLDAP is sinds Karmic Koala iets gecompliceerder geworden. &#039;cn=config&#039; 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 &amp;quot;dpkg-reconfigure slapd&amp;quot; zet alleen de skeleton configuratie terug. Je moet zelf de database, root dn en acl&#039;s opzetten (als root of met sudo). Run  &#039;&#039;&#039;dpkg-reconfigure slapd&#039;&#039;&#039; om terug te gaan naar een lege directory. &lt;br /&gt;
&lt;br /&gt;
De volgende pakketten dienen geïnstalleerd te zijn (&#039;php -m&#039; toont de geactiveerde modules):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mogelijk ontbrekende pakketten:&lt;br /&gt;
&lt;br /&gt;
apt-get install aptitude &lt;br /&gt;
apt-get install php-mbstring&lt;br /&gt;
apt-get install php-xmlrpc&lt;br /&gt;
apt-get install php-ldap&lt;br /&gt;
apt-get install ldapscripts&lt;br /&gt;
apt-get install php-xml&lt;br /&gt;
apt-get install slapd&lt;br /&gt;
apt-get install ldap-utils&lt;br /&gt;
&lt;br /&gt;
- openldap moet lid zijn van de groep ssl-cert!&lt;br /&gt;
apt-get install ssl-cert&lt;br /&gt;
adduser openldap ssl-cert&lt;br /&gt;
(of vi /etc/group&lt;br /&gt;
    ssl-cert:x:116:openldap)&lt;br /&gt;
&lt;br /&gt;
- Zorg dat de LDAP daemon bij de certificaten kan komen. &lt;br /&gt;
LET OP: op alle hobbynet servers staan de certificaten in /disk/site/etc/ssl/hobby.nl/&lt;br /&gt;
 chgrp ssl-cert /disk/site/etc/ssl/hobby.nl/hobby.nl.*&lt;br /&gt;
 chmod 440      /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
LET OP: Als apparmor geïnstalleerd is moet het pad naar de certificaten vrijgegeven worden. Als alternatief kan apparmor verwijderd worden.&lt;br /&gt;
&lt;br /&gt;
Het volgende is niet nodig voor ldap. Mischien voor mysql-server???&lt;br /&gt;
- mysql laat het bestand ibdata1 ongelimiteerd groeien (InnoDB bestanden)&lt;br /&gt;
 /etc/mysql/mysql.conf.d/innodb_file_per_table.cnf&lt;br /&gt;
 [mysql]&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
&lt;br /&gt;
Nog meer Hobbynet aanpassingen Waarom??? &lt;br /&gt;
/etc/bash.bashrc&lt;br /&gt;
export http_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export https_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export ftp_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Locatie bestanden===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Alle ldif em tmpl bestanden gaan naar /usr/local/hobbynet/lib&lt;br /&gt;
* init_ldap en andere scripts gaan naar /usr/local/hobbynet/bin&lt;br /&gt;
* alle data bestanden (dumps) en update ldifs gaan naar /usr/local/hobbynet/data&lt;br /&gt;
* etc/ldap/schema/hcc_schema.* gaan naar /etc/ldap/schema&lt;br /&gt;
* etc/ldap/schema/ppolicy.ldif gaat naar /etc/ldap/schema&lt;br /&gt;
&lt;br /&gt;
hcc_schema.ldif wordt middels een script gemaakt. Dit script plaatst de ldif bestand(en) in /etc/ldap/schema. Zie hieronder.&lt;br /&gt;
&lt;br /&gt;
==Initiële database==&lt;br /&gt;
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.sh &amp;lt;admin-pw&amp;gt; gebruikt dan wordt een werkende directory gemaakt met alle statische data (in diverse ou&#039;s) erin. Gebruik na het maken van de initiële database restore_ldap.sh om de database te vullen met de data uit de data directory.&lt;br /&gt;
&lt;br /&gt;
===slapd.init.ldif ===&lt;br /&gt;
Bij installatie en reconfiguratie wordt /usr/share/slapd/slapd.init.ldif ingelezen. Zie aldaar indien nodig. Er wordt zowel voor de cn=config als voor de dc=hcc,dc=nl een RootDN aangemaakt. Echter wordt er geen password gezet op de RootDN voor config.&lt;br /&gt;
&lt;br /&gt;
==init_ldap script==&lt;br /&gt;
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 &#039;&#039;&#039;cn=admin,dc=hcc,dc=nl&#039;&#039;&#039; 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 &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; laadt vervolgens de laatste dump terug. Bij wijzigingen aan het schema is het raadzaam altijd een &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; te doen zodat een later een actuele dump kan worden teruggeladen.&lt;br /&gt;
&lt;br /&gt;
Het (plain text) password van cn=admin,dc=hcc,dc=nl moet bij het aanroepen van &#039;&#039;&#039;init_ldap&#039;&#039;&#039; op de commandline worden meegegeven. Tijdens de dpkg-reconfigure moet het password nog 2x gegeven worden. Lees eventueel ook de [http://www.openldap.org/doc/admin/ OpenLDAP Admin Guide].&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* voorbereidingen om &amp;quot;dpkg-reconfigure slapd&amp;quot; te draaien&lt;br /&gt;
* definities van input files&lt;br /&gt;
* check host&lt;br /&gt;
* bouwen van het skelet van de nieuwe directory&lt;br /&gt;
Zie voor details van de scripts &#039;&#039;&#039;init_ldap&#039;&#039;&#039;, &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; en &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; op een van de servers (in /usr/local/hobbynet/bin).&lt;br /&gt;
&lt;br /&gt;
==onderdelen van init_ldap==&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===add-schema.ldif===&lt;br /&gt;
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. &lt;br /&gt;
* Hiertoe wordt het onderstaande schema in /etc/ldap/schema geplaatst als hcc_schema.schema. &lt;br /&gt;
* Vervolgens worden de stappen uitgevoerd zoals beschreven in de [https://help.ubuntu.com/11.10/serverguide/C/openldap-server.html Ubuntu Server guide], onder &#039;&#039;&#039;Modifying the slapd Configuration Database&#039;&#039;&#039;. &lt;br /&gt;
* De resulterende output file &#039;&#039;&#039;cn=hcc_schema.ldif&#039;&#039;&#039; moet dan nog naar /etc/ldap/schema/hcc_schema.ldif gecopieerd worden. &lt;br /&gt;
Als dit proces herhaald moet worden, start dan met een lege output directory en verwijder een eventueel achtergebleven cn=hcc_schema.ldif bestand. &lt;br /&gt;
&lt;br /&gt;
De extra schema&#039;s worden middels een &#039;&#039;&#039;include&#039;&#039;&#039; toegevoegd. &#039;&#039;&#039;Ppolicy&#039;&#039;&#039; is op gelijke wijze als &#039;&#039;&#039;hcc_schema&#039;&#039;&#039; tot .ldif geconverteerd. Alle stappen om een nieuwe &#039;&#039;&#039;hcc-schema.ldif&#039;&#039;&#039; te maken zijn gescript in &#039;&#039;&#039;upd_schema&#039;&#039;&#039;. In &#039;&#039;&#039;init_ldap&#039;&#039;&#039; wordt het eigen schema en de password policy geladen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: add-schema.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
include: file:///etc/ldap/schema/hcc_schema.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ppolicy.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ldapns.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====schema updates====&lt;br /&gt;
Soms wordt een attribute toegevoegd of gewijzigd. Hiertoe dient het bestand hcc_schema.schema in /usr/local/hobbynet/etc/ldap/schema, gewijzigd te worden. Daarna dient er een ldif versie van gemaakt te worden. Gebruik hiervoor &#039;&#039;&#039;upd_schema.sh&#039;&#039;&#039; in dezelfde directory. De resulterende hcc_schema.ldif wordt in dit script naar /etc/ldap/schema gecopieërd. Bij grote wijzigingen is het aan te bevelen door de hele rebuild cycle te gaan (dump, init, restore). Bij triviale aanpassingen zou hcc_schema.ldif ook &#039;&#039;&#039;direct&#039;&#039;&#039; in de actieve directory geplaatst kunnen worden, gevolgd door slechts een &#039;&#039;&#039;service slapd restart&#039;&#039;&#039;. Gebruik hiervoor (blijf in de lokale schema directory):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp &amp;quot;ldif_output/cn=config/cn=schema/cn={14}hcc_schema.ldif&amp;quot; &amp;quot;/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}hcc_schema.ldif&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
LET OP: De nummers tussen accolades zijn bepaald door de volgorde van andere scripts! Zolang geen andere schema&#039;s worden toegevoegd zullen ze niet veranderen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ook kan met de ldap-tools gewerkt worden. Gebruik ldapsearch en ldapmodify, eventueel met de -f optie om een voorbereide serie opdrachten uit te voeren. Gebruik ldapsearch om eerst de structuur te vinden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier een voorbeeld om een objectClass aan te passen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat pas_aan.ldif&lt;br /&gt;
dn: cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
delete: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description ) )&lt;br /&gt;
-&lt;br /&gt;
add: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description $ hccIg ) )&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
$sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f pas_aan.ldif &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_config.ldif===&lt;br /&gt;
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 &#039;&#039;&#039;STATS&#039;&#039;&#039; gezet. Dit geeft niet teveel logging maar is toch goed bruikbaar. Om extra logging te krijgen op b.v. ACL&#039;s, verander olcLogLevel dan in &amp;quot;stats ACL&amp;quot;.  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-config.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcTLSCACertificateFile&lt;br /&gt;
olcTLSCACertificateFile: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
-&lt;br /&gt;
add: olcTLSCertificateFile&lt;br /&gt;
olcTLSCertificateFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
-&lt;br /&gt;
add: olcTLSCertificateKeyFile&lt;br /&gt;
olcTLSCertificateKeyFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
-&lt;br /&gt;
add: olcPasswordHash&lt;br /&gt;
olcPasswordHash: {CRYPT}&lt;br /&gt;
-&lt;br /&gt;
add: olcPasswordCryptSaltFormat&lt;br /&gt;
olcPasswordCryptSaltFormat: $6$%.16s&lt;br /&gt;
-&lt;br /&gt;
replace: olcLogLevel&lt;br /&gt;
olcLogLevel: stats&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Om de logging in een apart bestand te krijgen moet in /etc/rsyslog.d een extra bestand &#039;&#039;&#039;openldap.conf&#039;&#039;&#039; geplaatst worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local4.*   -/var/log/openldap.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Tevens willen we logrotate op dit bestand. Plaats in /etc/logrotate.d het bestand &#039;&#039;&#039;openldap&#039;&#039;&#039; met de volgende inhoud&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/log/openldap.log&lt;br /&gt;
{&lt;br /&gt;
        rotate 4&lt;br /&gt;
        weekly&lt;br /&gt;
        missingok&lt;br /&gt;
        notifempty&lt;br /&gt;
        compress&lt;br /&gt;
        delaycompress&lt;br /&gt;
        sharedscripts&lt;br /&gt;
        postrotate&lt;br /&gt;
                reload rsyslog &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 || true&lt;br /&gt;
        endscript&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify-mdb.ldif===&lt;br /&gt;
Hier worden de wijzigingen op de backend db gemaakt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-mdb.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
# hjv 2020.06.07 (oldSizeLimit toegevoegd)&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcDbCheckpoint&lt;br /&gt;
olcDbCheckpoint: 4096 1&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbNoSync&lt;br /&gt;
olcDbNoSync: TRUE&lt;br /&gt;
-&lt;br /&gt;
replace: olcSizeLimit&lt;br /&gt;
olcSizeLimit: 100000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===modify-acl.ldif===&lt;br /&gt;
Hier worden de rechten bepaald van de diverse rollen en groepen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-acl.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcAccess&lt;br /&gt;
# hobbynetlogin heeft lees rechten t.b.v. MySecureShell aanloggen&lt;br /&gt;
olcAccess: to attrs=@posixAccount,@posixGroup,@shadowAccount,@hostObject&lt;br /&gt;
  by dn=&amp;quot;cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to attrs=@posixAccount&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# sta anonymous search toe (t.b.v. Apache authenticatie)&lt;br /&gt;
olcAccess: to attrs=hccLogin,hccRol,hccProfiel,entry&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# olcAccess: to attrs=hccOptIn&lt;br /&gt;
#   by self write&lt;br /&gt;
#   by dn=&amp;quot;cn=drupal-hcc-nl,ou=klanten,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
#   by * break&lt;br /&gt;
#&lt;br /&gt;
# Anonieme klanten moeten kunnen inloggen&lt;br /&gt;
# en mogen hun eigen password wijzigen&lt;br /&gt;
olcAccess: to attrs=userPassword,shadowLastChange&lt;br /&gt;
  by self write&lt;br /&gt;
  by anonymous auth&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# Gebruiker mag zijn kader email wachtwoord aanpassen&lt;br /&gt;
olcAccess: to attrs=hccKaderPassword,hccKaderForward&lt;br /&gt;
  by self write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# beheerders hebben schrijfrechten op alles (updateDN)&lt;br /&gt;
# klanten hebben alleen lees rechten op alles (readDN)&lt;br /&gt;
# self mag lezen&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by self read&lt;br /&gt;
  by dn=&amp;quot;cn=xml-hoge-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn=&amp;quot;cn=xml-lage-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by dn.one=&amp;quot;ou=beheer,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn.one=&amp;quot;ou=klanten,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# PC30 helpdesk heeft leesrechten op ou=leden&lt;br /&gt;
olcAccess: to attrs=@hccOrgPerson,@hccKaderFunctie&lt;br /&gt;
  by dn.one=&amp;quot;ou=helpdesk,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# partners mogen een paar attrs lezen&lt;br /&gt;
olcAccess: to attrs=hccLidNummer,hccPostcode,hccPostcodeZoekveld,hccIg&lt;br /&gt;
  by dn.one=&amp;quot;ou=partners,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# iedereen moet (pseudo attr) entry en objectClass kunnen lezen&lt;br /&gt;
olcAccess: to attrs=entry,objectClass&lt;br /&gt;
  by * read&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by * none&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_index.ldif===&lt;br /&gt;
Een kale configuratie is heel snel voor wat betreft het opnieuw vullen met gegevens. Bij het aanmaken van een verse LDAP database worden er dan ook zo min mogelijk indexen aangemaakt.&amp;lt;br&amp;gt;&lt;br /&gt;
Zodra de inhoud is ingelezen kunnen de &#039;echte&#039; indexen aangemaakt worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-index.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcDbIndex&lt;br /&gt;
olcDbIndex: default pres,eq&lt;br /&gt;
olcDbIndex: objectClass,entryUUID,entryCSN eq&lt;br /&gt;
olcDbIndex: hccLidNummer,hccLogin,hccForumLogin eq&lt;br /&gt;
olcDbIndex: uid,uidNumber,gidNumber,memberUid,member eq&lt;br /&gt;
olcDbIndex: cn,host,hccPseudoniem,hccOptin,hccLocatie eq&lt;br /&gt;
olcDbIndex: sn,hccPostcodeZoekveld,hccIg,hccRegio eq,subfinal&lt;br /&gt;
olcDbIndex: hccRol,hccBezoek eq,pres,subfinal&lt;br /&gt;
olcDbIndex: hccBulletins pres&lt;br /&gt;
olcDbIndex: aboNummer eq&lt;br /&gt;
olcDbIndex: aboPostcodeZoekveld eq,subfinal&lt;br /&gt;
olcDbIndex: mail,mailHccnet,hccKaderMail,hccKaderForward pres,eq&lt;br /&gt;
olcDbIndex: hccProfiel pres,eq&lt;br /&gt;
olcDbindex: hccKaderUniekeURL eq&lt;br /&gt;
olcDbindex: hccOnderwerp eq,subfinal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ppolicy overlay===&lt;br /&gt;
* vanuit LDAP de minimale lengte van een wachtwoord afdwingen&lt;br /&gt;
* in LDAP SSHA versleuteling activeren&amp;lt;br&amp;gt;&lt;br /&gt;
(olcPPolicyHashCleartext: TRUE)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: add-ppolicy.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: cn=module, cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectClass: olcModuleList&lt;br /&gt;
objectClass: top&lt;br /&gt;
olcModuleLoad: ppolicy&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=ppolicy,olcDatabase={1}mdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcPPolicyConfig&lt;br /&gt;
olcOverlay: ppolicy&lt;br /&gt;
olcPPolicyDefault: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
olcPPolicyUseLockout: TRUE&lt;br /&gt;
olcPPolicyHashCleartext: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The default ppolicy looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dn: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
objectClass: pwdPolicy&lt;br /&gt;
objectClass: device&lt;br /&gt;
cn: default&lt;br /&gt;
pwdCheckQuality: 1&lt;br /&gt;
pwdMinLength: 8&lt;br /&gt;
pwdAttribute: 2.5.4.35&lt;br /&gt;
pwdAllowUserChange: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Syncrepl overlay===&lt;br /&gt;
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 [http://www.openldap.org/doc/admin/ LDAP Admin Guide]. &#039;&#039;&#039;Mirror configuratie is specifiek per server!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-syncrepl.tmpl                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
replace: olcServerID&lt;br /&gt;
olcServerID: @SID@&lt;br /&gt;
&lt;br /&gt;
dn: cn=module{0},cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcModuleLoad&lt;br /&gt;
olcModuleLoad: syncprov&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcSyncProvConfig&lt;br /&gt;
olcOverlay: syncprov&lt;br /&gt;
olcSpCheckpoint: 100 5&lt;br /&gt;
olcSpSessionlog: 100&lt;br /&gt;
&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcSyncRepl&lt;br /&gt;
olcSyncRepl: rid=@RID@&lt;br /&gt;
  provider=ldap://@PROVIDER@&lt;br /&gt;
  binddn=&amp;quot;cn=admin,dc=hcc,dc=nl&amp;quot; bindmethod=simple credentials=&amp;quot;@PASSWORD@&amp;quot;&lt;br /&gt;
  searchbase=&amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
  type=refreshAndPersist&lt;br /&gt;
  interval=00:00:00:10&lt;br /&gt;
  retry=&amp;quot;5 5 300 5&amp;quot;&lt;br /&gt;
  timeout=1&lt;br /&gt;
  starttls=yes&lt;br /&gt;
-&lt;br /&gt;
add: olcMirrorMode&lt;br /&gt;
olcMirrorMode: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
De andere server krijgt ServerID 2 en de provider is het IP adres van de andere server.&lt;br /&gt;
&lt;br /&gt;
===Unique overlay===&lt;br /&gt;
Deze overlay dient er voor te zorgen dat o.a het attribuut hccLogin een unieke waarde bevat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-unique.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module,cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectclass: olcModuleList&lt;br /&gt;
objectclass: top&lt;br /&gt;
olcmoduleload: unique&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=unique,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcUniqueConfig&lt;br /&gt;
olcOverlay: unique&lt;br /&gt;
olcUniqueAttribute: uid uidNumber hccLogin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SSL/TLS beveiliging==&lt;br /&gt;
Gebruik de juiste .pem bestanden in /etc/ssl/certs en /etc/ssl/private.&lt;br /&gt;
&lt;br /&gt;
We maken gebruik van een RapidSSL certificaat. Als dit niet standaard in Ubuntu bekend is, zet dan eerst GeoTrust_RapidSSL_-_ca-bundle.pem in de map /etc/ssl/certs neer. Voer nu een &#039;&#039;&#039;c_rehash .&#039;&#039;&#039; uit in /etc/ssl/certs om de cache te updaten (omdat GeoTrust_RapidSSL_-_ca-bundle.pem nieuw werd toegevoegd). &lt;br /&gt;
&lt;br /&gt;
De ownership is belangrijk. Hiertoe wordt de groep &amp;quot;openldap&amp;quot; toegevoegd aan de groep ssl-cert.&lt;br /&gt;
 adduser openldap ssl-cert&lt;br /&gt;
&lt;br /&gt;
Als dit fout gaat, doe dan eerst:&lt;br /&gt;
 apt-get install ssl-cert&lt;br /&gt;
&lt;br /&gt;
Zet het certificaat en de private key in de juiste groep:&lt;br /&gt;
 chgrp ssl-cert /etc/ssl/private/hobby.nl.*&lt;br /&gt;
 chmod 440      /etc/ssl/private/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
Het resultaat is dan als volgt:&lt;br /&gt;
 root@hcc-ldap-lb1:~# ls -l /etc/ssl/private/hcc* &lt;br /&gt;
 -rw-r--r-- 1 root     ssl-cert 1724 Nov 22 20:47 hobby.nl.crt&lt;br /&gt;
 -r--r----- 1 root     ssl-cert 1679 Nov 22 20:25 hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
 root@hcc-ldap-lb1:~# grep openldap /etc/group&lt;br /&gt;
 ssl-cert:x:114:openldap&lt;br /&gt;
 openldap:x:118:&lt;br /&gt;
&lt;br /&gt;
2020.12.09: Op een nieuwe Ubuntu installatie staat apparmor standaard aan. Weg ermee!&lt;br /&gt;
 apt remove --assume-yes --purge apparmor&lt;br /&gt;
&amp;lt;strike&amp;gt;Per september 2017 staan de certificaten in /disk/site/etc/ssl/hobby.nl, net als op alle andere servers. Omdat apparmor actief is moet deze directory worden toegevoegd aan /etc/apparmor.d/local/usr.sbin.slapd. Die file ziet er dan als volgt uit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Site-specific additions and overrides for usr.sbin.slapd.&lt;br /&gt;
# For more details, please see /etc/apparmor.d/local/README.&lt;br /&gt;
#include &amp;lt;abstractions/ssl_certs&amp;gt;&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/ r,&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/* r,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Openldap ook op poort 636 benaderd wordt (naast TLS op 389), moet in /etc/default/slapd ldaps:/// opgenomen worden bij de SLAPD_SERVICES.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;netstat -an&#039; dient dan 636 te laten zien voor zowel IPv4 als IPv6.&lt;br /&gt;
&lt;br /&gt;
Om de cn=config te zien kan je het volgende commando gebruiken:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config&lt;br /&gt;
&lt;br /&gt;
of, wat botter maar korter:&lt;br /&gt;
cat /etc/ldap/slapd.d/cn\=config.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Backup, initialize, restore==&lt;br /&gt;
Om het hele skelet van ldap in één keer te herstellen dient &#039;&#039;&#039;init_ldap&#039;&#039;&#039; gebruikt te worden. Als argument &#039;&#039;&#039;moet&#039;&#039;&#039; het admin beheer wachtwoord mee gegeven worden.&lt;br /&gt;
&lt;br /&gt;
===lokaal===&lt;br /&gt;
Backups kunnen gemaakt worden terwijl slapd draait maar geadviseerd wordt slapd te stoppen. Voor dumpen moet &#039;&#039;&#039;slapcat&#039;&#039;&#039; gebruikt worden. Backups kunnen gemaakt worden per database of een filter daarop, naar een ldif bestand.&lt;br /&gt;
 slapcat -l hcc-dump.ldif -b &amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
Dit maakt een dump van alles onder &#039;&#039;&#039;dc=hcc,dc=nl&#039;&#039;&#039; naar het bestand hcc-dump.ldif. Ook is het mogelijk het database nummer te gebruiken, config is altijd nummer 0, hdb is gewoonlijk 1.&lt;br /&gt;
&lt;br /&gt;
Het &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; script dumpt alle ou&#039;s in aparte .ldif bestanden; het omgekeerde doet &#039;&#039;&#039;restore_ldap&#039;&#039;&#039;.  &lt;br /&gt;
Terug inlezen kan alleen in een lege directory, dus direct nadat &#039;&#039;&#039;init_ldap&#039;&#039;&#039; is gedaan. Gebruik voor het terugplaatsen &#039;&#039;&#039;slapadd&#039;&#039;&#039;. Aan te bevelen is &#039;&#039;&#039;-c&#039;&#039;&#039; mee te geven zodat ondanks fouten doorgegaan wordt. &lt;br /&gt;
&lt;br /&gt;
Voor slapadd &#039;&#039;&#039;moet&#039;&#039;&#039; 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)&lt;br /&gt;
 /etc/init.d/slapd stop&lt;br /&gt;
 slapadd -l hcc-dump.ldif -w -c &amp;gt;errors.txt&lt;br /&gt;
 chown openldap:openldap /var/lib/ldap/*&lt;br /&gt;
 /etc/init.d/slapd start&lt;br /&gt;
&lt;br /&gt;
===remote===&lt;br /&gt;
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 &#039;&#039;&#039;backup-encrypted&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Recente lokale backups zijn te vinden in &#039;&#039;&#039;/usr/local/hobbynet/tmp&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Verse ldap maken===&lt;br /&gt;
Transactie log bij het toevoegen van b.v. een nieuwe ou:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Op beide servers:&lt;br /&gt;
schema van test server gecopieerd en geactiveerd&lt;br /&gt;
dump-ldap gedraaid&lt;br /&gt;
systemctl stop slapd.service &lt;br /&gt;
&lt;br /&gt;
Er is nu géén ldap service! Werk dus snel...&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb1&lt;br /&gt;
systemctl stop slapd.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
op ldap-lb2:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb2&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
systemctl start slapd.service&lt;br /&gt;
Beide slapd servers zijn in de lucht en moeten synchroniseren.&lt;br /&gt;
&lt;br /&gt;
op beide servers:&lt;br /&gt;
check replicatie (netstat en functioneel)&lt;br /&gt;
&lt;br /&gt;
root@ldap-lb1:/usr/local/hobbynet/bin# netstat -n | grep 389&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:49510 2a02:968:ffff:910:172:31:8:4:389 ESTABLISHED&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:389 2a02:968:ffff:910:172:31:8:4:37490 ESTABLISHED&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:49508 2a02:968:ffff:910:172:31:8:4:389 ESTABLISHED&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:389 2a02:968:ffff:910:172:31:8:4:37488 ESTABLISHED&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Functioneel door met ADS op beide servers in te loggen en een willekeurig veld in je eigen entry te wijzigen op lb1. Kijk of het gebeurd is op lb2 en wijzig het daar terug. Check op de andere server of het gebeurd is. Er kan een zekere vertraging in optreden.&lt;br /&gt;
&lt;br /&gt;
Stel er is een nieuwe ou gemaakt: denk aan het bij werken van de dump en restore scripts.&lt;br /&gt;
&lt;br /&gt;
update dump-ldap.sh en restore-ldap.sh met de nieuwe ou&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
export tarieven.ldif op test server en import op ldap-lb1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==crontab==&lt;br /&gt;
 # script dat updates ophaalt (maar niet installeert), zodat nagios ze ook detecteert&lt;br /&gt;
 0 9 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
==LDAP Clients==&lt;br /&gt;
Er zijn meerdere LDAP clients. De meest populaire zijn Apache Directory Studio (&amp;quot;ADS&amp;quot;) en phpLdapAdmin (&amp;quot;PLA&amp;quot;).&amp;lt;br&amp;gt;&lt;br /&gt;
De eerste is veel uitgbreider maar vereist een Java Runtime Environment (&amp;quot;JRE&amp;quot;). Onder Windows is dat JRE(13) of (open)JDK-(13).&amp;lt;br&amp;gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Binnen Hobbynet wordt uitsluitend gebruik gemaakt van ADS.&lt;br /&gt;
&lt;br /&gt;
===StartTLS===&lt;br /&gt;
Aanbevolen wordt StartTLS op poort 389 te gebruiken. Alternatief is LDAPS op poort 636 maar dat is deprecated. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Windows===&lt;br /&gt;
&amp;lt;i&amp;gt;2019-10-31 HJV: Oude info, als referentie leuk, maar niet meer relevant&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Onder Windows moet met &#039;&#039;&#039;keytool.exe&#039;&#039;&#039; gewerkt worden. De uitleg heb ik van  [http://www.talkingtree.com/blog/index.cfm?mode=entry&amp;amp;entry=25AA75A4-45A6-2844-7CA3EECD842DB576 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:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Haal de benodigde bestanden op (op een Linux systeem):&lt;br /&gt;
wget http://www.cacert.org/certs/root.der -O root.der&lt;br /&gt;
wget http://www.cacert.org/certs/class3.der -O class3.der&lt;br /&gt;
copieer de bestanden naar de Windows omgeving in C:\Program Files (x86)\Java\jre6\lib\security.&lt;br /&gt;
&lt;br /&gt;
Open een commandwindow:&lt;br /&gt;
cd C:\Program Files (x86)\Java\jre6\lib\security&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass1 -file root.der&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass3 -file class3.der&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Linux===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS gebruik===&lt;br /&gt;
ADS kan erg handig zijn voor het snel dumpen van hele ou&#039;s in .ldif formaat. Zo&#039;n dump kan direct op een andere server worden ingelezen.&lt;br /&gt;
&lt;br /&gt;
===PhpLdapAdmin onder Linux===&lt;br /&gt;
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 [http://phpldapadmin.sourceforge.net/wiki/index.php/Server:server:tls phpldapadmin wiki].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# LDAP Defaults&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# See ldap.conf(5) for details&lt;br /&gt;
# This file should be world readable but not world writable.&lt;br /&gt;
&lt;br /&gt;
#BASE   dc=example,dc=com&lt;br /&gt;
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666&lt;br /&gt;
&lt;br /&gt;
#SIZELIMIT      12&lt;br /&gt;
#TIMELIMIT      15&lt;br /&gt;
#DEREF          never&lt;br /&gt;
TLS_CACERT      /etc/ssl/certs/CAcert_org.pem&lt;br /&gt;
TLS_CERT        /etc/ssl/private/hobby.nl.crt&lt;br /&gt;
TLS_KEY         /etc/ssl/private/hobby.nl.key&lt;br /&gt;
TLS_REQCERT     allow&lt;br /&gt;
#TLS_REQCERT never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Denk er wel aan na wijzigingen Apache te herstarten.&lt;br /&gt;
===PAM en NSS via LDAP===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Installeer &#039;&#039;&#039;libnss-ldapd&#039;&#039;&#039; om de benodigde libraries te verkrijgen. Apt-get zal tevens &#039;&#039;&#039;libpam-ldapd&#039;&#039;&#039;, &#039;&#039;&#039;nslcd&#039;&#039;&#039; en &#039;&#039;&#039;nscd&#039;&#039;&#039; binnen brengen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install libnss-ldapd auth-client-config ldap-utils&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
    libpam-ldapd nscd nslcd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Libnss-ldapd is een doorontwikkeling van libnss-ldap en bevat meerdere verbeteringen. Zie: [http://arthurdejong.org/nss-pam-ldapd/ deze site] van de ontwikkelaar. Bij de installatie wordt een user &#039;&#039;&#039;nslcd&#039;&#039;&#039; aangemaakt; denk erom die in de .tmpl bestanden te zetten!&lt;br /&gt;
  &lt;br /&gt;
nsswitch.conf laat zich configureren via &#039;&#039;&#039;auth-client-config&#039;&#039;&#039; maar lac_ldap is alleen aanwezig als &#039;&#039;&#039;ldap-auth-config&#039;&#039;&#039; ook is geinstalleerd. Zo niet gebruik dan de tweede regel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auth-client-config -t nss -p lac_ldap&lt;br /&gt;
auth-client-config -t nss -p ldap_example&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het resultaat is dat nsswitch.conf zowel in files (/etc/passwd etc.) zoekt als in ldap.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nsswitch.conf&lt;br /&gt;
#&lt;br /&gt;
# Example configuration of GNU Name Service Switch functionality.&lt;br /&gt;
# If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
# `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # passwd:         compat&lt;br /&gt;
passwd: files ldap&lt;br /&gt;
# pre_auth-client-config # group:          compat&lt;br /&gt;
group: files ldap&lt;br /&gt;
# pre_auth-client-config # shadow:         compat&lt;br /&gt;
shadow: files ldap&lt;br /&gt;
&lt;br /&gt;
hosts:          files dns&lt;br /&gt;
networks:       files&lt;br /&gt;
&lt;br /&gt;
protocols:      db files&lt;br /&gt;
services:       db files&lt;br /&gt;
ethers:         db files&lt;br /&gt;
rpc:            db files&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # netgroup:       nis&lt;br /&gt;
netgroup: nis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het aanpassen van de PAM bestanden gaat sinds enige releases met &#039;&#039;&#039;pam-auth-update&#039;&#039;&#039;. Kies in het menu voor zowel unix als ldap. Default wordt nu ldap authenticatie gebruikt voor uid &amp;gt;= 1000. Bij Hobbynet willen we vanaf 300 ldap gebruiken. Door een licht gemodificeerde versie van /usr/share/pam-configs/ldap te maken (ldap-hobbynet), kan ook voor de hobbynet instelling gekozen worden. Dit is de ldap-hobbynet versie:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Name: LDAP Authentication (uid&amp;gt;300)&lt;br /&gt;
Default: yes&lt;br /&gt;
Priority: 128&lt;br /&gt;
Auth-Type: Primary&lt;br /&gt;
Auth-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Auth:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 use_first_pass&lt;br /&gt;
Account-Type: Additional&lt;br /&gt;
Account:&lt;br /&gt;
        [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad]        pam_ldap.so minimum_uid=300&lt;br /&gt;
Password-Type: Primary&lt;br /&gt;
Password-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Password:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 try_first_pass&lt;br /&gt;
Session-Type: Additional&lt;br /&gt;
Session:&lt;br /&gt;
        [success=ok default=ignore]     pam_ldap.so minimum_uid=300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dit is in een standaard opzet van LDAP voldoende om zowel lokale gebruikers als gebruikers opgeslagen in LDAP, te laten inloggen en hun password te laten wijzigen. In de Hobbynet setup moet er echter nog meer gebeuren in de ACL&#039;s van de LDAP server configuratie. Omdat Hobbynet de laatste ACL regel heeft gewijzigd in een &#039;&#039;&#039;deny-all&#039;&#039;&#039;, is er een helper of proxy account nodig dat read access heeft of een aantal cruciale velden in de posixAccount objectClass. Zie verder de lsiting van nslcd.conf.&lt;br /&gt;
&lt;br /&gt;
Libnss-ldapd en libpam-ldapd hebben een gezamelijke daemon &#039;&#039;&#039;nslcd&#039;&#039;&#039; die z&#039;n configuratie uit &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039; haalt. Hierin is ook een voorziening voor het helper account. Aan het eind vande &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; staat de voorziening voor host-based login. Als het attribute &#039;&#039;&#039;host&#039;&#039;&#039; de fqdn of alleen de host naam bevat, bepaald dat of inloggen op die host mogelijk is. &#039;&#039;&#039;*&#039;&#039;&#039; staat inloggen op alle hosts toe.&lt;br /&gt;
&lt;br /&gt;
Eventueel kan het daemon proces voor debugging doeleinden ook als command (&#039;&#039;&#039;nslcd -d&#039;&#039;&#039;) gestart worden. Om de bevragingen van de LDAP server wat te verminderen, kan &#039;&#039;&#039;nscd&#039;&#039;&#039; voor caching zorgen. Deze cache daemon heeft zijn eigen configuratie bestand: &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039;. De default instellingen zijn goed; eventueel kan de logging naar een bestand gestuurd worden.&lt;br /&gt;
&lt;br /&gt;
Verbinding met de LDAP server kan met StartTLS beveiligd worden. Hier de inhoud van nslcd.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nslcd.conf&lt;br /&gt;
# nslcd configuration file. See nslcd.conf(5)&lt;br /&gt;
# for details.&lt;br /&gt;
&lt;br /&gt;
# The user and group nslcd should run as.&lt;br /&gt;
uid nslcd&lt;br /&gt;
gid nslcd&lt;br /&gt;
&lt;br /&gt;
# log location and level&lt;br /&gt;
#log /var/log/nslcd.log debug&lt;br /&gt;
&lt;br /&gt;
# The location at which the LDAP server(s) should be reachable.&lt;br /&gt;
uri ldap://ldap2-int.hobby.nl/&lt;br /&gt;
&lt;br /&gt;
# The search base that will be used for all queries.&lt;br /&gt;
base dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# Other base mappings&lt;br /&gt;
base   group  ou=groups,dc=hcc,dc=nl&lt;br /&gt;
base   passwd ou=users,dc=hcc,dc=nl&lt;br /&gt;
base   shadow ou=users,dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# The search scope.&lt;br /&gt;
#scope sub&lt;br /&gt;
&lt;br /&gt;
# The LDAP protocol version to use.&lt;br /&gt;
ldap_version 3&lt;br /&gt;
&lt;br /&gt;
# The DN to bind with for normal lookups.&lt;br /&gt;
#binddn cn=annonymous,dc=example,dc=net&lt;br /&gt;
#bindpw secret&lt;br /&gt;
binddn cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&lt;br /&gt;
bindpw xxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
# The DN used for password modifications by root.&lt;br /&gt;
#rootpwmoddn cn=admin,dc=example,dc=com&lt;br /&gt;
&lt;br /&gt;
# SSL options&lt;br /&gt;
ssl off&lt;br /&gt;
ssl start_tls&lt;br /&gt;
#tls_reqcert never&lt;br /&gt;
tls_cacertfile /etc/ssl/certs/cacert.org.pem&lt;br /&gt;
#tls_cert /etc/ssl/private/server.crt&lt;br /&gt;
#tls_key /etc/ssl/private/server.key&lt;br /&gt;
&lt;br /&gt;
# The minimum uid&lt;br /&gt;
nss_min_uid 300&lt;br /&gt;
&lt;br /&gt;
pam_authz_search (&amp;amp;(objectClass=posixAccount)(uid=$username)(|(host=$hostname)(host=$fqdn)(host=\\*)))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===users en groepen toevoegen===&lt;br /&gt;
Hiervoor moet &#039;&#039;&#039;ldapscripts&#039;&#039;&#039; zijn geïnstalleerd. Dit is het geval op de ldap-lb1 server. Dat levert de volgende extra commando&#039;s op:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldaprenamemachine&lt;br /&gt;
ldapadduser&lt;br /&gt;
ldapdeleteuserfromgroup&lt;br /&gt;
ldapfinger&lt;br /&gt;
ldapid&lt;br /&gt;
ldapgid&lt;br /&gt;
ldapmodifyuser&lt;br /&gt;
ldaprenameuser&lt;br /&gt;
lsldap&lt;br /&gt;
ldapaddusertogroup&lt;br /&gt;
ldapsetpasswd&lt;br /&gt;
ldapinit&lt;br /&gt;
ldapaddgroup&lt;br /&gt;
ldapdeletegroup&lt;br /&gt;
ldapmodifygroup&lt;br /&gt;
ldapdeletemachine&lt;br /&gt;
ldaprenamegroup&lt;br /&gt;
ldapaddmachine&lt;br /&gt;
ldapmodifymachine&lt;br /&gt;
ldapsetprimarygroup&lt;br /&gt;
ldapdeleteuser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Meest gebruikt zijn &#039;&#039;&#039;ldapaddgroup, ldapadduser, ldapsetpasswd&#039;&#039;&#039;.  &lt;br /&gt;
Er zijn manpages maar er is ook uitgebreide uitleg in de [https://help.ubuntu.com/14.04/serverguide/openldap-server.html Ubuntu server guide]. Omdat wij het automatisch maken van de home dir uit hebben staan, moet die met de hand aangemaakt worden en moet de owner goed gezet worden.&lt;br /&gt;
&lt;br /&gt;
===host-based login===&lt;br /&gt;
Met een kleine uitbreiding in het schema van de LDAP server, kan host-based login gerealiseerd worden. Ook in de &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; is een uitbreiding nodig.&lt;br /&gt;
&lt;br /&gt;
In de LDAP server dient de objectClass &#039;&#039;&#039;hostObject&#039;&#039;&#039; aan de entries in de ou=users toegevoegd te worden. Deze (auxilary) objectClass brengt slechts één attribute met zich mee: &#039;&#039;&#039;host&#039;&#039;&#039;. De regel in nslcd.conf checkt of één van de waarden van &#039;&#039;&#039;host&#039;&#039;&#039; gelijk is aan de naam van de server waarop ingelogd wordt. De waarde &#039;&#039;&#039;*&#039;&#039;&#039; geldt als wildcard. Zie de regel &#039;&#039;&lt;br /&gt;
&#039;pam_authz_search&#039;&#039;&#039;&#039; in &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Password aanpassen===&lt;br /&gt;
Via LDAP ingelogde gebruikers kunnen net als lokale gebruikers hun wachtwoord met &#039;&#039;&#039;passwd&#039;&#039;&#039; wijzigen. Wel moet aan de eisen in de LDAP ppolicy module voldaan worden.&lt;br /&gt;
&lt;br /&gt;
==PHP scripting==&lt;br /&gt;
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 &#039;&#039;&#039;/usr/local/hobbynet/bin&#039;&#039;&#039; directory.&lt;br /&gt;
Voor de php-scripting zijn enkele php7.x pakketten nodig. Installeer deze met apt-get. Het gaat om:&lt;br /&gt;
* php-cli&lt;br /&gt;
* php-ldap&lt;br /&gt;
&lt;br /&gt;
== Apache authenticatie via LDAP ==&lt;br /&gt;
In plaats van .htpassword authenticatie, kan ook LDAP gebruikt worden. Activeer daartoe de Apache module&lt;br /&gt;
&#039;authnz_ldap&#039;.&lt;br /&gt;
 a2enmod authnz_ldap&lt;br /&gt;
Denk er om dat dit in een loadbalanced situatie op beide servers gedaan dient te worden!&lt;br /&gt;
&lt;br /&gt;
=== Voorbeeld van een LDAP configuratie in de Apache config ===&lt;br /&gt;
(alleen als voorbeeld, niet zo gebruiken!)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# // 1) Hobbynet webmaster&lt;br /&gt;
# // 2) Vraagbaak medewerker van een willekeurige groepering&lt;br /&gt;
# (|(hccRol=*#VRBK)(hccRol=HN#WM))&lt;br /&gt;
  &amp;lt;Location &amp;quot;/apps/vraagbaak&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;RequireAll&amp;gt;&lt;br /&gt;
      Authname &amp;quot;HCC!vraagbaak (gebruik uw hcc.nl gebruikersnaam/wachtwoord)&amp;quot;&lt;br /&gt;
      AuthType Basic&lt;br /&gt;
      AuthBasicProvider ldap&lt;br /&gt;
      AuthLDAPUrl ldap://hcc-ldap-int.hobby.nl/ou=leden,dc=hcc,dc=nl?hccLogin??(|(hccRol=*#VRBK)(hccRol=HN#WM))(hccProfiel=TRUE) TLS&lt;br /&gt;
      require valid-user&lt;br /&gt;
    &amp;lt;/RequireAll&amp;gt;&lt;br /&gt;
  &amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hoe kan LDAP veilig gebruikt worden vanuit Apache===&lt;br /&gt;
Zet een script neer in de gebruikersomgeving, en gebruik mod_authz_external. Doe de controle vervolgens via de XML-RPC server.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zie [[Kadernet]] voor een voorbeeld.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== TODO lijst ==&lt;br /&gt;
&#039;&#039;Dit is een lijst in wording, graag aanvullen&#039;&#039; &lt;br /&gt;
* &#039;dun&#039; loadbalancer script maken om te controleren dat LDAP echt luistert&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79576</id>
		<title>LDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79576"/>
		<updated>2022-05-11T13:59:37Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* Installatie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introductie==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==LDAP server keuze==&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Loadbalanced==&lt;br /&gt;
Er zijn twee servers (ldap-lb1 en ldap-lb2) die achter een loadbalancer in preferred server mode staan 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.&lt;br /&gt;
&lt;br /&gt;
Tevens zijn er een test en een development server: ldap-test en ldap-dev.&lt;br /&gt;
&lt;br /&gt;
==Installatie==&lt;br /&gt;
Installatie van OpenLDAP is simpel:&lt;br /&gt;
 aptitude install slapd ldap-utils&lt;br /&gt;
Omdat er gebruikgemaakt wordt van php scripts, is het ook nodig &#039;&#039;&#039;php-cli&#039;&#039;&#039; en &#039;&#039;&#039;php-ldap&#039;&#039;&#039; te installeren. De configuratie van OpenLDAP is sinds Karmic Koala iets gecompliceerder geworden. &#039;cn=config&#039; 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 &amp;quot;dpkg-reconfigure slapd&amp;quot; zet alleen de skeleton configuratie terug. Je moet zelf de database, root dn en acl&#039;s opzetten (als root of met sudo). Run  &#039;&#039;&#039;dpkg-reconfigure slapd&#039;&#039;&#039; om terug te gaan naar een lege directory. &lt;br /&gt;
&lt;br /&gt;
De volgende pakketten dienen geïnstalleerd te zijn (&#039;php -m&#039; toont de geactiveerde modules):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mogelijk ontbrekende pakketten:&lt;br /&gt;
&lt;br /&gt;
apt-get install aptitude &lt;br /&gt;
apt-get install php-mbstring&lt;br /&gt;
apt-get install php-xmlrpc&lt;br /&gt;
apt-get install php-ldap&lt;br /&gt;
apt-get install ldapscripts&lt;br /&gt;
apt-get install php-xml&lt;br /&gt;
apt-get install slapd&lt;br /&gt;
apt-get install ldap-utils&lt;br /&gt;
&lt;br /&gt;
- openldap moet lid zijn van de groep ssl-cert!&lt;br /&gt;
apt-get install ssl-cert&lt;br /&gt;
adduser openldap ssl-cert&lt;br /&gt;
(of vi /etc/group&lt;br /&gt;
    ssl-cert:x:116:openldap)&lt;br /&gt;
&lt;br /&gt;
- Zorg dat de LDAP daemon bij de certificaten kan komen. &lt;br /&gt;
LET OP: op alle hobbynet servers staan de certificaten in /disk/site/etc/ssl/hobby.nl/&lt;br /&gt;
 chgrp ssl-cert /disk/site/etc/ssl/hobby.nl/hobby.nl.*&lt;br /&gt;
 chmod 440      /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
LET OP: Als apparmor geïnstalleerd is moet het pad naar de certificaten vrijgegeven worden. Als alternatief kan apparmor verwijderd worden.&lt;br /&gt;
&lt;br /&gt;
Het volgende is niet nodig voor ldap. Mischien voor mysql-server???&lt;br /&gt;
- mysql laat het bestand ibdata1 ongelimiteerd groeien (InnoDB bestanden)&lt;br /&gt;
 /etc/mysql/mysql.conf.d/innodb_file_per_table.cnf&lt;br /&gt;
 [mysql]&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
&lt;br /&gt;
Nog meer Hobbynet aanpassingen Waarom??? &lt;br /&gt;
/etc/bash.bashrc&lt;br /&gt;
export http_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export https_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export ftp_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Locatie bestanden===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Alle ldif em tmpl bestanden gaan naar /usr/local/hobbynet/lib&lt;br /&gt;
* init_ldap en andere scripts gaan naar /usr/local/hobbynet/bin&lt;br /&gt;
* alle data bestanden (dumps) en update ldifs gaan naar /usr/local/hobbynet/data&lt;br /&gt;
* etc/ldap/schema/hcc_schema.* gaan naar /etc/ldap/schema&lt;br /&gt;
* etc/ldap/schema/ppolicy.ldif gaat naar /etc/ldap/schema&lt;br /&gt;
&lt;br /&gt;
hcc_schema.ldif wordt middels een script gemaakt. Dit script plaatst de ldif bestand(en) in /etc/ldap/schema. Zie hieronder.&lt;br /&gt;
&lt;br /&gt;
==Initiële database==&lt;br /&gt;
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.sh &amp;lt;admin-pw&amp;gt; gebruikt dan wordt een werkende directory gemaakt met alle statische data (in diverse ou&#039;s) erin. Gebruik na het maken van de initiële database restore_ldap.sh om de database te vullen met de data uit de data directory.&lt;br /&gt;
&lt;br /&gt;
===slapd.init.ldif ===&lt;br /&gt;
Bij installatie en reconfiguratie wordt /usr/share/slapd/slapd.init.ldif ingelezen. Zie aldaar indien nodig.&lt;br /&gt;
&lt;br /&gt;
==init_ldap script==&lt;br /&gt;
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 &#039;&#039;&#039;cn=admin,dc=hcc,dc=nl&#039;&#039;&#039; 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 &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; laadt vervolgens de laatste dump terug. Bij wijzigingen aan het schema is het raadzaam altijd een &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; te doen zodat een later een actuele dump kan worden teruggeladen.&lt;br /&gt;
&lt;br /&gt;
Het (plain text) password van cn=admin,dc=hcc,dc=nl moet bij het aanroepen van &#039;&#039;&#039;init_ldap&#039;&#039;&#039; op de commandline worden meegegeven. Tijdens de dpkg-reconfigure moet het password nog 2x gegeven worden. Lees eventueel ook de [http://www.openldap.org/doc/admin/ OpenLDAP Admin Guide].&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* voorbereidingen om &amp;quot;dpkg-reconfigure slapd&amp;quot; te draaien&lt;br /&gt;
* definities van input files&lt;br /&gt;
* check host&lt;br /&gt;
* bouwen van het skelet van de nieuwe directory&lt;br /&gt;
Zie voor details van de scripts &#039;&#039;&#039;init_ldap&#039;&#039;&#039;, &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; en &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; op een van de servers (in /usr/local/hobbynet/bin).&lt;br /&gt;
&lt;br /&gt;
==onderdelen van init_ldap==&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===add-schema.ldif===&lt;br /&gt;
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. &lt;br /&gt;
* Hiertoe wordt het onderstaande schema in /etc/ldap/schema geplaatst als hcc_schema.schema. &lt;br /&gt;
* Vervolgens worden de stappen uitgevoerd zoals beschreven in de [https://help.ubuntu.com/11.10/serverguide/C/openldap-server.html Ubuntu Server guide], onder &#039;&#039;&#039;Modifying the slapd Configuration Database&#039;&#039;&#039;. &lt;br /&gt;
* De resulterende output file &#039;&#039;&#039;cn=hcc_schema.ldif&#039;&#039;&#039; moet dan nog naar /etc/ldap/schema/hcc_schema.ldif gecopieerd worden. &lt;br /&gt;
Als dit proces herhaald moet worden, start dan met een lege output directory en verwijder een eventueel achtergebleven cn=hcc_schema.ldif bestand. &lt;br /&gt;
&lt;br /&gt;
De extra schema&#039;s worden middels een &#039;&#039;&#039;include&#039;&#039;&#039; toegevoegd. &#039;&#039;&#039;Ppolicy&#039;&#039;&#039; is op gelijke wijze als &#039;&#039;&#039;hcc_schema&#039;&#039;&#039; tot .ldif geconverteerd. Alle stappen om een nieuwe &#039;&#039;&#039;hcc-schema.ldif&#039;&#039;&#039; te maken zijn gescript in &#039;&#039;&#039;upd_schema&#039;&#039;&#039;. In &#039;&#039;&#039;init_ldap&#039;&#039;&#039; wordt het eigen schema en de password policy geladen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: add-schema.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
include: file:///etc/ldap/schema/hcc_schema.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ppolicy.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ldapns.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====schema updates====&lt;br /&gt;
Soms wordt een attribute toegevoegd of gewijzigd. Hiertoe dient het bestand hcc_schema.schema in /usr/local/hobbynet/etc/ldap/schema, gewijzigd te worden. Daarna dient er een ldif versie van gemaakt te worden. Gebruik hiervoor &#039;&#039;&#039;upd_schema.sh&#039;&#039;&#039; in dezelfde directory. De resulterende hcc_schema.ldif wordt in dit script naar /etc/ldap/schema gecopieërd. Bij grote wijzigingen is het aan te bevelen door de hele rebuild cycle te gaan (dump, init, restore). Bij triviale aanpassingen zou hcc_schema.ldif ook &#039;&#039;&#039;direct&#039;&#039;&#039; in de actieve directory geplaatst kunnen worden, gevolgd door slechts een &#039;&#039;&#039;service slapd restart&#039;&#039;&#039;. Gebruik hiervoor (blijf in de lokale schema directory):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp &amp;quot;ldif_output/cn=config/cn=schema/cn={14}hcc_schema.ldif&amp;quot; &amp;quot;/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}hcc_schema.ldif&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
LET OP: De nummers tussen accolades zijn bepaald door de volgorde van andere scripts! Zolang geen andere schema&#039;s worden toegevoegd zullen ze niet veranderen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ook kan met de ldap-tools gewerkt worden. Gebruik ldapsearch en ldapmodify, eventueel met de -f optie om een voorbereide serie opdrachten uit te voeren. Gebruik ldapsearch om eerst de structuur te vinden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier een voorbeeld om een objectClass aan te passen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat pas_aan.ldif&lt;br /&gt;
dn: cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
delete: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description ) )&lt;br /&gt;
-&lt;br /&gt;
add: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description $ hccIg ) )&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
$sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f pas_aan.ldif &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_config.ldif===&lt;br /&gt;
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 &#039;&#039;&#039;STATS&#039;&#039;&#039; gezet. Dit geeft niet teveel logging maar is toch goed bruikbaar. Om extra logging te krijgen op b.v. ACL&#039;s, verander olcLogLevel dan in &amp;quot;stats ACL&amp;quot;.  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-config.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcTLSCACertificateFile&lt;br /&gt;
olcTLSCACertificateFile: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
-&lt;br /&gt;
add: olcTLSCertificateFile&lt;br /&gt;
olcTLSCertificateFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
-&lt;br /&gt;
add: olcTLSCertificateKeyFile&lt;br /&gt;
olcTLSCertificateKeyFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
-&lt;br /&gt;
add: olcPasswordHash&lt;br /&gt;
olcPasswordHash: {CRYPT}&lt;br /&gt;
-&lt;br /&gt;
add: olcPasswordCryptSaltFormat&lt;br /&gt;
olcPasswordCryptSaltFormat: $6$%.16s&lt;br /&gt;
-&lt;br /&gt;
replace: olcLogLevel&lt;br /&gt;
olcLogLevel: stats&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Om de logging in een apart bestand te krijgen moet in /etc/rsyslog.d een extra bestand &#039;&#039;&#039;openldap.conf&#039;&#039;&#039; geplaatst worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local4.*   -/var/log/openldap.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Tevens willen we logrotate op dit bestand. Plaats in /etc/logrotate.d het bestand &#039;&#039;&#039;openldap&#039;&#039;&#039; met de volgende inhoud&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/log/openldap.log&lt;br /&gt;
{&lt;br /&gt;
        rotate 4&lt;br /&gt;
        weekly&lt;br /&gt;
        missingok&lt;br /&gt;
        notifempty&lt;br /&gt;
        compress&lt;br /&gt;
        delaycompress&lt;br /&gt;
        sharedscripts&lt;br /&gt;
        postrotate&lt;br /&gt;
                reload rsyslog &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 || true&lt;br /&gt;
        endscript&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify-mdb.ldif===&lt;br /&gt;
Hier worden de wijzigingen op de backend db gemaakt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-mdb.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
# hjv 2020.06.07 (oldSizeLimit toegevoegd)&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcDbCheckpoint&lt;br /&gt;
olcDbCheckpoint: 4096 1&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbNoSync&lt;br /&gt;
olcDbNoSync: TRUE&lt;br /&gt;
-&lt;br /&gt;
replace: olcSizeLimit&lt;br /&gt;
olcSizeLimit: 100000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===modify-acl.ldif===&lt;br /&gt;
Hier worden de rechten bepaald van de diverse rollen en groepen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-acl.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcAccess&lt;br /&gt;
# hobbynetlogin heeft lees rechten t.b.v. MySecureShell aanloggen&lt;br /&gt;
olcAccess: to attrs=@posixAccount,@posixGroup,@shadowAccount,@hostObject&lt;br /&gt;
  by dn=&amp;quot;cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to attrs=@posixAccount&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# sta anonymous search toe (t.b.v. Apache authenticatie)&lt;br /&gt;
olcAccess: to attrs=hccLogin,hccRol,hccProfiel,entry&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# olcAccess: to attrs=hccOptIn&lt;br /&gt;
#   by self write&lt;br /&gt;
#   by dn=&amp;quot;cn=drupal-hcc-nl,ou=klanten,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
#   by * break&lt;br /&gt;
#&lt;br /&gt;
# Anonieme klanten moeten kunnen inloggen&lt;br /&gt;
# en mogen hun eigen password wijzigen&lt;br /&gt;
olcAccess: to attrs=userPassword,shadowLastChange&lt;br /&gt;
  by self write&lt;br /&gt;
  by anonymous auth&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# Gebruiker mag zijn kader email wachtwoord aanpassen&lt;br /&gt;
olcAccess: to attrs=hccKaderPassword,hccKaderForward&lt;br /&gt;
  by self write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# beheerders hebben schrijfrechten op alles (updateDN)&lt;br /&gt;
# klanten hebben alleen lees rechten op alles (readDN)&lt;br /&gt;
# self mag lezen&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by self read&lt;br /&gt;
  by dn=&amp;quot;cn=xml-hoge-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn=&amp;quot;cn=xml-lage-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by dn.one=&amp;quot;ou=beheer,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn.one=&amp;quot;ou=klanten,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# PC30 helpdesk heeft leesrechten op ou=leden&lt;br /&gt;
olcAccess: to attrs=@hccOrgPerson,@hccKaderFunctie&lt;br /&gt;
  by dn.one=&amp;quot;ou=helpdesk,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# partners mogen een paar attrs lezen&lt;br /&gt;
olcAccess: to attrs=hccLidNummer,hccPostcode,hccPostcodeZoekveld,hccIg&lt;br /&gt;
  by dn.one=&amp;quot;ou=partners,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# iedereen moet (pseudo attr) entry en objectClass kunnen lezen&lt;br /&gt;
olcAccess: to attrs=entry,objectClass&lt;br /&gt;
  by * read&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by * none&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_index.ldif===&lt;br /&gt;
Een kale configuratie is heel snel voor wat betreft het opnieuw vullen met gegevens. Bij het aanmaken van een verse LDAP database worden er dan ook zo min mogelijk indexen aangemaakt.&amp;lt;br&amp;gt;&lt;br /&gt;
Zodra de inhoud is ingelezen kunnen de &#039;echte&#039; indexen aangemaakt worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-index.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcDbIndex&lt;br /&gt;
olcDbIndex: default pres,eq&lt;br /&gt;
olcDbIndex: objectClass,entryUUID,entryCSN eq&lt;br /&gt;
olcDbIndex: hccLidNummer,hccLogin,hccForumLogin eq&lt;br /&gt;
olcDbIndex: uid,uidNumber,gidNumber,memberUid,member eq&lt;br /&gt;
olcDbIndex: cn,host,hccPseudoniem,hccOptin,hccLocatie eq&lt;br /&gt;
olcDbIndex: sn,hccPostcodeZoekveld,hccIg,hccRegio eq,subfinal&lt;br /&gt;
olcDbIndex: hccRol,hccBezoek eq,pres,subfinal&lt;br /&gt;
olcDbIndex: hccBulletins pres&lt;br /&gt;
olcDbIndex: aboNummer eq&lt;br /&gt;
olcDbIndex: aboPostcodeZoekveld eq,subfinal&lt;br /&gt;
olcDbIndex: mail,mailHccnet,hccKaderMail,hccKaderForward pres,eq&lt;br /&gt;
olcDbIndex: hccProfiel pres,eq&lt;br /&gt;
olcDbindex: hccKaderUniekeURL eq&lt;br /&gt;
olcDbindex: hccOnderwerp eq,subfinal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ppolicy overlay===&lt;br /&gt;
* vanuit LDAP de minimale lengte van een wachtwoord afdwingen&lt;br /&gt;
* in LDAP SSHA versleuteling activeren&amp;lt;br&amp;gt;&lt;br /&gt;
(olcPPolicyHashCleartext: TRUE)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: add-ppolicy.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: cn=module, cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectClass: olcModuleList&lt;br /&gt;
objectClass: top&lt;br /&gt;
olcModuleLoad: ppolicy&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=ppolicy,olcDatabase={1}mdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcPPolicyConfig&lt;br /&gt;
olcOverlay: ppolicy&lt;br /&gt;
olcPPolicyDefault: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
olcPPolicyUseLockout: TRUE&lt;br /&gt;
olcPPolicyHashCleartext: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The default ppolicy looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dn: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
objectClass: pwdPolicy&lt;br /&gt;
objectClass: device&lt;br /&gt;
cn: default&lt;br /&gt;
pwdCheckQuality: 1&lt;br /&gt;
pwdMinLength: 8&lt;br /&gt;
pwdAttribute: 2.5.4.35&lt;br /&gt;
pwdAllowUserChange: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Syncrepl overlay===&lt;br /&gt;
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 [http://www.openldap.org/doc/admin/ LDAP Admin Guide]. &#039;&#039;&#039;Mirror configuratie is specifiek per server!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-syncrepl.tmpl                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
replace: olcServerID&lt;br /&gt;
olcServerID: @SID@&lt;br /&gt;
&lt;br /&gt;
dn: cn=module{0},cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcModuleLoad&lt;br /&gt;
olcModuleLoad: syncprov&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcSyncProvConfig&lt;br /&gt;
olcOverlay: syncprov&lt;br /&gt;
olcSpCheckpoint: 100 5&lt;br /&gt;
olcSpSessionlog: 100&lt;br /&gt;
&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcSyncRepl&lt;br /&gt;
olcSyncRepl: rid=@RID@&lt;br /&gt;
  provider=ldap://@PROVIDER@&lt;br /&gt;
  binddn=&amp;quot;cn=admin,dc=hcc,dc=nl&amp;quot; bindmethod=simple credentials=&amp;quot;@PASSWORD@&amp;quot;&lt;br /&gt;
  searchbase=&amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
  type=refreshAndPersist&lt;br /&gt;
  interval=00:00:00:10&lt;br /&gt;
  retry=&amp;quot;5 5 300 5&amp;quot;&lt;br /&gt;
  timeout=1&lt;br /&gt;
  starttls=yes&lt;br /&gt;
-&lt;br /&gt;
add: olcMirrorMode&lt;br /&gt;
olcMirrorMode: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
De andere server krijgt ServerID 2 en de provider is het IP adres van de andere server.&lt;br /&gt;
&lt;br /&gt;
===Unique overlay===&lt;br /&gt;
Deze overlay dient er voor te zorgen dat o.a het attribuut hccLogin een unieke waarde bevat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-unique.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module,cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectclass: olcModuleList&lt;br /&gt;
objectclass: top&lt;br /&gt;
olcmoduleload: unique&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=unique,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcUniqueConfig&lt;br /&gt;
olcOverlay: unique&lt;br /&gt;
olcUniqueAttribute: uid uidNumber hccLogin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SSL/TLS beveiliging==&lt;br /&gt;
Gebruik de juiste .pem bestanden in /etc/ssl/certs en /etc/ssl/private.&lt;br /&gt;
&lt;br /&gt;
We maken gebruik van een RapidSSL certificaat. Als dit niet standaard in Ubuntu bekend is, zet dan eerst GeoTrust_RapidSSL_-_ca-bundle.pem in de map /etc/ssl/certs neer. Voer nu een &#039;&#039;&#039;c_rehash .&#039;&#039;&#039; uit in /etc/ssl/certs om de cache te updaten (omdat GeoTrust_RapidSSL_-_ca-bundle.pem nieuw werd toegevoegd). &lt;br /&gt;
&lt;br /&gt;
De ownership is belangrijk. Hiertoe wordt de groep &amp;quot;openldap&amp;quot; toegevoegd aan de groep ssl-cert.&lt;br /&gt;
 adduser openldap ssl-cert&lt;br /&gt;
&lt;br /&gt;
Als dit fout gaat, doe dan eerst:&lt;br /&gt;
 apt-get install ssl-cert&lt;br /&gt;
&lt;br /&gt;
Zet het certificaat en de private key in de juiste groep:&lt;br /&gt;
 chgrp ssl-cert /etc/ssl/private/hobby.nl.*&lt;br /&gt;
 chmod 440      /etc/ssl/private/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
Het resultaat is dan als volgt:&lt;br /&gt;
 root@hcc-ldap-lb1:~# ls -l /etc/ssl/private/hcc* &lt;br /&gt;
 -rw-r--r-- 1 root     ssl-cert 1724 Nov 22 20:47 hobby.nl.crt&lt;br /&gt;
 -r--r----- 1 root     ssl-cert 1679 Nov 22 20:25 hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
 root@hcc-ldap-lb1:~# grep openldap /etc/group&lt;br /&gt;
 ssl-cert:x:114:openldap&lt;br /&gt;
 openldap:x:118:&lt;br /&gt;
&lt;br /&gt;
2020.12.09: Op een nieuwe Ubuntu installatie staat apparmor standaard aan. Weg ermee!&lt;br /&gt;
 apt remove --assume-yes --purge apparmor&lt;br /&gt;
&amp;lt;strike&amp;gt;Per september 2017 staan de certificaten in /disk/site/etc/ssl/hobby.nl, net als op alle andere servers. Omdat apparmor actief is moet deze directory worden toegevoegd aan /etc/apparmor.d/local/usr.sbin.slapd. Die file ziet er dan als volgt uit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Site-specific additions and overrides for usr.sbin.slapd.&lt;br /&gt;
# For more details, please see /etc/apparmor.d/local/README.&lt;br /&gt;
#include &amp;lt;abstractions/ssl_certs&amp;gt;&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/ r,&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/* r,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Openldap ook op poort 636 benaderd wordt (naast TLS op 389), moet in /etc/default/slapd ldaps:/// opgenomen worden bij de SLAPD_SERVICES.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;netstat -an&#039; dient dan 636 te laten zien voor zowel IPv4 als IPv6.&lt;br /&gt;
&lt;br /&gt;
Om de cn=config te zien kan je het volgende commando gebruiken:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config&lt;br /&gt;
&lt;br /&gt;
of, wat botter maar korter:&lt;br /&gt;
cat /etc/ldap/slapd.d/cn\=config.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Backup, initialize, restore==&lt;br /&gt;
Om het hele skelet van ldap in één keer te herstellen dient &#039;&#039;&#039;init_ldap&#039;&#039;&#039; gebruikt te worden. Als argument &#039;&#039;&#039;moet&#039;&#039;&#039; het admin beheer wachtwoord mee gegeven worden.&lt;br /&gt;
&lt;br /&gt;
===lokaal===&lt;br /&gt;
Backups kunnen gemaakt worden terwijl slapd draait maar geadviseerd wordt slapd te stoppen. Voor dumpen moet &#039;&#039;&#039;slapcat&#039;&#039;&#039; gebruikt worden. Backups kunnen gemaakt worden per database of een filter daarop, naar een ldif bestand.&lt;br /&gt;
 slapcat -l hcc-dump.ldif -b &amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
Dit maakt een dump van alles onder &#039;&#039;&#039;dc=hcc,dc=nl&#039;&#039;&#039; naar het bestand hcc-dump.ldif. Ook is het mogelijk het database nummer te gebruiken, config is altijd nummer 0, hdb is gewoonlijk 1.&lt;br /&gt;
&lt;br /&gt;
Het &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; script dumpt alle ou&#039;s in aparte .ldif bestanden; het omgekeerde doet &#039;&#039;&#039;restore_ldap&#039;&#039;&#039;.  &lt;br /&gt;
Terug inlezen kan alleen in een lege directory, dus direct nadat &#039;&#039;&#039;init_ldap&#039;&#039;&#039; is gedaan. Gebruik voor het terugplaatsen &#039;&#039;&#039;slapadd&#039;&#039;&#039;. Aan te bevelen is &#039;&#039;&#039;-c&#039;&#039;&#039; mee te geven zodat ondanks fouten doorgegaan wordt. &lt;br /&gt;
&lt;br /&gt;
Voor slapadd &#039;&#039;&#039;moet&#039;&#039;&#039; 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)&lt;br /&gt;
 /etc/init.d/slapd stop&lt;br /&gt;
 slapadd -l hcc-dump.ldif -w -c &amp;gt;errors.txt&lt;br /&gt;
 chown openldap:openldap /var/lib/ldap/*&lt;br /&gt;
 /etc/init.d/slapd start&lt;br /&gt;
&lt;br /&gt;
===remote===&lt;br /&gt;
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 &#039;&#039;&#039;backup-encrypted&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Recente lokale backups zijn te vinden in &#039;&#039;&#039;/usr/local/hobbynet/tmp&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Verse ldap maken===&lt;br /&gt;
Transactie log bij het toevoegen van b.v. een nieuwe ou:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Op beide servers:&lt;br /&gt;
schema van test server gecopieerd en geactiveerd&lt;br /&gt;
dump-ldap gedraaid&lt;br /&gt;
systemctl stop slapd.service &lt;br /&gt;
&lt;br /&gt;
Er is nu géén ldap service! Werk dus snel...&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb1&lt;br /&gt;
systemctl stop slapd.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
op ldap-lb2:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb2&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
systemctl start slapd.service&lt;br /&gt;
Beide slapd servers zijn in de lucht en moeten synchroniseren.&lt;br /&gt;
&lt;br /&gt;
op beide servers:&lt;br /&gt;
check replicatie (netstat en functioneel)&lt;br /&gt;
&lt;br /&gt;
root@ldap-lb1:/usr/local/hobbynet/bin# netstat -n | grep 389&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:49510 2a02:968:ffff:910:172:31:8:4:389 ESTABLISHED&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:389 2a02:968:ffff:910:172:31:8:4:37490 ESTABLISHED&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:49508 2a02:968:ffff:910:172:31:8:4:389 ESTABLISHED&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:389 2a02:968:ffff:910:172:31:8:4:37488 ESTABLISHED&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Functioneel door met ADS op beide servers in te loggen en een willekeurig veld in je eigen entry te wijzigen op lb1. Kijk of het gebeurd is op lb2 en wijzig het daar terug. Check op de andere server of het gebeurd is. Er kan een zekere vertraging in optreden.&lt;br /&gt;
&lt;br /&gt;
Stel er is een nieuwe ou gemaakt: denk aan het bij werken van de dump en restore scripts.&lt;br /&gt;
&lt;br /&gt;
update dump-ldap.sh en restore-ldap.sh met de nieuwe ou&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
export tarieven.ldif op test server en import op ldap-lb1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==crontab==&lt;br /&gt;
 # script dat updates ophaalt (maar niet installeert), zodat nagios ze ook detecteert&lt;br /&gt;
 0 9 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
==LDAP Clients==&lt;br /&gt;
Er zijn meerdere LDAP clients. De meest populaire zijn Apache Directory Studio (&amp;quot;ADS&amp;quot;) en phpLdapAdmin (&amp;quot;PLA&amp;quot;).&amp;lt;br&amp;gt;&lt;br /&gt;
De eerste is veel uitgbreider maar vereist een Java Runtime Environment (&amp;quot;JRE&amp;quot;). Onder Windows is dat JRE(13) of (open)JDK-(13).&amp;lt;br&amp;gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Binnen Hobbynet wordt uitsluitend gebruik gemaakt van ADS.&lt;br /&gt;
&lt;br /&gt;
===StartTLS===&lt;br /&gt;
Aanbevolen wordt StartTLS op poort 389 te gebruiken. Alternatief is LDAPS op poort 636 maar dat is deprecated. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Windows===&lt;br /&gt;
&amp;lt;i&amp;gt;2019-10-31 HJV: Oude info, als referentie leuk, maar niet meer relevant&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Onder Windows moet met &#039;&#039;&#039;keytool.exe&#039;&#039;&#039; gewerkt worden. De uitleg heb ik van  [http://www.talkingtree.com/blog/index.cfm?mode=entry&amp;amp;entry=25AA75A4-45A6-2844-7CA3EECD842DB576 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:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Haal de benodigde bestanden op (op een Linux systeem):&lt;br /&gt;
wget http://www.cacert.org/certs/root.der -O root.der&lt;br /&gt;
wget http://www.cacert.org/certs/class3.der -O class3.der&lt;br /&gt;
copieer de bestanden naar de Windows omgeving in C:\Program Files (x86)\Java\jre6\lib\security.&lt;br /&gt;
&lt;br /&gt;
Open een commandwindow:&lt;br /&gt;
cd C:\Program Files (x86)\Java\jre6\lib\security&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass1 -file root.der&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass3 -file class3.der&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Linux===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS gebruik===&lt;br /&gt;
ADS kan erg handig zijn voor het snel dumpen van hele ou&#039;s in .ldif formaat. Zo&#039;n dump kan direct op een andere server worden ingelezen.&lt;br /&gt;
&lt;br /&gt;
===PhpLdapAdmin onder Linux===&lt;br /&gt;
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 [http://phpldapadmin.sourceforge.net/wiki/index.php/Server:server:tls phpldapadmin wiki].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# LDAP Defaults&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# See ldap.conf(5) for details&lt;br /&gt;
# This file should be world readable but not world writable.&lt;br /&gt;
&lt;br /&gt;
#BASE   dc=example,dc=com&lt;br /&gt;
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666&lt;br /&gt;
&lt;br /&gt;
#SIZELIMIT      12&lt;br /&gt;
#TIMELIMIT      15&lt;br /&gt;
#DEREF          never&lt;br /&gt;
TLS_CACERT      /etc/ssl/certs/CAcert_org.pem&lt;br /&gt;
TLS_CERT        /etc/ssl/private/hobby.nl.crt&lt;br /&gt;
TLS_KEY         /etc/ssl/private/hobby.nl.key&lt;br /&gt;
TLS_REQCERT     allow&lt;br /&gt;
#TLS_REQCERT never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Denk er wel aan na wijzigingen Apache te herstarten.&lt;br /&gt;
===PAM en NSS via LDAP===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Installeer &#039;&#039;&#039;libnss-ldapd&#039;&#039;&#039; om de benodigde libraries te verkrijgen. Apt-get zal tevens &#039;&#039;&#039;libpam-ldapd&#039;&#039;&#039;, &#039;&#039;&#039;nslcd&#039;&#039;&#039; en &#039;&#039;&#039;nscd&#039;&#039;&#039; binnen brengen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install libnss-ldapd auth-client-config ldap-utils&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
    libpam-ldapd nscd nslcd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Libnss-ldapd is een doorontwikkeling van libnss-ldap en bevat meerdere verbeteringen. Zie: [http://arthurdejong.org/nss-pam-ldapd/ deze site] van de ontwikkelaar. Bij de installatie wordt een user &#039;&#039;&#039;nslcd&#039;&#039;&#039; aangemaakt; denk erom die in de .tmpl bestanden te zetten!&lt;br /&gt;
  &lt;br /&gt;
nsswitch.conf laat zich configureren via &#039;&#039;&#039;auth-client-config&#039;&#039;&#039; maar lac_ldap is alleen aanwezig als &#039;&#039;&#039;ldap-auth-config&#039;&#039;&#039; ook is geinstalleerd. Zo niet gebruik dan de tweede regel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auth-client-config -t nss -p lac_ldap&lt;br /&gt;
auth-client-config -t nss -p ldap_example&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het resultaat is dat nsswitch.conf zowel in files (/etc/passwd etc.) zoekt als in ldap.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nsswitch.conf&lt;br /&gt;
#&lt;br /&gt;
# Example configuration of GNU Name Service Switch functionality.&lt;br /&gt;
# If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
# `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # passwd:         compat&lt;br /&gt;
passwd: files ldap&lt;br /&gt;
# pre_auth-client-config # group:          compat&lt;br /&gt;
group: files ldap&lt;br /&gt;
# pre_auth-client-config # shadow:         compat&lt;br /&gt;
shadow: files ldap&lt;br /&gt;
&lt;br /&gt;
hosts:          files dns&lt;br /&gt;
networks:       files&lt;br /&gt;
&lt;br /&gt;
protocols:      db files&lt;br /&gt;
services:       db files&lt;br /&gt;
ethers:         db files&lt;br /&gt;
rpc:            db files&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # netgroup:       nis&lt;br /&gt;
netgroup: nis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het aanpassen van de PAM bestanden gaat sinds enige releases met &#039;&#039;&#039;pam-auth-update&#039;&#039;&#039;. Kies in het menu voor zowel unix als ldap. Default wordt nu ldap authenticatie gebruikt voor uid &amp;gt;= 1000. Bij Hobbynet willen we vanaf 300 ldap gebruiken. Door een licht gemodificeerde versie van /usr/share/pam-configs/ldap te maken (ldap-hobbynet), kan ook voor de hobbynet instelling gekozen worden. Dit is de ldap-hobbynet versie:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Name: LDAP Authentication (uid&amp;gt;300)&lt;br /&gt;
Default: yes&lt;br /&gt;
Priority: 128&lt;br /&gt;
Auth-Type: Primary&lt;br /&gt;
Auth-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Auth:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 use_first_pass&lt;br /&gt;
Account-Type: Additional&lt;br /&gt;
Account:&lt;br /&gt;
        [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad]        pam_ldap.so minimum_uid=300&lt;br /&gt;
Password-Type: Primary&lt;br /&gt;
Password-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Password:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 try_first_pass&lt;br /&gt;
Session-Type: Additional&lt;br /&gt;
Session:&lt;br /&gt;
        [success=ok default=ignore]     pam_ldap.so minimum_uid=300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dit is in een standaard opzet van LDAP voldoende om zowel lokale gebruikers als gebruikers opgeslagen in LDAP, te laten inloggen en hun password te laten wijzigen. In de Hobbynet setup moet er echter nog meer gebeuren in de ACL&#039;s van de LDAP server configuratie. Omdat Hobbynet de laatste ACL regel heeft gewijzigd in een &#039;&#039;&#039;deny-all&#039;&#039;&#039;, is er een helper of proxy account nodig dat read access heeft of een aantal cruciale velden in de posixAccount objectClass. Zie verder de lsiting van nslcd.conf.&lt;br /&gt;
&lt;br /&gt;
Libnss-ldapd en libpam-ldapd hebben een gezamelijke daemon &#039;&#039;&#039;nslcd&#039;&#039;&#039; die z&#039;n configuratie uit &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039; haalt. Hierin is ook een voorziening voor het helper account. Aan het eind vande &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; staat de voorziening voor host-based login. Als het attribute &#039;&#039;&#039;host&#039;&#039;&#039; de fqdn of alleen de host naam bevat, bepaald dat of inloggen op die host mogelijk is. &#039;&#039;&#039;*&#039;&#039;&#039; staat inloggen op alle hosts toe.&lt;br /&gt;
&lt;br /&gt;
Eventueel kan het daemon proces voor debugging doeleinden ook als command (&#039;&#039;&#039;nslcd -d&#039;&#039;&#039;) gestart worden. Om de bevragingen van de LDAP server wat te verminderen, kan &#039;&#039;&#039;nscd&#039;&#039;&#039; voor caching zorgen. Deze cache daemon heeft zijn eigen configuratie bestand: &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039;. De default instellingen zijn goed; eventueel kan de logging naar een bestand gestuurd worden.&lt;br /&gt;
&lt;br /&gt;
Verbinding met de LDAP server kan met StartTLS beveiligd worden. Hier de inhoud van nslcd.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nslcd.conf&lt;br /&gt;
# nslcd configuration file. See nslcd.conf(5)&lt;br /&gt;
# for details.&lt;br /&gt;
&lt;br /&gt;
# The user and group nslcd should run as.&lt;br /&gt;
uid nslcd&lt;br /&gt;
gid nslcd&lt;br /&gt;
&lt;br /&gt;
# log location and level&lt;br /&gt;
#log /var/log/nslcd.log debug&lt;br /&gt;
&lt;br /&gt;
# The location at which the LDAP server(s) should be reachable.&lt;br /&gt;
uri ldap://ldap2-int.hobby.nl/&lt;br /&gt;
&lt;br /&gt;
# The search base that will be used for all queries.&lt;br /&gt;
base dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# Other base mappings&lt;br /&gt;
base   group  ou=groups,dc=hcc,dc=nl&lt;br /&gt;
base   passwd ou=users,dc=hcc,dc=nl&lt;br /&gt;
base   shadow ou=users,dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# The search scope.&lt;br /&gt;
#scope sub&lt;br /&gt;
&lt;br /&gt;
# The LDAP protocol version to use.&lt;br /&gt;
ldap_version 3&lt;br /&gt;
&lt;br /&gt;
# The DN to bind with for normal lookups.&lt;br /&gt;
#binddn cn=annonymous,dc=example,dc=net&lt;br /&gt;
#bindpw secret&lt;br /&gt;
binddn cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&lt;br /&gt;
bindpw xxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
# The DN used for password modifications by root.&lt;br /&gt;
#rootpwmoddn cn=admin,dc=example,dc=com&lt;br /&gt;
&lt;br /&gt;
# SSL options&lt;br /&gt;
ssl off&lt;br /&gt;
ssl start_tls&lt;br /&gt;
#tls_reqcert never&lt;br /&gt;
tls_cacertfile /etc/ssl/certs/cacert.org.pem&lt;br /&gt;
#tls_cert /etc/ssl/private/server.crt&lt;br /&gt;
#tls_key /etc/ssl/private/server.key&lt;br /&gt;
&lt;br /&gt;
# The minimum uid&lt;br /&gt;
nss_min_uid 300&lt;br /&gt;
&lt;br /&gt;
pam_authz_search (&amp;amp;(objectClass=posixAccount)(uid=$username)(|(host=$hostname)(host=$fqdn)(host=\\*)))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===users en groepen toevoegen===&lt;br /&gt;
Hiervoor moet &#039;&#039;&#039;ldapscripts&#039;&#039;&#039; zijn geïnstalleerd. Dit is het geval op de ldap-lb1 server. Dat levert de volgende extra commando&#039;s op:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldaprenamemachine&lt;br /&gt;
ldapadduser&lt;br /&gt;
ldapdeleteuserfromgroup&lt;br /&gt;
ldapfinger&lt;br /&gt;
ldapid&lt;br /&gt;
ldapgid&lt;br /&gt;
ldapmodifyuser&lt;br /&gt;
ldaprenameuser&lt;br /&gt;
lsldap&lt;br /&gt;
ldapaddusertogroup&lt;br /&gt;
ldapsetpasswd&lt;br /&gt;
ldapinit&lt;br /&gt;
ldapaddgroup&lt;br /&gt;
ldapdeletegroup&lt;br /&gt;
ldapmodifygroup&lt;br /&gt;
ldapdeletemachine&lt;br /&gt;
ldaprenamegroup&lt;br /&gt;
ldapaddmachine&lt;br /&gt;
ldapmodifymachine&lt;br /&gt;
ldapsetprimarygroup&lt;br /&gt;
ldapdeleteuser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Meest gebruikt zijn &#039;&#039;&#039;ldapaddgroup, ldapadduser, ldapsetpasswd&#039;&#039;&#039;.  &lt;br /&gt;
Er zijn manpages maar er is ook uitgebreide uitleg in de [https://help.ubuntu.com/14.04/serverguide/openldap-server.html Ubuntu server guide]. Omdat wij het automatisch maken van de home dir uit hebben staan, moet die met de hand aangemaakt worden en moet de owner goed gezet worden.&lt;br /&gt;
&lt;br /&gt;
===host-based login===&lt;br /&gt;
Met een kleine uitbreiding in het schema van de LDAP server, kan host-based login gerealiseerd worden. Ook in de &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; is een uitbreiding nodig.&lt;br /&gt;
&lt;br /&gt;
In de LDAP server dient de objectClass &#039;&#039;&#039;hostObject&#039;&#039;&#039; aan de entries in de ou=users toegevoegd te worden. Deze (auxilary) objectClass brengt slechts één attribute met zich mee: &#039;&#039;&#039;host&#039;&#039;&#039;. De regel in nslcd.conf checkt of één van de waarden van &#039;&#039;&#039;host&#039;&#039;&#039; gelijk is aan de naam van de server waarop ingelogd wordt. De waarde &#039;&#039;&#039;*&#039;&#039;&#039; geldt als wildcard. Zie de regel &#039;&#039;&lt;br /&gt;
&#039;pam_authz_search&#039;&#039;&#039;&#039; in &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Password aanpassen===&lt;br /&gt;
Via LDAP ingelogde gebruikers kunnen net als lokale gebruikers hun wachtwoord met &#039;&#039;&#039;passwd&#039;&#039;&#039; wijzigen. Wel moet aan de eisen in de LDAP ppolicy module voldaan worden.&lt;br /&gt;
&lt;br /&gt;
==PHP scripting==&lt;br /&gt;
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 &#039;&#039;&#039;/usr/local/hobbynet/bin&#039;&#039;&#039; directory.&lt;br /&gt;
Voor de php-scripting zijn enkele php7.x pakketten nodig. Installeer deze met apt-get. Het gaat om:&lt;br /&gt;
* php-cli&lt;br /&gt;
* php-ldap&lt;br /&gt;
&lt;br /&gt;
== Apache authenticatie via LDAP ==&lt;br /&gt;
In plaats van .htpassword authenticatie, kan ook LDAP gebruikt worden. Activeer daartoe de Apache module&lt;br /&gt;
&#039;authnz_ldap&#039;.&lt;br /&gt;
 a2enmod authnz_ldap&lt;br /&gt;
Denk er om dat dit in een loadbalanced situatie op beide servers gedaan dient te worden!&lt;br /&gt;
&lt;br /&gt;
=== Voorbeeld van een LDAP configuratie in de Apache config ===&lt;br /&gt;
(alleen als voorbeeld, niet zo gebruiken!)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# // 1) Hobbynet webmaster&lt;br /&gt;
# // 2) Vraagbaak medewerker van een willekeurige groepering&lt;br /&gt;
# (|(hccRol=*#VRBK)(hccRol=HN#WM))&lt;br /&gt;
  &amp;lt;Location &amp;quot;/apps/vraagbaak&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;RequireAll&amp;gt;&lt;br /&gt;
      Authname &amp;quot;HCC!vraagbaak (gebruik uw hcc.nl gebruikersnaam/wachtwoord)&amp;quot;&lt;br /&gt;
      AuthType Basic&lt;br /&gt;
      AuthBasicProvider ldap&lt;br /&gt;
      AuthLDAPUrl ldap://hcc-ldap-int.hobby.nl/ou=leden,dc=hcc,dc=nl?hccLogin??(|(hccRol=*#VRBK)(hccRol=HN#WM))(hccProfiel=TRUE) TLS&lt;br /&gt;
      require valid-user&lt;br /&gt;
    &amp;lt;/RequireAll&amp;gt;&lt;br /&gt;
  &amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hoe kan LDAP veilig gebruikt worden vanuit Apache===&lt;br /&gt;
Zet een script neer in de gebruikersomgeving, en gebruik mod_authz_external. Doe de controle vervolgens via de XML-RPC server.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zie [[Kadernet]] voor een voorbeeld.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== TODO lijst ==&lt;br /&gt;
&#039;&#039;Dit is een lijst in wording, graag aanvullen&#039;&#039; &lt;br /&gt;
* &#039;dun&#039; loadbalancer script maken om te controleren dat LDAP echt luistert&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79574</id>
		<title>LDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79574"/>
		<updated>2022-05-11T13:50:05Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* Installatie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introductie==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==LDAP server keuze==&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Loadbalanced==&lt;br /&gt;
Er zijn twee servers (ldap-lb1 en ldap-lb2) die achter een loadbalancer in preferred server mode staan 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.&lt;br /&gt;
&lt;br /&gt;
Tevens zijn er een test en een development server: ldap-test en ldap-dev.&lt;br /&gt;
&lt;br /&gt;
==Installatie==&lt;br /&gt;
Installatie van OpenLDAP is simpel:&lt;br /&gt;
 aptitude install slapd ldap-utils&lt;br /&gt;
Omdat er gebruikgemaakt wordt van php scripts, is het ook nodig &#039;&#039;&#039;php-cli&#039;&#039;&#039; en &#039;&#039;&#039;php-ldap&#039;&#039;&#039; te installeren. De configuratie van OpenLDAP is sinds Karmic Koala iets gecompliceerder geworden. &#039;cn=config&#039; 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 &amp;quot;dpkg-reconfigure slapd&amp;quot; zet alleen de skeleton configuratie terug. Je moet zelf de database, root dn en acl&#039;s opzetten (als root of met sudo). Run  &#039;&#039;&#039;dpkg-reconfigure slapd&#039;&#039;&#039; om terug te gaan naar een lege directory. &lt;br /&gt;
&lt;br /&gt;
De volgende pakketten dienen geïnstalleerd te zijn (&#039;php -m&#039; toont de geactiveerde modules):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mogelijk ontbrekende pakketten:&lt;br /&gt;
&lt;br /&gt;
apt-get install aptitude &lt;br /&gt;
apt-get install php-mbstring&lt;br /&gt;
apt-get install php-xmlrpc&lt;br /&gt;
apt-get install php-ldap&lt;br /&gt;
apt-get install ldapscripts&lt;br /&gt;
apt-get install php-xml&lt;br /&gt;
apt-get install slapd&lt;br /&gt;
apt-get install ldap-utils&lt;br /&gt;
&lt;br /&gt;
- openldap moet lid zijn van de groep ssl-cert!&lt;br /&gt;
apt-get install ssl-cert&lt;br /&gt;
adduser openldap ssl-cert&lt;br /&gt;
(of vi /etc/group&lt;br /&gt;
    ssl-cert:x:116:openldap)&lt;br /&gt;
&lt;br /&gt;
- Zorg dat de LDAP daemon bij de certificaten kan komen. &lt;br /&gt;
LET OP: op alle hobbynet servers staan de certificaten in /disk/site/etc/ssl/hobby.nl/&lt;br /&gt;
 chgrp ssl-cert /disk/site/etc/ssl/hobby.nl/hobby.nl.*&lt;br /&gt;
 chmod 440      /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
LET OP: Als apparmor geïnstalleerd is moet het pad naar de certificaten vrijgegeven worden. Als alternatief kan apparmor verwijderd worden.&lt;br /&gt;
&lt;br /&gt;
Het volgende is niet nodig voor ldap. Mischien voor mysql-server???&lt;br /&gt;
- mysql laat het bestand ibdata1 ongelimiteerd groeien (InnoDB bestanden)&lt;br /&gt;
 /etc/mysql/mysql.conf.d/innodb_file_per_table.cnf&lt;br /&gt;
 [mysql]&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
&lt;br /&gt;
=============&lt;br /&gt;
Nog meer Hobbynet aanpassingen&lt;br /&gt;
/etc/bash.bashrc&lt;br /&gt;
export http_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export https_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export ftp_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Locatie bestanden===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Alle ldif em tmpl bestanden gaan naar /usr/local/hobbynet/lib&lt;br /&gt;
* init_ldap en andere scripts gaan naar /usr/local/hobbynet/bin&lt;br /&gt;
* alle data bestanden (dumps) en update ldifs gaan naar /usr/local/hobbynet/data&lt;br /&gt;
* etc/ldap/schema/hcc_schema.* gaan naar /etc/ldap/schema&lt;br /&gt;
* etc/ldap/schema/ppolicy.ldif gaat naar /etc/ldap/schema&lt;br /&gt;
&lt;br /&gt;
hcc_schema.ldif wordt middels een script gemaakt. Dit script plaatst de ldif bestand(en) in /etc/ldap/schema. Zie hieronder.&lt;br /&gt;
&lt;br /&gt;
==Initiële database==&lt;br /&gt;
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.sh &amp;lt;admin-pw&amp;gt; gebruikt dan wordt een werkende directory gemaakt met alle statische data (in diverse ou&#039;s) erin. Gebruik na het maken van de initiële database restore_ldap.sh om de database te vullen met de data uit de data directory.&lt;br /&gt;
&lt;br /&gt;
===slapd.init.ldif ===&lt;br /&gt;
Bij installatie en reconfiguratie wordt /usr/share/slapd/slapd.init.ldif ingelezen. Zie aldaar indien nodig.&lt;br /&gt;
&lt;br /&gt;
==init_ldap script==&lt;br /&gt;
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 &#039;&#039;&#039;cn=admin,dc=hcc,dc=nl&#039;&#039;&#039; 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 &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; laadt vervolgens de laatste dump terug. Bij wijzigingen aan het schema is het raadzaam altijd een &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; te doen zodat een later een actuele dump kan worden teruggeladen.&lt;br /&gt;
&lt;br /&gt;
Het (plain text) password van cn=admin,dc=hcc,dc=nl moet bij het aanroepen van &#039;&#039;&#039;init_ldap&#039;&#039;&#039; op de commandline worden meegegeven. Tijdens de dpkg-reconfigure moet het password nog 2x gegeven worden. Lees eventueel ook de [http://www.openldap.org/doc/admin/ OpenLDAP Admin Guide].&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* voorbereidingen om &amp;quot;dpkg-reconfigure slapd&amp;quot; te draaien&lt;br /&gt;
* definities van input files&lt;br /&gt;
* check host&lt;br /&gt;
* bouwen van het skelet van de nieuwe directory&lt;br /&gt;
Zie voor details van de scripts &#039;&#039;&#039;init_ldap&#039;&#039;&#039;, &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; en &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; op een van de servers (in /usr/local/hobbynet/bin).&lt;br /&gt;
&lt;br /&gt;
==onderdelen van init_ldap==&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===add-schema.ldif===&lt;br /&gt;
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. &lt;br /&gt;
* Hiertoe wordt het onderstaande schema in /etc/ldap/schema geplaatst als hcc_schema.schema. &lt;br /&gt;
* Vervolgens worden de stappen uitgevoerd zoals beschreven in de [https://help.ubuntu.com/11.10/serverguide/C/openldap-server.html Ubuntu Server guide], onder &#039;&#039;&#039;Modifying the slapd Configuration Database&#039;&#039;&#039;. &lt;br /&gt;
* De resulterende output file &#039;&#039;&#039;cn=hcc_schema.ldif&#039;&#039;&#039; moet dan nog naar /etc/ldap/schema/hcc_schema.ldif gecopieerd worden. &lt;br /&gt;
Als dit proces herhaald moet worden, start dan met een lege output directory en verwijder een eventueel achtergebleven cn=hcc_schema.ldif bestand. &lt;br /&gt;
&lt;br /&gt;
De extra schema&#039;s worden middels een &#039;&#039;&#039;include&#039;&#039;&#039; toegevoegd. &#039;&#039;&#039;Ppolicy&#039;&#039;&#039; is op gelijke wijze als &#039;&#039;&#039;hcc_schema&#039;&#039;&#039; tot .ldif geconverteerd. Alle stappen om een nieuwe &#039;&#039;&#039;hcc-schema.ldif&#039;&#039;&#039; te maken zijn gescript in &#039;&#039;&#039;upd_schema&#039;&#039;&#039;. In &#039;&#039;&#039;init_ldap&#039;&#039;&#039; wordt het eigen schema en de password policy geladen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: add-schema.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
include: file:///etc/ldap/schema/hcc_schema.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ppolicy.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ldapns.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====schema updates====&lt;br /&gt;
Soms wordt een attribute toegevoegd of gewijzigd. Hiertoe dient het bestand hcc_schema.schema in /usr/local/hobbynet/etc/ldap/schema, gewijzigd te worden. Daarna dient er een ldif versie van gemaakt te worden. Gebruik hiervoor &#039;&#039;&#039;upd_schema.sh&#039;&#039;&#039; in dezelfde directory. De resulterende hcc_schema.ldif wordt in dit script naar /etc/ldap/schema gecopieërd. Bij grote wijzigingen is het aan te bevelen door de hele rebuild cycle te gaan (dump, init, restore). Bij triviale aanpassingen zou hcc_schema.ldif ook &#039;&#039;&#039;direct&#039;&#039;&#039; in de actieve directory geplaatst kunnen worden, gevolgd door slechts een &#039;&#039;&#039;service slapd restart&#039;&#039;&#039;. Gebruik hiervoor (blijf in de lokale schema directory):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp &amp;quot;ldif_output/cn=config/cn=schema/cn={14}hcc_schema.ldif&amp;quot; &amp;quot;/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}hcc_schema.ldif&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
LET OP: De nummers tussen accolades zijn bepaald door de volgorde van andere scripts! Zolang geen andere schema&#039;s worden toegevoegd zullen ze niet veranderen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ook kan met de ldap-tools gewerkt worden. Gebruik ldapsearch en ldapmodify, eventueel met de -f optie om een voorbereide serie opdrachten uit te voeren. Gebruik ldapsearch om eerst de structuur te vinden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier een voorbeeld om een objectClass aan te passen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat pas_aan.ldif&lt;br /&gt;
dn: cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
delete: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description ) )&lt;br /&gt;
-&lt;br /&gt;
add: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description $ hccIg ) )&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
$sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f pas_aan.ldif &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_config.ldif===&lt;br /&gt;
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 &#039;&#039;&#039;STATS&#039;&#039;&#039; gezet. Dit geeft niet teveel logging maar is toch goed bruikbaar. Om extra logging te krijgen op b.v. ACL&#039;s, verander olcLogLevel dan in &amp;quot;stats ACL&amp;quot;.  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-config.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcTLSCACertificateFile&lt;br /&gt;
olcTLSCACertificateFile: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
-&lt;br /&gt;
add: olcTLSCertificateFile&lt;br /&gt;
olcTLSCertificateFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
-&lt;br /&gt;
add: olcTLSCertificateKeyFile&lt;br /&gt;
olcTLSCertificateKeyFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
-&lt;br /&gt;
add: olcPasswordHash&lt;br /&gt;
olcPasswordHash: {CRYPT}&lt;br /&gt;
-&lt;br /&gt;
add: olcPasswordCryptSaltFormat&lt;br /&gt;
olcPasswordCryptSaltFormat: $6$%.16s&lt;br /&gt;
-&lt;br /&gt;
replace: olcLogLevel&lt;br /&gt;
olcLogLevel: stats&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Om de logging in een apart bestand te krijgen moet in /etc/rsyslog.d een extra bestand &#039;&#039;&#039;openldap.conf&#039;&#039;&#039; geplaatst worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local4.*   -/var/log/openldap.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Tevens willen we logrotate op dit bestand. Plaats in /etc/logrotate.d het bestand &#039;&#039;&#039;openldap&#039;&#039;&#039; met de volgende inhoud&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/log/openldap.log&lt;br /&gt;
{&lt;br /&gt;
        rotate 4&lt;br /&gt;
        weekly&lt;br /&gt;
        missingok&lt;br /&gt;
        notifempty&lt;br /&gt;
        compress&lt;br /&gt;
        delaycompress&lt;br /&gt;
        sharedscripts&lt;br /&gt;
        postrotate&lt;br /&gt;
                reload rsyslog &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 || true&lt;br /&gt;
        endscript&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify-mdb.ldif===&lt;br /&gt;
Hier worden de wijzigingen op de backend db gemaakt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-mdb.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
# hjv 2020.06.07 (oldSizeLimit toegevoegd)&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcDbCheckpoint&lt;br /&gt;
olcDbCheckpoint: 4096 1&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbNoSync&lt;br /&gt;
olcDbNoSync: TRUE&lt;br /&gt;
-&lt;br /&gt;
replace: olcSizeLimit&lt;br /&gt;
olcSizeLimit: 100000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===modify-acl.ldif===&lt;br /&gt;
Hier worden de rechten bepaald van de diverse rollen en groepen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-acl.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcAccess&lt;br /&gt;
# hobbynetlogin heeft lees rechten t.b.v. MySecureShell aanloggen&lt;br /&gt;
olcAccess: to attrs=@posixAccount,@posixGroup,@shadowAccount,@hostObject&lt;br /&gt;
  by dn=&amp;quot;cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to attrs=@posixAccount&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# sta anonymous search toe (t.b.v. Apache authenticatie)&lt;br /&gt;
olcAccess: to attrs=hccLogin,hccRol,hccProfiel,entry&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# olcAccess: to attrs=hccOptIn&lt;br /&gt;
#   by self write&lt;br /&gt;
#   by dn=&amp;quot;cn=drupal-hcc-nl,ou=klanten,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
#   by * break&lt;br /&gt;
#&lt;br /&gt;
# Anonieme klanten moeten kunnen inloggen&lt;br /&gt;
# en mogen hun eigen password wijzigen&lt;br /&gt;
olcAccess: to attrs=userPassword,shadowLastChange&lt;br /&gt;
  by self write&lt;br /&gt;
  by anonymous auth&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# Gebruiker mag zijn kader email wachtwoord aanpassen&lt;br /&gt;
olcAccess: to attrs=hccKaderPassword,hccKaderForward&lt;br /&gt;
  by self write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# beheerders hebben schrijfrechten op alles (updateDN)&lt;br /&gt;
# klanten hebben alleen lees rechten op alles (readDN)&lt;br /&gt;
# self mag lezen&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by self read&lt;br /&gt;
  by dn=&amp;quot;cn=xml-hoge-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn=&amp;quot;cn=xml-lage-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by dn.one=&amp;quot;ou=beheer,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn.one=&amp;quot;ou=klanten,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# PC30 helpdesk heeft leesrechten op ou=leden&lt;br /&gt;
olcAccess: to attrs=@hccOrgPerson,@hccKaderFunctie&lt;br /&gt;
  by dn.one=&amp;quot;ou=helpdesk,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# partners mogen een paar attrs lezen&lt;br /&gt;
olcAccess: to attrs=hccLidNummer,hccPostcode,hccPostcodeZoekveld,hccIg&lt;br /&gt;
  by dn.one=&amp;quot;ou=partners,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# iedereen moet (pseudo attr) entry en objectClass kunnen lezen&lt;br /&gt;
olcAccess: to attrs=entry,objectClass&lt;br /&gt;
  by * read&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by * none&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_index.ldif===&lt;br /&gt;
Een kale configuratie is heel snel voor wat betreft het opnieuw vullen met gegevens. Bij het aanmaken van een verse LDAP database worden er dan ook zo min mogelijk indexen aangemaakt.&amp;lt;br&amp;gt;&lt;br /&gt;
Zodra de inhoud is ingelezen kunnen de &#039;echte&#039; indexen aangemaakt worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-index.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcDbIndex&lt;br /&gt;
olcDbIndex: default pres,eq&lt;br /&gt;
olcDbIndex: objectClass,entryUUID,entryCSN eq&lt;br /&gt;
olcDbIndex: hccLidNummer,hccLogin,hccForumLogin eq&lt;br /&gt;
olcDbIndex: uid,uidNumber,gidNumber,memberUid,member eq&lt;br /&gt;
olcDbIndex: cn,host,hccPseudoniem,hccOptin,hccLocatie eq&lt;br /&gt;
olcDbIndex: sn,hccPostcodeZoekveld,hccIg,hccRegio eq,subfinal&lt;br /&gt;
olcDbIndex: hccRol,hccBezoek eq,pres,subfinal&lt;br /&gt;
olcDbIndex: hccBulletins pres&lt;br /&gt;
olcDbIndex: aboNummer eq&lt;br /&gt;
olcDbIndex: aboPostcodeZoekveld eq,subfinal&lt;br /&gt;
olcDbIndex: mail,mailHccnet,hccKaderMail,hccKaderForward pres,eq&lt;br /&gt;
olcDbIndex: hccProfiel pres,eq&lt;br /&gt;
olcDbindex: hccKaderUniekeURL eq&lt;br /&gt;
olcDbindex: hccOnderwerp eq,subfinal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ppolicy overlay===&lt;br /&gt;
* vanuit LDAP de minimale lengte van een wachtwoord afdwingen&lt;br /&gt;
* in LDAP SSHA versleuteling activeren&amp;lt;br&amp;gt;&lt;br /&gt;
(olcPPolicyHashCleartext: TRUE)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: add-ppolicy.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: cn=module, cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectClass: olcModuleList&lt;br /&gt;
objectClass: top&lt;br /&gt;
olcModuleLoad: ppolicy&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=ppolicy,olcDatabase={1}mdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcPPolicyConfig&lt;br /&gt;
olcOverlay: ppolicy&lt;br /&gt;
olcPPolicyDefault: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
olcPPolicyUseLockout: TRUE&lt;br /&gt;
olcPPolicyHashCleartext: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The default ppolicy looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dn: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
objectClass: pwdPolicy&lt;br /&gt;
objectClass: device&lt;br /&gt;
cn: default&lt;br /&gt;
pwdCheckQuality: 1&lt;br /&gt;
pwdMinLength: 8&lt;br /&gt;
pwdAttribute: 2.5.4.35&lt;br /&gt;
pwdAllowUserChange: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Syncrepl overlay===&lt;br /&gt;
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 [http://www.openldap.org/doc/admin/ LDAP Admin Guide]. &#039;&#039;&#039;Mirror configuratie is specifiek per server!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-syncrepl.tmpl                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
replace: olcServerID&lt;br /&gt;
olcServerID: @SID@&lt;br /&gt;
&lt;br /&gt;
dn: cn=module{0},cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcModuleLoad&lt;br /&gt;
olcModuleLoad: syncprov&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcSyncProvConfig&lt;br /&gt;
olcOverlay: syncprov&lt;br /&gt;
olcSpCheckpoint: 100 5&lt;br /&gt;
olcSpSessionlog: 100&lt;br /&gt;
&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcSyncRepl&lt;br /&gt;
olcSyncRepl: rid=@RID@&lt;br /&gt;
  provider=ldap://@PROVIDER@&lt;br /&gt;
  binddn=&amp;quot;cn=admin,dc=hcc,dc=nl&amp;quot; bindmethod=simple credentials=&amp;quot;@PASSWORD@&amp;quot;&lt;br /&gt;
  searchbase=&amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
  type=refreshAndPersist&lt;br /&gt;
  interval=00:00:00:10&lt;br /&gt;
  retry=&amp;quot;5 5 300 5&amp;quot;&lt;br /&gt;
  timeout=1&lt;br /&gt;
  starttls=yes&lt;br /&gt;
-&lt;br /&gt;
add: olcMirrorMode&lt;br /&gt;
olcMirrorMode: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
De andere server krijgt ServerID 2 en de provider is het IP adres van de andere server.&lt;br /&gt;
&lt;br /&gt;
===Unique overlay===&lt;br /&gt;
Deze overlay dient er voor te zorgen dat o.a het attribuut hccLogin een unieke waarde bevat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-unique.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module,cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectclass: olcModuleList&lt;br /&gt;
objectclass: top&lt;br /&gt;
olcmoduleload: unique&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=unique,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcUniqueConfig&lt;br /&gt;
olcOverlay: unique&lt;br /&gt;
olcUniqueAttribute: uid uidNumber hccLogin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SSL/TLS beveiliging==&lt;br /&gt;
Gebruik de juiste .pem bestanden in /etc/ssl/certs en /etc/ssl/private.&lt;br /&gt;
&lt;br /&gt;
We maken gebruik van een RapidSSL certificaat. Als dit niet standaard in Ubuntu bekend is, zet dan eerst GeoTrust_RapidSSL_-_ca-bundle.pem in de map /etc/ssl/certs neer. Voer nu een &#039;&#039;&#039;c_rehash .&#039;&#039;&#039; uit in /etc/ssl/certs om de cache te updaten (omdat GeoTrust_RapidSSL_-_ca-bundle.pem nieuw werd toegevoegd). &lt;br /&gt;
&lt;br /&gt;
De ownership is belangrijk. Hiertoe wordt de groep &amp;quot;openldap&amp;quot; toegevoegd aan de groep ssl-cert.&lt;br /&gt;
 adduser openldap ssl-cert&lt;br /&gt;
&lt;br /&gt;
Als dit fout gaat, doe dan eerst:&lt;br /&gt;
 apt-get install ssl-cert&lt;br /&gt;
&lt;br /&gt;
Zet het certificaat en de private key in de juiste groep:&lt;br /&gt;
 chgrp ssl-cert /etc/ssl/private/hobby.nl.*&lt;br /&gt;
 chmod 440      /etc/ssl/private/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
Het resultaat is dan als volgt:&lt;br /&gt;
 root@hcc-ldap-lb1:~# ls -l /etc/ssl/private/hcc* &lt;br /&gt;
 -rw-r--r-- 1 root     ssl-cert 1724 Nov 22 20:47 hobby.nl.crt&lt;br /&gt;
 -r--r----- 1 root     ssl-cert 1679 Nov 22 20:25 hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
 root@hcc-ldap-lb1:~# grep openldap /etc/group&lt;br /&gt;
 ssl-cert:x:114:openldap&lt;br /&gt;
 openldap:x:118:&lt;br /&gt;
&lt;br /&gt;
2020.12.09: Op een nieuwe Ubuntu installatie staat apparmor standaard aan. Weg ermee!&lt;br /&gt;
 apt remove --assume-yes --purge apparmor&lt;br /&gt;
&amp;lt;strike&amp;gt;Per september 2017 staan de certificaten in /disk/site/etc/ssl/hobby.nl, net als op alle andere servers. Omdat apparmor actief is moet deze directory worden toegevoegd aan /etc/apparmor.d/local/usr.sbin.slapd. Die file ziet er dan als volgt uit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Site-specific additions and overrides for usr.sbin.slapd.&lt;br /&gt;
# For more details, please see /etc/apparmor.d/local/README.&lt;br /&gt;
#include &amp;lt;abstractions/ssl_certs&amp;gt;&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/ r,&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/* r,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Openldap ook op poort 636 benaderd wordt (naast TLS op 389), moet in /etc/default/slapd ldaps:/// opgenomen worden bij de SLAPD_SERVICES.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;netstat -an&#039; dient dan 636 te laten zien voor zowel IPv4 als IPv6.&lt;br /&gt;
&lt;br /&gt;
Om de cn=config te zien kan je het volgende commando gebruiken:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config&lt;br /&gt;
&lt;br /&gt;
of, wat botter maar korter:&lt;br /&gt;
cat /etc/ldap/slapd.d/cn\=config.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Backup, initialize, restore==&lt;br /&gt;
Om het hele skelet van ldap in één keer te herstellen dient &#039;&#039;&#039;init_ldap&#039;&#039;&#039; gebruikt te worden. Als argument &#039;&#039;&#039;moet&#039;&#039;&#039; het admin beheer wachtwoord mee gegeven worden.&lt;br /&gt;
&lt;br /&gt;
===lokaal===&lt;br /&gt;
Backups kunnen gemaakt worden terwijl slapd draait maar geadviseerd wordt slapd te stoppen. Voor dumpen moet &#039;&#039;&#039;slapcat&#039;&#039;&#039; gebruikt worden. Backups kunnen gemaakt worden per database of een filter daarop, naar een ldif bestand.&lt;br /&gt;
 slapcat -l hcc-dump.ldif -b &amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
Dit maakt een dump van alles onder &#039;&#039;&#039;dc=hcc,dc=nl&#039;&#039;&#039; naar het bestand hcc-dump.ldif. Ook is het mogelijk het database nummer te gebruiken, config is altijd nummer 0, hdb is gewoonlijk 1.&lt;br /&gt;
&lt;br /&gt;
Het &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; script dumpt alle ou&#039;s in aparte .ldif bestanden; het omgekeerde doet &#039;&#039;&#039;restore_ldap&#039;&#039;&#039;.  &lt;br /&gt;
Terug inlezen kan alleen in een lege directory, dus direct nadat &#039;&#039;&#039;init_ldap&#039;&#039;&#039; is gedaan. Gebruik voor het terugplaatsen &#039;&#039;&#039;slapadd&#039;&#039;&#039;. Aan te bevelen is &#039;&#039;&#039;-c&#039;&#039;&#039; mee te geven zodat ondanks fouten doorgegaan wordt. &lt;br /&gt;
&lt;br /&gt;
Voor slapadd &#039;&#039;&#039;moet&#039;&#039;&#039; 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)&lt;br /&gt;
 /etc/init.d/slapd stop&lt;br /&gt;
 slapadd -l hcc-dump.ldif -w -c &amp;gt;errors.txt&lt;br /&gt;
 chown openldap:openldap /var/lib/ldap/*&lt;br /&gt;
 /etc/init.d/slapd start&lt;br /&gt;
&lt;br /&gt;
===remote===&lt;br /&gt;
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 &#039;&#039;&#039;backup-encrypted&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Recente lokale backups zijn te vinden in &#039;&#039;&#039;/usr/local/hobbynet/tmp&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Verse ldap maken===&lt;br /&gt;
Transactie log bij het toevoegen van b.v. een nieuwe ou:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Op beide servers:&lt;br /&gt;
schema van test server gecopieerd en geactiveerd&lt;br /&gt;
dump-ldap gedraaid&lt;br /&gt;
systemctl stop slapd.service &lt;br /&gt;
&lt;br /&gt;
Er is nu géén ldap service! Werk dus snel...&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb1&lt;br /&gt;
systemctl stop slapd.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
op ldap-lb2:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb2&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
systemctl start slapd.service&lt;br /&gt;
Beide slapd servers zijn in de lucht en moeten synchroniseren.&lt;br /&gt;
&lt;br /&gt;
op beide servers:&lt;br /&gt;
check replicatie (netstat en functioneel)&lt;br /&gt;
&lt;br /&gt;
root@ldap-lb1:/usr/local/hobbynet/bin# netstat -n | grep 389&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:49510 2a02:968:ffff:910:172:31:8:4:389 ESTABLISHED&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:389 2a02:968:ffff:910:172:31:8:4:37490 ESTABLISHED&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:49508 2a02:968:ffff:910:172:31:8:4:389 ESTABLISHED&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:389 2a02:968:ffff:910:172:31:8:4:37488 ESTABLISHED&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Functioneel door met ADS op beide servers in te loggen en een willekeurig veld in je eigen entry te wijzigen op lb1. Kijk of het gebeurd is op lb2 en wijzig het daar terug. Check op de andere server of het gebeurd is. Er kan een zekere vertraging in optreden.&lt;br /&gt;
&lt;br /&gt;
Stel er is een nieuwe ou gemaakt: denk aan het bij werken van de dump en restore scripts.&lt;br /&gt;
&lt;br /&gt;
update dump-ldap.sh en restore-ldap.sh met de nieuwe ou&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
export tarieven.ldif op test server en import op ldap-lb1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==crontab==&lt;br /&gt;
 # script dat updates ophaalt (maar niet installeert), zodat nagios ze ook detecteert&lt;br /&gt;
 0 9 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
==LDAP Clients==&lt;br /&gt;
Er zijn meerdere LDAP clients. De meest populaire zijn Apache Directory Studio (&amp;quot;ADS&amp;quot;) en phpLdapAdmin (&amp;quot;PLA&amp;quot;).&amp;lt;br&amp;gt;&lt;br /&gt;
De eerste is veel uitgbreider maar vereist een Java Runtime Environment (&amp;quot;JRE&amp;quot;). Onder Windows is dat JRE(13) of (open)JDK-(13).&amp;lt;br&amp;gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Binnen Hobbynet wordt uitsluitend gebruik gemaakt van ADS.&lt;br /&gt;
&lt;br /&gt;
===StartTLS===&lt;br /&gt;
Aanbevolen wordt StartTLS op poort 389 te gebruiken. Alternatief is LDAPS op poort 636 maar dat is deprecated. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Windows===&lt;br /&gt;
&amp;lt;i&amp;gt;2019-10-31 HJV: Oude info, als referentie leuk, maar niet meer relevant&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Onder Windows moet met &#039;&#039;&#039;keytool.exe&#039;&#039;&#039; gewerkt worden. De uitleg heb ik van  [http://www.talkingtree.com/blog/index.cfm?mode=entry&amp;amp;entry=25AA75A4-45A6-2844-7CA3EECD842DB576 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:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Haal de benodigde bestanden op (op een Linux systeem):&lt;br /&gt;
wget http://www.cacert.org/certs/root.der -O root.der&lt;br /&gt;
wget http://www.cacert.org/certs/class3.der -O class3.der&lt;br /&gt;
copieer de bestanden naar de Windows omgeving in C:\Program Files (x86)\Java\jre6\lib\security.&lt;br /&gt;
&lt;br /&gt;
Open een commandwindow:&lt;br /&gt;
cd C:\Program Files (x86)\Java\jre6\lib\security&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass1 -file root.der&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass3 -file class3.der&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Linux===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS gebruik===&lt;br /&gt;
ADS kan erg handig zijn voor het snel dumpen van hele ou&#039;s in .ldif formaat. Zo&#039;n dump kan direct op een andere server worden ingelezen.&lt;br /&gt;
&lt;br /&gt;
===PhpLdapAdmin onder Linux===&lt;br /&gt;
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 [http://phpldapadmin.sourceforge.net/wiki/index.php/Server:server:tls phpldapadmin wiki].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# LDAP Defaults&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# See ldap.conf(5) for details&lt;br /&gt;
# This file should be world readable but not world writable.&lt;br /&gt;
&lt;br /&gt;
#BASE   dc=example,dc=com&lt;br /&gt;
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666&lt;br /&gt;
&lt;br /&gt;
#SIZELIMIT      12&lt;br /&gt;
#TIMELIMIT      15&lt;br /&gt;
#DEREF          never&lt;br /&gt;
TLS_CACERT      /etc/ssl/certs/CAcert_org.pem&lt;br /&gt;
TLS_CERT        /etc/ssl/private/hobby.nl.crt&lt;br /&gt;
TLS_KEY         /etc/ssl/private/hobby.nl.key&lt;br /&gt;
TLS_REQCERT     allow&lt;br /&gt;
#TLS_REQCERT never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Denk er wel aan na wijzigingen Apache te herstarten.&lt;br /&gt;
===PAM en NSS via LDAP===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Installeer &#039;&#039;&#039;libnss-ldapd&#039;&#039;&#039; om de benodigde libraries te verkrijgen. Apt-get zal tevens &#039;&#039;&#039;libpam-ldapd&#039;&#039;&#039;, &#039;&#039;&#039;nslcd&#039;&#039;&#039; en &#039;&#039;&#039;nscd&#039;&#039;&#039; binnen brengen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install libnss-ldapd auth-client-config ldap-utils&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
    libpam-ldapd nscd nslcd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Libnss-ldapd is een doorontwikkeling van libnss-ldap en bevat meerdere verbeteringen. Zie: [http://arthurdejong.org/nss-pam-ldapd/ deze site] van de ontwikkelaar. Bij de installatie wordt een user &#039;&#039;&#039;nslcd&#039;&#039;&#039; aangemaakt; denk erom die in de .tmpl bestanden te zetten!&lt;br /&gt;
  &lt;br /&gt;
nsswitch.conf laat zich configureren via &#039;&#039;&#039;auth-client-config&#039;&#039;&#039; maar lac_ldap is alleen aanwezig als &#039;&#039;&#039;ldap-auth-config&#039;&#039;&#039; ook is geinstalleerd. Zo niet gebruik dan de tweede regel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auth-client-config -t nss -p lac_ldap&lt;br /&gt;
auth-client-config -t nss -p ldap_example&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het resultaat is dat nsswitch.conf zowel in files (/etc/passwd etc.) zoekt als in ldap.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nsswitch.conf&lt;br /&gt;
#&lt;br /&gt;
# Example configuration of GNU Name Service Switch functionality.&lt;br /&gt;
# If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
# `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # passwd:         compat&lt;br /&gt;
passwd: files ldap&lt;br /&gt;
# pre_auth-client-config # group:          compat&lt;br /&gt;
group: files ldap&lt;br /&gt;
# pre_auth-client-config # shadow:         compat&lt;br /&gt;
shadow: files ldap&lt;br /&gt;
&lt;br /&gt;
hosts:          files dns&lt;br /&gt;
networks:       files&lt;br /&gt;
&lt;br /&gt;
protocols:      db files&lt;br /&gt;
services:       db files&lt;br /&gt;
ethers:         db files&lt;br /&gt;
rpc:            db files&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # netgroup:       nis&lt;br /&gt;
netgroup: nis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het aanpassen van de PAM bestanden gaat sinds enige releases met &#039;&#039;&#039;pam-auth-update&#039;&#039;&#039;. Kies in het menu voor zowel unix als ldap. Default wordt nu ldap authenticatie gebruikt voor uid &amp;gt;= 1000. Bij Hobbynet willen we vanaf 300 ldap gebruiken. Door een licht gemodificeerde versie van /usr/share/pam-configs/ldap te maken (ldap-hobbynet), kan ook voor de hobbynet instelling gekozen worden. Dit is de ldap-hobbynet versie:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Name: LDAP Authentication (uid&amp;gt;300)&lt;br /&gt;
Default: yes&lt;br /&gt;
Priority: 128&lt;br /&gt;
Auth-Type: Primary&lt;br /&gt;
Auth-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Auth:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 use_first_pass&lt;br /&gt;
Account-Type: Additional&lt;br /&gt;
Account:&lt;br /&gt;
        [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad]        pam_ldap.so minimum_uid=300&lt;br /&gt;
Password-Type: Primary&lt;br /&gt;
Password-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Password:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 try_first_pass&lt;br /&gt;
Session-Type: Additional&lt;br /&gt;
Session:&lt;br /&gt;
        [success=ok default=ignore]     pam_ldap.so minimum_uid=300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dit is in een standaard opzet van LDAP voldoende om zowel lokale gebruikers als gebruikers opgeslagen in LDAP, te laten inloggen en hun password te laten wijzigen. In de Hobbynet setup moet er echter nog meer gebeuren in de ACL&#039;s van de LDAP server configuratie. Omdat Hobbynet de laatste ACL regel heeft gewijzigd in een &#039;&#039;&#039;deny-all&#039;&#039;&#039;, is er een helper of proxy account nodig dat read access heeft of een aantal cruciale velden in de posixAccount objectClass. Zie verder de lsiting van nslcd.conf.&lt;br /&gt;
&lt;br /&gt;
Libnss-ldapd en libpam-ldapd hebben een gezamelijke daemon &#039;&#039;&#039;nslcd&#039;&#039;&#039; die z&#039;n configuratie uit &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039; haalt. Hierin is ook een voorziening voor het helper account. Aan het eind vande &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; staat de voorziening voor host-based login. Als het attribute &#039;&#039;&#039;host&#039;&#039;&#039; de fqdn of alleen de host naam bevat, bepaald dat of inloggen op die host mogelijk is. &#039;&#039;&#039;*&#039;&#039;&#039; staat inloggen op alle hosts toe.&lt;br /&gt;
&lt;br /&gt;
Eventueel kan het daemon proces voor debugging doeleinden ook als command (&#039;&#039;&#039;nslcd -d&#039;&#039;&#039;) gestart worden. Om de bevragingen van de LDAP server wat te verminderen, kan &#039;&#039;&#039;nscd&#039;&#039;&#039; voor caching zorgen. Deze cache daemon heeft zijn eigen configuratie bestand: &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039;. De default instellingen zijn goed; eventueel kan de logging naar een bestand gestuurd worden.&lt;br /&gt;
&lt;br /&gt;
Verbinding met de LDAP server kan met StartTLS beveiligd worden. Hier de inhoud van nslcd.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nslcd.conf&lt;br /&gt;
# nslcd configuration file. See nslcd.conf(5)&lt;br /&gt;
# for details.&lt;br /&gt;
&lt;br /&gt;
# The user and group nslcd should run as.&lt;br /&gt;
uid nslcd&lt;br /&gt;
gid nslcd&lt;br /&gt;
&lt;br /&gt;
# log location and level&lt;br /&gt;
#log /var/log/nslcd.log debug&lt;br /&gt;
&lt;br /&gt;
# The location at which the LDAP server(s) should be reachable.&lt;br /&gt;
uri ldap://ldap2-int.hobby.nl/&lt;br /&gt;
&lt;br /&gt;
# The search base that will be used for all queries.&lt;br /&gt;
base dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# Other base mappings&lt;br /&gt;
base   group  ou=groups,dc=hcc,dc=nl&lt;br /&gt;
base   passwd ou=users,dc=hcc,dc=nl&lt;br /&gt;
base   shadow ou=users,dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# The search scope.&lt;br /&gt;
#scope sub&lt;br /&gt;
&lt;br /&gt;
# The LDAP protocol version to use.&lt;br /&gt;
ldap_version 3&lt;br /&gt;
&lt;br /&gt;
# The DN to bind with for normal lookups.&lt;br /&gt;
#binddn cn=annonymous,dc=example,dc=net&lt;br /&gt;
#bindpw secret&lt;br /&gt;
binddn cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&lt;br /&gt;
bindpw xxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
# The DN used for password modifications by root.&lt;br /&gt;
#rootpwmoddn cn=admin,dc=example,dc=com&lt;br /&gt;
&lt;br /&gt;
# SSL options&lt;br /&gt;
ssl off&lt;br /&gt;
ssl start_tls&lt;br /&gt;
#tls_reqcert never&lt;br /&gt;
tls_cacertfile /etc/ssl/certs/cacert.org.pem&lt;br /&gt;
#tls_cert /etc/ssl/private/server.crt&lt;br /&gt;
#tls_key /etc/ssl/private/server.key&lt;br /&gt;
&lt;br /&gt;
# The minimum uid&lt;br /&gt;
nss_min_uid 300&lt;br /&gt;
&lt;br /&gt;
pam_authz_search (&amp;amp;(objectClass=posixAccount)(uid=$username)(|(host=$hostname)(host=$fqdn)(host=\\*)))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===users en groepen toevoegen===&lt;br /&gt;
Hiervoor moet &#039;&#039;&#039;ldapscripts&#039;&#039;&#039; zijn geïnstalleerd. Dit is het geval op de ldap-lb1 server. Dat levert de volgende extra commando&#039;s op:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldaprenamemachine&lt;br /&gt;
ldapadduser&lt;br /&gt;
ldapdeleteuserfromgroup&lt;br /&gt;
ldapfinger&lt;br /&gt;
ldapid&lt;br /&gt;
ldapgid&lt;br /&gt;
ldapmodifyuser&lt;br /&gt;
ldaprenameuser&lt;br /&gt;
lsldap&lt;br /&gt;
ldapaddusertogroup&lt;br /&gt;
ldapsetpasswd&lt;br /&gt;
ldapinit&lt;br /&gt;
ldapaddgroup&lt;br /&gt;
ldapdeletegroup&lt;br /&gt;
ldapmodifygroup&lt;br /&gt;
ldapdeletemachine&lt;br /&gt;
ldaprenamegroup&lt;br /&gt;
ldapaddmachine&lt;br /&gt;
ldapmodifymachine&lt;br /&gt;
ldapsetprimarygroup&lt;br /&gt;
ldapdeleteuser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Meest gebruikt zijn &#039;&#039;&#039;ldapaddgroup, ldapadduser, ldapsetpasswd&#039;&#039;&#039;.  &lt;br /&gt;
Er zijn manpages maar er is ook uitgebreide uitleg in de [https://help.ubuntu.com/14.04/serverguide/openldap-server.html Ubuntu server guide]. Omdat wij het automatisch maken van de home dir uit hebben staan, moet die met de hand aangemaakt worden en moet de owner goed gezet worden.&lt;br /&gt;
&lt;br /&gt;
===host-based login===&lt;br /&gt;
Met een kleine uitbreiding in het schema van de LDAP server, kan host-based login gerealiseerd worden. Ook in de &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; is een uitbreiding nodig.&lt;br /&gt;
&lt;br /&gt;
In de LDAP server dient de objectClass &#039;&#039;&#039;hostObject&#039;&#039;&#039; aan de entries in de ou=users toegevoegd te worden. Deze (auxilary) objectClass brengt slechts één attribute met zich mee: &#039;&#039;&#039;host&#039;&#039;&#039;. De regel in nslcd.conf checkt of één van de waarden van &#039;&#039;&#039;host&#039;&#039;&#039; gelijk is aan de naam van de server waarop ingelogd wordt. De waarde &#039;&#039;&#039;*&#039;&#039;&#039; geldt als wildcard. Zie de regel &#039;&#039;&lt;br /&gt;
&#039;pam_authz_search&#039;&#039;&#039;&#039; in &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Password aanpassen===&lt;br /&gt;
Via LDAP ingelogde gebruikers kunnen net als lokale gebruikers hun wachtwoord met &#039;&#039;&#039;passwd&#039;&#039;&#039; wijzigen. Wel moet aan de eisen in de LDAP ppolicy module voldaan worden.&lt;br /&gt;
&lt;br /&gt;
==PHP scripting==&lt;br /&gt;
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 &#039;&#039;&#039;/usr/local/hobbynet/bin&#039;&#039;&#039; directory.&lt;br /&gt;
Voor de php-scripting zijn enkele php7.x pakketten nodig. Installeer deze met apt-get. Het gaat om:&lt;br /&gt;
* php-cli&lt;br /&gt;
* php-ldap&lt;br /&gt;
&lt;br /&gt;
== Apache authenticatie via LDAP ==&lt;br /&gt;
In plaats van .htpassword authenticatie, kan ook LDAP gebruikt worden. Activeer daartoe de Apache module&lt;br /&gt;
&#039;authnz_ldap&#039;.&lt;br /&gt;
 a2enmod authnz_ldap&lt;br /&gt;
Denk er om dat dit in een loadbalanced situatie op beide servers gedaan dient te worden!&lt;br /&gt;
&lt;br /&gt;
=== Voorbeeld van een LDAP configuratie in de Apache config ===&lt;br /&gt;
(alleen als voorbeeld, niet zo gebruiken!)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# // 1) Hobbynet webmaster&lt;br /&gt;
# // 2) Vraagbaak medewerker van een willekeurige groepering&lt;br /&gt;
# (|(hccRol=*#VRBK)(hccRol=HN#WM))&lt;br /&gt;
  &amp;lt;Location &amp;quot;/apps/vraagbaak&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;RequireAll&amp;gt;&lt;br /&gt;
      Authname &amp;quot;HCC!vraagbaak (gebruik uw hcc.nl gebruikersnaam/wachtwoord)&amp;quot;&lt;br /&gt;
      AuthType Basic&lt;br /&gt;
      AuthBasicProvider ldap&lt;br /&gt;
      AuthLDAPUrl ldap://hcc-ldap-int.hobby.nl/ou=leden,dc=hcc,dc=nl?hccLogin??(|(hccRol=*#VRBK)(hccRol=HN#WM))(hccProfiel=TRUE) TLS&lt;br /&gt;
      require valid-user&lt;br /&gt;
    &amp;lt;/RequireAll&amp;gt;&lt;br /&gt;
  &amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hoe kan LDAP veilig gebruikt worden vanuit Apache===&lt;br /&gt;
Zet een script neer in de gebruikersomgeving, en gebruik mod_authz_external. Doe de controle vervolgens via de XML-RPC server.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zie [[Kadernet]] voor een voorbeeld.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== TODO lijst ==&lt;br /&gt;
&#039;&#039;Dit is een lijst in wording, graag aanvullen&#039;&#039; &lt;br /&gt;
* &#039;dun&#039; loadbalancer script maken om te controleren dat LDAP echt luistert&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=Roundcube_Webmail&amp;diff=79389</id>
		<title>Roundcube Webmail</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=Roundcube_Webmail&amp;diff=79389"/>
		<updated>2022-02-03T15:30:30Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* Upgrading Roundcube webmail */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Upgrading Roundcube webmail==&lt;br /&gt;
Roundcube wordt niet via de standaard repo&#039;s geupdate maar via een tar.gz distributie. Deze kan worden gedownload van [http://roundcube.net/ de Roundcube site]. Makkelijkste is een wget van de url in je eigen home dir te doen op de mail servers. &lt;br /&gt;
&lt;br /&gt;
* Maak een backup van de webtree met cp -Rp /disk/site/hobbynet/mail/roundcube /disk/site/hobbynet/mail/roundcube.old.&lt;br /&gt;
* Maak een backup van de database: mysqldump -h 127.0.0.1 roundcube &amp;gt;roundcube.sql (aangenomen dat je root bent...)&lt;br /&gt;
* wget [https://github.com/roundcube/roundcubemail/releases/download/1.4.9/roundcubemail-1.4.9-complete.tar.gz https://github.com/roundcube/roundcubemail/releases/download/1.4.13/roundcubemail-1.4.13-complete.tar.gz] (of nieuwer)&lt;br /&gt;
* Pak de tarball uit: tar zxf ...&lt;br /&gt;
* cd in de net ontstane directory.&lt;br /&gt;
* Lees UPGRADING en INSTALL. &lt;br /&gt;
* run het script &#039;&#039;&#039;./bin/installto.sh /disk/site/hobbynet/mail/roundcube&#039;&#039;&#039;.&lt;br /&gt;
* controleer owner /disk/site/hobbynet/mail/roundcube. Zet de hele tree op www-data:www-data, indien nodig. Gebruik daarvoor &#039;&#039;&#039;chown -R www-data:www-data /disk/site/hobbynet/mail/roundcube&#039;&#039;&#039;&lt;br /&gt;
* werk de adresboek indexen bij door &#039;&#039;&#039;./bin/indexcontacts.sh&#039;&#039;&#039; uit  te voeren &#039;&#039;&#039;in de life webtree&#039;&#039;&#039;.&lt;br /&gt;
* ruim voorlaatste versie op nadat de nieuwe release getest is.&lt;br /&gt;
&lt;br /&gt;
Dat is alles.&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=Roundcube_Webmail&amp;diff=79282</id>
		<title>Roundcube Webmail</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=Roundcube_Webmail&amp;diff=79282"/>
		<updated>2021-02-08T21:30:42Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* Upgrading Roundcube webmail */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Upgrading Roundcube webmail==&lt;br /&gt;
Roundcube wordt niet via de standaard repo&#039;s geupdate maar via een tar.gz distributie. Deze kan worden gedownload van [http://roundcube.net/ de Roundcube site]. Makkelijkste is een wget van de url in je eigen home dir te doen op de mail servers. &lt;br /&gt;
&lt;br /&gt;
* Maak een backup van de webtree met cp -Rp /disk/site/hobbynet/mail/roundcube /disk/site/hobbynet/mail/roundcube.old.&lt;br /&gt;
* Maak een backup van de database: mysqldump -h 127.0.0.1 roundcube &amp;gt;roundcube.sql (aangenomen dat je root bent...)&lt;br /&gt;
* wget [https://github.com/roundcube/roundcubemail/releases/download/1.4.9/roundcubemail-1.4.9-complete.tar.gz https://github.com/roundcube/roundcubemail/releases/download/1.4.11/roundcubemail-1.4.11-complete.tar.gz] (of nieuwer)&lt;br /&gt;
* Pak de tarball uit: tar zxf ...&lt;br /&gt;
* cd in de net ontstane directory.&lt;br /&gt;
* Lees UPGRADING en INSTALL. &lt;br /&gt;
* run het script &#039;&#039;&#039;./bin/installto.sh /disk/site/hobbynet/mail/roundcube&#039;&#039;&#039;.&lt;br /&gt;
* controleer owner /disk/site/hobbynet/mail/roundcube. Zet de hele tree op www-data:www-data, indien nodig. Gebruik daarvoor &#039;&#039;&#039;chown -R www-data:www-data /disk/site/hobbynet/mail/roundcube&#039;&#039;&#039;&lt;br /&gt;
* werk de adresboek indexen bij door &#039;&#039;&#039;./bin/indexcontacts.sh&#039;&#039;&#039; uit  te voeren &#039;&#039;&#039;in de life webtree&#039;&#039;&#039;.&lt;br /&gt;
* ruim voorlaatste versie op nadat de nieuwe release getest is.&lt;br /&gt;
&lt;br /&gt;
Dat is alles.&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=Roundcube_Webmail&amp;diff=79280</id>
		<title>Roundcube Webmail</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=Roundcube_Webmail&amp;diff=79280"/>
		<updated>2021-02-08T21:21:02Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* Upgrading Roundcube webmail */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Upgrading Roundcube webmail==&lt;br /&gt;
Roundcube wordt niet via de standaard repo&#039;s geupdate maar via een tar.gz distributie. Deze kan worden gedownload van [http://roundcube.net/ de Roundcube site]. Makkelijkste is een wget van de url in je eigen home dir te doen op de mail servers. &lt;br /&gt;
&lt;br /&gt;
* Maak een backup van de webtree met cp -Rp /disk/site/hobbynet/mail/roundcube /disk/site/hobbynet/mail/roundcube.old.&lt;br /&gt;
* Maak een backup van de database: mysqldump -h 127.0.0.1 roundcube &amp;gt;roundcube.sql (aangenomen dat je root bent...)&lt;br /&gt;
* wget https://github.com/roundcube/roundcubemail/releases/download/1.4.9/roundcubemail-1.4.9-complete.tar.gz (of nieuwer)&lt;br /&gt;
* Pak de tarball uit: tar zxf ...&lt;br /&gt;
* cd in de net ontstane directory.&lt;br /&gt;
* Lees UPGRADING en INSTALL. &lt;br /&gt;
* run het script &#039;&#039;&#039;./bin/installto.sh /disk/site/mail/roundcube&#039;&#039;&#039;.&lt;br /&gt;
* controleer owner /disk/site/mail/roundcube. Zet de hele tree op www-data:www-data, indien nodig. Gebruik daarvoor&#039;&#039;&#039;chown -R www-data:www-data /disk/site/mail/roundcube&#039;&#039;&#039; &lt;br /&gt;
* werk de adresboek indexen bij door &#039;&#039;&#039;./bin/indexcontacts.sh&#039;&#039;&#039; uit  te voeren &#039;&#039;&#039;in de life webtree&#039;&#039;&#039;.&lt;br /&gt;
* ruim voorlaatste versie op nadat de nieuwe release getest is.&lt;br /&gt;
&lt;br /&gt;
Dat is alles.&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79114</id>
		<title>LDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79114"/>
		<updated>2020-12-20T12:22:18Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* Installatie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introductie==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==LDAP server keuze==&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Loadbalanced==&lt;br /&gt;
Er zijn twee servers (ldap-lb1 en ldap-lb2) die achter een loadbalancer in preferred server mode staan 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.&lt;br /&gt;
&lt;br /&gt;
Tevens zijn er een test en een development server: ldap-test en ldap-dev.&lt;br /&gt;
&lt;br /&gt;
==Installatie==&lt;br /&gt;
Installatie van OpenLDAP is simpel:&lt;br /&gt;
 aptitude install slapd ldap-utils&lt;br /&gt;
Omdat er gebruikgemaakt wordt van php scripts, is het ook nodig &#039;&#039;&#039;php-cli&#039;&#039;&#039; en &#039;&#039;&#039;php-ldap&#039;&#039;&#039; te installeren. De configuratie van OpenLDAP is sinds Karmic Koala iets gecompliceerder geworden. &#039;cn=config&#039; 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 &amp;quot;dpkg-reconfigure slapd&amp;quot; zet alleen de skeleton configuratie terug. Je moet zelf de database, root dn en acl&#039;s opzetten (als root of met sudo). Run  &#039;&#039;&#039;dpkg-reconfigure slapd&#039;&#039;&#039; om terug te gaan naar een lege directory. &lt;br /&gt;
&lt;br /&gt;
De volgende pakketten dienen geïnstalleerd te zijn (&#039;php -m&#039; toont de geactiveerde modules):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mogelijk ontbrekende pakketten:&lt;br /&gt;
&lt;br /&gt;
apt-get install aptitude &lt;br /&gt;
apt-get install php-mbstring&lt;br /&gt;
apt-get install php-xmlrpc&lt;br /&gt;
apt-get install php-ldap&lt;br /&gt;
apt-get install ldapscripts&lt;br /&gt;
apt-get install php-xml&lt;br /&gt;
apt-get install slapd&lt;br /&gt;
apt-get install ldap-utils&lt;br /&gt;
&lt;br /&gt;
- openldap moet lid zijn van de groep ssl-cert!&lt;br /&gt;
apt-get install ssl-cert&lt;br /&gt;
adduser openldap ssl-cert&lt;br /&gt;
(of vi /etc/group&lt;br /&gt;
    ssl-cert:x:116:openldap)&lt;br /&gt;
&lt;br /&gt;
- Zorg dat de LDAP daemon bij de certificaten kan komen. &lt;br /&gt;
LET OP: op alle hobbynet servers staan de certificaten in /disk/site/etc/ssl/hobby.nl/&lt;br /&gt;
 chgrp ssl-cert /disk/site/etc/ssl/hobby.nl/hobby.nl.*&lt;br /&gt;
 chmod 440      /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
Het volgende is niet nodig voor ldap. Mischien voor mysql-server???&lt;br /&gt;
- mysql laat het bestand ibdata1 ongelimiteerd groeien (InnoDB bestanden)&lt;br /&gt;
 /etc/mysql/mysql.conf.d/innodb_file_per_table.cnf&lt;br /&gt;
 [mysql]&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
&lt;br /&gt;
=============&lt;br /&gt;
Nog meer Hobbynet aanpassingen&lt;br /&gt;
/etc/bash.bashrc&lt;br /&gt;
export http_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export https_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export ftp_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Locatie bestanden===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Alle ldif em tmpl bestanden gaan naar /usr/local/hobbynet/lib&lt;br /&gt;
* init_ldap en andere scripts gaan naar /usr/local/hobbynet/bin&lt;br /&gt;
* alle data bestanden (dumps) en update ldifs gaan naar /usr/local/hobbynet/data&lt;br /&gt;
* etc/ldap/schema/hcc_schema.* gaan naar /etc/ldap/schema&lt;br /&gt;
* etc/ldap/schema/ppolicy.ldif gaat naar /etc/ldap/schema&lt;br /&gt;
&lt;br /&gt;
hcc_schema.ldif wordt middels een script gemaakt. Dit script plaatst de ldif bestand(en) in /etc/ldap/schema. Zie hieronder.&lt;br /&gt;
&lt;br /&gt;
==Initiële database==&lt;br /&gt;
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.sh &amp;lt;admin-pw&amp;gt; gebruikt dan wordt een werkende directory gemaakt met alle statische data (in diverse ou&#039;s) erin. Gebruik na het maken van de initiële database restore_ldap.sh om de database te vullen met de data uit de data directory.&lt;br /&gt;
&lt;br /&gt;
===slapd.init.ldif ===&lt;br /&gt;
Bij installatie en reconfiguratie wordt /usr/share/slapd/slapd.init.ldif ingelezen. Zie aldaar indien nodig.&lt;br /&gt;
&lt;br /&gt;
==init_ldap script==&lt;br /&gt;
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 &#039;&#039;&#039;cn=admin,dc=hcc,dc=nl&#039;&#039;&#039; 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 &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; laadt vervolgens de laatste dump terug. Bij wijzigingen aan het schema is het raadzaam altijd een &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; te doen zodat een later een actuele dump kan worden teruggeladen.&lt;br /&gt;
&lt;br /&gt;
Het (plain text) password van cn=admin,dc=hcc,dc=nl moet bij het aanroepen van &#039;&#039;&#039;init_ldap&#039;&#039;&#039; op de commandline worden meegegeven. Tijdens de dpkg-reconfigure moet het password nog 2x gegeven worden. Lees eventueel ook de [http://www.openldap.org/doc/admin/ OpenLDAP Admin Guide].&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* voorbereidingen om &amp;quot;dpkg-reconfigure slapd&amp;quot; te draaien&lt;br /&gt;
* definities van input files&lt;br /&gt;
* check host&lt;br /&gt;
* bouwen van het skelet van de nieuwe directory&lt;br /&gt;
Zie voor details van de scripts &#039;&#039;&#039;init_ldap&#039;&#039;&#039;, &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; en &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; op een van de servers (in /usr/local/hobbynet/bin).&lt;br /&gt;
&lt;br /&gt;
==onderdelen van init_ldap==&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===add-schema.ldif===&lt;br /&gt;
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. &lt;br /&gt;
* Hiertoe wordt het onderstaande schema in /etc/ldap/schema geplaatst als hcc_schema.schema. &lt;br /&gt;
* Vervolgens worden de stappen uitgevoerd zoals beschreven in de [https://help.ubuntu.com/11.10/serverguide/C/openldap-server.html Ubuntu Server guide], onder &#039;&#039;&#039;Modifying the slapd Configuration Database&#039;&#039;&#039;. &lt;br /&gt;
* De resulterende output file &#039;&#039;&#039;cn=hcc_schema.ldif&#039;&#039;&#039; moet dan nog naar /etc/ldap/schema/hcc_schema.ldif gecopieerd worden. &lt;br /&gt;
Als dit proces herhaald moet worden, start dan met een lege output directory en verwijder een eventueel achtergebleven cn=hcc_schema.ldif bestand. &lt;br /&gt;
&lt;br /&gt;
De extra schema&#039;s worden middels een &#039;&#039;&#039;include&#039;&#039;&#039; toegevoegd. &#039;&#039;&#039;Ppolicy&#039;&#039;&#039; is op gelijke wijze als &#039;&#039;&#039;hcc_schema&#039;&#039;&#039; tot .ldif geconverteerd. Alle stappen om een nieuwe &#039;&#039;&#039;hcc-schema.ldif&#039;&#039;&#039; te maken zijn gescript in &#039;&#039;&#039;upd_schema&#039;&#039;&#039;. In &#039;&#039;&#039;init_ldap&#039;&#039;&#039; wordt het eigen schema en de password policy geladen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: add-schema.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
include: file:///etc/ldap/schema/hcc_schema.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ppolicy.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ldapns.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====schema updates====&lt;br /&gt;
Soms wordt een attribute toegevoegd of gewijzigd. Hiertoe dient het bestand hcc_schema.schema in /usr/local/hobbynet/etc/ldap/schema, gewijzigd te worden. Daarna dient er een ldif versie van gemaakt te worden. Gebruik hiervoor &#039;&#039;&#039;upd_schema.sh&#039;&#039;&#039; in dezelfde directory. De resulterende hcc_schema.ldif wordt in dit script naar /etc/ldap/schema gecopieërd. Bij grote wijzigingen is het aan te bevelen door de hele rebuild cycle te gaan (dump, init, restore). Bij triviale aanpassingen zou hcc_schema.ldif ook &#039;&#039;&#039;direct&#039;&#039;&#039; in de actieve directory geplaatst kunnen worden, gevolgd door slechts een &#039;&#039;&#039;service slapd restart&#039;&#039;&#039;. Gebruik hiervoor (blijf in de lokale schema directory):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp &amp;quot;ldif_output/cn=config/cn=schema/cn={14}hcc_schema.ldif&amp;quot; &amp;quot;/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}hcc_schema.ldif&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
LET OP: De nummers tussen accolades zijn bepaald door de volgorde van andere scripts! Zolang geen andere schema&#039;s worden toegevoegd zullen ze niet veranderen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ook kan met de ldap-tools gewerkt worden. Gebruik ldapsearch en ldapmodify, eventueel met de -f optie om een voorbereide serie opdrachten uit te voeren. Gebruik ldapsearch om eerst de structuur te vinden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier een voorbeeld om een objectClass aan te passen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat pas_aan.ldif&lt;br /&gt;
dn: cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
delete: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description ) )&lt;br /&gt;
-&lt;br /&gt;
add: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description $ hccIg ) )&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
$sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f pas_aan.ldif &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_config.ldif===&lt;br /&gt;
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 &#039;&#039;&#039;STATS&#039;&#039;&#039; gezet. Dit geeft niet teveel logging maar is toch goed bruikbaar. Om extra logging te krijgen op b.v. ACL&#039;s, verander olcLogLevel dan in &amp;quot;stats ACL&amp;quot;.  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-config.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcTLSCACertificateFile&lt;br /&gt;
olcTLSCACertificateFile: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
-&lt;br /&gt;
add: olcTLSCertificateFile&lt;br /&gt;
olcTLSCertificateFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
-&lt;br /&gt;
add: olcTLSCertificateKeyFile&lt;br /&gt;
olcTLSCertificateKeyFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
-&lt;br /&gt;
add: olcPasswordHash&lt;br /&gt;
olcPasswordHash: {CRYPT}&lt;br /&gt;
-&lt;br /&gt;
add: olcPasswordCryptSaltFormat&lt;br /&gt;
olcPasswordCryptSaltFormat: $6$%.16s&lt;br /&gt;
-&lt;br /&gt;
replace: olcLogLevel&lt;br /&gt;
olcLogLevel: stats&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Om de logging in een apart bestand te krijgen moet in /etc/rsyslog.d een extra bestand &#039;&#039;&#039;openldap.conf&#039;&#039;&#039; geplaatst worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local4.*   -/var/log/openldap.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Tevens willen we logrotate op dit bestand. Plaats in /etc/logrotate.d het bestand &#039;&#039;&#039;openldap&#039;&#039;&#039; met de volgende inhoud&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/log/openldap.log&lt;br /&gt;
{&lt;br /&gt;
        rotate 4&lt;br /&gt;
        weekly&lt;br /&gt;
        missingok&lt;br /&gt;
        notifempty&lt;br /&gt;
        compress&lt;br /&gt;
        delaycompress&lt;br /&gt;
        sharedscripts&lt;br /&gt;
        postrotate&lt;br /&gt;
                reload rsyslog &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 || true&lt;br /&gt;
        endscript&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify-mdb.ldif===&lt;br /&gt;
Hier worden de wijzigingen op de backend db gemaakt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-mdb.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
# hjv 2020.06.07 (oldSizeLimit toegevoegd)&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcDbCheckpoint&lt;br /&gt;
olcDbCheckpoint: 4096 1&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbNoSync&lt;br /&gt;
olcDbNoSync: TRUE&lt;br /&gt;
-&lt;br /&gt;
replace: olcSizeLimit&lt;br /&gt;
olcSizeLimit: 100000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===modify-acl.ldif===&lt;br /&gt;
Hier worden de rechten bepaald van de diverse rollen en groepen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-acl.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcAccess&lt;br /&gt;
# hobbynetlogin heeft lees rechten t.b.v. MySecureShell aanloggen&lt;br /&gt;
olcAccess: to attrs=@posixAccount,@posixGroup,@shadowAccount,@hostObject&lt;br /&gt;
  by dn=&amp;quot;cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to attrs=@posixAccount&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# sta anonymous search toe (t.b.v. Apache authenticatie)&lt;br /&gt;
olcAccess: to attrs=hccLogin,hccRol,hccProfiel,entry&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# olcAccess: to attrs=hccOptIn&lt;br /&gt;
#   by self write&lt;br /&gt;
#   by dn=&amp;quot;cn=drupal-hcc-nl,ou=klanten,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
#   by * break&lt;br /&gt;
#&lt;br /&gt;
# Anonieme klanten moeten kunnen inloggen&lt;br /&gt;
# en mogen hun eigen password wijzigen&lt;br /&gt;
olcAccess: to attrs=userPassword,shadowLastChange&lt;br /&gt;
  by self write&lt;br /&gt;
  by anonymous auth&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# Gebruiker mag zijn kader email wachtwoord aanpassen&lt;br /&gt;
olcAccess: to attrs=hccKaderPassword,hccKaderForward&lt;br /&gt;
  by self write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# beheerders hebben schrijfrechten op alles (updateDN)&lt;br /&gt;
# klanten hebben alleen lees rechten op alles (readDN)&lt;br /&gt;
# self mag lezen&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by self read&lt;br /&gt;
  by dn=&amp;quot;cn=xml-hoge-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn=&amp;quot;cn=xml-lage-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by dn.one=&amp;quot;ou=beheer,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn.one=&amp;quot;ou=klanten,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# PC30 helpdesk heeft leesrechten op ou=leden&lt;br /&gt;
olcAccess: to attrs=@hccOrgPerson,@hccKaderFunctie&lt;br /&gt;
  by dn.one=&amp;quot;ou=helpdesk,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# partners mogen een paar attrs lezen&lt;br /&gt;
olcAccess: to attrs=hccLidNummer,hccPostcode,hccPostcodeZoekveld,hccIg&lt;br /&gt;
  by dn.one=&amp;quot;ou=partners,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# iedereen moet (pseudo attr) entry en objectClass kunnen lezen&lt;br /&gt;
olcAccess: to attrs=entry,objectClass&lt;br /&gt;
  by * read&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by * none&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_index.ldif===&lt;br /&gt;
Een kale configuratie is heel snel voor wat betreft het opnieuw vullen met gegevens. Bij het aanmaken van een verse LDAP database worden er dan ook zo min mogelijk indexen aangemaakt.&amp;lt;br&amp;gt;&lt;br /&gt;
Zodra de inhoud is ingelezen kunnen de &#039;echte&#039; indexen aangemaakt worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-index.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcDbIndex&lt;br /&gt;
olcDbIndex: default pres,eq&lt;br /&gt;
olcDbIndex: objectClass,entryUUID,entryCSN eq&lt;br /&gt;
olcDbIndex: hccLidNummer,hccLogin,hccForumLogin eq&lt;br /&gt;
olcDbIndex: uid,uidNumber,gidNumber,memberUid,member eq&lt;br /&gt;
olcDbIndex: cn,host,hccPseudoniem,hccOptin,hccLocatie eq&lt;br /&gt;
olcDbIndex: sn,hccPostcodeZoekveld,hccIg,hccRegio eq,subfinal&lt;br /&gt;
olcDbIndex: hccRol,hccBezoek eq,pres,subfinal&lt;br /&gt;
olcDbIndex: hccBulletins pres&lt;br /&gt;
olcDbIndex: aboNummer eq&lt;br /&gt;
olcDbIndex: aboPostcodeZoekveld eq,subfinal&lt;br /&gt;
olcDbIndex: mail,mailHccnet,hccKaderMail,hccKaderForward pres,eq&lt;br /&gt;
olcDbIndex: hccProfiel pres,eq&lt;br /&gt;
olcDbindex: hccKaderUniekeURL eq&lt;br /&gt;
olcDbindex: hccOnderwerp eq,subfinal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ppolicy overlay===&lt;br /&gt;
* vanuit LDAP de minimale lengte van een wachtwoord afdwingen&lt;br /&gt;
* in LDAP SSHA versleuteling activeren&amp;lt;br&amp;gt;&lt;br /&gt;
(olcPPolicyHashCleartext: TRUE)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: add-ppolicy.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: cn=module, cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectClass: olcModuleList&lt;br /&gt;
objectClass: top&lt;br /&gt;
olcModuleLoad: ppolicy&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=ppolicy,olcDatabase={1}mdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcPPolicyConfig&lt;br /&gt;
olcOverlay: ppolicy&lt;br /&gt;
olcPPolicyDefault: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
olcPPolicyUseLockout: TRUE&lt;br /&gt;
olcPPolicyHashCleartext: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The default ppolicy looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dn: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
objectClass: pwdPolicy&lt;br /&gt;
objectClass: device&lt;br /&gt;
cn: default&lt;br /&gt;
pwdCheckQuality: 1&lt;br /&gt;
pwdMinLength: 8&lt;br /&gt;
pwdAttribute: 2.5.4.35&lt;br /&gt;
pwdAllowUserChange: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Syncrepl overlay===&lt;br /&gt;
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 [http://www.openldap.org/doc/admin/ LDAP Admin Guide]. &#039;&#039;&#039;Mirror configuratie is specifiek per server!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-syncrepl.tmpl                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
replace: olcServerID&lt;br /&gt;
olcServerID: @SID@&lt;br /&gt;
&lt;br /&gt;
dn: cn=module{0},cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcModuleLoad&lt;br /&gt;
olcModuleLoad: syncprov&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcSyncProvConfig&lt;br /&gt;
olcOverlay: syncprov&lt;br /&gt;
olcSpCheckpoint: 100 5&lt;br /&gt;
olcSpSessionlog: 100&lt;br /&gt;
&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcSyncRepl&lt;br /&gt;
olcSyncRepl: rid=@RID@&lt;br /&gt;
  provider=ldap://@PROVIDER@&lt;br /&gt;
  binddn=&amp;quot;cn=admin,dc=hcc,dc=nl&amp;quot; bindmethod=simple credentials=&amp;quot;@PASSWORD@&amp;quot;&lt;br /&gt;
  searchbase=&amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
  type=refreshAndPersist&lt;br /&gt;
  interval=00:00:00:10&lt;br /&gt;
  retry=&amp;quot;5 5 300 5&amp;quot;&lt;br /&gt;
  timeout=1&lt;br /&gt;
  starttls=yes&lt;br /&gt;
-&lt;br /&gt;
add: olcMirrorMode&lt;br /&gt;
olcMirrorMode: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
De andere server krijgt ServerID 2 en de provider is het IP adres van de andere server.&lt;br /&gt;
&lt;br /&gt;
===Unique overlay===&lt;br /&gt;
Deze overlay dient er voor te zorgen dat o.a het attribuut hccLogin een unieke waarde bevat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-unique.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module,cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectclass: olcModuleList&lt;br /&gt;
objectclass: top&lt;br /&gt;
olcmoduleload: unique&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=unique,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcUniqueConfig&lt;br /&gt;
olcOverlay: unique&lt;br /&gt;
olcUniqueAttribute: uid uidNumber hccLogin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SSL/TLS beveiliging==&lt;br /&gt;
Gebruik de juiste .pem bestanden in /etc/ssl/certs en /etc/ssl/private.&lt;br /&gt;
&lt;br /&gt;
We maken gebruik van een RapidSSL certificaat. Als dit niet standaard in Ubuntu bekend is, zet dan eerst GeoTrust_RapidSSL_-_ca-bundle.pem in de map /etc/ssl/certs neer. Voer nu een &#039;&#039;&#039;c_rehash .&#039;&#039;&#039; uit in /etc/ssl/certs om de cache te updaten (omdat GeoTrust_RapidSSL_-_ca-bundle.pem nieuw werd toegevoegd). &lt;br /&gt;
&lt;br /&gt;
De ownership is belangrijk. Hiertoe wordt de groep &amp;quot;openldap&amp;quot; toegevoegd aan de groep ssl-cert.&lt;br /&gt;
 adduser openldap ssl-cert&lt;br /&gt;
&lt;br /&gt;
Als dit fout gaat, doe dan eerst:&lt;br /&gt;
 apt-get install ssl-cert&lt;br /&gt;
&lt;br /&gt;
Zet het certificaat en de private key in de juiste groep:&lt;br /&gt;
 chgrp ssl-cert /etc/ssl/private/hobby.nl.*&lt;br /&gt;
 chmod 440      /etc/ssl/private/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
Het resultaat is dan als volgt:&lt;br /&gt;
 root@hcc-ldap-lb1:~# ls -l /etc/ssl/private/hcc* &lt;br /&gt;
 -rw-r--r-- 1 root     ssl-cert 1724 Nov 22 20:47 hobby.nl.crt&lt;br /&gt;
 -r--r----- 1 root     ssl-cert 1679 Nov 22 20:25 hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
 root@hcc-ldap-lb1:~# grep openldap /etc/group&lt;br /&gt;
 ssl-cert:x:114:openldap&lt;br /&gt;
 openldap:x:118:&lt;br /&gt;
&lt;br /&gt;
2020.12.09: Op een nieuwe Ubuntu installatie staat apparmor standaard aan. Weg ermee!&lt;br /&gt;
 apt remove --assume-yes --purge apparmor&lt;br /&gt;
&amp;lt;strike&amp;gt;Per september 2017 staan de certificaten in /disk/site/etc/ssl/hobby.nl, net als op alle andere servers. Omdat apparmor actief is moet deze directory worden toegevoegd aan /etc/apparmor.d/local/usr.sbin.slapd. Die file ziet er dan als volgt uit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Site-specific additions and overrides for usr.sbin.slapd.&lt;br /&gt;
# For more details, please see /etc/apparmor.d/local/README.&lt;br /&gt;
#include &amp;lt;abstractions/ssl_certs&amp;gt;&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/ r,&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/* r,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Openldap ook op poort 636 benaderd wordt (naast TLS op 389), moet in /etc/default/slapd ldaps:/// opgenomen worden bij de SLAPD_SERVICES.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;netstat -an&#039; dient dan 636 te laten zien voor zowel IPv4 als IPv6.&lt;br /&gt;
&lt;br /&gt;
Om de cn=config te zien kan je het volgende commando gebruiken:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config&lt;br /&gt;
&lt;br /&gt;
of, wat botter maar korter:&lt;br /&gt;
cat /etc/ldap/slapd.d/cn\=config.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Backup, initialize, restore==&lt;br /&gt;
Om het hele skelet van ldap in één keer te herstellen dient &#039;&#039;&#039;init_ldap&#039;&#039;&#039; gebruikt te worden. Als argument &#039;&#039;&#039;moet&#039;&#039;&#039; het admin beheer wachtwoord mee gegeven worden.&lt;br /&gt;
&lt;br /&gt;
===lokaal===&lt;br /&gt;
Backups kunnen gemaakt worden terwijl slapd draait maar geadviseerd wordt slapd te stoppen. Voor dumpen moet &#039;&#039;&#039;slapcat&#039;&#039;&#039; gebruikt worden. Backups kunnen gemaakt worden per database of een filter daarop, naar een ldif bestand.&lt;br /&gt;
 slapcat -l hcc-dump.ldif -b &amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
Dit maakt een dump van alles onder &#039;&#039;&#039;dc=hcc,dc=nl&#039;&#039;&#039; naar het bestand hcc-dump.ldif. Ook is het mogelijk het database nummer te gebruiken, config is altijd nummer 0, hdb is gewoonlijk 1.&lt;br /&gt;
&lt;br /&gt;
Het &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; script dumpt alle ou&#039;s in aparte .ldif bestanden; het omgekeerde doet &#039;&#039;&#039;restore_ldap&#039;&#039;&#039;.  &lt;br /&gt;
Terug inlezen kan alleen in een lege directory, dus direct nadat &#039;&#039;&#039;init_ldap&#039;&#039;&#039; is gedaan. Gebruik voor het terugplaatsen &#039;&#039;&#039;slapadd&#039;&#039;&#039;. Aan te bevelen is &#039;&#039;&#039;-c&#039;&#039;&#039; mee te geven zodat ondanks fouten doorgegaan wordt. &lt;br /&gt;
&lt;br /&gt;
Voor slapadd &#039;&#039;&#039;moet&#039;&#039;&#039; 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)&lt;br /&gt;
 /etc/init.d/slapd stop&lt;br /&gt;
 slapadd -l hcc-dump.ldif -w -c &amp;gt;errors.txt&lt;br /&gt;
 chown openldap:openldap /var/lib/ldap/*&lt;br /&gt;
 /etc/init.d/slapd start&lt;br /&gt;
&lt;br /&gt;
===remote===&lt;br /&gt;
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 &#039;&#039;&#039;backup-encrypted&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Recente lokale backups zijn te vinden in &#039;&#039;&#039;/usr/local/hobbynet/tmp&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Verse ldap maken===&lt;br /&gt;
Transactie log bij het toevoegen van b.v. een nieuwe ou:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Op beide servers:&lt;br /&gt;
schema van test server gecopieerd en geactiveerd&lt;br /&gt;
dump-ldap gedraaid&lt;br /&gt;
systemctl stop slapd.service &lt;br /&gt;
&lt;br /&gt;
Er is nu géén ldap service! Werk dus snel...&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb1&lt;br /&gt;
systemctl stop slapd.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
op ldap-lb2:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb2&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
systemctl start slapd.service&lt;br /&gt;
Beide slapd servers zijn in de lucht en moeten synchroniseren.&lt;br /&gt;
&lt;br /&gt;
op beide servers:&lt;br /&gt;
check replicatie (netstat en functioneel)&lt;br /&gt;
&lt;br /&gt;
root@ldap-lb1:/usr/local/hobbynet/bin# netstat -n | grep 389&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:49510 2a02:968:ffff:910:172:31:8:4:389 ESTABLISHED&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:389 2a02:968:ffff:910:172:31:8:4:37490 ESTABLISHED&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:49508 2a02:968:ffff:910:172:31:8:4:389 ESTABLISHED&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:389 2a02:968:ffff:910:172:31:8:4:37488 ESTABLISHED&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Functioneel door met ADS op beide servers in te loggen en een willekeurig veld in je eigen entry te wijzigen op lb1. Kijk of het gebeurd is op lb2 en wijzig het daar terug. Check op de andere server of het gebeurd is. Er kan een zekere vertraging in optreden.&lt;br /&gt;
&lt;br /&gt;
Stel er is een nieuwe ou gemaakt: denk aan het bij werken van de dump en restore scripts.&lt;br /&gt;
&lt;br /&gt;
update dump-ldap.sh en restore-ldap.sh met de nieuwe ou&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
export tarieven.ldif op test server en import op ldap-lb1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==crontab==&lt;br /&gt;
 # script dat updates ophaalt (maar niet installeert), zodat nagios ze ook detecteert&lt;br /&gt;
 0 9 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
==LDAP Clients==&lt;br /&gt;
Er zijn meerdere LDAP clients. De meest populaire zijn Apache Directory Studio (&amp;quot;ADS&amp;quot;) en phpLdapAdmin (&amp;quot;PLA&amp;quot;).&amp;lt;br&amp;gt;&lt;br /&gt;
De eerste is veel uitgbreider maar vereist een Java Runtime Environment (&amp;quot;JRE&amp;quot;). Onder Windows is dat JRE(13) of (open)JDK-(13).&amp;lt;br&amp;gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Binnen Hobbynet wordt uitsluitend gebruik gemaakt van ADS.&lt;br /&gt;
&lt;br /&gt;
===StartTLS===&lt;br /&gt;
Aanbevolen wordt StartTLS op poort 389 te gebruiken. Alternatief is LDAPS op poort 636 maar dat is deprecated. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Windows===&lt;br /&gt;
&amp;lt;i&amp;gt;2019-10-31 HJV: Oude info, als referentie leuk, maar niet meer relevant&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Onder Windows moet met &#039;&#039;&#039;keytool.exe&#039;&#039;&#039; gewerkt worden. De uitleg heb ik van  [http://www.talkingtree.com/blog/index.cfm?mode=entry&amp;amp;entry=25AA75A4-45A6-2844-7CA3EECD842DB576 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:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Haal de benodigde bestanden op (op een Linux systeem):&lt;br /&gt;
wget http://www.cacert.org/certs/root.der -O root.der&lt;br /&gt;
wget http://www.cacert.org/certs/class3.der -O class3.der&lt;br /&gt;
copieer de bestanden naar de Windows omgeving in C:\Program Files (x86)\Java\jre6\lib\security.&lt;br /&gt;
&lt;br /&gt;
Open een commandwindow:&lt;br /&gt;
cd C:\Program Files (x86)\Java\jre6\lib\security&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass1 -file root.der&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass3 -file class3.der&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Linux===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS gebruik===&lt;br /&gt;
ADS kan erg handig zijn voor het snel dumpen van hele ou&#039;s in .ldif formaat. Zo&#039;n dump kan direct op een andere server worden ingelezen.&lt;br /&gt;
&lt;br /&gt;
===PhpLdapAdmin onder Linux===&lt;br /&gt;
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 [http://phpldapadmin.sourceforge.net/wiki/index.php/Server:server:tls phpldapadmin wiki].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# LDAP Defaults&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# See ldap.conf(5) for details&lt;br /&gt;
# This file should be world readable but not world writable.&lt;br /&gt;
&lt;br /&gt;
#BASE   dc=example,dc=com&lt;br /&gt;
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666&lt;br /&gt;
&lt;br /&gt;
#SIZELIMIT      12&lt;br /&gt;
#TIMELIMIT      15&lt;br /&gt;
#DEREF          never&lt;br /&gt;
TLS_CACERT      /etc/ssl/certs/CAcert_org.pem&lt;br /&gt;
TLS_CERT        /etc/ssl/private/hobby.nl.crt&lt;br /&gt;
TLS_KEY         /etc/ssl/private/hobby.nl.key&lt;br /&gt;
TLS_REQCERT     allow&lt;br /&gt;
#TLS_REQCERT never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Denk er wel aan na wijzigingen Apache te herstarten.&lt;br /&gt;
===PAM en NSS via LDAP===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Installeer &#039;&#039;&#039;libnss-ldapd&#039;&#039;&#039; om de benodigde libraries te verkrijgen. Apt-get zal tevens &#039;&#039;&#039;libpam-ldapd&#039;&#039;&#039;, &#039;&#039;&#039;nslcd&#039;&#039;&#039; en &#039;&#039;&#039;nscd&#039;&#039;&#039; binnen brengen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install libnss-ldapd auth-client-config ldap-utils&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
    libpam-ldapd nscd nslcd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Libnss-ldapd is een doorontwikkeling van libnss-ldap en bevat meerdere verbeteringen. Zie: [http://arthurdejong.org/nss-pam-ldapd/ deze site] van de ontwikkelaar. Bij de installatie wordt een user &#039;&#039;&#039;nslcd&#039;&#039;&#039; aangemaakt; denk erom die in de .tmpl bestanden te zetten!&lt;br /&gt;
  &lt;br /&gt;
nsswitch.conf laat zich configureren via &#039;&#039;&#039;auth-client-config&#039;&#039;&#039; maar lac_ldap is alleen aanwezig als &#039;&#039;&#039;ldap-auth-config&#039;&#039;&#039; ook is geinstalleerd. Zo niet gebruik dan de tweede regel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auth-client-config -t nss -p lac_ldap&lt;br /&gt;
auth-client-config -t nss -p ldap_example&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het resultaat is dat nsswitch.conf zowel in files (/etc/passwd etc.) zoekt als in ldap.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nsswitch.conf&lt;br /&gt;
#&lt;br /&gt;
# Example configuration of GNU Name Service Switch functionality.&lt;br /&gt;
# If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
# `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # passwd:         compat&lt;br /&gt;
passwd: files ldap&lt;br /&gt;
# pre_auth-client-config # group:          compat&lt;br /&gt;
group: files ldap&lt;br /&gt;
# pre_auth-client-config # shadow:         compat&lt;br /&gt;
shadow: files ldap&lt;br /&gt;
&lt;br /&gt;
hosts:          files dns&lt;br /&gt;
networks:       files&lt;br /&gt;
&lt;br /&gt;
protocols:      db files&lt;br /&gt;
services:       db files&lt;br /&gt;
ethers:         db files&lt;br /&gt;
rpc:            db files&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # netgroup:       nis&lt;br /&gt;
netgroup: nis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het aanpassen van de PAM bestanden gaat sinds enige releases met &#039;&#039;&#039;pam-auth-update&#039;&#039;&#039;. Kies in het menu voor zowel unix als ldap. Default wordt nu ldap authenticatie gebruikt voor uid &amp;gt;= 1000. Bij Hobbynet willen we vanaf 300 ldap gebruiken. Door een licht gemodificeerde versie van /usr/share/pam-configs/ldap te maken (ldap-hobbynet), kan ook voor de hobbynet instelling gekozen worden. Dit is de ldap-hobbynet versie:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Name: LDAP Authentication (uid&amp;gt;300)&lt;br /&gt;
Default: yes&lt;br /&gt;
Priority: 128&lt;br /&gt;
Auth-Type: Primary&lt;br /&gt;
Auth-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Auth:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 use_first_pass&lt;br /&gt;
Account-Type: Additional&lt;br /&gt;
Account:&lt;br /&gt;
        [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad]        pam_ldap.so minimum_uid=300&lt;br /&gt;
Password-Type: Primary&lt;br /&gt;
Password-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Password:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 try_first_pass&lt;br /&gt;
Session-Type: Additional&lt;br /&gt;
Session:&lt;br /&gt;
        [success=ok default=ignore]     pam_ldap.so minimum_uid=300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dit is in een standaard opzet van LDAP voldoende om zowel lokale gebruikers als gebruikers opgeslagen in LDAP, te laten inloggen en hun password te laten wijzigen. In de Hobbynet setup moet er echter nog meer gebeuren in de ACL&#039;s van de LDAP server configuratie. Omdat Hobbynet de laatste ACL regel heeft gewijzigd in een &#039;&#039;&#039;deny-all&#039;&#039;&#039;, is er een helper of proxy account nodig dat read access heeft of een aantal cruciale velden in de posixAccount objectClass. Zie verder de lsiting van nslcd.conf.&lt;br /&gt;
&lt;br /&gt;
Libnss-ldapd en libpam-ldapd hebben een gezamelijke daemon &#039;&#039;&#039;nslcd&#039;&#039;&#039; die z&#039;n configuratie uit &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039; haalt. Hierin is ook een voorziening voor het helper account. Aan het eind vande &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; staat de voorziening voor host-based login. Als het attribute &#039;&#039;&#039;host&#039;&#039;&#039; de fqdn of alleen de host naam bevat, bepaald dat of inloggen op die host mogelijk is. &#039;&#039;&#039;*&#039;&#039;&#039; staat inloggen op alle hosts toe.&lt;br /&gt;
&lt;br /&gt;
Eventueel kan het daemon proces voor debugging doeleinden ook als command (&#039;&#039;&#039;nslcd -d&#039;&#039;&#039;) gestart worden. Om de bevragingen van de LDAP server wat te verminderen, kan &#039;&#039;&#039;nscd&#039;&#039;&#039; voor caching zorgen. Deze cache daemon heeft zijn eigen configuratie bestand: &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039;. De default instellingen zijn goed; eventueel kan de logging naar een bestand gestuurd worden.&lt;br /&gt;
&lt;br /&gt;
Verbinding met de LDAP server kan met StartTLS beveiligd worden. Hier de inhoud van nslcd.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nslcd.conf&lt;br /&gt;
# nslcd configuration file. See nslcd.conf(5)&lt;br /&gt;
# for details.&lt;br /&gt;
&lt;br /&gt;
# The user and group nslcd should run as.&lt;br /&gt;
uid nslcd&lt;br /&gt;
gid nslcd&lt;br /&gt;
&lt;br /&gt;
# log location and level&lt;br /&gt;
#log /var/log/nslcd.log debug&lt;br /&gt;
&lt;br /&gt;
# The location at which the LDAP server(s) should be reachable.&lt;br /&gt;
uri ldap://ldap2-int.hobby.nl/&lt;br /&gt;
&lt;br /&gt;
# The search base that will be used for all queries.&lt;br /&gt;
base dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# Other base mappings&lt;br /&gt;
base   group  ou=groups,dc=hcc,dc=nl&lt;br /&gt;
base   passwd ou=users,dc=hcc,dc=nl&lt;br /&gt;
base   shadow ou=users,dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# The search scope.&lt;br /&gt;
#scope sub&lt;br /&gt;
&lt;br /&gt;
# The LDAP protocol version to use.&lt;br /&gt;
ldap_version 3&lt;br /&gt;
&lt;br /&gt;
# The DN to bind with for normal lookups.&lt;br /&gt;
#binddn cn=annonymous,dc=example,dc=net&lt;br /&gt;
#bindpw secret&lt;br /&gt;
binddn cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&lt;br /&gt;
bindpw xxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
# The DN used for password modifications by root.&lt;br /&gt;
#rootpwmoddn cn=admin,dc=example,dc=com&lt;br /&gt;
&lt;br /&gt;
# SSL options&lt;br /&gt;
ssl off&lt;br /&gt;
ssl start_tls&lt;br /&gt;
#tls_reqcert never&lt;br /&gt;
tls_cacertfile /etc/ssl/certs/cacert.org.pem&lt;br /&gt;
#tls_cert /etc/ssl/private/server.crt&lt;br /&gt;
#tls_key /etc/ssl/private/server.key&lt;br /&gt;
&lt;br /&gt;
# The minimum uid&lt;br /&gt;
nss_min_uid 300&lt;br /&gt;
&lt;br /&gt;
pam_authz_search (&amp;amp;(objectClass=posixAccount)(uid=$username)(|(host=$hostname)(host=$fqdn)(host=\\*)))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===users en groepen toevoegen===&lt;br /&gt;
Hiervoor moet &#039;&#039;&#039;ldapscripts&#039;&#039;&#039; zijn geïnstalleerd. Dit is het geval op de ldap-lb1 server. Dat levert de volgende extra commando&#039;s op:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldaprenamemachine&lt;br /&gt;
ldapadduser&lt;br /&gt;
ldapdeleteuserfromgroup&lt;br /&gt;
ldapfinger&lt;br /&gt;
ldapid&lt;br /&gt;
ldapgid&lt;br /&gt;
ldapmodifyuser&lt;br /&gt;
ldaprenameuser&lt;br /&gt;
lsldap&lt;br /&gt;
ldapaddusertogroup&lt;br /&gt;
ldapsetpasswd&lt;br /&gt;
ldapinit&lt;br /&gt;
ldapaddgroup&lt;br /&gt;
ldapdeletegroup&lt;br /&gt;
ldapmodifygroup&lt;br /&gt;
ldapdeletemachine&lt;br /&gt;
ldaprenamegroup&lt;br /&gt;
ldapaddmachine&lt;br /&gt;
ldapmodifymachine&lt;br /&gt;
ldapsetprimarygroup&lt;br /&gt;
ldapdeleteuser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Meest gebruikt zijn &#039;&#039;&#039;ldapaddgroup, ldapadduser, ldapsetpasswd&#039;&#039;&#039;.  &lt;br /&gt;
Er zijn manpages maar er is ook uitgebreide uitleg in de [https://help.ubuntu.com/14.04/serverguide/openldap-server.html Ubuntu server guide]. Omdat wij het automatisch maken van de home dir uit hebben staan, moet die met de hand aangemaakt worden en moet de owner goed gezet worden.&lt;br /&gt;
&lt;br /&gt;
===host-based login===&lt;br /&gt;
Met een kleine uitbreiding in het schema van de LDAP server, kan host-based login gerealiseerd worden. Ook in de &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; is een uitbreiding nodig.&lt;br /&gt;
&lt;br /&gt;
In de LDAP server dient de objectClass &#039;&#039;&#039;hostObject&#039;&#039;&#039; aan de entries in de ou=users toegevoegd te worden. Deze (auxilary) objectClass brengt slechts één attribute met zich mee: &#039;&#039;&#039;host&#039;&#039;&#039;. De regel in nslcd.conf checkt of één van de waarden van &#039;&#039;&#039;host&#039;&#039;&#039; gelijk is aan de naam van de server waarop ingelogd wordt. De waarde &#039;&#039;&#039;*&#039;&#039;&#039; geldt als wildcard. Zie de regel &#039;&#039;&lt;br /&gt;
&#039;pam_authz_search&#039;&#039;&#039;&#039; in &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Password aanpassen===&lt;br /&gt;
Via LDAP ingelogde gebruikers kunnen net als lokale gebruikers hun wachtwoord met &#039;&#039;&#039;passwd&#039;&#039;&#039; wijzigen. Wel moet aan de eisen in de LDAP ppolicy module voldaan worden.&lt;br /&gt;
&lt;br /&gt;
==PHP scripting==&lt;br /&gt;
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 &#039;&#039;&#039;/usr/local/hobbynet/bin&#039;&#039;&#039; directory.&lt;br /&gt;
Voor de php-scripting zijn enkele php7.x pakketten nodig. Installeer deze met apt-get. Het gaat om:&lt;br /&gt;
* php-cli&lt;br /&gt;
* php-ldap&lt;br /&gt;
&lt;br /&gt;
== Apache authenticatie via LDAP ==&lt;br /&gt;
In plaats van .htpassword authenticatie, kan ook LDAP gebruikt worden. Activeer daartoe de Apache module&lt;br /&gt;
&#039;authnz_ldap&#039;.&lt;br /&gt;
 a2enmod authnz_ldap&lt;br /&gt;
Denk er om dat dit in een loadbalanced situatie op beide servers gedaan dient te worden!&lt;br /&gt;
&lt;br /&gt;
=== Voorbeeld van een LDAP configuratie in de Apache config ===&lt;br /&gt;
(alleen als voorbeeld, niet zo gebruiken!)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# // 1) Hobbynet webmaster&lt;br /&gt;
# // 2) Vraagbaak medewerker van een willekeurige groepering&lt;br /&gt;
# (|(hccRol=*#VRBK)(hccRol=HN#WM))&lt;br /&gt;
  &amp;lt;Location &amp;quot;/apps/vraagbaak&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;RequireAll&amp;gt;&lt;br /&gt;
      Authname &amp;quot;HCC!vraagbaak (gebruik uw hcc.nl gebruikersnaam/wachtwoord)&amp;quot;&lt;br /&gt;
      AuthType Basic&lt;br /&gt;
      AuthBasicProvider ldap&lt;br /&gt;
      AuthLDAPUrl ldap://hcc-ldap-int.hobby.nl/ou=leden,dc=hcc,dc=nl?hccLogin??(|(hccRol=*#VRBK)(hccRol=HN#WM))(hccProfiel=TRUE) TLS&lt;br /&gt;
      require valid-user&lt;br /&gt;
    &amp;lt;/RequireAll&amp;gt;&lt;br /&gt;
  &amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hoe kan LDAP veilig gebruikt worden vanuit Apache===&lt;br /&gt;
Zet een script neer in de gebruikersomgeving, en gebruik mod_authz_external. Doe de controle vervolgens via de XML-RPC server.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zie [[Kadernet]] voor een voorbeeld.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== TODO lijst ==&lt;br /&gt;
&#039;&#039;Dit is een lijst in wording, graag aanvullen&#039;&#039; &lt;br /&gt;
* &#039;dun&#039; loadbalancer script maken om te controleren dat LDAP echt luistert&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79112</id>
		<title>LDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79112"/>
		<updated>2020-12-18T22:03:11Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* Verse ldap maken */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introductie==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==LDAP server keuze==&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Loadbalanced==&lt;br /&gt;
Er zijn twee servers (ldap-lb1 en ldap-lb2) die achter een loadbalancer in preferred server mode staan 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.&lt;br /&gt;
&lt;br /&gt;
Tevens zijn er een test en een development server: ldap-test en ldap-dev.&lt;br /&gt;
&lt;br /&gt;
==Installatie==&lt;br /&gt;
Installatie van OpenLDAP is simpel:&lt;br /&gt;
 aptitude install slapd ldap-utils&lt;br /&gt;
Omdat er gebruikgemaakt wordt van php scripts, is het ook nodig &#039;&#039;&#039;php-cli&#039;&#039;&#039; en &#039;&#039;&#039;php-ldap&#039;&#039;&#039; te installeren. De configuratie van OpenLDAP is sinds Karmic Koala iets gecompliceerder geworden. &#039;cn=config&#039; 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 &amp;quot;dpkg-reconfigure slapd&amp;quot; zet alleen de skeleton configuratie terug. Je moet zelf de database, root dn en acl&#039;s opzetten (als root of met sudo). Run  &#039;&#039;&#039;dpkg-reconfigure slapd&#039;&#039;&#039; om terug te gaan naar een lege directory. &lt;br /&gt;
&lt;br /&gt;
De volgende pakketten dienen geïnstalleerd te zijn (&#039;php -m&#039; toont de geactiveerde modules):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontbrekende pakketten volgens hjv:&lt;br /&gt;
&lt;br /&gt;
apt-get install aptitude &lt;br /&gt;
apt-get install phpmyadmin&lt;br /&gt;
apt-get install php-mbstring&lt;br /&gt;
apt-get install php-gettext&lt;br /&gt;
apt-get install php-xmlrpc&lt;br /&gt;
apt-get install php-ldap&lt;br /&gt;
apt-get install mysql-server&lt;br /&gt;
apt-get install ldapscripts&lt;br /&gt;
apt-get install php-xml&lt;br /&gt;
apt-get install slapd&lt;br /&gt;
apt-get install ldap-utils&lt;br /&gt;
a2enmod ssl&lt;br /&gt;
&lt;br /&gt;
- apache2ctl restart&lt;br /&gt;
&lt;br /&gt;
- openldap moet lid zijn van de groep ssl-cert!&lt;br /&gt;
apt-get install ssl-cert&lt;br /&gt;
adduser openldap ssl-cert&lt;br /&gt;
(of vi /etc/group&lt;br /&gt;
    ssl-cert:x:116:openldap)&lt;br /&gt;
&lt;br /&gt;
- Zorg dat de LDAP daemon bij de certificaten kan komen. &lt;br /&gt;
LET OP: op alle hobbynet servers staan de certificaten in /disk/site/etc/ssl/hobby.nl/&lt;br /&gt;
 chgrp ssl-cert /disk/site/etc/ssl/hobby.nl/hobby.nl.*&lt;br /&gt;
 chmod 440      /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
- mysql laat het bestand ibdata1 ongelimiteerd groeien (InnoDB bestanden)&lt;br /&gt;
 /etc/mysql/mysql.conf.d/innodb_file_per_table.cnf&lt;br /&gt;
 [mysql]&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
&lt;br /&gt;
=============&lt;br /&gt;
Nog meer Hobbynet aanpassingen&lt;br /&gt;
/etc/bash.bashrc&lt;br /&gt;
export http_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export https_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export ftp_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Locatie bestanden===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Alle ldif em tmpl bestanden gaan naar /usr/local/hobbynet/lib&lt;br /&gt;
* init_ldap en andere scripts gaan naar /usr/local/hobbynet/bin&lt;br /&gt;
* alle data bestanden (dumps) en update ldifs gaan naar /usr/local/hobbynet/data&lt;br /&gt;
* etc/ldap/schema/hcc_schema.* gaan naar /etc/ldap/schema&lt;br /&gt;
* etc/ldap/schema/ppolicy.ldif gaat naar /etc/ldap/schema&lt;br /&gt;
&lt;br /&gt;
hcc_schema.ldif wordt middels een script gemaakt. Dit script plaatst de ldif bestand(en) in /etc/ldap/schema. Zie hieronder.&lt;br /&gt;
&lt;br /&gt;
==Initiële database==&lt;br /&gt;
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.sh &amp;lt;admin-pw&amp;gt; gebruikt dan wordt een werkende directory gemaakt met alle statische data (in diverse ou&#039;s) erin. Gebruik na het maken van de initiële database restore_ldap.sh om de database te vullen met de data uit de data directory.&lt;br /&gt;
&lt;br /&gt;
===slapd.init.ldif ===&lt;br /&gt;
Bij installatie en reconfiguratie wordt /usr/share/slapd/slapd.init.ldif ingelezen. Zie aldaar indien nodig.&lt;br /&gt;
&lt;br /&gt;
==init_ldap script==&lt;br /&gt;
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 &#039;&#039;&#039;cn=admin,dc=hcc,dc=nl&#039;&#039;&#039; 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 &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; laadt vervolgens de laatste dump terug. Bij wijzigingen aan het schema is het raadzaam altijd een &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; te doen zodat een later een actuele dump kan worden teruggeladen.&lt;br /&gt;
&lt;br /&gt;
Het (plain text) password van cn=admin,dc=hcc,dc=nl moet bij het aanroepen van &#039;&#039;&#039;init_ldap&#039;&#039;&#039; op de commandline worden meegegeven. Tijdens de dpkg-reconfigure moet het password nog 2x gegeven worden. Lees eventueel ook de [http://www.openldap.org/doc/admin/ OpenLDAP Admin Guide].&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* voorbereidingen om &amp;quot;dpkg-reconfigure slapd&amp;quot; te draaien&lt;br /&gt;
* definities van input files&lt;br /&gt;
* check host&lt;br /&gt;
* bouwen van het skelet van de nieuwe directory&lt;br /&gt;
Zie voor details van de scripts &#039;&#039;&#039;init_ldap&#039;&#039;&#039;, &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; en &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; op een van de servers (in /usr/local/hobbynet/bin).&lt;br /&gt;
&lt;br /&gt;
==onderdelen van init_ldap==&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===add-schema.ldif===&lt;br /&gt;
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. &lt;br /&gt;
* Hiertoe wordt het onderstaande schema in /etc/ldap/schema geplaatst als hcc_schema.schema. &lt;br /&gt;
* Vervolgens worden de stappen uitgevoerd zoals beschreven in de [https://help.ubuntu.com/11.10/serverguide/C/openldap-server.html Ubuntu Server guide], onder &#039;&#039;&#039;Modifying the slapd Configuration Database&#039;&#039;&#039;. &lt;br /&gt;
* De resulterende output file &#039;&#039;&#039;cn=hcc_schema.ldif&#039;&#039;&#039; moet dan nog naar /etc/ldap/schema/hcc_schema.ldif gecopieerd worden. &lt;br /&gt;
Als dit proces herhaald moet worden, start dan met een lege output directory en verwijder een eventueel achtergebleven cn=hcc_schema.ldif bestand. &lt;br /&gt;
&lt;br /&gt;
De extra schema&#039;s worden middels een &#039;&#039;&#039;include&#039;&#039;&#039; toegevoegd. &#039;&#039;&#039;Ppolicy&#039;&#039;&#039; is op gelijke wijze als &#039;&#039;&#039;hcc_schema&#039;&#039;&#039; tot .ldif geconverteerd. Alle stappen om een nieuwe &#039;&#039;&#039;hcc-schema.ldif&#039;&#039;&#039; te maken zijn gescript in &#039;&#039;&#039;upd_schema&#039;&#039;&#039;. In &#039;&#039;&#039;init_ldap&#039;&#039;&#039; wordt het eigen schema en de password policy geladen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: add-schema.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
include: file:///etc/ldap/schema/hcc_schema.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ppolicy.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ldapns.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====schema updates====&lt;br /&gt;
Soms wordt een attribute toegevoegd of gewijzigd. Hiertoe dient het bestand hcc_schema.schema in /usr/local/hobbynet/etc/ldap/schema, gewijzigd te worden. Daarna dient er een ldif versie van gemaakt te worden. Gebruik hiervoor &#039;&#039;&#039;upd_schema.sh&#039;&#039;&#039; in dezelfde directory. De resulterende hcc_schema.ldif wordt in dit script naar /etc/ldap/schema gecopieërd. Bij grote wijzigingen is het aan te bevelen door de hele rebuild cycle te gaan (dump, init, restore). Bij triviale aanpassingen zou hcc_schema.ldif ook &#039;&#039;&#039;direct&#039;&#039;&#039; in de actieve directory geplaatst kunnen worden, gevolgd door slechts een &#039;&#039;&#039;service slapd restart&#039;&#039;&#039;. Gebruik hiervoor (blijf in de lokale schema directory):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp &amp;quot;ldif_output/cn=config/cn=schema/cn={14}hcc_schema.ldif&amp;quot; &amp;quot;/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}hcc_schema.ldif&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
LET OP: De nummers tussen accolades zijn bepaald door de volgorde van andere scripts! Zolang geen andere schema&#039;s worden toegevoegd zullen ze niet veranderen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ook kan met de ldap-tools gewerkt worden. Gebruik ldapsearch en ldapmodify, eventueel met de -f optie om een voorbereide serie opdrachten uit te voeren. Gebruik ldapsearch om eerst de structuur te vinden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier een voorbeeld om een objectClass aan te passen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat pas_aan.ldif&lt;br /&gt;
dn: cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
delete: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description ) )&lt;br /&gt;
-&lt;br /&gt;
add: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description $ hccIg ) )&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
$sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f pas_aan.ldif &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_config.ldif===&lt;br /&gt;
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 &#039;&#039;&#039;STATS&#039;&#039;&#039; gezet. Dit geeft niet teveel logging maar is toch goed bruikbaar. Om extra logging te krijgen op b.v. ACL&#039;s, verander olcLogLevel dan in &amp;quot;stats ACL&amp;quot;.  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-config.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcTLSCACertificateFile&lt;br /&gt;
olcTLSCACertificateFile: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
-&lt;br /&gt;
add: olcTLSCertificateFile&lt;br /&gt;
olcTLSCertificateFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
-&lt;br /&gt;
add: olcTLSCertificateKeyFile&lt;br /&gt;
olcTLSCertificateKeyFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
-&lt;br /&gt;
add: olcPasswordHash&lt;br /&gt;
olcPasswordHash: {CRYPT}&lt;br /&gt;
-&lt;br /&gt;
add: olcPasswordCryptSaltFormat&lt;br /&gt;
olcPasswordCryptSaltFormat: $6$%.16s&lt;br /&gt;
-&lt;br /&gt;
replace: olcLogLevel&lt;br /&gt;
olcLogLevel: stats&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Om de logging in een apart bestand te krijgen moet in /etc/rsyslog.d een extra bestand &#039;&#039;&#039;openldap.conf&#039;&#039;&#039; geplaatst worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local4.*   -/var/log/openldap.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Tevens willen we logrotate op dit bestand. Plaats in /etc/logrotate.d het bestand &#039;&#039;&#039;openldap&#039;&#039;&#039; met de volgende inhoud&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/log/openldap.log&lt;br /&gt;
{&lt;br /&gt;
        rotate 4&lt;br /&gt;
        weekly&lt;br /&gt;
        missingok&lt;br /&gt;
        notifempty&lt;br /&gt;
        compress&lt;br /&gt;
        delaycompress&lt;br /&gt;
        sharedscripts&lt;br /&gt;
        postrotate&lt;br /&gt;
                reload rsyslog &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 || true&lt;br /&gt;
        endscript&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify-mdb.ldif===&lt;br /&gt;
Hier worden de wijzigingen op de backend db gemaakt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-mdb.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
# hjv 2020.06.07 (oldSizeLimit toegevoegd)&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcDbCheckpoint&lt;br /&gt;
olcDbCheckpoint: 4096 1&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbNoSync&lt;br /&gt;
olcDbNoSync: TRUE&lt;br /&gt;
-&lt;br /&gt;
replace: olcSizeLimit&lt;br /&gt;
olcSizeLimit: 100000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===modify-acl.ldif===&lt;br /&gt;
Hier worden de rechten bepaald van de diverse rollen en groepen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-acl.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcAccess&lt;br /&gt;
# hobbynetlogin heeft lees rechten t.b.v. MySecureShell aanloggen&lt;br /&gt;
olcAccess: to attrs=@posixAccount,@posixGroup,@shadowAccount,@hostObject&lt;br /&gt;
  by dn=&amp;quot;cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to attrs=@posixAccount&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# sta anonymous search toe (t.b.v. Apache authenticatie)&lt;br /&gt;
olcAccess: to attrs=hccLogin,hccRol,hccProfiel,entry&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# olcAccess: to attrs=hccOptIn&lt;br /&gt;
#   by self write&lt;br /&gt;
#   by dn=&amp;quot;cn=drupal-hcc-nl,ou=klanten,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
#   by * break&lt;br /&gt;
#&lt;br /&gt;
# Anonieme klanten moeten kunnen inloggen&lt;br /&gt;
# en mogen hun eigen password wijzigen&lt;br /&gt;
olcAccess: to attrs=userPassword,shadowLastChange&lt;br /&gt;
  by self write&lt;br /&gt;
  by anonymous auth&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# Gebruiker mag zijn kader email wachtwoord aanpassen&lt;br /&gt;
olcAccess: to attrs=hccKaderPassword,hccKaderForward&lt;br /&gt;
  by self write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# beheerders hebben schrijfrechten op alles (updateDN)&lt;br /&gt;
# klanten hebben alleen lees rechten op alles (readDN)&lt;br /&gt;
# self mag lezen&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by self read&lt;br /&gt;
  by dn=&amp;quot;cn=xml-hoge-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn=&amp;quot;cn=xml-lage-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by dn.one=&amp;quot;ou=beheer,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn.one=&amp;quot;ou=klanten,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# PC30 helpdesk heeft leesrechten op ou=leden&lt;br /&gt;
olcAccess: to attrs=@hccOrgPerson,@hccKaderFunctie&lt;br /&gt;
  by dn.one=&amp;quot;ou=helpdesk,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# partners mogen een paar attrs lezen&lt;br /&gt;
olcAccess: to attrs=hccLidNummer,hccPostcode,hccPostcodeZoekveld,hccIg&lt;br /&gt;
  by dn.one=&amp;quot;ou=partners,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# iedereen moet (pseudo attr) entry en objectClass kunnen lezen&lt;br /&gt;
olcAccess: to attrs=entry,objectClass&lt;br /&gt;
  by * read&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by * none&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_index.ldif===&lt;br /&gt;
Een kale configuratie is heel snel voor wat betreft het opnieuw vullen met gegevens. Bij het aanmaken van een verse LDAP database worden er dan ook zo min mogelijk indexen aangemaakt.&amp;lt;br&amp;gt;&lt;br /&gt;
Zodra de inhoud is ingelezen kunnen de &#039;echte&#039; indexen aangemaakt worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-index.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcDbIndex&lt;br /&gt;
olcDbIndex: default pres,eq&lt;br /&gt;
olcDbIndex: objectClass,entryUUID,entryCSN eq&lt;br /&gt;
olcDbIndex: hccLidNummer,hccLogin,hccForumLogin eq&lt;br /&gt;
olcDbIndex: uid,uidNumber,gidNumber,memberUid,member eq&lt;br /&gt;
olcDbIndex: cn,host,hccPseudoniem,hccOptin,hccLocatie eq&lt;br /&gt;
olcDbIndex: sn,hccPostcodeZoekveld,hccIg,hccRegio eq,subfinal&lt;br /&gt;
olcDbIndex: hccRol,hccBezoek eq,pres,subfinal&lt;br /&gt;
olcDbIndex: hccBulletins pres&lt;br /&gt;
olcDbIndex: aboNummer eq&lt;br /&gt;
olcDbIndex: aboPostcodeZoekveld eq,subfinal&lt;br /&gt;
olcDbIndex: mail,mailHccnet,hccKaderMail,hccKaderForward pres,eq&lt;br /&gt;
olcDbIndex: hccProfiel pres,eq&lt;br /&gt;
olcDbindex: hccKaderUniekeURL eq&lt;br /&gt;
olcDbindex: hccOnderwerp eq,subfinal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ppolicy overlay===&lt;br /&gt;
* vanuit LDAP de minimale lengte van een wachtwoord afdwingen&lt;br /&gt;
* in LDAP SSHA versleuteling activeren&amp;lt;br&amp;gt;&lt;br /&gt;
(olcPPolicyHashCleartext: TRUE)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: add-ppolicy.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: cn=module, cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectClass: olcModuleList&lt;br /&gt;
objectClass: top&lt;br /&gt;
olcModuleLoad: ppolicy&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=ppolicy,olcDatabase={1}mdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcPPolicyConfig&lt;br /&gt;
olcOverlay: ppolicy&lt;br /&gt;
olcPPolicyDefault: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
olcPPolicyUseLockout: TRUE&lt;br /&gt;
olcPPolicyHashCleartext: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The default ppolicy looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dn: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
objectClass: pwdPolicy&lt;br /&gt;
objectClass: device&lt;br /&gt;
cn: default&lt;br /&gt;
pwdCheckQuality: 1&lt;br /&gt;
pwdMinLength: 8&lt;br /&gt;
pwdAttribute: 2.5.4.35&lt;br /&gt;
pwdAllowUserChange: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Syncrepl overlay===&lt;br /&gt;
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 [http://www.openldap.org/doc/admin/ LDAP Admin Guide]. &#039;&#039;&#039;Mirror configuratie is specifiek per server!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-syncrepl.tmpl                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
replace: olcServerID&lt;br /&gt;
olcServerID: @SID@&lt;br /&gt;
&lt;br /&gt;
dn: cn=module{0},cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcModuleLoad&lt;br /&gt;
olcModuleLoad: syncprov&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcSyncProvConfig&lt;br /&gt;
olcOverlay: syncprov&lt;br /&gt;
olcSpCheckpoint: 100 5&lt;br /&gt;
olcSpSessionlog: 100&lt;br /&gt;
&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcSyncRepl&lt;br /&gt;
olcSyncRepl: rid=@RID@&lt;br /&gt;
  provider=ldap://@PROVIDER@&lt;br /&gt;
  binddn=&amp;quot;cn=admin,dc=hcc,dc=nl&amp;quot; bindmethod=simple credentials=&amp;quot;@PASSWORD@&amp;quot;&lt;br /&gt;
  searchbase=&amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
  type=refreshAndPersist&lt;br /&gt;
  interval=00:00:00:10&lt;br /&gt;
  retry=&amp;quot;5 5 300 5&amp;quot;&lt;br /&gt;
  timeout=1&lt;br /&gt;
  starttls=yes&lt;br /&gt;
-&lt;br /&gt;
add: olcMirrorMode&lt;br /&gt;
olcMirrorMode: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
De andere server krijgt ServerID 2 en de provider is het IP adres van de andere server.&lt;br /&gt;
&lt;br /&gt;
===Unique overlay===&lt;br /&gt;
Deze overlay dient er voor te zorgen dat o.a het attribuut hccLogin een unieke waarde bevat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-unique.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module,cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectclass: olcModuleList&lt;br /&gt;
objectclass: top&lt;br /&gt;
olcmoduleload: unique&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=unique,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcUniqueConfig&lt;br /&gt;
olcOverlay: unique&lt;br /&gt;
olcUniqueAttribute: uid uidNumber hccLogin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SSL/TLS beveiliging==&lt;br /&gt;
Gebruik de juiste .pem bestanden in /etc/ssl/certs en /etc/ssl/private.&lt;br /&gt;
&lt;br /&gt;
We maken gebruik van een RapidSSL certificaat. Als dit niet standaard in Ubuntu bekend is, zet dan eerst GeoTrust_RapidSSL_-_ca-bundle.pem in de map /etc/ssl/certs neer. Voer nu een &#039;&#039;&#039;c_rehash .&#039;&#039;&#039; uit in /etc/ssl/certs om de cache te updaten (omdat GeoTrust_RapidSSL_-_ca-bundle.pem nieuw werd toegevoegd). &lt;br /&gt;
&lt;br /&gt;
De ownership is belangrijk. Hiertoe wordt de groep &amp;quot;openldap&amp;quot; toegevoegd aan de groep ssl-cert.&lt;br /&gt;
 adduser openldap ssl-cert&lt;br /&gt;
&lt;br /&gt;
Als dit fout gaat, doe dan eerst:&lt;br /&gt;
 apt-get install ssl-cert&lt;br /&gt;
&lt;br /&gt;
Zet het certificaat en de private key in de juiste groep:&lt;br /&gt;
 chgrp ssl-cert /etc/ssl/private/hobby.nl.*&lt;br /&gt;
 chmod 440      /etc/ssl/private/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
Het resultaat is dan als volgt:&lt;br /&gt;
 root@hcc-ldap-lb1:~# ls -l /etc/ssl/private/hcc* &lt;br /&gt;
 -rw-r--r-- 1 root     ssl-cert 1724 Nov 22 20:47 hobby.nl.crt&lt;br /&gt;
 -r--r----- 1 root     ssl-cert 1679 Nov 22 20:25 hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
 root@hcc-ldap-lb1:~# grep openldap /etc/group&lt;br /&gt;
 ssl-cert:x:114:openldap&lt;br /&gt;
 openldap:x:118:&lt;br /&gt;
&lt;br /&gt;
2020.12.09: Op een nieuwe Ubuntu installatie staat apparmor standaard aan. Weg ermee!&lt;br /&gt;
 apt remove --assume-yes --purge apparmor&lt;br /&gt;
&amp;lt;strike&amp;gt;Per september 2017 staan de certificaten in /disk/site/etc/ssl/hobby.nl, net als op alle andere servers. Omdat apparmor actief is moet deze directory worden toegevoegd aan /etc/apparmor.d/local/usr.sbin.slapd. Die file ziet er dan als volgt uit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Site-specific additions and overrides for usr.sbin.slapd.&lt;br /&gt;
# For more details, please see /etc/apparmor.d/local/README.&lt;br /&gt;
#include &amp;lt;abstractions/ssl_certs&amp;gt;&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/ r,&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/* r,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Openldap ook op poort 636 benaderd wordt (naast TLS op 389), moet in /etc/default/slapd ldaps:/// opgenomen worden bij de SLAPD_SERVICES.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;netstat -an&#039; dient dan 636 te laten zien voor zowel IPv4 als IPv6.&lt;br /&gt;
&lt;br /&gt;
Om de cn=config te zien kan je het volgende commando gebruiken:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config&lt;br /&gt;
&lt;br /&gt;
of, wat botter maar korter:&lt;br /&gt;
cat /etc/ldap/slapd.d/cn\=config.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Backup, initialize, restore==&lt;br /&gt;
Om het hele skelet van ldap in één keer te herstellen dient &#039;&#039;&#039;init_ldap&#039;&#039;&#039; gebruikt te worden. Als argument &#039;&#039;&#039;moet&#039;&#039;&#039; het admin beheer wachtwoord mee gegeven worden.&lt;br /&gt;
&lt;br /&gt;
===lokaal===&lt;br /&gt;
Backups kunnen gemaakt worden terwijl slapd draait maar geadviseerd wordt slapd te stoppen. Voor dumpen moet &#039;&#039;&#039;slapcat&#039;&#039;&#039; gebruikt worden. Backups kunnen gemaakt worden per database of een filter daarop, naar een ldif bestand.&lt;br /&gt;
 slapcat -l hcc-dump.ldif -b &amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
Dit maakt een dump van alles onder &#039;&#039;&#039;dc=hcc,dc=nl&#039;&#039;&#039; naar het bestand hcc-dump.ldif. Ook is het mogelijk het database nummer te gebruiken, config is altijd nummer 0, hdb is gewoonlijk 1.&lt;br /&gt;
&lt;br /&gt;
Het &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; script dumpt alle ou&#039;s in aparte .ldif bestanden; het omgekeerde doet &#039;&#039;&#039;restore_ldap&#039;&#039;&#039;.  &lt;br /&gt;
Terug inlezen kan alleen in een lege directory, dus direct nadat &#039;&#039;&#039;init_ldap&#039;&#039;&#039; is gedaan. Gebruik voor het terugplaatsen &#039;&#039;&#039;slapadd&#039;&#039;&#039;. Aan te bevelen is &#039;&#039;&#039;-c&#039;&#039;&#039; mee te geven zodat ondanks fouten doorgegaan wordt. &lt;br /&gt;
&lt;br /&gt;
Voor slapadd &#039;&#039;&#039;moet&#039;&#039;&#039; 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)&lt;br /&gt;
 /etc/init.d/slapd stop&lt;br /&gt;
 slapadd -l hcc-dump.ldif -w -c &amp;gt;errors.txt&lt;br /&gt;
 chown openldap:openldap /var/lib/ldap/*&lt;br /&gt;
 /etc/init.d/slapd start&lt;br /&gt;
&lt;br /&gt;
===remote===&lt;br /&gt;
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 &#039;&#039;&#039;backup-encrypted&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Recente lokale backups zijn te vinden in &#039;&#039;&#039;/usr/local/hobbynet/tmp&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Verse ldap maken===&lt;br /&gt;
Transactie log bij het toevoegen van b.v. een nieuwe ou:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Op beide servers:&lt;br /&gt;
schema van test server gecopieerd en geactiveerd&lt;br /&gt;
dump-ldap gedraaid&lt;br /&gt;
systemctl stop slapd.service &lt;br /&gt;
&lt;br /&gt;
Er is nu géén ldap service! Werk dus snel...&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb1&lt;br /&gt;
systemctl stop slapd.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
op ldap-lb2:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb2&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
systemctl start slapd.service&lt;br /&gt;
Beide slapd servers zijn in de lucht en moeten synchroniseren.&lt;br /&gt;
&lt;br /&gt;
op beide servers:&lt;br /&gt;
check replicatie (netstat en functioneel)&lt;br /&gt;
&lt;br /&gt;
root@ldap-lb1:/usr/local/hobbynet/bin# netstat -n | grep 389&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:49510 2a02:968:ffff:910:172:31:8:4:389 ESTABLISHED&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:389 2a02:968:ffff:910:172:31:8:4:37490 ESTABLISHED&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:49508 2a02:968:ffff:910:172:31:8:4:389 ESTABLISHED&lt;br /&gt;
tcp6       0      0 2a02:968:ffff:910:172:31:8:5:389 2a02:968:ffff:910:172:31:8:4:37488 ESTABLISHED&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Functioneel door met ADS op beide servers in te loggen en een willekeurig veld in je eigen entry te wijzigen op lb1. Kijk of het gebeurd is op lb2 en wijzig het daar terug. Check op de andere server of het gebeurd is. Er kan een zekere vertraging in optreden.&lt;br /&gt;
&lt;br /&gt;
Stel er is een nieuwe ou gemaakt: denk aan het bij werken van de dump en restore scripts.&lt;br /&gt;
&lt;br /&gt;
update dump-ldap.sh en restore-ldap.sh met de nieuwe ou&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
export tarieven.ldif op test server en import op ldap-lb1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==crontab==&lt;br /&gt;
 # script dat updates ophaalt (maar niet installeert), zodat nagios ze ook detecteert&lt;br /&gt;
 0 9 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
==LDAP Clients==&lt;br /&gt;
Er zijn meerdere LDAP clients. De meest populaire zijn Apache Directory Studio (&amp;quot;ADS&amp;quot;) en phpLdapAdmin (&amp;quot;PLA&amp;quot;).&amp;lt;br&amp;gt;&lt;br /&gt;
De eerste is veel uitgbreider maar vereist een Java Runtime Environment (&amp;quot;JRE&amp;quot;). Onder Windows is dat JRE(13) of (open)JDK-(13).&amp;lt;br&amp;gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Binnen Hobbynet wordt uitsluitend gebruik gemaakt van ADS.&lt;br /&gt;
&lt;br /&gt;
===StartTLS===&lt;br /&gt;
Aanbevolen wordt StartTLS op poort 389 te gebruiken. Alternatief is LDAPS op poort 636 maar dat is deprecated. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Windows===&lt;br /&gt;
&amp;lt;i&amp;gt;2019-10-31 HJV: Oude info, als referentie leuk, maar niet meer relevant&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Onder Windows moet met &#039;&#039;&#039;keytool.exe&#039;&#039;&#039; gewerkt worden. De uitleg heb ik van  [http://www.talkingtree.com/blog/index.cfm?mode=entry&amp;amp;entry=25AA75A4-45A6-2844-7CA3EECD842DB576 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:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Haal de benodigde bestanden op (op een Linux systeem):&lt;br /&gt;
wget http://www.cacert.org/certs/root.der -O root.der&lt;br /&gt;
wget http://www.cacert.org/certs/class3.der -O class3.der&lt;br /&gt;
copieer de bestanden naar de Windows omgeving in C:\Program Files (x86)\Java\jre6\lib\security.&lt;br /&gt;
&lt;br /&gt;
Open een commandwindow:&lt;br /&gt;
cd C:\Program Files (x86)\Java\jre6\lib\security&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass1 -file root.der&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass3 -file class3.der&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Linux===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS gebruik===&lt;br /&gt;
ADS kan erg handig zijn voor het snel dumpen van hele ou&#039;s in .ldif formaat. Zo&#039;n dump kan direct op een andere server worden ingelezen.&lt;br /&gt;
&lt;br /&gt;
===PhpLdapAdmin onder Linux===&lt;br /&gt;
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 [http://phpldapadmin.sourceforge.net/wiki/index.php/Server:server:tls phpldapadmin wiki].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# LDAP Defaults&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# See ldap.conf(5) for details&lt;br /&gt;
# This file should be world readable but not world writable.&lt;br /&gt;
&lt;br /&gt;
#BASE   dc=example,dc=com&lt;br /&gt;
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666&lt;br /&gt;
&lt;br /&gt;
#SIZELIMIT      12&lt;br /&gt;
#TIMELIMIT      15&lt;br /&gt;
#DEREF          never&lt;br /&gt;
TLS_CACERT      /etc/ssl/certs/CAcert_org.pem&lt;br /&gt;
TLS_CERT        /etc/ssl/private/hobby.nl.crt&lt;br /&gt;
TLS_KEY         /etc/ssl/private/hobby.nl.key&lt;br /&gt;
TLS_REQCERT     allow&lt;br /&gt;
#TLS_REQCERT never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Denk er wel aan na wijzigingen Apache te herstarten.&lt;br /&gt;
===PAM en NSS via LDAP===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Installeer &#039;&#039;&#039;libnss-ldapd&#039;&#039;&#039; om de benodigde libraries te verkrijgen. Apt-get zal tevens &#039;&#039;&#039;libpam-ldapd&#039;&#039;&#039;, &#039;&#039;&#039;nslcd&#039;&#039;&#039; en &#039;&#039;&#039;nscd&#039;&#039;&#039; binnen brengen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install libnss-ldapd auth-client-config ldap-utils&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
    libpam-ldapd nscd nslcd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Libnss-ldapd is een doorontwikkeling van libnss-ldap en bevat meerdere verbeteringen. Zie: [http://arthurdejong.org/nss-pam-ldapd/ deze site] van de ontwikkelaar. Bij de installatie wordt een user &#039;&#039;&#039;nslcd&#039;&#039;&#039; aangemaakt; denk erom die in de .tmpl bestanden te zetten!&lt;br /&gt;
  &lt;br /&gt;
nsswitch.conf laat zich configureren via &#039;&#039;&#039;auth-client-config&#039;&#039;&#039; maar lac_ldap is alleen aanwezig als &#039;&#039;&#039;ldap-auth-config&#039;&#039;&#039; ook is geinstalleerd. Zo niet gebruik dan de tweede regel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auth-client-config -t nss -p lac_ldap&lt;br /&gt;
auth-client-config -t nss -p ldap_example&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het resultaat is dat nsswitch.conf zowel in files (/etc/passwd etc.) zoekt als in ldap.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nsswitch.conf&lt;br /&gt;
#&lt;br /&gt;
# Example configuration of GNU Name Service Switch functionality.&lt;br /&gt;
# If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
# `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # passwd:         compat&lt;br /&gt;
passwd: files ldap&lt;br /&gt;
# pre_auth-client-config # group:          compat&lt;br /&gt;
group: files ldap&lt;br /&gt;
# pre_auth-client-config # shadow:         compat&lt;br /&gt;
shadow: files ldap&lt;br /&gt;
&lt;br /&gt;
hosts:          files dns&lt;br /&gt;
networks:       files&lt;br /&gt;
&lt;br /&gt;
protocols:      db files&lt;br /&gt;
services:       db files&lt;br /&gt;
ethers:         db files&lt;br /&gt;
rpc:            db files&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # netgroup:       nis&lt;br /&gt;
netgroup: nis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het aanpassen van de PAM bestanden gaat sinds enige releases met &#039;&#039;&#039;pam-auth-update&#039;&#039;&#039;. Kies in het menu voor zowel unix als ldap. Default wordt nu ldap authenticatie gebruikt voor uid &amp;gt;= 1000. Bij Hobbynet willen we vanaf 300 ldap gebruiken. Door een licht gemodificeerde versie van /usr/share/pam-configs/ldap te maken (ldap-hobbynet), kan ook voor de hobbynet instelling gekozen worden. Dit is de ldap-hobbynet versie:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Name: LDAP Authentication (uid&amp;gt;300)&lt;br /&gt;
Default: yes&lt;br /&gt;
Priority: 128&lt;br /&gt;
Auth-Type: Primary&lt;br /&gt;
Auth-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Auth:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 use_first_pass&lt;br /&gt;
Account-Type: Additional&lt;br /&gt;
Account:&lt;br /&gt;
        [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad]        pam_ldap.so minimum_uid=300&lt;br /&gt;
Password-Type: Primary&lt;br /&gt;
Password-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Password:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 try_first_pass&lt;br /&gt;
Session-Type: Additional&lt;br /&gt;
Session:&lt;br /&gt;
        [success=ok default=ignore]     pam_ldap.so minimum_uid=300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dit is in een standaard opzet van LDAP voldoende om zowel lokale gebruikers als gebruikers opgeslagen in LDAP, te laten inloggen en hun password te laten wijzigen. In de Hobbynet setup moet er echter nog meer gebeuren in de ACL&#039;s van de LDAP server configuratie. Omdat Hobbynet de laatste ACL regel heeft gewijzigd in een &#039;&#039;&#039;deny-all&#039;&#039;&#039;, is er een helper of proxy account nodig dat read access heeft of een aantal cruciale velden in de posixAccount objectClass. Zie verder de lsiting van nslcd.conf.&lt;br /&gt;
&lt;br /&gt;
Libnss-ldapd en libpam-ldapd hebben een gezamelijke daemon &#039;&#039;&#039;nslcd&#039;&#039;&#039; die z&#039;n configuratie uit &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039; haalt. Hierin is ook een voorziening voor het helper account. Aan het eind vande &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; staat de voorziening voor host-based login. Als het attribute &#039;&#039;&#039;host&#039;&#039;&#039; de fqdn of alleen de host naam bevat, bepaald dat of inloggen op die host mogelijk is. &#039;&#039;&#039;*&#039;&#039;&#039; staat inloggen op alle hosts toe.&lt;br /&gt;
&lt;br /&gt;
Eventueel kan het daemon proces voor debugging doeleinden ook als command (&#039;&#039;&#039;nslcd -d&#039;&#039;&#039;) gestart worden. Om de bevragingen van de LDAP server wat te verminderen, kan &#039;&#039;&#039;nscd&#039;&#039;&#039; voor caching zorgen. Deze cache daemon heeft zijn eigen configuratie bestand: &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039;. De default instellingen zijn goed; eventueel kan de logging naar een bestand gestuurd worden.&lt;br /&gt;
&lt;br /&gt;
Verbinding met de LDAP server kan met StartTLS beveiligd worden. Hier de inhoud van nslcd.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nslcd.conf&lt;br /&gt;
# nslcd configuration file. See nslcd.conf(5)&lt;br /&gt;
# for details.&lt;br /&gt;
&lt;br /&gt;
# The user and group nslcd should run as.&lt;br /&gt;
uid nslcd&lt;br /&gt;
gid nslcd&lt;br /&gt;
&lt;br /&gt;
# log location and level&lt;br /&gt;
#log /var/log/nslcd.log debug&lt;br /&gt;
&lt;br /&gt;
# The location at which the LDAP server(s) should be reachable.&lt;br /&gt;
uri ldap://ldap2-int.hobby.nl/&lt;br /&gt;
&lt;br /&gt;
# The search base that will be used for all queries.&lt;br /&gt;
base dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# Other base mappings&lt;br /&gt;
base   group  ou=groups,dc=hcc,dc=nl&lt;br /&gt;
base   passwd ou=users,dc=hcc,dc=nl&lt;br /&gt;
base   shadow ou=users,dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# The search scope.&lt;br /&gt;
#scope sub&lt;br /&gt;
&lt;br /&gt;
# The LDAP protocol version to use.&lt;br /&gt;
ldap_version 3&lt;br /&gt;
&lt;br /&gt;
# The DN to bind with for normal lookups.&lt;br /&gt;
#binddn cn=annonymous,dc=example,dc=net&lt;br /&gt;
#bindpw secret&lt;br /&gt;
binddn cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&lt;br /&gt;
bindpw xxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
# The DN used for password modifications by root.&lt;br /&gt;
#rootpwmoddn cn=admin,dc=example,dc=com&lt;br /&gt;
&lt;br /&gt;
# SSL options&lt;br /&gt;
ssl off&lt;br /&gt;
ssl start_tls&lt;br /&gt;
#tls_reqcert never&lt;br /&gt;
tls_cacertfile /etc/ssl/certs/cacert.org.pem&lt;br /&gt;
#tls_cert /etc/ssl/private/server.crt&lt;br /&gt;
#tls_key /etc/ssl/private/server.key&lt;br /&gt;
&lt;br /&gt;
# The minimum uid&lt;br /&gt;
nss_min_uid 300&lt;br /&gt;
&lt;br /&gt;
pam_authz_search (&amp;amp;(objectClass=posixAccount)(uid=$username)(|(host=$hostname)(host=$fqdn)(host=\\*)))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===users en groepen toevoegen===&lt;br /&gt;
Hiervoor moet &#039;&#039;&#039;ldapscripts&#039;&#039;&#039; zijn geïnstalleerd. Dit is het geval op de ldap-lb1 server. Dat levert de volgende extra commando&#039;s op:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldaprenamemachine&lt;br /&gt;
ldapadduser&lt;br /&gt;
ldapdeleteuserfromgroup&lt;br /&gt;
ldapfinger&lt;br /&gt;
ldapid&lt;br /&gt;
ldapgid&lt;br /&gt;
ldapmodifyuser&lt;br /&gt;
ldaprenameuser&lt;br /&gt;
lsldap&lt;br /&gt;
ldapaddusertogroup&lt;br /&gt;
ldapsetpasswd&lt;br /&gt;
ldapinit&lt;br /&gt;
ldapaddgroup&lt;br /&gt;
ldapdeletegroup&lt;br /&gt;
ldapmodifygroup&lt;br /&gt;
ldapdeletemachine&lt;br /&gt;
ldaprenamegroup&lt;br /&gt;
ldapaddmachine&lt;br /&gt;
ldapmodifymachine&lt;br /&gt;
ldapsetprimarygroup&lt;br /&gt;
ldapdeleteuser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Meest gebruikt zijn &#039;&#039;&#039;ldapaddgroup, ldapadduser, ldapsetpasswd&#039;&#039;&#039;.  &lt;br /&gt;
Er zijn manpages maar er is ook uitgebreide uitleg in de [https://help.ubuntu.com/14.04/serverguide/openldap-server.html Ubuntu server guide]. Omdat wij het automatisch maken van de home dir uit hebben staan, moet die met de hand aangemaakt worden en moet de owner goed gezet worden.&lt;br /&gt;
&lt;br /&gt;
===host-based login===&lt;br /&gt;
Met een kleine uitbreiding in het schema van de LDAP server, kan host-based login gerealiseerd worden. Ook in de &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; is een uitbreiding nodig.&lt;br /&gt;
&lt;br /&gt;
In de LDAP server dient de objectClass &#039;&#039;&#039;hostObject&#039;&#039;&#039; aan de entries in de ou=users toegevoegd te worden. Deze (auxilary) objectClass brengt slechts één attribute met zich mee: &#039;&#039;&#039;host&#039;&#039;&#039;. De regel in nslcd.conf checkt of één van de waarden van &#039;&#039;&#039;host&#039;&#039;&#039; gelijk is aan de naam van de server waarop ingelogd wordt. De waarde &#039;&#039;&#039;*&#039;&#039;&#039; geldt als wildcard. Zie de regel &#039;&#039;&lt;br /&gt;
&#039;pam_authz_search&#039;&#039;&#039;&#039; in &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Password aanpassen===&lt;br /&gt;
Via LDAP ingelogde gebruikers kunnen net als lokale gebruikers hun wachtwoord met &#039;&#039;&#039;passwd&#039;&#039;&#039; wijzigen. Wel moet aan de eisen in de LDAP ppolicy module voldaan worden.&lt;br /&gt;
&lt;br /&gt;
==PHP scripting==&lt;br /&gt;
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 &#039;&#039;&#039;/usr/local/hobbynet/bin&#039;&#039;&#039; directory.&lt;br /&gt;
Voor de php-scripting zijn enkele php7.x pakketten nodig. Installeer deze met apt-get. Het gaat om:&lt;br /&gt;
* php-cli&lt;br /&gt;
* php-ldap&lt;br /&gt;
&lt;br /&gt;
== Apache authenticatie via LDAP ==&lt;br /&gt;
In plaats van .htpassword authenticatie, kan ook LDAP gebruikt worden. Activeer daartoe de Apache module&lt;br /&gt;
&#039;authnz_ldap&#039;.&lt;br /&gt;
 a2enmod authnz_ldap&lt;br /&gt;
Denk er om dat dit in een loadbalanced situatie op beide servers gedaan dient te worden!&lt;br /&gt;
&lt;br /&gt;
=== Voorbeeld van een LDAP configuratie in de Apache config ===&lt;br /&gt;
(alleen als voorbeeld, niet zo gebruiken!)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# // 1) Hobbynet webmaster&lt;br /&gt;
# // 2) Vraagbaak medewerker van een willekeurige groepering&lt;br /&gt;
# (|(hccRol=*#VRBK)(hccRol=HN#WM))&lt;br /&gt;
  &amp;lt;Location &amp;quot;/apps/vraagbaak&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;RequireAll&amp;gt;&lt;br /&gt;
      Authname &amp;quot;HCC!vraagbaak (gebruik uw hcc.nl gebruikersnaam/wachtwoord)&amp;quot;&lt;br /&gt;
      AuthType Basic&lt;br /&gt;
      AuthBasicProvider ldap&lt;br /&gt;
      AuthLDAPUrl ldap://hcc-ldap-int.hobby.nl/ou=leden,dc=hcc,dc=nl?hccLogin??(|(hccRol=*#VRBK)(hccRol=HN#WM))(hccProfiel=TRUE) TLS&lt;br /&gt;
      require valid-user&lt;br /&gt;
    &amp;lt;/RequireAll&amp;gt;&lt;br /&gt;
  &amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hoe kan LDAP veilig gebruikt worden vanuit Apache===&lt;br /&gt;
Zet een script neer in de gebruikersomgeving, en gebruik mod_authz_external. Doe de controle vervolgens via de XML-RPC server.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zie [[Kadernet]] voor een voorbeeld.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== TODO lijst ==&lt;br /&gt;
&#039;&#039;Dit is een lijst in wording, graag aanvullen&#039;&#039; &lt;br /&gt;
* &#039;dun&#039; loadbalancer script maken om te controleren dat LDAP echt luistert&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79070</id>
		<title>LDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79070"/>
		<updated>2020-12-10T21:43:26Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* modify-acl */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introductie==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==LDAP server keuze==&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Loadbalanced==&lt;br /&gt;
Er zijn twee servers (ldap-lb1 en ldap-lb2) die achter een loadbalancer in preferred server mode staan 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.&lt;br /&gt;
&lt;br /&gt;
Tevens zijn er een test en een development server: ldap-test en ldap-dev.&lt;br /&gt;
&lt;br /&gt;
==Installatie==&lt;br /&gt;
Installatie van OpenLDAP is simpel:&lt;br /&gt;
 aptitude install slapd ldap-utils&lt;br /&gt;
Omdat er gebruikgemaakt wordt van php scripts, is het ook nodig &#039;&#039;&#039;php-cli&#039;&#039;&#039; en &#039;&#039;&#039;php-ldap&#039;&#039;&#039; te installeren. De configuratie van OpenLDAP is sinds Karmic Koala iets gecompliceerder geworden. &#039;cn=config&#039; 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 &amp;quot;dpkg-reconfigure slapd&amp;quot; zet alleen de skeleton configuratie terug. Je moet zelf de database, root dn en acl&#039;s opzetten (als root of met sudo). Run  &#039;&#039;&#039;dpkg-reconfigure slapd&#039;&#039;&#039; om terug te gaan naar een lege directory. &lt;br /&gt;
&lt;br /&gt;
De volgende pakketten dienen geïnstalleerd te zijn (&#039;php -m&#039; toont de geactiveerde modules):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontbrekende pakketten volgens hjv:&lt;br /&gt;
&lt;br /&gt;
apt-get install aptitude &lt;br /&gt;
apt-get install phpmyadmin&lt;br /&gt;
apt-get install php-mbstring&lt;br /&gt;
apt-get install php-gettext&lt;br /&gt;
apt-get install php-xmlrpc&lt;br /&gt;
apt-get install php-ldap&lt;br /&gt;
apt-get install mysql-server&lt;br /&gt;
apt-get install ldapscripts&lt;br /&gt;
apt-get install php-xml&lt;br /&gt;
apt-get install slapd&lt;br /&gt;
apt-get install ldap-utils&lt;br /&gt;
a2enmod ssl&lt;br /&gt;
&lt;br /&gt;
- apache2ctl restart&lt;br /&gt;
&lt;br /&gt;
- openldap moet lid zijn van de groep ssl-cert!&lt;br /&gt;
apt-get install ssl-cert&lt;br /&gt;
adduser openldap ssl-cert&lt;br /&gt;
(of vi /etc/group&lt;br /&gt;
    ssl-cert:x:116:openldap)&lt;br /&gt;
&lt;br /&gt;
- Zorg dat de LDAP daemon bij de certificaten kan komen. &lt;br /&gt;
LET OP: op alle hobbynet servers staan de certificaten in /disk/site/etc/ssl/hobby.nl/&lt;br /&gt;
 chgrp ssl-cert /disk/site/etc/ssl/hobby.nl/hobby.nl.*&lt;br /&gt;
 chmod 440      /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
- mysql laat het bestand ibdata1 ongelimiteerd groeien (InnoDB bestanden)&lt;br /&gt;
 /etc/mysql/mysql.conf.d/innodb_file_per_table.cnf&lt;br /&gt;
 [mysql]&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
&lt;br /&gt;
=============&lt;br /&gt;
Nog meer Hobbynet aanpassingen&lt;br /&gt;
/etc/bash.bashrc&lt;br /&gt;
export http_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export https_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export ftp_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Locatie bestanden===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Alle ldif em tmpl bestanden gaan naar /usr/local/hobbynet/lib&lt;br /&gt;
* init_ldap en andere scripts gaan naar /usr/local/hobbynet/bin&lt;br /&gt;
* alle data bestanden (dumps) en update ldifs gaan naar /usr/local/hobbynet/data&lt;br /&gt;
* etc/ldap/schema/hcc_schema.* gaan naar /etc/ldap/schema&lt;br /&gt;
* etc/ldap/schema/ppolicy.ldif gaat naar /etc/ldap/schema&lt;br /&gt;
&lt;br /&gt;
hcc_schema.ldif wordt middels een script gemaakt. Dit script plaatst de ldif bestand(en) in /etc/ldap/schema. Zie hieronder.&lt;br /&gt;
&lt;br /&gt;
==Initiële database==&lt;br /&gt;
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.sh &amp;lt;admin-pw&amp;gt; gebruikt dan wordt een werkende directory gemaakt met alle statische data (in diverse ou&#039;s) erin. Gebruik na het maken van de initiële database restore_ldap.sh om de database te vullen met de data uit de data directory.&lt;br /&gt;
&lt;br /&gt;
===slapd.init.ldif ===&lt;br /&gt;
Bij installatie en reconfiguratie wordt /usr/share/slapd/slapd.init.ldif ingelezen. Zie aldaar indien nodig.&lt;br /&gt;
&lt;br /&gt;
==init_ldap script==&lt;br /&gt;
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 &#039;&#039;&#039;cn=admin,dc=hcc,dc=nl&#039;&#039;&#039; 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 &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; laadt vervolgens de laatste dump terug. Bij wijzigingen aan het schema is het raadzaam altijd een &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; te doen zodat een later een actuele dump kan worden teruggeladen.&lt;br /&gt;
&lt;br /&gt;
Het (plain text) password van cn=admin,dc=hcc,dc=nl moet bij het aanroepen van &#039;&#039;&#039;init_ldap&#039;&#039;&#039; op de commandline worden meegegeven. Tijdens de dpkg-reconfigure moet het password nog 2x gegeven worden. Lees eventueel ook de [http://www.openldap.org/doc/admin/ OpenLDAP Admin Guide].&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* voorbereidingen om &amp;quot;dpkg-reconfigure slapd&amp;quot; te draaien&lt;br /&gt;
* definities van input files&lt;br /&gt;
* check host&lt;br /&gt;
* bouwen van het skelet van de nieuwe directory&lt;br /&gt;
Zie voor details van de scripts &#039;&#039;&#039;init_ldap&#039;&#039;&#039;, &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; en &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; op een van de servers (in /usr/local/hobbynet/bin).&lt;br /&gt;
&lt;br /&gt;
==onderdelen van init_ldap==&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===add-schema.ldif===&lt;br /&gt;
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. &lt;br /&gt;
* Hiertoe wordt het onderstaande schema in /etc/ldap/schema geplaatst als hcc_schema.schema. &lt;br /&gt;
* Vervolgens worden de stappen uitgevoerd zoals beschreven in de [https://help.ubuntu.com/11.10/serverguide/C/openldap-server.html Ubuntu Server guide], onder &#039;&#039;&#039;Modifying the slapd Configuration Database&#039;&#039;&#039;. &lt;br /&gt;
* De resulterende output file &#039;&#039;&#039;cn=hcc_schema.ldif&#039;&#039;&#039; moet dan nog naar /etc/ldap/schema/hcc_schema.ldif gecopieerd worden. &lt;br /&gt;
Als dit proces herhaald moet worden, start dan met een lege output directory en verwijder een eventueel achtergebleven cn=hcc_schema.ldif bestand. &lt;br /&gt;
&lt;br /&gt;
De extra schema&#039;s worden middels een &#039;&#039;&#039;include&#039;&#039;&#039; toegevoegd. &#039;&#039;&#039;Ppolicy&#039;&#039;&#039; is op gelijke wijze als &#039;&#039;&#039;hcc_schema&#039;&#039;&#039; tot .ldif geconverteerd. Alle stappen om een nieuwe &#039;&#039;&#039;hcc-schema.ldif&#039;&#039;&#039; te maken zijn gescript in &#039;&#039;&#039;upd_schema&#039;&#039;&#039;. In &#039;&#039;&#039;init_ldap&#039;&#039;&#039; wordt het eigen schema en de password policy geladen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: add-schema.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
include: file:///etc/ldap/schema/hcc_schema.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ppolicy.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ldapns.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====schema updates====&lt;br /&gt;
Soms wordt een attribute toegevoegd of gewijzigd. Hiertoe dient het bestand hcc_schema.schema in /usr/local/hobbynet/etc/ldap/schema, gewijzigd te worden. Daarna dient er een ldif versie van gemaakt te worden. Gebruik hiervoor &#039;&#039;&#039;upd_schema.sh&#039;&#039;&#039; in dezelfde directory. De resulterende hcc_schema.ldif wordt in dit script naar /etc/ldap/schema gecopieërd. Bij grote wijzigingen is het aan te bevelen door de hele rebuild cycle te gaan (dump, init, restore). Bij triviale aanpassingen zou hcc_schema.ldif ook &#039;&#039;&#039;direct&#039;&#039;&#039; in de actieve directory geplaatst kunnen worden, gevolgd door slechts een &#039;&#039;&#039;service slapd restart&#039;&#039;&#039;. Gebruik hiervoor (blijf in de lokale schema directory):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp &amp;quot;ldif_output/cn=config/cn=schema/cn={14}hcc_schema.ldif&amp;quot; &amp;quot;/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}hcc_schema.ldif&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
LET OP: De nummers tussen accolades zijn bepaald door de volgorde van andere scripts! Zolang geen andere schema&#039;s worden toegevoegd zullen ze niet veranderen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ook kan met de ldap-tools gewerkt worden. Gebruik ldapsearch en ldapmodify, eventueel met de -f optie om een voorbereide serie opdrachten uit te voeren. Gebruik ldapsearch om eerst de structuur te vinden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier een voorbeeld om een objectClass aan te passen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat pas_aan.ldif&lt;br /&gt;
dn: cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
delete: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description ) )&lt;br /&gt;
-&lt;br /&gt;
add: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description $ hccIg ) )&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
$sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f pas_aan.ldif &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_config.ldif===&lt;br /&gt;
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 &#039;&#039;&#039;STATS&#039;&#039;&#039; gezet. Dit geeft niet teveel logging maar is toch goed bruikbaar. Om extra logging te krijgen op b.v. ACL&#039;s, verander olcLogLevel dan in &amp;quot;stats ACL&amp;quot;.  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-config.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcTLSCACertificateFile&lt;br /&gt;
olcTLSCACertificateFile: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
-&lt;br /&gt;
add: olcTLSCertificateFile&lt;br /&gt;
olcTLSCertificateFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
-&lt;br /&gt;
add: olcTLSCertificateKeyFile&lt;br /&gt;
olcTLSCertificateKeyFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
-&lt;br /&gt;
add: olcPasswordHash&lt;br /&gt;
olcPasswordHash: {CRYPT}&lt;br /&gt;
-&lt;br /&gt;
add: olcPasswordCryptSaltFormat&lt;br /&gt;
olcPasswordCryptSaltFormat: $6$%.16s&lt;br /&gt;
-&lt;br /&gt;
replace: olcLogLevel&lt;br /&gt;
olcLogLevel: stats&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Om de logging in een apart bestand te krijgen moet in /etc/rsyslog.d een extra bestand &#039;&#039;&#039;openldap.conf&#039;&#039;&#039; geplaatst worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local4.*   -/var/log/openldap.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Tevens willen we logrotate op dit bestand. Plaats in /etc/logrotate.d het bestand &#039;&#039;&#039;openldap&#039;&#039;&#039; met de volgende inhoud&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/log/openldap.log&lt;br /&gt;
{&lt;br /&gt;
        rotate 4&lt;br /&gt;
        weekly&lt;br /&gt;
        missingok&lt;br /&gt;
        notifempty&lt;br /&gt;
        compress&lt;br /&gt;
        delaycompress&lt;br /&gt;
        sharedscripts&lt;br /&gt;
        postrotate&lt;br /&gt;
                reload rsyslog &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 || true&lt;br /&gt;
        endscript&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify-mdb.ldif===&lt;br /&gt;
Hier worden de wijzigingen op de backend db gemaakt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-mdb.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
# hjv 2020.06.07 (oldSizeLimit toegevoegd)&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcDbCheckpoint&lt;br /&gt;
olcDbCheckpoint: 4096 1&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbNoSync&lt;br /&gt;
olcDbNoSync: TRUE&lt;br /&gt;
-&lt;br /&gt;
replace: olcSizeLimit&lt;br /&gt;
olcSizeLimit: 100000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===modify-acl.ldif===&lt;br /&gt;
Hier worden de rechten bepaald van de diverse rollen en groepen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-acl.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcAccess&lt;br /&gt;
# hobbynetlogin heeft lees rechten t.b.v. MySecureShell aanloggen&lt;br /&gt;
olcAccess: to attrs=@posixAccount,@posixGroup,@shadowAccount,@hostObject&lt;br /&gt;
  by dn=&amp;quot;cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to attrs=@posixAccount&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# sta anonymous search toe (t.b.v. Apache authenticatie)&lt;br /&gt;
olcAccess: to attrs=hccLogin,hccRol,hccProfiel,entry&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# olcAccess: to attrs=hccOptIn&lt;br /&gt;
#   by self write&lt;br /&gt;
#   by dn=&amp;quot;cn=drupal-hcc-nl,ou=klanten,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
#   by * break&lt;br /&gt;
#&lt;br /&gt;
# Anonieme klanten moeten kunnen inloggen&lt;br /&gt;
# en mogen hun eigen password wijzigen&lt;br /&gt;
olcAccess: to attrs=userPassword,shadowLastChange&lt;br /&gt;
  by self write&lt;br /&gt;
  by anonymous auth&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# Gebruiker mag zijn kader email wachtwoord aanpassen&lt;br /&gt;
olcAccess: to attrs=hccKaderPassword,hccKaderForward&lt;br /&gt;
  by self write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# beheerders hebben schrijfrechten op alles (updateDN)&lt;br /&gt;
# klanten hebben alleen lees rechten op alles (readDN)&lt;br /&gt;
# self mag lezen&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by self read&lt;br /&gt;
  by dn=&amp;quot;cn=xml-hoge-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn=&amp;quot;cn=xml-lage-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by dn.one=&amp;quot;ou=beheer,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn.one=&amp;quot;ou=klanten,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# PC30 helpdesk heeft leesrechten op ou=leden&lt;br /&gt;
olcAccess: to attrs=@hccOrgPerson,@hccKaderFunctie&lt;br /&gt;
  by dn.one=&amp;quot;ou=helpdesk,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# partners mogen een paar attrs lezen&lt;br /&gt;
olcAccess: to attrs=hccLidNummer,hccPostcode,hccPostcodeZoekveld,hccIg&lt;br /&gt;
  by dn.one=&amp;quot;ou=partners,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# iedereen moet (pseudo attr) entry en objectClass kunnen lezen&lt;br /&gt;
olcAccess: to attrs=entry,objectClass&lt;br /&gt;
  by * read&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by * none&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_index.ldif===&lt;br /&gt;
Een kale configuratie is heel snel voor wat betreft het opnieuw vullen met gegevens. Bij het aanmaken van een verse LDAP database worden er dan ook zo min mogelijk indexen aangemaakt.&amp;lt;br&amp;gt;&lt;br /&gt;
Zodra de inhoud is ingelezen kunnen de &#039;echte&#039; indexen aangemaakt worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-index.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcDbIndex&lt;br /&gt;
olcDbIndex: default pres,eq&lt;br /&gt;
olcDbIndex: objectClass,entryUUID,entryCSN eq&lt;br /&gt;
olcDbIndex: hccLidNummer,hccLogin,hccForumLogin eq&lt;br /&gt;
olcDbIndex: uid,uidNumber,gidNumber,memberUid,member eq&lt;br /&gt;
olcDbIndex: cn,host,hccPseudoniem,hccOptin,hccLocatie eq&lt;br /&gt;
olcDbIndex: sn,hccPostcodeZoekveld,hccIg,hccRegio eq,subfinal&lt;br /&gt;
olcDbIndex: hccRol,hccBezoek eq,pres,subfinal&lt;br /&gt;
olcDbIndex: hccBulletins pres&lt;br /&gt;
olcDbIndex: aboNummer eq&lt;br /&gt;
olcDbIndex: aboPostcodeZoekveld eq,subfinal&lt;br /&gt;
olcDbIndex: mail,mailHccnet,hccKaderMail,hccKaderForward pres,eq&lt;br /&gt;
olcDbIndex: hccProfiel pres,eq&lt;br /&gt;
olcDbindex: hccKaderUniekeURL eq&lt;br /&gt;
olcDbindex: hccOnderwerp eq,subfinal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ppolicy overlay===&lt;br /&gt;
* vanuit LDAP de minimale lengte van een wachtwoord afdwingen&lt;br /&gt;
* in LDAP SSHA versleuteling activeren&amp;lt;br&amp;gt;&lt;br /&gt;
(olcPPolicyHashCleartext: TRUE)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: add-ppolicy.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: cn=module, cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectClass: olcModuleList&lt;br /&gt;
objectClass: top&lt;br /&gt;
olcModuleLoad: ppolicy&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=ppolicy,olcDatabase={1}mdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcPPolicyConfig&lt;br /&gt;
olcOverlay: ppolicy&lt;br /&gt;
olcPPolicyDefault: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
olcPPolicyUseLockout: TRUE&lt;br /&gt;
olcPPolicyHashCleartext: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The default ppolicy looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dn: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
objectClass: pwdPolicy&lt;br /&gt;
objectClass: device&lt;br /&gt;
cn: default&lt;br /&gt;
pwdCheckQuality: 1&lt;br /&gt;
pwdMinLength: 8&lt;br /&gt;
pwdAttribute: 2.5.4.35&lt;br /&gt;
pwdAllowUserChange: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Syncrepl overlay===&lt;br /&gt;
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 [http://www.openldap.org/doc/admin/ LDAP Admin Guide]. &#039;&#039;&#039;Mirror configuratie is specifiek per server!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-syncrepl.tmpl                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
replace: olcServerID&lt;br /&gt;
olcServerID: @SID@&lt;br /&gt;
&lt;br /&gt;
dn: cn=module{0},cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcModuleLoad&lt;br /&gt;
olcModuleLoad: syncprov&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcSyncProvConfig&lt;br /&gt;
olcOverlay: syncprov&lt;br /&gt;
olcSpCheckpoint: 100 5&lt;br /&gt;
olcSpSessionlog: 100&lt;br /&gt;
&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcSyncRepl&lt;br /&gt;
olcSyncRepl: rid=@RID@&lt;br /&gt;
  provider=ldap://@PROVIDER@&lt;br /&gt;
  binddn=&amp;quot;cn=admin,dc=hcc,dc=nl&amp;quot; bindmethod=simple credentials=&amp;quot;@PASSWORD@&amp;quot;&lt;br /&gt;
  searchbase=&amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
  type=refreshAndPersist&lt;br /&gt;
  interval=00:00:00:10&lt;br /&gt;
  retry=&amp;quot;5 5 300 5&amp;quot;&lt;br /&gt;
  timeout=1&lt;br /&gt;
  starttls=yes&lt;br /&gt;
-&lt;br /&gt;
add: olcMirrorMode&lt;br /&gt;
olcMirrorMode: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
De andere server krijgt ServerID 2 en de provider is het IP adres van de andere server.&lt;br /&gt;
&lt;br /&gt;
===Unique overlay===&lt;br /&gt;
Deze overlay dient er voor te zorgen dat o.a het attribuut hccLogin een unieke waarde bevat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-unique.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module,cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectclass: olcModuleList&lt;br /&gt;
objectclass: top&lt;br /&gt;
olcmoduleload: unique&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=unique,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcUniqueConfig&lt;br /&gt;
olcOverlay: unique&lt;br /&gt;
olcUniqueAttribute: uid uidNumber hccLogin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SSL/TLS beveiliging==&lt;br /&gt;
Gebruik de juiste .pem bestanden in /etc/ssl/certs en /etc/ssl/private.&lt;br /&gt;
&lt;br /&gt;
We maken gebruik van een RapidSSL certificaat. Als dit niet standaard in Ubuntu bekend is, zet dan eerst GeoTrust_RapidSSL_-_ca-bundle.pem in de map /etc/ssl/certs neer. Voer nu een &#039;&#039;&#039;c_rehash .&#039;&#039;&#039; uit in /etc/ssl/certs om de cache te updaten (omdat GeoTrust_RapidSSL_-_ca-bundle.pem nieuw werd toegevoegd). &lt;br /&gt;
&lt;br /&gt;
De ownership is belangrijk. Hiertoe wordt de groep &amp;quot;openldap&amp;quot; toegevoegd aan de groep ssl-cert.&lt;br /&gt;
 adduser openldap ssl-cert&lt;br /&gt;
&lt;br /&gt;
Als dit fout gaat, doe dan eerst:&lt;br /&gt;
 apt-get install ssl-cert&lt;br /&gt;
&lt;br /&gt;
Zet het certificaat en de private key in de juiste groep:&lt;br /&gt;
 chgrp ssl-cert /etc/ssl/private/hobby.nl.*&lt;br /&gt;
 chmod 440      /etc/ssl/private/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
Het resultaat is dan als volgt:&lt;br /&gt;
 root@hcc-ldap-lb1:~# ls -l /etc/ssl/private/hcc* &lt;br /&gt;
 -rw-r--r-- 1 root     ssl-cert 1724 Nov 22 20:47 hobby.nl.crt&lt;br /&gt;
 -r--r----- 1 root     ssl-cert 1679 Nov 22 20:25 hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
 root@hcc-ldap-lb1:~# grep openldap /etc/group&lt;br /&gt;
 ssl-cert:x:114:openldap&lt;br /&gt;
 openldap:x:118:&lt;br /&gt;
&lt;br /&gt;
2020.12.09: Op een nieuwe Ubuntu installatie staat apparmor standaard aan. Weg ermee!&lt;br /&gt;
 apt remove --assume-yes --purge apparmor&lt;br /&gt;
&amp;lt;strike&amp;gt;Per september 2017 staan de certificaten in /disk/site/etc/ssl/hobby.nl, net als op alle andere servers. Omdat apparmor actief is moet deze directory worden toegevoegd aan /etc/apparmor.d/local/usr.sbin.slapd. Die file ziet er dan als volgt uit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Site-specific additions and overrides for usr.sbin.slapd.&lt;br /&gt;
# For more details, please see /etc/apparmor.d/local/README.&lt;br /&gt;
#include &amp;lt;abstractions/ssl_certs&amp;gt;&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/ r,&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/* r,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Openldap ook op poort 636 benaderd wordt (naast TLS op 389), moet in /etc/default/slapd ldaps:/// opgenomen worden bij de SLAPD_SERVICES.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;netstat -an&#039; dient dan 636 te laten zien voor zowel IPv4 als IPv6.&lt;br /&gt;
&lt;br /&gt;
Om de cn=config te zien kan je het volgende commando gebruiken:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config&lt;br /&gt;
&lt;br /&gt;
of, wat botter maar korter:&lt;br /&gt;
cat /etc/ldap/slapd.d/cn\=config.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Backup, initialize, restore==&lt;br /&gt;
Om het hele skelet van ldap in één keer te herstellen dient &#039;&#039;&#039;init_ldap&#039;&#039;&#039; gebruikt te worden. Als argument &#039;&#039;&#039;moet&#039;&#039;&#039; het admin beheer wachtwoord mee gegeven worden.&lt;br /&gt;
&lt;br /&gt;
===lokaal===&lt;br /&gt;
Backups kunnen gemaakt worden terwijl slapd draait maar geadviseerd wordt slapd te stoppen. Voor dumpen moet &#039;&#039;&#039;slapcat&#039;&#039;&#039; gebruikt worden. Backups kunnen gemaakt worden per database of een filter daarop, naar een ldif bestand.&lt;br /&gt;
 slapcat -l hcc-dump.ldif -b &amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
Dit maakt een dump van alles onder &#039;&#039;&#039;dc=hcc,dc=nl&#039;&#039;&#039; naar het bestand hcc-dump.ldif. Ook is het mogelijk het database nummer te gebruiken, config is altijd nummer 0, hdb is gewoonlijk 1.&lt;br /&gt;
&lt;br /&gt;
Het &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; script dumpt alle ou&#039;s in aparte .ldif bestanden; het omgekeerde doet &#039;&#039;&#039;restore_ldap&#039;&#039;&#039;.  &lt;br /&gt;
Terug inlezen kan alleen in een lege directory, dus direct nadat &#039;&#039;&#039;init_ldap&#039;&#039;&#039; is gedaan. Gebruik voor het terugplaatsen &#039;&#039;&#039;slapadd&#039;&#039;&#039;. Aan te bevelen is &#039;&#039;&#039;-c&#039;&#039;&#039; mee te geven zodat ondanks fouten doorgegaan wordt. &lt;br /&gt;
&lt;br /&gt;
Voor slapadd &#039;&#039;&#039;moet&#039;&#039;&#039; 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)&lt;br /&gt;
 /etc/init.d/slapd stop&lt;br /&gt;
 slapadd -l hcc-dump.ldif -w -c &amp;gt;errors.txt&lt;br /&gt;
 chown openldap:openldap /var/lib/ldap/*&lt;br /&gt;
 /etc/init.d/slapd start&lt;br /&gt;
&lt;br /&gt;
===remote===&lt;br /&gt;
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 &#039;&#039;&#039;backup-encrypted&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Recente lokale backups zijn te vinden in &#039;&#039;&#039;/usr/local/hobbynet/tmp&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Verse ldap maken===&lt;br /&gt;
Transactie log bij het toevoegen van b.v. een nieuwe ou:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Op beide servers:&lt;br /&gt;
schema van test server gecopieerd en geactiveerd&lt;br /&gt;
dump-ldap gedraaid&lt;br /&gt;
systemctl stop slapd.service &lt;br /&gt;
&lt;br /&gt;
Er is nu géén ldap service! Werk dus snel...&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb1&lt;br /&gt;
systemctl stop slapd.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
op ldap-lb2:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb2&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
systemctl start slapd.service&lt;br /&gt;
Beide slapd servers zijn in de lucht en moeten synchroniseren.&lt;br /&gt;
&lt;br /&gt;
op beide servers:&lt;br /&gt;
check replicatie (netstat en functioneel)&lt;br /&gt;
&lt;br /&gt;
root@ldap-lb1:/usr/local/hobbynet/bin# netstat -n | grep 389&lt;br /&gt;
tcp        0      0 172.31.8.4:36838        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:36836        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58112        ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58114        ESTABLISHED&lt;br /&gt;
&lt;br /&gt;
Functioneel door met ADS op beide servers in te loggen en een willekeurig veld in je eigen entry te wijzigen op lb1. Kijk of het gebeurd is op lb2 en wijzig het daar terug. Check op de andere server of het gebeurd is. Er kan een zekere vertraging in optreden.&lt;br /&gt;
&lt;br /&gt;
Stel er is een nieuwe ou gemaakt: denk aan het bij werken van de dump en restore scripts.&lt;br /&gt;
&lt;br /&gt;
update dump-ldap.sh en restore-ldap.sh met de nieuwe ou&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
export tarieven.ldif op test server en import op ldap-lb1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==crontab==&lt;br /&gt;
 # script dat updates ophaalt (maar niet installeert), zodat nagios ze ook detecteert&lt;br /&gt;
 0 9 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
==LDAP Clients==&lt;br /&gt;
Er zijn meerdere LDAP clients. De meest populaire zijn Apache Directory Studio (&amp;quot;ADS&amp;quot;) en phpLdapAdmin (&amp;quot;PLA&amp;quot;).&amp;lt;br&amp;gt;&lt;br /&gt;
De eerste is veel uitgbreider maar vereist een Java Runtime Environment (&amp;quot;JRE&amp;quot;). Onder Windows is dat JRE(13) of (open)JDK-(13).&amp;lt;br&amp;gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Binnen Hobbynet wordt uitsluitend gebruik gemaakt van ADS.&lt;br /&gt;
&lt;br /&gt;
===StartTLS===&lt;br /&gt;
Aanbevolen wordt StartTLS op poort 389 te gebruiken. Alternatief is LDAPS op poort 636 maar dat is deprecated. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Windows===&lt;br /&gt;
&amp;lt;i&amp;gt;2019-10-31 HJV: Oude info, als referentie leuk, maar niet meer relevant&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Onder Windows moet met &#039;&#039;&#039;keytool.exe&#039;&#039;&#039; gewerkt worden. De uitleg heb ik van  [http://www.talkingtree.com/blog/index.cfm?mode=entry&amp;amp;entry=25AA75A4-45A6-2844-7CA3EECD842DB576 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:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Haal de benodigde bestanden op (op een Linux systeem):&lt;br /&gt;
wget http://www.cacert.org/certs/root.der -O root.der&lt;br /&gt;
wget http://www.cacert.org/certs/class3.der -O class3.der&lt;br /&gt;
copieer de bestanden naar de Windows omgeving in C:\Program Files (x86)\Java\jre6\lib\security.&lt;br /&gt;
&lt;br /&gt;
Open een commandwindow:&lt;br /&gt;
cd C:\Program Files (x86)\Java\jre6\lib\security&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass1 -file root.der&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass3 -file class3.der&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Linux===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS gebruik===&lt;br /&gt;
ADS kan erg handig zijn voor het snel dumpen van hele ou&#039;s in .ldif formaat. Zo&#039;n dump kan direct op een andere server worden ingelezen.&lt;br /&gt;
&lt;br /&gt;
===PhpLdapAdmin onder Linux===&lt;br /&gt;
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 [http://phpldapadmin.sourceforge.net/wiki/index.php/Server:server:tls phpldapadmin wiki].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# LDAP Defaults&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# See ldap.conf(5) for details&lt;br /&gt;
# This file should be world readable but not world writable.&lt;br /&gt;
&lt;br /&gt;
#BASE   dc=example,dc=com&lt;br /&gt;
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666&lt;br /&gt;
&lt;br /&gt;
#SIZELIMIT      12&lt;br /&gt;
#TIMELIMIT      15&lt;br /&gt;
#DEREF          never&lt;br /&gt;
TLS_CACERT      /etc/ssl/certs/CAcert_org.pem&lt;br /&gt;
TLS_CERT        /etc/ssl/private/hobby.nl.crt&lt;br /&gt;
TLS_KEY         /etc/ssl/private/hobby.nl.key&lt;br /&gt;
TLS_REQCERT     allow&lt;br /&gt;
#TLS_REQCERT never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Denk er wel aan na wijzigingen Apache te herstarten.&lt;br /&gt;
===PAM en NSS via LDAP===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Installeer &#039;&#039;&#039;libnss-ldapd&#039;&#039;&#039; om de benodigde libraries te verkrijgen. Apt-get zal tevens &#039;&#039;&#039;libpam-ldapd&#039;&#039;&#039;, &#039;&#039;&#039;nslcd&#039;&#039;&#039; en &#039;&#039;&#039;nscd&#039;&#039;&#039; binnen brengen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install libnss-ldapd auth-client-config ldap-utils&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
    libpam-ldapd nscd nslcd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Libnss-ldapd is een doorontwikkeling van libnss-ldap en bevat meerdere verbeteringen. Zie: [http://arthurdejong.org/nss-pam-ldapd/ deze site] van de ontwikkelaar. Bij de installatie wordt een user &#039;&#039;&#039;nslcd&#039;&#039;&#039; aangemaakt; denk erom die in de .tmpl bestanden te zetten!&lt;br /&gt;
  &lt;br /&gt;
nsswitch.conf laat zich configureren via &#039;&#039;&#039;auth-client-config&#039;&#039;&#039; maar lac_ldap is alleen aanwezig als &#039;&#039;&#039;ldap-auth-config&#039;&#039;&#039; ook is geinstalleerd. Zo niet gebruik dan de tweede regel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auth-client-config -t nss -p lac_ldap&lt;br /&gt;
auth-client-config -t nss -p ldap_example&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het resultaat is dat nsswitch.conf zowel in files (/etc/passwd etc.) zoekt als in ldap.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nsswitch.conf&lt;br /&gt;
#&lt;br /&gt;
# Example configuration of GNU Name Service Switch functionality.&lt;br /&gt;
# If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
# `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # passwd:         compat&lt;br /&gt;
passwd: files ldap&lt;br /&gt;
# pre_auth-client-config # group:          compat&lt;br /&gt;
group: files ldap&lt;br /&gt;
# pre_auth-client-config # shadow:         compat&lt;br /&gt;
shadow: files ldap&lt;br /&gt;
&lt;br /&gt;
hosts:          files dns&lt;br /&gt;
networks:       files&lt;br /&gt;
&lt;br /&gt;
protocols:      db files&lt;br /&gt;
services:       db files&lt;br /&gt;
ethers:         db files&lt;br /&gt;
rpc:            db files&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # netgroup:       nis&lt;br /&gt;
netgroup: nis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het aanpassen van de PAM bestanden gaat sinds enige releases met &#039;&#039;&#039;pam-auth-update&#039;&#039;&#039;. Kies in het menu voor zowel unix als ldap. Default wordt nu ldap authenticatie gebruikt voor uid &amp;gt;= 1000. Bij Hobbynet willen we vanaf 300 ldap gebruiken. Door een licht gemodificeerde versie van /usr/share/pam-configs/ldap te maken (ldap-hobbynet), kan ook voor de hobbynet instelling gekozen worden. Dit is de ldap-hobbynet versie:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Name: LDAP Authentication (uid&amp;gt;300)&lt;br /&gt;
Default: yes&lt;br /&gt;
Priority: 128&lt;br /&gt;
Auth-Type: Primary&lt;br /&gt;
Auth-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Auth:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 use_first_pass&lt;br /&gt;
Account-Type: Additional&lt;br /&gt;
Account:&lt;br /&gt;
        [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad]        pam_ldap.so minimum_uid=300&lt;br /&gt;
Password-Type: Primary&lt;br /&gt;
Password-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Password:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 try_first_pass&lt;br /&gt;
Session-Type: Additional&lt;br /&gt;
Session:&lt;br /&gt;
        [success=ok default=ignore]     pam_ldap.so minimum_uid=300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dit is in een standaard opzet van LDAP voldoende om zowel lokale gebruikers als gebruikers opgeslagen in LDAP, te laten inloggen en hun password te laten wijzigen. In de Hobbynet setup moet er echter nog meer gebeuren in de ACL&#039;s van de LDAP server configuratie. Omdat Hobbynet de laatste ACL regel heeft gewijzigd in een &#039;&#039;&#039;deny-all&#039;&#039;&#039;, is er een helper of proxy account nodig dat read access heeft of een aantal cruciale velden in de posixAccount objectClass. Zie verder de lsiting van nslcd.conf.&lt;br /&gt;
&lt;br /&gt;
Libnss-ldapd en libpam-ldapd hebben een gezamelijke daemon &#039;&#039;&#039;nslcd&#039;&#039;&#039; die z&#039;n configuratie uit &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039; haalt. Hierin is ook een voorziening voor het helper account. Aan het eind vande &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; staat de voorziening voor host-based login. Als het attribute &#039;&#039;&#039;host&#039;&#039;&#039; de fqdn of alleen de host naam bevat, bepaald dat of inloggen op die host mogelijk is. &#039;&#039;&#039;*&#039;&#039;&#039; staat inloggen op alle hosts toe.&lt;br /&gt;
&lt;br /&gt;
Eventueel kan het daemon proces voor debugging doeleinden ook als command (&#039;&#039;&#039;nslcd -d&#039;&#039;&#039;) gestart worden. Om de bevragingen van de LDAP server wat te verminderen, kan &#039;&#039;&#039;nscd&#039;&#039;&#039; voor caching zorgen. Deze cache daemon heeft zijn eigen configuratie bestand: &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039;. De default instellingen zijn goed; eventueel kan de logging naar een bestand gestuurd worden.&lt;br /&gt;
&lt;br /&gt;
Verbinding met de LDAP server kan met StartTLS beveiligd worden. Hier de inhoud van nslcd.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nslcd.conf&lt;br /&gt;
# nslcd configuration file. See nslcd.conf(5)&lt;br /&gt;
# for details.&lt;br /&gt;
&lt;br /&gt;
# The user and group nslcd should run as.&lt;br /&gt;
uid nslcd&lt;br /&gt;
gid nslcd&lt;br /&gt;
&lt;br /&gt;
# log location and level&lt;br /&gt;
#log /var/log/nslcd.log debug&lt;br /&gt;
&lt;br /&gt;
# The location at which the LDAP server(s) should be reachable.&lt;br /&gt;
uri ldap://ldap2-int.hobby.nl/&lt;br /&gt;
&lt;br /&gt;
# The search base that will be used for all queries.&lt;br /&gt;
base dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# Other base mappings&lt;br /&gt;
base   group  ou=groups,dc=hcc,dc=nl&lt;br /&gt;
base   passwd ou=users,dc=hcc,dc=nl&lt;br /&gt;
base   shadow ou=users,dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# The search scope.&lt;br /&gt;
#scope sub&lt;br /&gt;
&lt;br /&gt;
# The LDAP protocol version to use.&lt;br /&gt;
ldap_version 3&lt;br /&gt;
&lt;br /&gt;
# The DN to bind with for normal lookups.&lt;br /&gt;
#binddn cn=annonymous,dc=example,dc=net&lt;br /&gt;
#bindpw secret&lt;br /&gt;
binddn cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&lt;br /&gt;
bindpw xxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
# The DN used for password modifications by root.&lt;br /&gt;
#rootpwmoddn cn=admin,dc=example,dc=com&lt;br /&gt;
&lt;br /&gt;
# SSL options&lt;br /&gt;
ssl off&lt;br /&gt;
ssl start_tls&lt;br /&gt;
#tls_reqcert never&lt;br /&gt;
tls_cacertfile /etc/ssl/certs/cacert.org.pem&lt;br /&gt;
#tls_cert /etc/ssl/private/server.crt&lt;br /&gt;
#tls_key /etc/ssl/private/server.key&lt;br /&gt;
&lt;br /&gt;
# The minimum uid&lt;br /&gt;
nss_min_uid 300&lt;br /&gt;
&lt;br /&gt;
pam_authz_search (&amp;amp;(objectClass=posixAccount)(uid=$username)(|(host=$hostname)(host=$fqdn)(host=\\*)))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===users en groepen toevoegen===&lt;br /&gt;
Hiervoor moet &#039;&#039;&#039;ldapscripts&#039;&#039;&#039; zijn geïnstalleerd. Dit is het geval op de ldap-lb1 server. Dat levert de volgende extra commando&#039;s op:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldaprenamemachine&lt;br /&gt;
ldapadduser&lt;br /&gt;
ldapdeleteuserfromgroup&lt;br /&gt;
ldapfinger&lt;br /&gt;
ldapid&lt;br /&gt;
ldapgid&lt;br /&gt;
ldapmodifyuser&lt;br /&gt;
ldaprenameuser&lt;br /&gt;
lsldap&lt;br /&gt;
ldapaddusertogroup&lt;br /&gt;
ldapsetpasswd&lt;br /&gt;
ldapinit&lt;br /&gt;
ldapaddgroup&lt;br /&gt;
ldapdeletegroup&lt;br /&gt;
ldapmodifygroup&lt;br /&gt;
ldapdeletemachine&lt;br /&gt;
ldaprenamegroup&lt;br /&gt;
ldapaddmachine&lt;br /&gt;
ldapmodifymachine&lt;br /&gt;
ldapsetprimarygroup&lt;br /&gt;
ldapdeleteuser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Meest gebruikt zijn &#039;&#039;&#039;ldapaddgroup, ldapadduser, ldapsetpasswd&#039;&#039;&#039;.  &lt;br /&gt;
Er zijn manpages maar er is ook uitgebreide uitleg in de [https://help.ubuntu.com/14.04/serverguide/openldap-server.html Ubuntu server guide]. Omdat wij het automatisch maken van de home dir uit hebben staan, moet die met de hand aangemaakt worden en moet de owner goed gezet worden.&lt;br /&gt;
&lt;br /&gt;
===host-based login===&lt;br /&gt;
Met een kleine uitbreiding in het schema van de LDAP server, kan host-based login gerealiseerd worden. Ook in de &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; is een uitbreiding nodig.&lt;br /&gt;
&lt;br /&gt;
In de LDAP server dient de objectClass &#039;&#039;&#039;hostObject&#039;&#039;&#039; aan de entries in de ou=users toegevoegd te worden. Deze (auxilary) objectClass brengt slechts één attribute met zich mee: &#039;&#039;&#039;host&#039;&#039;&#039;. De regel in nslcd.conf checkt of één van de waarden van &#039;&#039;&#039;host&#039;&#039;&#039; gelijk is aan de naam van de server waarop ingelogd wordt. De waarde &#039;&#039;&#039;*&#039;&#039;&#039; geldt als wildcard. Zie de regel &#039;&#039;&lt;br /&gt;
&#039;pam_authz_search&#039;&#039;&#039;&#039; in &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Password aanpassen===&lt;br /&gt;
Via LDAP ingelogde gebruikers kunnen net als lokale gebruikers hun wachtwoord met &#039;&#039;&#039;passwd&#039;&#039;&#039; wijzigen. Wel moet aan de eisen in de LDAP ppolicy module voldaan worden.&lt;br /&gt;
&lt;br /&gt;
==PHP scripting==&lt;br /&gt;
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 &#039;&#039;&#039;/usr/local/hobbynet/bin&#039;&#039;&#039; directory.&lt;br /&gt;
Voor de php-scripting zijn enkele php7.x pakketten nodig. Installeer deze met apt-get. Het gaat om:&lt;br /&gt;
* php-cli&lt;br /&gt;
* php-ldap&lt;br /&gt;
&lt;br /&gt;
== Apache authenticatie via LDAP ==&lt;br /&gt;
In plaats van .htpassword authenticatie, kan ook LDAP gebruikt worden. Activeer daartoe de Apache module&lt;br /&gt;
&#039;authnz_ldap&#039;.&lt;br /&gt;
 a2enmod authnz_ldap&lt;br /&gt;
Denk er om dat dit in een loadbalanced situatie op beide servers gedaan dient te worden!&lt;br /&gt;
&lt;br /&gt;
=== Voorbeeld van een LDAP configuratie in de Apache config ===&lt;br /&gt;
(alleen als voorbeeld, niet zo gebruiken!)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# // 1) Hobbynet webmaster&lt;br /&gt;
# // 2) Vraagbaak medewerker van een willekeurige groepering&lt;br /&gt;
# (|(hccRol=*#VRBK)(hccRol=HN#WM))&lt;br /&gt;
  &amp;lt;Location &amp;quot;/apps/vraagbaak&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;RequireAll&amp;gt;&lt;br /&gt;
      Authname &amp;quot;HCC!vraagbaak (gebruik uw hcc.nl gebruikersnaam/wachtwoord)&amp;quot;&lt;br /&gt;
      AuthType Basic&lt;br /&gt;
      AuthBasicProvider ldap&lt;br /&gt;
      AuthLDAPUrl ldap://hcc-ldap-int.hobby.nl/ou=leden,dc=hcc,dc=nl?hccLogin??(|(hccRol=*#VRBK)(hccRol=HN#WM))(hccProfiel=TRUE) TLS&lt;br /&gt;
      require valid-user&lt;br /&gt;
    &amp;lt;/RequireAll&amp;gt;&lt;br /&gt;
  &amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hoe kan LDAP veilig gebruikt worden vanuit Apache===&lt;br /&gt;
Zet een script neer in de gebruikersomgeving, en gebruik mod_authz_external. Doe de controle vervolgens via de XML-RPC server.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zie [[Kadernet]] voor een voorbeeld.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== TODO lijst ==&lt;br /&gt;
&#039;&#039;Dit is een lijst in wording, graag aanvullen&#039;&#039; &lt;br /&gt;
* &#039;dun&#039; loadbalancer script maken om te controleren dat LDAP echt luistert&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79068</id>
		<title>LDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79068"/>
		<updated>2020-12-10T21:39:28Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* ppolicy overlay */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introductie==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==LDAP server keuze==&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Loadbalanced==&lt;br /&gt;
Er zijn twee servers (ldap-lb1 en ldap-lb2) die achter een loadbalancer in preferred server mode staan 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.&lt;br /&gt;
&lt;br /&gt;
Tevens zijn er een test en een development server: ldap-test en ldap-dev.&lt;br /&gt;
&lt;br /&gt;
==Installatie==&lt;br /&gt;
Installatie van OpenLDAP is simpel:&lt;br /&gt;
 aptitude install slapd ldap-utils&lt;br /&gt;
Omdat er gebruikgemaakt wordt van php scripts, is het ook nodig &#039;&#039;&#039;php-cli&#039;&#039;&#039; en &#039;&#039;&#039;php-ldap&#039;&#039;&#039; te installeren. De configuratie van OpenLDAP is sinds Karmic Koala iets gecompliceerder geworden. &#039;cn=config&#039; 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 &amp;quot;dpkg-reconfigure slapd&amp;quot; zet alleen de skeleton configuratie terug. Je moet zelf de database, root dn en acl&#039;s opzetten (als root of met sudo). Run  &#039;&#039;&#039;dpkg-reconfigure slapd&#039;&#039;&#039; om terug te gaan naar een lege directory. &lt;br /&gt;
&lt;br /&gt;
De volgende pakketten dienen geïnstalleerd te zijn (&#039;php -m&#039; toont de geactiveerde modules):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontbrekende pakketten volgens hjv:&lt;br /&gt;
&lt;br /&gt;
apt-get install aptitude &lt;br /&gt;
apt-get install phpmyadmin&lt;br /&gt;
apt-get install php-mbstring&lt;br /&gt;
apt-get install php-gettext&lt;br /&gt;
apt-get install php-xmlrpc&lt;br /&gt;
apt-get install php-ldap&lt;br /&gt;
apt-get install mysql-server&lt;br /&gt;
apt-get install ldapscripts&lt;br /&gt;
apt-get install php-xml&lt;br /&gt;
apt-get install slapd&lt;br /&gt;
apt-get install ldap-utils&lt;br /&gt;
a2enmod ssl&lt;br /&gt;
&lt;br /&gt;
- apache2ctl restart&lt;br /&gt;
&lt;br /&gt;
- openldap moet lid zijn van de groep ssl-cert!&lt;br /&gt;
apt-get install ssl-cert&lt;br /&gt;
adduser openldap ssl-cert&lt;br /&gt;
(of vi /etc/group&lt;br /&gt;
    ssl-cert:x:116:openldap)&lt;br /&gt;
&lt;br /&gt;
- Zorg dat de LDAP daemon bij de certificaten kan komen. &lt;br /&gt;
LET OP: op alle hobbynet servers staan de certificaten in /disk/site/etc/ssl/hobby.nl/&lt;br /&gt;
 chgrp ssl-cert /disk/site/etc/ssl/hobby.nl/hobby.nl.*&lt;br /&gt;
 chmod 440      /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
- mysql laat het bestand ibdata1 ongelimiteerd groeien (InnoDB bestanden)&lt;br /&gt;
 /etc/mysql/mysql.conf.d/innodb_file_per_table.cnf&lt;br /&gt;
 [mysql]&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
&lt;br /&gt;
=============&lt;br /&gt;
Nog meer Hobbynet aanpassingen&lt;br /&gt;
/etc/bash.bashrc&lt;br /&gt;
export http_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export https_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export ftp_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Locatie bestanden===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Alle ldif em tmpl bestanden gaan naar /usr/local/hobbynet/lib&lt;br /&gt;
* init_ldap en andere scripts gaan naar /usr/local/hobbynet/bin&lt;br /&gt;
* alle data bestanden (dumps) en update ldifs gaan naar /usr/local/hobbynet/data&lt;br /&gt;
* etc/ldap/schema/hcc_schema.* gaan naar /etc/ldap/schema&lt;br /&gt;
* etc/ldap/schema/ppolicy.ldif gaat naar /etc/ldap/schema&lt;br /&gt;
&lt;br /&gt;
hcc_schema.ldif wordt middels een script gemaakt. Dit script plaatst de ldif bestand(en) in /etc/ldap/schema. Zie hieronder.&lt;br /&gt;
&lt;br /&gt;
==Initiële database==&lt;br /&gt;
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.sh &amp;lt;admin-pw&amp;gt; gebruikt dan wordt een werkende directory gemaakt met alle statische data (in diverse ou&#039;s) erin. Gebruik na het maken van de initiële database restore_ldap.sh om de database te vullen met de data uit de data directory.&lt;br /&gt;
&lt;br /&gt;
===slapd.init.ldif ===&lt;br /&gt;
Bij installatie en reconfiguratie wordt /usr/share/slapd/slapd.init.ldif ingelezen. Zie aldaar indien nodig.&lt;br /&gt;
&lt;br /&gt;
==init_ldap script==&lt;br /&gt;
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 &#039;&#039;&#039;cn=admin,dc=hcc,dc=nl&#039;&#039;&#039; 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 &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; laadt vervolgens de laatste dump terug. Bij wijzigingen aan het schema is het raadzaam altijd een &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; te doen zodat een later een actuele dump kan worden teruggeladen.&lt;br /&gt;
&lt;br /&gt;
Het (plain text) password van cn=admin,dc=hcc,dc=nl moet bij het aanroepen van &#039;&#039;&#039;init_ldap&#039;&#039;&#039; op de commandline worden meegegeven. Tijdens de dpkg-reconfigure moet het password nog 2x gegeven worden. Lees eventueel ook de [http://www.openldap.org/doc/admin/ OpenLDAP Admin Guide].&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* voorbereidingen om &amp;quot;dpkg-reconfigure slapd&amp;quot; te draaien&lt;br /&gt;
* definities van input files&lt;br /&gt;
* check host&lt;br /&gt;
* bouwen van het skelet van de nieuwe directory&lt;br /&gt;
Zie voor details van de scripts &#039;&#039;&#039;init_ldap&#039;&#039;&#039;, &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; en &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; op een van de servers (in /usr/local/hobbynet/bin).&lt;br /&gt;
&lt;br /&gt;
==onderdelen van init_ldap==&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===add-schema.ldif===&lt;br /&gt;
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. &lt;br /&gt;
* Hiertoe wordt het onderstaande schema in /etc/ldap/schema geplaatst als hcc_schema.schema. &lt;br /&gt;
* Vervolgens worden de stappen uitgevoerd zoals beschreven in de [https://help.ubuntu.com/11.10/serverguide/C/openldap-server.html Ubuntu Server guide], onder &#039;&#039;&#039;Modifying the slapd Configuration Database&#039;&#039;&#039;. &lt;br /&gt;
* De resulterende output file &#039;&#039;&#039;cn=hcc_schema.ldif&#039;&#039;&#039; moet dan nog naar /etc/ldap/schema/hcc_schema.ldif gecopieerd worden. &lt;br /&gt;
Als dit proces herhaald moet worden, start dan met een lege output directory en verwijder een eventueel achtergebleven cn=hcc_schema.ldif bestand. &lt;br /&gt;
&lt;br /&gt;
De extra schema&#039;s worden middels een &#039;&#039;&#039;include&#039;&#039;&#039; toegevoegd. &#039;&#039;&#039;Ppolicy&#039;&#039;&#039; is op gelijke wijze als &#039;&#039;&#039;hcc_schema&#039;&#039;&#039; tot .ldif geconverteerd. Alle stappen om een nieuwe &#039;&#039;&#039;hcc-schema.ldif&#039;&#039;&#039; te maken zijn gescript in &#039;&#039;&#039;upd_schema&#039;&#039;&#039;. In &#039;&#039;&#039;init_ldap&#039;&#039;&#039; wordt het eigen schema en de password policy geladen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: add-schema.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
include: file:///etc/ldap/schema/hcc_schema.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ppolicy.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ldapns.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====schema updates====&lt;br /&gt;
Soms wordt een attribute toegevoegd of gewijzigd. Hiertoe dient het bestand hcc_schema.schema in /usr/local/hobbynet/etc/ldap/schema, gewijzigd te worden. Daarna dient er een ldif versie van gemaakt te worden. Gebruik hiervoor &#039;&#039;&#039;upd_schema.sh&#039;&#039;&#039; in dezelfde directory. De resulterende hcc_schema.ldif wordt in dit script naar /etc/ldap/schema gecopieërd. Bij grote wijzigingen is het aan te bevelen door de hele rebuild cycle te gaan (dump, init, restore). Bij triviale aanpassingen zou hcc_schema.ldif ook &#039;&#039;&#039;direct&#039;&#039;&#039; in de actieve directory geplaatst kunnen worden, gevolgd door slechts een &#039;&#039;&#039;service slapd restart&#039;&#039;&#039;. Gebruik hiervoor (blijf in de lokale schema directory):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp &amp;quot;ldif_output/cn=config/cn=schema/cn={14}hcc_schema.ldif&amp;quot; &amp;quot;/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}hcc_schema.ldif&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
LET OP: De nummers tussen accolades zijn bepaald door de volgorde van andere scripts! Zolang geen andere schema&#039;s worden toegevoegd zullen ze niet veranderen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ook kan met de ldap-tools gewerkt worden. Gebruik ldapsearch en ldapmodify, eventueel met de -f optie om een voorbereide serie opdrachten uit te voeren. Gebruik ldapsearch om eerst de structuur te vinden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier een voorbeeld om een objectClass aan te passen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat pas_aan.ldif&lt;br /&gt;
dn: cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
delete: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description ) )&lt;br /&gt;
-&lt;br /&gt;
add: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description $ hccIg ) )&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
$sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f pas_aan.ldif &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_config.ldif===&lt;br /&gt;
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 &#039;&#039;&#039;STATS&#039;&#039;&#039; gezet. Dit geeft niet teveel logging maar is toch goed bruikbaar. Om extra logging te krijgen op b.v. ACL&#039;s, verander olcLogLevel dan in &amp;quot;stats ACL&amp;quot;.  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-config.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcTLSCACertificateFile&lt;br /&gt;
olcTLSCACertificateFile: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
-&lt;br /&gt;
add: olcTLSCertificateFile&lt;br /&gt;
olcTLSCertificateFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
-&lt;br /&gt;
add: olcTLSCertificateKeyFile&lt;br /&gt;
olcTLSCertificateKeyFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
-&lt;br /&gt;
add: olcPasswordHash&lt;br /&gt;
olcPasswordHash: {CRYPT}&lt;br /&gt;
-&lt;br /&gt;
add: olcPasswordCryptSaltFormat&lt;br /&gt;
olcPasswordCryptSaltFormat: $6$%.16s&lt;br /&gt;
-&lt;br /&gt;
replace: olcLogLevel&lt;br /&gt;
olcLogLevel: stats&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Om de logging in een apart bestand te krijgen moet in /etc/rsyslog.d een extra bestand &#039;&#039;&#039;openldap.conf&#039;&#039;&#039; geplaatst worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local4.*   -/var/log/openldap.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Tevens willen we logrotate op dit bestand. Plaats in /etc/logrotate.d het bestand &#039;&#039;&#039;openldap&#039;&#039;&#039; met de volgende inhoud&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/log/openldap.log&lt;br /&gt;
{&lt;br /&gt;
        rotate 4&lt;br /&gt;
        weekly&lt;br /&gt;
        missingok&lt;br /&gt;
        notifempty&lt;br /&gt;
        compress&lt;br /&gt;
        delaycompress&lt;br /&gt;
        sharedscripts&lt;br /&gt;
        postrotate&lt;br /&gt;
                reload rsyslog &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 || true&lt;br /&gt;
        endscript&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify-mdb.ldif===&lt;br /&gt;
Hier worden de wijzigingen op de backend db gemaakt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-mdb.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
# hjv 2020.06.07 (oldSizeLimit toegevoegd)&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcDbCheckpoint&lt;br /&gt;
olcDbCheckpoint: 4096 1&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbNoSync&lt;br /&gt;
olcDbNoSync: TRUE&lt;br /&gt;
-&lt;br /&gt;
replace: olcSizeLimit&lt;br /&gt;
olcSizeLimit: 100000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===modify-acl===&lt;br /&gt;
Hier worden de rechten bepaald van de diverse rollen en groepen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-acl.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcAccess&lt;br /&gt;
# hobbynetlogin heeft lees rechten t.b.v. MySecureShell aanloggen&lt;br /&gt;
olcAccess: to attrs=@posixAccount,@posixGroup,@shadowAccount,@hostObject&lt;br /&gt;
  by dn=&amp;quot;cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to attrs=@posixAccount&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# sta anonymous search toe (t.b.v. Apache authenticatie)&lt;br /&gt;
olcAccess: to attrs=hccLogin,hccRol,hccProfiel,entry&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# olcAccess: to attrs=hccOptIn&lt;br /&gt;
#   by self write&lt;br /&gt;
#   by dn=&amp;quot;cn=drupal-hcc-nl,ou=klanten,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
#   by * break&lt;br /&gt;
#&lt;br /&gt;
# Anonieme klanten moeten kunnen inloggen&lt;br /&gt;
# en mogen hun eigen password wijzigen&lt;br /&gt;
olcAccess: to attrs=userPassword,shadowLastChange&lt;br /&gt;
  by self write&lt;br /&gt;
  by anonymous auth&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# Gebruiker mag zijn kader email wachtwoord aanpassen&lt;br /&gt;
olcAccess: to attrs=hccKaderPassword,hccKaderForward&lt;br /&gt;
  by self write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# beheerders hebben schrijfrechten op alles (updateDN)&lt;br /&gt;
# klanten hebben alleen lees rechten op alles (readDN)&lt;br /&gt;
# self mag lezen&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by self read&lt;br /&gt;
  by dn=&amp;quot;cn=xml-hoge-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn=&amp;quot;cn=xml-lage-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by dn.one=&amp;quot;ou=beheer,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn.one=&amp;quot;ou=klanten,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# PC30 helpdesk heeft leesrechten op ou=leden&lt;br /&gt;
olcAccess: to attrs=@hccOrgPerson,@hccKaderFunctie&lt;br /&gt;
  by dn.one=&amp;quot;ou=helpdesk,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# partners mogen een paar attrs lezen&lt;br /&gt;
olcAccess: to attrs=hccLidNummer,hccPostcode,hccPostcodeZoekveld,hccIg&lt;br /&gt;
  by dn.one=&amp;quot;ou=partners,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# iedereen moet (pseudo attr) entry en objectClass kunnen lezen&lt;br /&gt;
olcAccess: to attrs=entry,objectClass&lt;br /&gt;
  by * read&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by * none&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_index.ldif===&lt;br /&gt;
Een kale configuratie is heel snel voor wat betreft het opnieuw vullen met gegevens. Bij het aanmaken van een verse LDAP database worden er dan ook zo min mogelijk indexen aangemaakt.&amp;lt;br&amp;gt;&lt;br /&gt;
Zodra de inhoud is ingelezen kunnen de &#039;echte&#039; indexen aangemaakt worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-index.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcDbIndex&lt;br /&gt;
olcDbIndex: default pres,eq&lt;br /&gt;
olcDbIndex: objectClass,entryUUID,entryCSN eq&lt;br /&gt;
olcDbIndex: hccLidNummer,hccLogin,hccForumLogin eq&lt;br /&gt;
olcDbIndex: uid,uidNumber,gidNumber,memberUid,member eq&lt;br /&gt;
olcDbIndex: cn,host,hccPseudoniem,hccOptin,hccLocatie eq&lt;br /&gt;
olcDbIndex: sn,hccPostcodeZoekveld,hccIg,hccRegio eq,subfinal&lt;br /&gt;
olcDbIndex: hccRol,hccBezoek eq,pres,subfinal&lt;br /&gt;
olcDbIndex: hccBulletins pres&lt;br /&gt;
olcDbIndex: aboNummer eq&lt;br /&gt;
olcDbIndex: aboPostcodeZoekveld eq,subfinal&lt;br /&gt;
olcDbIndex: mail,mailHccnet,hccKaderMail,hccKaderForward pres,eq&lt;br /&gt;
olcDbIndex: hccProfiel pres,eq&lt;br /&gt;
olcDbindex: hccKaderUniekeURL eq&lt;br /&gt;
olcDbindex: hccOnderwerp eq,subfinal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ppolicy overlay===&lt;br /&gt;
* vanuit LDAP de minimale lengte van een wachtwoord afdwingen&lt;br /&gt;
* in LDAP SSHA versleuteling activeren&amp;lt;br&amp;gt;&lt;br /&gt;
(olcPPolicyHashCleartext: TRUE)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: add-ppolicy.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: cn=module, cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectClass: olcModuleList&lt;br /&gt;
objectClass: top&lt;br /&gt;
olcModuleLoad: ppolicy&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=ppolicy,olcDatabase={1}mdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcPPolicyConfig&lt;br /&gt;
olcOverlay: ppolicy&lt;br /&gt;
olcPPolicyDefault: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
olcPPolicyUseLockout: TRUE&lt;br /&gt;
olcPPolicyHashCleartext: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The default ppolicy looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dn: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
objectClass: pwdPolicy&lt;br /&gt;
objectClass: device&lt;br /&gt;
cn: default&lt;br /&gt;
pwdCheckQuality: 1&lt;br /&gt;
pwdMinLength: 8&lt;br /&gt;
pwdAttribute: 2.5.4.35&lt;br /&gt;
pwdAllowUserChange: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Syncrepl overlay===&lt;br /&gt;
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 [http://www.openldap.org/doc/admin/ LDAP Admin Guide]. &#039;&#039;&#039;Mirror configuratie is specifiek per server!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-syncrepl.tmpl                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
replace: olcServerID&lt;br /&gt;
olcServerID: @SID@&lt;br /&gt;
&lt;br /&gt;
dn: cn=module{0},cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcModuleLoad&lt;br /&gt;
olcModuleLoad: syncprov&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcSyncProvConfig&lt;br /&gt;
olcOverlay: syncprov&lt;br /&gt;
olcSpCheckpoint: 100 5&lt;br /&gt;
olcSpSessionlog: 100&lt;br /&gt;
&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcSyncRepl&lt;br /&gt;
olcSyncRepl: rid=@RID@&lt;br /&gt;
  provider=ldap://@PROVIDER@&lt;br /&gt;
  binddn=&amp;quot;cn=admin,dc=hcc,dc=nl&amp;quot; bindmethod=simple credentials=&amp;quot;@PASSWORD@&amp;quot;&lt;br /&gt;
  searchbase=&amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
  type=refreshAndPersist&lt;br /&gt;
  interval=00:00:00:10&lt;br /&gt;
  retry=&amp;quot;5 5 300 5&amp;quot;&lt;br /&gt;
  timeout=1&lt;br /&gt;
  starttls=yes&lt;br /&gt;
-&lt;br /&gt;
add: olcMirrorMode&lt;br /&gt;
olcMirrorMode: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
De andere server krijgt ServerID 2 en de provider is het IP adres van de andere server.&lt;br /&gt;
&lt;br /&gt;
===Unique overlay===&lt;br /&gt;
Deze overlay dient er voor te zorgen dat o.a het attribuut hccLogin een unieke waarde bevat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-unique.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module,cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectclass: olcModuleList&lt;br /&gt;
objectclass: top&lt;br /&gt;
olcmoduleload: unique&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=unique,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcUniqueConfig&lt;br /&gt;
olcOverlay: unique&lt;br /&gt;
olcUniqueAttribute: uid uidNumber hccLogin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SSL/TLS beveiliging==&lt;br /&gt;
Gebruik de juiste .pem bestanden in /etc/ssl/certs en /etc/ssl/private.&lt;br /&gt;
&lt;br /&gt;
We maken gebruik van een RapidSSL certificaat. Als dit niet standaard in Ubuntu bekend is, zet dan eerst GeoTrust_RapidSSL_-_ca-bundle.pem in de map /etc/ssl/certs neer. Voer nu een &#039;&#039;&#039;c_rehash .&#039;&#039;&#039; uit in /etc/ssl/certs om de cache te updaten (omdat GeoTrust_RapidSSL_-_ca-bundle.pem nieuw werd toegevoegd). &lt;br /&gt;
&lt;br /&gt;
De ownership is belangrijk. Hiertoe wordt de groep &amp;quot;openldap&amp;quot; toegevoegd aan de groep ssl-cert.&lt;br /&gt;
 adduser openldap ssl-cert&lt;br /&gt;
&lt;br /&gt;
Als dit fout gaat, doe dan eerst:&lt;br /&gt;
 apt-get install ssl-cert&lt;br /&gt;
&lt;br /&gt;
Zet het certificaat en de private key in de juiste groep:&lt;br /&gt;
 chgrp ssl-cert /etc/ssl/private/hobby.nl.*&lt;br /&gt;
 chmod 440      /etc/ssl/private/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
Het resultaat is dan als volgt:&lt;br /&gt;
 root@hcc-ldap-lb1:~# ls -l /etc/ssl/private/hcc* &lt;br /&gt;
 -rw-r--r-- 1 root     ssl-cert 1724 Nov 22 20:47 hobby.nl.crt&lt;br /&gt;
 -r--r----- 1 root     ssl-cert 1679 Nov 22 20:25 hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
 root@hcc-ldap-lb1:~# grep openldap /etc/group&lt;br /&gt;
 ssl-cert:x:114:openldap&lt;br /&gt;
 openldap:x:118:&lt;br /&gt;
&lt;br /&gt;
2020.12.09: Op een nieuwe Ubuntu installatie staat apparmor standaard aan. Weg ermee!&lt;br /&gt;
 apt remove --assume-yes --purge apparmor&lt;br /&gt;
&amp;lt;strike&amp;gt;Per september 2017 staan de certificaten in /disk/site/etc/ssl/hobby.nl, net als op alle andere servers. Omdat apparmor actief is moet deze directory worden toegevoegd aan /etc/apparmor.d/local/usr.sbin.slapd. Die file ziet er dan als volgt uit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Site-specific additions and overrides for usr.sbin.slapd.&lt;br /&gt;
# For more details, please see /etc/apparmor.d/local/README.&lt;br /&gt;
#include &amp;lt;abstractions/ssl_certs&amp;gt;&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/ r,&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/* r,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Openldap ook op poort 636 benaderd wordt (naast TLS op 389), moet in /etc/default/slapd ldaps:/// opgenomen worden bij de SLAPD_SERVICES.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;netstat -an&#039; dient dan 636 te laten zien voor zowel IPv4 als IPv6.&lt;br /&gt;
&lt;br /&gt;
Om de cn=config te zien kan je het volgende commando gebruiken:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config&lt;br /&gt;
&lt;br /&gt;
of, wat botter maar korter:&lt;br /&gt;
cat /etc/ldap/slapd.d/cn\=config.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Backup, initialize, restore==&lt;br /&gt;
Om het hele skelet van ldap in één keer te herstellen dient &#039;&#039;&#039;init_ldap&#039;&#039;&#039; gebruikt te worden. Als argument &#039;&#039;&#039;moet&#039;&#039;&#039; het admin beheer wachtwoord mee gegeven worden.&lt;br /&gt;
&lt;br /&gt;
===lokaal===&lt;br /&gt;
Backups kunnen gemaakt worden terwijl slapd draait maar geadviseerd wordt slapd te stoppen. Voor dumpen moet &#039;&#039;&#039;slapcat&#039;&#039;&#039; gebruikt worden. Backups kunnen gemaakt worden per database of een filter daarop, naar een ldif bestand.&lt;br /&gt;
 slapcat -l hcc-dump.ldif -b &amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
Dit maakt een dump van alles onder &#039;&#039;&#039;dc=hcc,dc=nl&#039;&#039;&#039; naar het bestand hcc-dump.ldif. Ook is het mogelijk het database nummer te gebruiken, config is altijd nummer 0, hdb is gewoonlijk 1.&lt;br /&gt;
&lt;br /&gt;
Het &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; script dumpt alle ou&#039;s in aparte .ldif bestanden; het omgekeerde doet &#039;&#039;&#039;restore_ldap&#039;&#039;&#039;.  &lt;br /&gt;
Terug inlezen kan alleen in een lege directory, dus direct nadat &#039;&#039;&#039;init_ldap&#039;&#039;&#039; is gedaan. Gebruik voor het terugplaatsen &#039;&#039;&#039;slapadd&#039;&#039;&#039;. Aan te bevelen is &#039;&#039;&#039;-c&#039;&#039;&#039; mee te geven zodat ondanks fouten doorgegaan wordt. &lt;br /&gt;
&lt;br /&gt;
Voor slapadd &#039;&#039;&#039;moet&#039;&#039;&#039; 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)&lt;br /&gt;
 /etc/init.d/slapd stop&lt;br /&gt;
 slapadd -l hcc-dump.ldif -w -c &amp;gt;errors.txt&lt;br /&gt;
 chown openldap:openldap /var/lib/ldap/*&lt;br /&gt;
 /etc/init.d/slapd start&lt;br /&gt;
&lt;br /&gt;
===remote===&lt;br /&gt;
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 &#039;&#039;&#039;backup-encrypted&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Recente lokale backups zijn te vinden in &#039;&#039;&#039;/usr/local/hobbynet/tmp&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Verse ldap maken===&lt;br /&gt;
Transactie log bij het toevoegen van b.v. een nieuwe ou:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Op beide servers:&lt;br /&gt;
schema van test server gecopieerd en geactiveerd&lt;br /&gt;
dump-ldap gedraaid&lt;br /&gt;
systemctl stop slapd.service &lt;br /&gt;
&lt;br /&gt;
Er is nu géén ldap service! Werk dus snel...&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb1&lt;br /&gt;
systemctl stop slapd.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
op ldap-lb2:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb2&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
systemctl start slapd.service&lt;br /&gt;
Beide slapd servers zijn in de lucht en moeten synchroniseren.&lt;br /&gt;
&lt;br /&gt;
op beide servers:&lt;br /&gt;
check replicatie (netstat en functioneel)&lt;br /&gt;
&lt;br /&gt;
root@ldap-lb1:/usr/local/hobbynet/bin# netstat -n | grep 389&lt;br /&gt;
tcp        0      0 172.31.8.4:36838        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:36836        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58112        ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58114        ESTABLISHED&lt;br /&gt;
&lt;br /&gt;
Functioneel door met ADS op beide servers in te loggen en een willekeurig veld in je eigen entry te wijzigen op lb1. Kijk of het gebeurd is op lb2 en wijzig het daar terug. Check op de andere server of het gebeurd is. Er kan een zekere vertraging in optreden.&lt;br /&gt;
&lt;br /&gt;
Stel er is een nieuwe ou gemaakt: denk aan het bij werken van de dump en restore scripts.&lt;br /&gt;
&lt;br /&gt;
update dump-ldap.sh en restore-ldap.sh met de nieuwe ou&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
export tarieven.ldif op test server en import op ldap-lb1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==crontab==&lt;br /&gt;
 # script dat updates ophaalt (maar niet installeert), zodat nagios ze ook detecteert&lt;br /&gt;
 0 9 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
==LDAP Clients==&lt;br /&gt;
Er zijn meerdere LDAP clients. De meest populaire zijn Apache Directory Studio (&amp;quot;ADS&amp;quot;) en phpLdapAdmin (&amp;quot;PLA&amp;quot;).&amp;lt;br&amp;gt;&lt;br /&gt;
De eerste is veel uitgbreider maar vereist een Java Runtime Environment (&amp;quot;JRE&amp;quot;). Onder Windows is dat JRE(13) of (open)JDK-(13).&amp;lt;br&amp;gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Binnen Hobbynet wordt uitsluitend gebruik gemaakt van ADS.&lt;br /&gt;
&lt;br /&gt;
===StartTLS===&lt;br /&gt;
Aanbevolen wordt StartTLS op poort 389 te gebruiken. Alternatief is LDAPS op poort 636 maar dat is deprecated. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Windows===&lt;br /&gt;
&amp;lt;i&amp;gt;2019-10-31 HJV: Oude info, als referentie leuk, maar niet meer relevant&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Onder Windows moet met &#039;&#039;&#039;keytool.exe&#039;&#039;&#039; gewerkt worden. De uitleg heb ik van  [http://www.talkingtree.com/blog/index.cfm?mode=entry&amp;amp;entry=25AA75A4-45A6-2844-7CA3EECD842DB576 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:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Haal de benodigde bestanden op (op een Linux systeem):&lt;br /&gt;
wget http://www.cacert.org/certs/root.der -O root.der&lt;br /&gt;
wget http://www.cacert.org/certs/class3.der -O class3.der&lt;br /&gt;
copieer de bestanden naar de Windows omgeving in C:\Program Files (x86)\Java\jre6\lib\security.&lt;br /&gt;
&lt;br /&gt;
Open een commandwindow:&lt;br /&gt;
cd C:\Program Files (x86)\Java\jre6\lib\security&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass1 -file root.der&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass3 -file class3.der&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Linux===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS gebruik===&lt;br /&gt;
ADS kan erg handig zijn voor het snel dumpen van hele ou&#039;s in .ldif formaat. Zo&#039;n dump kan direct op een andere server worden ingelezen.&lt;br /&gt;
&lt;br /&gt;
===PhpLdapAdmin onder Linux===&lt;br /&gt;
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 [http://phpldapadmin.sourceforge.net/wiki/index.php/Server:server:tls phpldapadmin wiki].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# LDAP Defaults&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# See ldap.conf(5) for details&lt;br /&gt;
# This file should be world readable but not world writable.&lt;br /&gt;
&lt;br /&gt;
#BASE   dc=example,dc=com&lt;br /&gt;
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666&lt;br /&gt;
&lt;br /&gt;
#SIZELIMIT      12&lt;br /&gt;
#TIMELIMIT      15&lt;br /&gt;
#DEREF          never&lt;br /&gt;
TLS_CACERT      /etc/ssl/certs/CAcert_org.pem&lt;br /&gt;
TLS_CERT        /etc/ssl/private/hobby.nl.crt&lt;br /&gt;
TLS_KEY         /etc/ssl/private/hobby.nl.key&lt;br /&gt;
TLS_REQCERT     allow&lt;br /&gt;
#TLS_REQCERT never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Denk er wel aan na wijzigingen Apache te herstarten.&lt;br /&gt;
===PAM en NSS via LDAP===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Installeer &#039;&#039;&#039;libnss-ldapd&#039;&#039;&#039; om de benodigde libraries te verkrijgen. Apt-get zal tevens &#039;&#039;&#039;libpam-ldapd&#039;&#039;&#039;, &#039;&#039;&#039;nslcd&#039;&#039;&#039; en &#039;&#039;&#039;nscd&#039;&#039;&#039; binnen brengen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install libnss-ldapd auth-client-config ldap-utils&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
    libpam-ldapd nscd nslcd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Libnss-ldapd is een doorontwikkeling van libnss-ldap en bevat meerdere verbeteringen. Zie: [http://arthurdejong.org/nss-pam-ldapd/ deze site] van de ontwikkelaar. Bij de installatie wordt een user &#039;&#039;&#039;nslcd&#039;&#039;&#039; aangemaakt; denk erom die in de .tmpl bestanden te zetten!&lt;br /&gt;
  &lt;br /&gt;
nsswitch.conf laat zich configureren via &#039;&#039;&#039;auth-client-config&#039;&#039;&#039; maar lac_ldap is alleen aanwezig als &#039;&#039;&#039;ldap-auth-config&#039;&#039;&#039; ook is geinstalleerd. Zo niet gebruik dan de tweede regel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auth-client-config -t nss -p lac_ldap&lt;br /&gt;
auth-client-config -t nss -p ldap_example&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het resultaat is dat nsswitch.conf zowel in files (/etc/passwd etc.) zoekt als in ldap.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nsswitch.conf&lt;br /&gt;
#&lt;br /&gt;
# Example configuration of GNU Name Service Switch functionality.&lt;br /&gt;
# If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
# `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # passwd:         compat&lt;br /&gt;
passwd: files ldap&lt;br /&gt;
# pre_auth-client-config # group:          compat&lt;br /&gt;
group: files ldap&lt;br /&gt;
# pre_auth-client-config # shadow:         compat&lt;br /&gt;
shadow: files ldap&lt;br /&gt;
&lt;br /&gt;
hosts:          files dns&lt;br /&gt;
networks:       files&lt;br /&gt;
&lt;br /&gt;
protocols:      db files&lt;br /&gt;
services:       db files&lt;br /&gt;
ethers:         db files&lt;br /&gt;
rpc:            db files&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # netgroup:       nis&lt;br /&gt;
netgroup: nis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het aanpassen van de PAM bestanden gaat sinds enige releases met &#039;&#039;&#039;pam-auth-update&#039;&#039;&#039;. Kies in het menu voor zowel unix als ldap. Default wordt nu ldap authenticatie gebruikt voor uid &amp;gt;= 1000. Bij Hobbynet willen we vanaf 300 ldap gebruiken. Door een licht gemodificeerde versie van /usr/share/pam-configs/ldap te maken (ldap-hobbynet), kan ook voor de hobbynet instelling gekozen worden. Dit is de ldap-hobbynet versie:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Name: LDAP Authentication (uid&amp;gt;300)&lt;br /&gt;
Default: yes&lt;br /&gt;
Priority: 128&lt;br /&gt;
Auth-Type: Primary&lt;br /&gt;
Auth-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Auth:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 use_first_pass&lt;br /&gt;
Account-Type: Additional&lt;br /&gt;
Account:&lt;br /&gt;
        [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad]        pam_ldap.so minimum_uid=300&lt;br /&gt;
Password-Type: Primary&lt;br /&gt;
Password-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Password:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 try_first_pass&lt;br /&gt;
Session-Type: Additional&lt;br /&gt;
Session:&lt;br /&gt;
        [success=ok default=ignore]     pam_ldap.so minimum_uid=300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dit is in een standaard opzet van LDAP voldoende om zowel lokale gebruikers als gebruikers opgeslagen in LDAP, te laten inloggen en hun password te laten wijzigen. In de Hobbynet setup moet er echter nog meer gebeuren in de ACL&#039;s van de LDAP server configuratie. Omdat Hobbynet de laatste ACL regel heeft gewijzigd in een &#039;&#039;&#039;deny-all&#039;&#039;&#039;, is er een helper of proxy account nodig dat read access heeft of een aantal cruciale velden in de posixAccount objectClass. Zie verder de lsiting van nslcd.conf.&lt;br /&gt;
&lt;br /&gt;
Libnss-ldapd en libpam-ldapd hebben een gezamelijke daemon &#039;&#039;&#039;nslcd&#039;&#039;&#039; die z&#039;n configuratie uit &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039; haalt. Hierin is ook een voorziening voor het helper account. Aan het eind vande &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; staat de voorziening voor host-based login. Als het attribute &#039;&#039;&#039;host&#039;&#039;&#039; de fqdn of alleen de host naam bevat, bepaald dat of inloggen op die host mogelijk is. &#039;&#039;&#039;*&#039;&#039;&#039; staat inloggen op alle hosts toe.&lt;br /&gt;
&lt;br /&gt;
Eventueel kan het daemon proces voor debugging doeleinden ook als command (&#039;&#039;&#039;nslcd -d&#039;&#039;&#039;) gestart worden. Om de bevragingen van de LDAP server wat te verminderen, kan &#039;&#039;&#039;nscd&#039;&#039;&#039; voor caching zorgen. Deze cache daemon heeft zijn eigen configuratie bestand: &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039;. De default instellingen zijn goed; eventueel kan de logging naar een bestand gestuurd worden.&lt;br /&gt;
&lt;br /&gt;
Verbinding met de LDAP server kan met StartTLS beveiligd worden. Hier de inhoud van nslcd.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nslcd.conf&lt;br /&gt;
# nslcd configuration file. See nslcd.conf(5)&lt;br /&gt;
# for details.&lt;br /&gt;
&lt;br /&gt;
# The user and group nslcd should run as.&lt;br /&gt;
uid nslcd&lt;br /&gt;
gid nslcd&lt;br /&gt;
&lt;br /&gt;
# log location and level&lt;br /&gt;
#log /var/log/nslcd.log debug&lt;br /&gt;
&lt;br /&gt;
# The location at which the LDAP server(s) should be reachable.&lt;br /&gt;
uri ldap://ldap2-int.hobby.nl/&lt;br /&gt;
&lt;br /&gt;
# The search base that will be used for all queries.&lt;br /&gt;
base dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# Other base mappings&lt;br /&gt;
base   group  ou=groups,dc=hcc,dc=nl&lt;br /&gt;
base   passwd ou=users,dc=hcc,dc=nl&lt;br /&gt;
base   shadow ou=users,dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# The search scope.&lt;br /&gt;
#scope sub&lt;br /&gt;
&lt;br /&gt;
# The LDAP protocol version to use.&lt;br /&gt;
ldap_version 3&lt;br /&gt;
&lt;br /&gt;
# The DN to bind with for normal lookups.&lt;br /&gt;
#binddn cn=annonymous,dc=example,dc=net&lt;br /&gt;
#bindpw secret&lt;br /&gt;
binddn cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&lt;br /&gt;
bindpw xxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
# The DN used for password modifications by root.&lt;br /&gt;
#rootpwmoddn cn=admin,dc=example,dc=com&lt;br /&gt;
&lt;br /&gt;
# SSL options&lt;br /&gt;
ssl off&lt;br /&gt;
ssl start_tls&lt;br /&gt;
#tls_reqcert never&lt;br /&gt;
tls_cacertfile /etc/ssl/certs/cacert.org.pem&lt;br /&gt;
#tls_cert /etc/ssl/private/server.crt&lt;br /&gt;
#tls_key /etc/ssl/private/server.key&lt;br /&gt;
&lt;br /&gt;
# The minimum uid&lt;br /&gt;
nss_min_uid 300&lt;br /&gt;
&lt;br /&gt;
pam_authz_search (&amp;amp;(objectClass=posixAccount)(uid=$username)(|(host=$hostname)(host=$fqdn)(host=\\*)))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===users en groepen toevoegen===&lt;br /&gt;
Hiervoor moet &#039;&#039;&#039;ldapscripts&#039;&#039;&#039; zijn geïnstalleerd. Dit is het geval op de ldap-lb1 server. Dat levert de volgende extra commando&#039;s op:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldaprenamemachine&lt;br /&gt;
ldapadduser&lt;br /&gt;
ldapdeleteuserfromgroup&lt;br /&gt;
ldapfinger&lt;br /&gt;
ldapid&lt;br /&gt;
ldapgid&lt;br /&gt;
ldapmodifyuser&lt;br /&gt;
ldaprenameuser&lt;br /&gt;
lsldap&lt;br /&gt;
ldapaddusertogroup&lt;br /&gt;
ldapsetpasswd&lt;br /&gt;
ldapinit&lt;br /&gt;
ldapaddgroup&lt;br /&gt;
ldapdeletegroup&lt;br /&gt;
ldapmodifygroup&lt;br /&gt;
ldapdeletemachine&lt;br /&gt;
ldaprenamegroup&lt;br /&gt;
ldapaddmachine&lt;br /&gt;
ldapmodifymachine&lt;br /&gt;
ldapsetprimarygroup&lt;br /&gt;
ldapdeleteuser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Meest gebruikt zijn &#039;&#039;&#039;ldapaddgroup, ldapadduser, ldapsetpasswd&#039;&#039;&#039;.  &lt;br /&gt;
Er zijn manpages maar er is ook uitgebreide uitleg in de [https://help.ubuntu.com/14.04/serverguide/openldap-server.html Ubuntu server guide]. Omdat wij het automatisch maken van de home dir uit hebben staan, moet die met de hand aangemaakt worden en moet de owner goed gezet worden.&lt;br /&gt;
&lt;br /&gt;
===host-based login===&lt;br /&gt;
Met een kleine uitbreiding in het schema van de LDAP server, kan host-based login gerealiseerd worden. Ook in de &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; is een uitbreiding nodig.&lt;br /&gt;
&lt;br /&gt;
In de LDAP server dient de objectClass &#039;&#039;&#039;hostObject&#039;&#039;&#039; aan de entries in de ou=users toegevoegd te worden. Deze (auxilary) objectClass brengt slechts één attribute met zich mee: &#039;&#039;&#039;host&#039;&#039;&#039;. De regel in nslcd.conf checkt of één van de waarden van &#039;&#039;&#039;host&#039;&#039;&#039; gelijk is aan de naam van de server waarop ingelogd wordt. De waarde &#039;&#039;&#039;*&#039;&#039;&#039; geldt als wildcard. Zie de regel &#039;&#039;&lt;br /&gt;
&#039;pam_authz_search&#039;&#039;&#039;&#039; in &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Password aanpassen===&lt;br /&gt;
Via LDAP ingelogde gebruikers kunnen net als lokale gebruikers hun wachtwoord met &#039;&#039;&#039;passwd&#039;&#039;&#039; wijzigen. Wel moet aan de eisen in de LDAP ppolicy module voldaan worden.&lt;br /&gt;
&lt;br /&gt;
==PHP scripting==&lt;br /&gt;
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 &#039;&#039;&#039;/usr/local/hobbynet/bin&#039;&#039;&#039; directory.&lt;br /&gt;
Voor de php-scripting zijn enkele php7.x pakketten nodig. Installeer deze met apt-get. Het gaat om:&lt;br /&gt;
* php-cli&lt;br /&gt;
* php-ldap&lt;br /&gt;
&lt;br /&gt;
== Apache authenticatie via LDAP ==&lt;br /&gt;
In plaats van .htpassword authenticatie, kan ook LDAP gebruikt worden. Activeer daartoe de Apache module&lt;br /&gt;
&#039;authnz_ldap&#039;.&lt;br /&gt;
 a2enmod authnz_ldap&lt;br /&gt;
Denk er om dat dit in een loadbalanced situatie op beide servers gedaan dient te worden!&lt;br /&gt;
&lt;br /&gt;
=== Voorbeeld van een LDAP configuratie in de Apache config ===&lt;br /&gt;
(alleen als voorbeeld, niet zo gebruiken!)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# // 1) Hobbynet webmaster&lt;br /&gt;
# // 2) Vraagbaak medewerker van een willekeurige groepering&lt;br /&gt;
# (|(hccRol=*#VRBK)(hccRol=HN#WM))&lt;br /&gt;
  &amp;lt;Location &amp;quot;/apps/vraagbaak&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;RequireAll&amp;gt;&lt;br /&gt;
      Authname &amp;quot;HCC!vraagbaak (gebruik uw hcc.nl gebruikersnaam/wachtwoord)&amp;quot;&lt;br /&gt;
      AuthType Basic&lt;br /&gt;
      AuthBasicProvider ldap&lt;br /&gt;
      AuthLDAPUrl ldap://hcc-ldap-int.hobby.nl/ou=leden,dc=hcc,dc=nl?hccLogin??(|(hccRol=*#VRBK)(hccRol=HN#WM))(hccProfiel=TRUE) TLS&lt;br /&gt;
      require valid-user&lt;br /&gt;
    &amp;lt;/RequireAll&amp;gt;&lt;br /&gt;
  &amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hoe kan LDAP veilig gebruikt worden vanuit Apache===&lt;br /&gt;
Zet een script neer in de gebruikersomgeving, en gebruik mod_authz_external. Doe de controle vervolgens via de XML-RPC server.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zie [[Kadernet]] voor een voorbeeld.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== TODO lijst ==&lt;br /&gt;
&#039;&#039;Dit is een lijst in wording, graag aanvullen&#039;&#039; &lt;br /&gt;
* &#039;dun&#039; loadbalancer script maken om te controleren dat LDAP echt luistert&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79066</id>
		<title>LDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79066"/>
		<updated>2020-12-10T21:38:08Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* modify_index.ldif */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introductie==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==LDAP server keuze==&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Loadbalanced==&lt;br /&gt;
Er zijn twee servers (ldap-lb1 en ldap-lb2) die achter een loadbalancer in preferred server mode staan 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.&lt;br /&gt;
&lt;br /&gt;
Tevens zijn er een test en een development server: ldap-test en ldap-dev.&lt;br /&gt;
&lt;br /&gt;
==Installatie==&lt;br /&gt;
Installatie van OpenLDAP is simpel:&lt;br /&gt;
 aptitude install slapd ldap-utils&lt;br /&gt;
Omdat er gebruikgemaakt wordt van php scripts, is het ook nodig &#039;&#039;&#039;php-cli&#039;&#039;&#039; en &#039;&#039;&#039;php-ldap&#039;&#039;&#039; te installeren. De configuratie van OpenLDAP is sinds Karmic Koala iets gecompliceerder geworden. &#039;cn=config&#039; 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 &amp;quot;dpkg-reconfigure slapd&amp;quot; zet alleen de skeleton configuratie terug. Je moet zelf de database, root dn en acl&#039;s opzetten (als root of met sudo). Run  &#039;&#039;&#039;dpkg-reconfigure slapd&#039;&#039;&#039; om terug te gaan naar een lege directory. &lt;br /&gt;
&lt;br /&gt;
De volgende pakketten dienen geïnstalleerd te zijn (&#039;php -m&#039; toont de geactiveerde modules):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontbrekende pakketten volgens hjv:&lt;br /&gt;
&lt;br /&gt;
apt-get install aptitude &lt;br /&gt;
apt-get install phpmyadmin&lt;br /&gt;
apt-get install php-mbstring&lt;br /&gt;
apt-get install php-gettext&lt;br /&gt;
apt-get install php-xmlrpc&lt;br /&gt;
apt-get install php-ldap&lt;br /&gt;
apt-get install mysql-server&lt;br /&gt;
apt-get install ldapscripts&lt;br /&gt;
apt-get install php-xml&lt;br /&gt;
apt-get install slapd&lt;br /&gt;
apt-get install ldap-utils&lt;br /&gt;
a2enmod ssl&lt;br /&gt;
&lt;br /&gt;
- apache2ctl restart&lt;br /&gt;
&lt;br /&gt;
- openldap moet lid zijn van de groep ssl-cert!&lt;br /&gt;
apt-get install ssl-cert&lt;br /&gt;
adduser openldap ssl-cert&lt;br /&gt;
(of vi /etc/group&lt;br /&gt;
    ssl-cert:x:116:openldap)&lt;br /&gt;
&lt;br /&gt;
- Zorg dat de LDAP daemon bij de certificaten kan komen. &lt;br /&gt;
LET OP: op alle hobbynet servers staan de certificaten in /disk/site/etc/ssl/hobby.nl/&lt;br /&gt;
 chgrp ssl-cert /disk/site/etc/ssl/hobby.nl/hobby.nl.*&lt;br /&gt;
 chmod 440      /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
- mysql laat het bestand ibdata1 ongelimiteerd groeien (InnoDB bestanden)&lt;br /&gt;
 /etc/mysql/mysql.conf.d/innodb_file_per_table.cnf&lt;br /&gt;
 [mysql]&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
&lt;br /&gt;
=============&lt;br /&gt;
Nog meer Hobbynet aanpassingen&lt;br /&gt;
/etc/bash.bashrc&lt;br /&gt;
export http_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export https_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export ftp_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Locatie bestanden===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Alle ldif em tmpl bestanden gaan naar /usr/local/hobbynet/lib&lt;br /&gt;
* init_ldap en andere scripts gaan naar /usr/local/hobbynet/bin&lt;br /&gt;
* alle data bestanden (dumps) en update ldifs gaan naar /usr/local/hobbynet/data&lt;br /&gt;
* etc/ldap/schema/hcc_schema.* gaan naar /etc/ldap/schema&lt;br /&gt;
* etc/ldap/schema/ppolicy.ldif gaat naar /etc/ldap/schema&lt;br /&gt;
&lt;br /&gt;
hcc_schema.ldif wordt middels een script gemaakt. Dit script plaatst de ldif bestand(en) in /etc/ldap/schema. Zie hieronder.&lt;br /&gt;
&lt;br /&gt;
==Initiële database==&lt;br /&gt;
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.sh &amp;lt;admin-pw&amp;gt; gebruikt dan wordt een werkende directory gemaakt met alle statische data (in diverse ou&#039;s) erin. Gebruik na het maken van de initiële database restore_ldap.sh om de database te vullen met de data uit de data directory.&lt;br /&gt;
&lt;br /&gt;
===slapd.init.ldif ===&lt;br /&gt;
Bij installatie en reconfiguratie wordt /usr/share/slapd/slapd.init.ldif ingelezen. Zie aldaar indien nodig.&lt;br /&gt;
&lt;br /&gt;
==init_ldap script==&lt;br /&gt;
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 &#039;&#039;&#039;cn=admin,dc=hcc,dc=nl&#039;&#039;&#039; 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 &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; laadt vervolgens de laatste dump terug. Bij wijzigingen aan het schema is het raadzaam altijd een &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; te doen zodat een later een actuele dump kan worden teruggeladen.&lt;br /&gt;
&lt;br /&gt;
Het (plain text) password van cn=admin,dc=hcc,dc=nl moet bij het aanroepen van &#039;&#039;&#039;init_ldap&#039;&#039;&#039; op de commandline worden meegegeven. Tijdens de dpkg-reconfigure moet het password nog 2x gegeven worden. Lees eventueel ook de [http://www.openldap.org/doc/admin/ OpenLDAP Admin Guide].&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* voorbereidingen om &amp;quot;dpkg-reconfigure slapd&amp;quot; te draaien&lt;br /&gt;
* definities van input files&lt;br /&gt;
* check host&lt;br /&gt;
* bouwen van het skelet van de nieuwe directory&lt;br /&gt;
Zie voor details van de scripts &#039;&#039;&#039;init_ldap&#039;&#039;&#039;, &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; en &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; op een van de servers (in /usr/local/hobbynet/bin).&lt;br /&gt;
&lt;br /&gt;
==onderdelen van init_ldap==&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===add-schema.ldif===&lt;br /&gt;
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. &lt;br /&gt;
* Hiertoe wordt het onderstaande schema in /etc/ldap/schema geplaatst als hcc_schema.schema. &lt;br /&gt;
* Vervolgens worden de stappen uitgevoerd zoals beschreven in de [https://help.ubuntu.com/11.10/serverguide/C/openldap-server.html Ubuntu Server guide], onder &#039;&#039;&#039;Modifying the slapd Configuration Database&#039;&#039;&#039;. &lt;br /&gt;
* De resulterende output file &#039;&#039;&#039;cn=hcc_schema.ldif&#039;&#039;&#039; moet dan nog naar /etc/ldap/schema/hcc_schema.ldif gecopieerd worden. &lt;br /&gt;
Als dit proces herhaald moet worden, start dan met een lege output directory en verwijder een eventueel achtergebleven cn=hcc_schema.ldif bestand. &lt;br /&gt;
&lt;br /&gt;
De extra schema&#039;s worden middels een &#039;&#039;&#039;include&#039;&#039;&#039; toegevoegd. &#039;&#039;&#039;Ppolicy&#039;&#039;&#039; is op gelijke wijze als &#039;&#039;&#039;hcc_schema&#039;&#039;&#039; tot .ldif geconverteerd. Alle stappen om een nieuwe &#039;&#039;&#039;hcc-schema.ldif&#039;&#039;&#039; te maken zijn gescript in &#039;&#039;&#039;upd_schema&#039;&#039;&#039;. In &#039;&#039;&#039;init_ldap&#039;&#039;&#039; wordt het eigen schema en de password policy geladen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: add-schema.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
include: file:///etc/ldap/schema/hcc_schema.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ppolicy.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ldapns.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====schema updates====&lt;br /&gt;
Soms wordt een attribute toegevoegd of gewijzigd. Hiertoe dient het bestand hcc_schema.schema in /usr/local/hobbynet/etc/ldap/schema, gewijzigd te worden. Daarna dient er een ldif versie van gemaakt te worden. Gebruik hiervoor &#039;&#039;&#039;upd_schema.sh&#039;&#039;&#039; in dezelfde directory. De resulterende hcc_schema.ldif wordt in dit script naar /etc/ldap/schema gecopieërd. Bij grote wijzigingen is het aan te bevelen door de hele rebuild cycle te gaan (dump, init, restore). Bij triviale aanpassingen zou hcc_schema.ldif ook &#039;&#039;&#039;direct&#039;&#039;&#039; in de actieve directory geplaatst kunnen worden, gevolgd door slechts een &#039;&#039;&#039;service slapd restart&#039;&#039;&#039;. Gebruik hiervoor (blijf in de lokale schema directory):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp &amp;quot;ldif_output/cn=config/cn=schema/cn={14}hcc_schema.ldif&amp;quot; &amp;quot;/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}hcc_schema.ldif&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
LET OP: De nummers tussen accolades zijn bepaald door de volgorde van andere scripts! Zolang geen andere schema&#039;s worden toegevoegd zullen ze niet veranderen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ook kan met de ldap-tools gewerkt worden. Gebruik ldapsearch en ldapmodify, eventueel met de -f optie om een voorbereide serie opdrachten uit te voeren. Gebruik ldapsearch om eerst de structuur te vinden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier een voorbeeld om een objectClass aan te passen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat pas_aan.ldif&lt;br /&gt;
dn: cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
delete: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description ) )&lt;br /&gt;
-&lt;br /&gt;
add: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description $ hccIg ) )&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
$sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f pas_aan.ldif &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_config.ldif===&lt;br /&gt;
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 &#039;&#039;&#039;STATS&#039;&#039;&#039; gezet. Dit geeft niet teveel logging maar is toch goed bruikbaar. Om extra logging te krijgen op b.v. ACL&#039;s, verander olcLogLevel dan in &amp;quot;stats ACL&amp;quot;.  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-config.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcTLSCACertificateFile&lt;br /&gt;
olcTLSCACertificateFile: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
-&lt;br /&gt;
add: olcTLSCertificateFile&lt;br /&gt;
olcTLSCertificateFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
-&lt;br /&gt;
add: olcTLSCertificateKeyFile&lt;br /&gt;
olcTLSCertificateKeyFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
-&lt;br /&gt;
add: olcPasswordHash&lt;br /&gt;
olcPasswordHash: {CRYPT}&lt;br /&gt;
-&lt;br /&gt;
add: olcPasswordCryptSaltFormat&lt;br /&gt;
olcPasswordCryptSaltFormat: $6$%.16s&lt;br /&gt;
-&lt;br /&gt;
replace: olcLogLevel&lt;br /&gt;
olcLogLevel: stats&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Om de logging in een apart bestand te krijgen moet in /etc/rsyslog.d een extra bestand &#039;&#039;&#039;openldap.conf&#039;&#039;&#039; geplaatst worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local4.*   -/var/log/openldap.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Tevens willen we logrotate op dit bestand. Plaats in /etc/logrotate.d het bestand &#039;&#039;&#039;openldap&#039;&#039;&#039; met de volgende inhoud&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/log/openldap.log&lt;br /&gt;
{&lt;br /&gt;
        rotate 4&lt;br /&gt;
        weekly&lt;br /&gt;
        missingok&lt;br /&gt;
        notifempty&lt;br /&gt;
        compress&lt;br /&gt;
        delaycompress&lt;br /&gt;
        sharedscripts&lt;br /&gt;
        postrotate&lt;br /&gt;
                reload rsyslog &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 || true&lt;br /&gt;
        endscript&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify-mdb.ldif===&lt;br /&gt;
Hier worden de wijzigingen op de backend db gemaakt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-mdb.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
# hjv 2020.06.07 (oldSizeLimit toegevoegd)&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcDbCheckpoint&lt;br /&gt;
olcDbCheckpoint: 4096 1&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbNoSync&lt;br /&gt;
olcDbNoSync: TRUE&lt;br /&gt;
-&lt;br /&gt;
replace: olcSizeLimit&lt;br /&gt;
olcSizeLimit: 100000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===modify-acl===&lt;br /&gt;
Hier worden de rechten bepaald van de diverse rollen en groepen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-acl.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcAccess&lt;br /&gt;
# hobbynetlogin heeft lees rechten t.b.v. MySecureShell aanloggen&lt;br /&gt;
olcAccess: to attrs=@posixAccount,@posixGroup,@shadowAccount,@hostObject&lt;br /&gt;
  by dn=&amp;quot;cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to attrs=@posixAccount&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# sta anonymous search toe (t.b.v. Apache authenticatie)&lt;br /&gt;
olcAccess: to attrs=hccLogin,hccRol,hccProfiel,entry&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# olcAccess: to attrs=hccOptIn&lt;br /&gt;
#   by self write&lt;br /&gt;
#   by dn=&amp;quot;cn=drupal-hcc-nl,ou=klanten,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
#   by * break&lt;br /&gt;
#&lt;br /&gt;
# Anonieme klanten moeten kunnen inloggen&lt;br /&gt;
# en mogen hun eigen password wijzigen&lt;br /&gt;
olcAccess: to attrs=userPassword,shadowLastChange&lt;br /&gt;
  by self write&lt;br /&gt;
  by anonymous auth&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# Gebruiker mag zijn kader email wachtwoord aanpassen&lt;br /&gt;
olcAccess: to attrs=hccKaderPassword,hccKaderForward&lt;br /&gt;
  by self write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# beheerders hebben schrijfrechten op alles (updateDN)&lt;br /&gt;
# klanten hebben alleen lees rechten op alles (readDN)&lt;br /&gt;
# self mag lezen&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by self read&lt;br /&gt;
  by dn=&amp;quot;cn=xml-hoge-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn=&amp;quot;cn=xml-lage-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by dn.one=&amp;quot;ou=beheer,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn.one=&amp;quot;ou=klanten,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# PC30 helpdesk heeft leesrechten op ou=leden&lt;br /&gt;
olcAccess: to attrs=@hccOrgPerson,@hccKaderFunctie&lt;br /&gt;
  by dn.one=&amp;quot;ou=helpdesk,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# partners mogen een paar attrs lezen&lt;br /&gt;
olcAccess: to attrs=hccLidNummer,hccPostcode,hccPostcodeZoekveld,hccIg&lt;br /&gt;
  by dn.one=&amp;quot;ou=partners,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# iedereen moet (pseudo attr) entry en objectClass kunnen lezen&lt;br /&gt;
olcAccess: to attrs=entry,objectClass&lt;br /&gt;
  by * read&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by * none&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_index.ldif===&lt;br /&gt;
Een kale configuratie is heel snel voor wat betreft het opnieuw vullen met gegevens. Bij het aanmaken van een verse LDAP database worden er dan ook zo min mogelijk indexen aangemaakt.&amp;lt;br&amp;gt;&lt;br /&gt;
Zodra de inhoud is ingelezen kunnen de &#039;echte&#039; indexen aangemaakt worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-index.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcDbIndex&lt;br /&gt;
olcDbIndex: default pres,eq&lt;br /&gt;
olcDbIndex: objectClass,entryUUID,entryCSN eq&lt;br /&gt;
olcDbIndex: hccLidNummer,hccLogin,hccForumLogin eq&lt;br /&gt;
olcDbIndex: uid,uidNumber,gidNumber,memberUid,member eq&lt;br /&gt;
olcDbIndex: cn,host,hccPseudoniem,hccOptin,hccLocatie eq&lt;br /&gt;
olcDbIndex: sn,hccPostcodeZoekveld,hccIg,hccRegio eq,subfinal&lt;br /&gt;
olcDbIndex: hccRol,hccBezoek eq,pres,subfinal&lt;br /&gt;
olcDbIndex: hccBulletins pres&lt;br /&gt;
olcDbIndex: aboNummer eq&lt;br /&gt;
olcDbIndex: aboPostcodeZoekveld eq,subfinal&lt;br /&gt;
olcDbIndex: mail,mailHccnet,hccKaderMail,hccKaderForward pres,eq&lt;br /&gt;
olcDbIndex: hccProfiel pres,eq&lt;br /&gt;
olcDbindex: hccKaderUniekeURL eq&lt;br /&gt;
olcDbindex: hccOnderwerp eq,subfinal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ppolicy overlay===&lt;br /&gt;
* vanuit LDAP de minimale lengte van een wachtwoord afdwingen&lt;br /&gt;
* in LDAP SSHA versleuteling activeren&amp;lt;br&amp;gt;&lt;br /&gt;
(olcPPolicyHashCleartext: TRUE)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-ppolicy.ldif                  ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module, cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectClass: olcModuleList&lt;br /&gt;
objectClass: top&lt;br /&gt;
olcModuleLoad: ppolicy&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=ppolicy,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcPPolicyConfig&lt;br /&gt;
olcOverlay: ppolicy&lt;br /&gt;
olcPPolicyDefault: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
olcPPolicyUseLockout: TRUE&lt;br /&gt;
olcPPolicyHashCleartext: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The default ppolicy looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dn: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
objectClass: pwdPolicy&lt;br /&gt;
objectClass: device&lt;br /&gt;
cn: default&lt;br /&gt;
pwdCheckQuality: 1&lt;br /&gt;
pwdMinLength: 8&lt;br /&gt;
pwdAttribute: 2.5.4.35&lt;br /&gt;
pwdAllowUserChange: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Syncrepl overlay===&lt;br /&gt;
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 [http://www.openldap.org/doc/admin/ LDAP Admin Guide]. &#039;&#039;&#039;Mirror configuratie is specifiek per server!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-syncrepl.tmpl                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
replace: olcServerID&lt;br /&gt;
olcServerID: @SID@&lt;br /&gt;
&lt;br /&gt;
dn: cn=module{0},cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcModuleLoad&lt;br /&gt;
olcModuleLoad: syncprov&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcSyncProvConfig&lt;br /&gt;
olcOverlay: syncprov&lt;br /&gt;
olcSpCheckpoint: 100 5&lt;br /&gt;
olcSpSessionlog: 100&lt;br /&gt;
&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcSyncRepl&lt;br /&gt;
olcSyncRepl: rid=@RID@&lt;br /&gt;
  provider=ldap://@PROVIDER@&lt;br /&gt;
  binddn=&amp;quot;cn=admin,dc=hcc,dc=nl&amp;quot; bindmethod=simple credentials=&amp;quot;@PASSWORD@&amp;quot;&lt;br /&gt;
  searchbase=&amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
  type=refreshAndPersist&lt;br /&gt;
  interval=00:00:00:10&lt;br /&gt;
  retry=&amp;quot;5 5 300 5&amp;quot;&lt;br /&gt;
  timeout=1&lt;br /&gt;
  starttls=yes&lt;br /&gt;
-&lt;br /&gt;
add: olcMirrorMode&lt;br /&gt;
olcMirrorMode: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
De andere server krijgt ServerID 2 en de provider is het IP adres van de andere server.&lt;br /&gt;
&lt;br /&gt;
===Unique overlay===&lt;br /&gt;
Deze overlay dient er voor te zorgen dat o.a het attribuut hccLogin een unieke waarde bevat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-unique.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module,cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectclass: olcModuleList&lt;br /&gt;
objectclass: top&lt;br /&gt;
olcmoduleload: unique&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=unique,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcUniqueConfig&lt;br /&gt;
olcOverlay: unique&lt;br /&gt;
olcUniqueAttribute: uid uidNumber hccLogin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SSL/TLS beveiliging==&lt;br /&gt;
Gebruik de juiste .pem bestanden in /etc/ssl/certs en /etc/ssl/private.&lt;br /&gt;
&lt;br /&gt;
We maken gebruik van een RapidSSL certificaat. Als dit niet standaard in Ubuntu bekend is, zet dan eerst GeoTrust_RapidSSL_-_ca-bundle.pem in de map /etc/ssl/certs neer. Voer nu een &#039;&#039;&#039;c_rehash .&#039;&#039;&#039; uit in /etc/ssl/certs om de cache te updaten (omdat GeoTrust_RapidSSL_-_ca-bundle.pem nieuw werd toegevoegd). &lt;br /&gt;
&lt;br /&gt;
De ownership is belangrijk. Hiertoe wordt de groep &amp;quot;openldap&amp;quot; toegevoegd aan de groep ssl-cert.&lt;br /&gt;
 adduser openldap ssl-cert&lt;br /&gt;
&lt;br /&gt;
Als dit fout gaat, doe dan eerst:&lt;br /&gt;
 apt-get install ssl-cert&lt;br /&gt;
&lt;br /&gt;
Zet het certificaat en de private key in de juiste groep:&lt;br /&gt;
 chgrp ssl-cert /etc/ssl/private/hobby.nl.*&lt;br /&gt;
 chmod 440      /etc/ssl/private/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
Het resultaat is dan als volgt:&lt;br /&gt;
 root@hcc-ldap-lb1:~# ls -l /etc/ssl/private/hcc* &lt;br /&gt;
 -rw-r--r-- 1 root     ssl-cert 1724 Nov 22 20:47 hobby.nl.crt&lt;br /&gt;
 -r--r----- 1 root     ssl-cert 1679 Nov 22 20:25 hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
 root@hcc-ldap-lb1:~# grep openldap /etc/group&lt;br /&gt;
 ssl-cert:x:114:openldap&lt;br /&gt;
 openldap:x:118:&lt;br /&gt;
&lt;br /&gt;
2020.12.09: Op een nieuwe Ubuntu installatie staat apparmor standaard aan. Weg ermee!&lt;br /&gt;
 apt remove --assume-yes --purge apparmor&lt;br /&gt;
&amp;lt;strike&amp;gt;Per september 2017 staan de certificaten in /disk/site/etc/ssl/hobby.nl, net als op alle andere servers. Omdat apparmor actief is moet deze directory worden toegevoegd aan /etc/apparmor.d/local/usr.sbin.slapd. Die file ziet er dan als volgt uit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Site-specific additions and overrides for usr.sbin.slapd.&lt;br /&gt;
# For more details, please see /etc/apparmor.d/local/README.&lt;br /&gt;
#include &amp;lt;abstractions/ssl_certs&amp;gt;&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/ r,&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/* r,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Openldap ook op poort 636 benaderd wordt (naast TLS op 389), moet in /etc/default/slapd ldaps:/// opgenomen worden bij de SLAPD_SERVICES.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;netstat -an&#039; dient dan 636 te laten zien voor zowel IPv4 als IPv6.&lt;br /&gt;
&lt;br /&gt;
Om de cn=config te zien kan je het volgende commando gebruiken:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config&lt;br /&gt;
&lt;br /&gt;
of, wat botter maar korter:&lt;br /&gt;
cat /etc/ldap/slapd.d/cn\=config.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Backup, initialize, restore==&lt;br /&gt;
Om het hele skelet van ldap in één keer te herstellen dient &#039;&#039;&#039;init_ldap&#039;&#039;&#039; gebruikt te worden. Als argument &#039;&#039;&#039;moet&#039;&#039;&#039; het admin beheer wachtwoord mee gegeven worden.&lt;br /&gt;
&lt;br /&gt;
===lokaal===&lt;br /&gt;
Backups kunnen gemaakt worden terwijl slapd draait maar geadviseerd wordt slapd te stoppen. Voor dumpen moet &#039;&#039;&#039;slapcat&#039;&#039;&#039; gebruikt worden. Backups kunnen gemaakt worden per database of een filter daarop, naar een ldif bestand.&lt;br /&gt;
 slapcat -l hcc-dump.ldif -b &amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
Dit maakt een dump van alles onder &#039;&#039;&#039;dc=hcc,dc=nl&#039;&#039;&#039; naar het bestand hcc-dump.ldif. Ook is het mogelijk het database nummer te gebruiken, config is altijd nummer 0, hdb is gewoonlijk 1.&lt;br /&gt;
&lt;br /&gt;
Het &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; script dumpt alle ou&#039;s in aparte .ldif bestanden; het omgekeerde doet &#039;&#039;&#039;restore_ldap&#039;&#039;&#039;.  &lt;br /&gt;
Terug inlezen kan alleen in een lege directory, dus direct nadat &#039;&#039;&#039;init_ldap&#039;&#039;&#039; is gedaan. Gebruik voor het terugplaatsen &#039;&#039;&#039;slapadd&#039;&#039;&#039;. Aan te bevelen is &#039;&#039;&#039;-c&#039;&#039;&#039; mee te geven zodat ondanks fouten doorgegaan wordt. &lt;br /&gt;
&lt;br /&gt;
Voor slapadd &#039;&#039;&#039;moet&#039;&#039;&#039; 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)&lt;br /&gt;
 /etc/init.d/slapd stop&lt;br /&gt;
 slapadd -l hcc-dump.ldif -w -c &amp;gt;errors.txt&lt;br /&gt;
 chown openldap:openldap /var/lib/ldap/*&lt;br /&gt;
 /etc/init.d/slapd start&lt;br /&gt;
&lt;br /&gt;
===remote===&lt;br /&gt;
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 &#039;&#039;&#039;backup-encrypted&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Recente lokale backups zijn te vinden in &#039;&#039;&#039;/usr/local/hobbynet/tmp&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Verse ldap maken===&lt;br /&gt;
Transactie log bij het toevoegen van b.v. een nieuwe ou:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Op beide servers:&lt;br /&gt;
schema van test server gecopieerd en geactiveerd&lt;br /&gt;
dump-ldap gedraaid&lt;br /&gt;
systemctl stop slapd.service &lt;br /&gt;
&lt;br /&gt;
Er is nu géén ldap service! Werk dus snel...&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb1&lt;br /&gt;
systemctl stop slapd.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
op ldap-lb2:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb2&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
systemctl start slapd.service&lt;br /&gt;
Beide slapd servers zijn in de lucht en moeten synchroniseren.&lt;br /&gt;
&lt;br /&gt;
op beide servers:&lt;br /&gt;
check replicatie (netstat en functioneel)&lt;br /&gt;
&lt;br /&gt;
root@ldap-lb1:/usr/local/hobbynet/bin# netstat -n | grep 389&lt;br /&gt;
tcp        0      0 172.31.8.4:36838        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:36836        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58112        ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58114        ESTABLISHED&lt;br /&gt;
&lt;br /&gt;
Functioneel door met ADS op beide servers in te loggen en een willekeurig veld in je eigen entry te wijzigen op lb1. Kijk of het gebeurd is op lb2 en wijzig het daar terug. Check op de andere server of het gebeurd is. Er kan een zekere vertraging in optreden.&lt;br /&gt;
&lt;br /&gt;
Stel er is een nieuwe ou gemaakt: denk aan het bij werken van de dump en restore scripts.&lt;br /&gt;
&lt;br /&gt;
update dump-ldap.sh en restore-ldap.sh met de nieuwe ou&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
export tarieven.ldif op test server en import op ldap-lb1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==crontab==&lt;br /&gt;
 # script dat updates ophaalt (maar niet installeert), zodat nagios ze ook detecteert&lt;br /&gt;
 0 9 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
==LDAP Clients==&lt;br /&gt;
Er zijn meerdere LDAP clients. De meest populaire zijn Apache Directory Studio (&amp;quot;ADS&amp;quot;) en phpLdapAdmin (&amp;quot;PLA&amp;quot;).&amp;lt;br&amp;gt;&lt;br /&gt;
De eerste is veel uitgbreider maar vereist een Java Runtime Environment (&amp;quot;JRE&amp;quot;). Onder Windows is dat JRE(13) of (open)JDK-(13).&amp;lt;br&amp;gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Binnen Hobbynet wordt uitsluitend gebruik gemaakt van ADS.&lt;br /&gt;
&lt;br /&gt;
===StartTLS===&lt;br /&gt;
Aanbevolen wordt StartTLS op poort 389 te gebruiken. Alternatief is LDAPS op poort 636 maar dat is deprecated. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Windows===&lt;br /&gt;
&amp;lt;i&amp;gt;2019-10-31 HJV: Oude info, als referentie leuk, maar niet meer relevant&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Onder Windows moet met &#039;&#039;&#039;keytool.exe&#039;&#039;&#039; gewerkt worden. De uitleg heb ik van  [http://www.talkingtree.com/blog/index.cfm?mode=entry&amp;amp;entry=25AA75A4-45A6-2844-7CA3EECD842DB576 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:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Haal de benodigde bestanden op (op een Linux systeem):&lt;br /&gt;
wget http://www.cacert.org/certs/root.der -O root.der&lt;br /&gt;
wget http://www.cacert.org/certs/class3.der -O class3.der&lt;br /&gt;
copieer de bestanden naar de Windows omgeving in C:\Program Files (x86)\Java\jre6\lib\security.&lt;br /&gt;
&lt;br /&gt;
Open een commandwindow:&lt;br /&gt;
cd C:\Program Files (x86)\Java\jre6\lib\security&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass1 -file root.der&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass3 -file class3.der&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Linux===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS gebruik===&lt;br /&gt;
ADS kan erg handig zijn voor het snel dumpen van hele ou&#039;s in .ldif formaat. Zo&#039;n dump kan direct op een andere server worden ingelezen.&lt;br /&gt;
&lt;br /&gt;
===PhpLdapAdmin onder Linux===&lt;br /&gt;
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 [http://phpldapadmin.sourceforge.net/wiki/index.php/Server:server:tls phpldapadmin wiki].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# LDAP Defaults&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# See ldap.conf(5) for details&lt;br /&gt;
# This file should be world readable but not world writable.&lt;br /&gt;
&lt;br /&gt;
#BASE   dc=example,dc=com&lt;br /&gt;
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666&lt;br /&gt;
&lt;br /&gt;
#SIZELIMIT      12&lt;br /&gt;
#TIMELIMIT      15&lt;br /&gt;
#DEREF          never&lt;br /&gt;
TLS_CACERT      /etc/ssl/certs/CAcert_org.pem&lt;br /&gt;
TLS_CERT        /etc/ssl/private/hobby.nl.crt&lt;br /&gt;
TLS_KEY         /etc/ssl/private/hobby.nl.key&lt;br /&gt;
TLS_REQCERT     allow&lt;br /&gt;
#TLS_REQCERT never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Denk er wel aan na wijzigingen Apache te herstarten.&lt;br /&gt;
===PAM en NSS via LDAP===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Installeer &#039;&#039;&#039;libnss-ldapd&#039;&#039;&#039; om de benodigde libraries te verkrijgen. Apt-get zal tevens &#039;&#039;&#039;libpam-ldapd&#039;&#039;&#039;, &#039;&#039;&#039;nslcd&#039;&#039;&#039; en &#039;&#039;&#039;nscd&#039;&#039;&#039; binnen brengen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install libnss-ldapd auth-client-config ldap-utils&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
    libpam-ldapd nscd nslcd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Libnss-ldapd is een doorontwikkeling van libnss-ldap en bevat meerdere verbeteringen. Zie: [http://arthurdejong.org/nss-pam-ldapd/ deze site] van de ontwikkelaar. Bij de installatie wordt een user &#039;&#039;&#039;nslcd&#039;&#039;&#039; aangemaakt; denk erom die in de .tmpl bestanden te zetten!&lt;br /&gt;
  &lt;br /&gt;
nsswitch.conf laat zich configureren via &#039;&#039;&#039;auth-client-config&#039;&#039;&#039; maar lac_ldap is alleen aanwezig als &#039;&#039;&#039;ldap-auth-config&#039;&#039;&#039; ook is geinstalleerd. Zo niet gebruik dan de tweede regel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auth-client-config -t nss -p lac_ldap&lt;br /&gt;
auth-client-config -t nss -p ldap_example&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het resultaat is dat nsswitch.conf zowel in files (/etc/passwd etc.) zoekt als in ldap.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nsswitch.conf&lt;br /&gt;
#&lt;br /&gt;
# Example configuration of GNU Name Service Switch functionality.&lt;br /&gt;
# If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
# `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # passwd:         compat&lt;br /&gt;
passwd: files ldap&lt;br /&gt;
# pre_auth-client-config # group:          compat&lt;br /&gt;
group: files ldap&lt;br /&gt;
# pre_auth-client-config # shadow:         compat&lt;br /&gt;
shadow: files ldap&lt;br /&gt;
&lt;br /&gt;
hosts:          files dns&lt;br /&gt;
networks:       files&lt;br /&gt;
&lt;br /&gt;
protocols:      db files&lt;br /&gt;
services:       db files&lt;br /&gt;
ethers:         db files&lt;br /&gt;
rpc:            db files&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # netgroup:       nis&lt;br /&gt;
netgroup: nis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het aanpassen van de PAM bestanden gaat sinds enige releases met &#039;&#039;&#039;pam-auth-update&#039;&#039;&#039;. Kies in het menu voor zowel unix als ldap. Default wordt nu ldap authenticatie gebruikt voor uid &amp;gt;= 1000. Bij Hobbynet willen we vanaf 300 ldap gebruiken. Door een licht gemodificeerde versie van /usr/share/pam-configs/ldap te maken (ldap-hobbynet), kan ook voor de hobbynet instelling gekozen worden. Dit is de ldap-hobbynet versie:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Name: LDAP Authentication (uid&amp;gt;300)&lt;br /&gt;
Default: yes&lt;br /&gt;
Priority: 128&lt;br /&gt;
Auth-Type: Primary&lt;br /&gt;
Auth-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Auth:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 use_first_pass&lt;br /&gt;
Account-Type: Additional&lt;br /&gt;
Account:&lt;br /&gt;
        [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad]        pam_ldap.so minimum_uid=300&lt;br /&gt;
Password-Type: Primary&lt;br /&gt;
Password-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Password:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 try_first_pass&lt;br /&gt;
Session-Type: Additional&lt;br /&gt;
Session:&lt;br /&gt;
        [success=ok default=ignore]     pam_ldap.so minimum_uid=300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dit is in een standaard opzet van LDAP voldoende om zowel lokale gebruikers als gebruikers opgeslagen in LDAP, te laten inloggen en hun password te laten wijzigen. In de Hobbynet setup moet er echter nog meer gebeuren in de ACL&#039;s van de LDAP server configuratie. Omdat Hobbynet de laatste ACL regel heeft gewijzigd in een &#039;&#039;&#039;deny-all&#039;&#039;&#039;, is er een helper of proxy account nodig dat read access heeft of een aantal cruciale velden in de posixAccount objectClass. Zie verder de lsiting van nslcd.conf.&lt;br /&gt;
&lt;br /&gt;
Libnss-ldapd en libpam-ldapd hebben een gezamelijke daemon &#039;&#039;&#039;nslcd&#039;&#039;&#039; die z&#039;n configuratie uit &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039; haalt. Hierin is ook een voorziening voor het helper account. Aan het eind vande &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; staat de voorziening voor host-based login. Als het attribute &#039;&#039;&#039;host&#039;&#039;&#039; de fqdn of alleen de host naam bevat, bepaald dat of inloggen op die host mogelijk is. &#039;&#039;&#039;*&#039;&#039;&#039; staat inloggen op alle hosts toe.&lt;br /&gt;
&lt;br /&gt;
Eventueel kan het daemon proces voor debugging doeleinden ook als command (&#039;&#039;&#039;nslcd -d&#039;&#039;&#039;) gestart worden. Om de bevragingen van de LDAP server wat te verminderen, kan &#039;&#039;&#039;nscd&#039;&#039;&#039; voor caching zorgen. Deze cache daemon heeft zijn eigen configuratie bestand: &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039;. De default instellingen zijn goed; eventueel kan de logging naar een bestand gestuurd worden.&lt;br /&gt;
&lt;br /&gt;
Verbinding met de LDAP server kan met StartTLS beveiligd worden. Hier de inhoud van nslcd.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nslcd.conf&lt;br /&gt;
# nslcd configuration file. See nslcd.conf(5)&lt;br /&gt;
# for details.&lt;br /&gt;
&lt;br /&gt;
# The user and group nslcd should run as.&lt;br /&gt;
uid nslcd&lt;br /&gt;
gid nslcd&lt;br /&gt;
&lt;br /&gt;
# log location and level&lt;br /&gt;
#log /var/log/nslcd.log debug&lt;br /&gt;
&lt;br /&gt;
# The location at which the LDAP server(s) should be reachable.&lt;br /&gt;
uri ldap://ldap2-int.hobby.nl/&lt;br /&gt;
&lt;br /&gt;
# The search base that will be used for all queries.&lt;br /&gt;
base dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# Other base mappings&lt;br /&gt;
base   group  ou=groups,dc=hcc,dc=nl&lt;br /&gt;
base   passwd ou=users,dc=hcc,dc=nl&lt;br /&gt;
base   shadow ou=users,dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# The search scope.&lt;br /&gt;
#scope sub&lt;br /&gt;
&lt;br /&gt;
# The LDAP protocol version to use.&lt;br /&gt;
ldap_version 3&lt;br /&gt;
&lt;br /&gt;
# The DN to bind with for normal lookups.&lt;br /&gt;
#binddn cn=annonymous,dc=example,dc=net&lt;br /&gt;
#bindpw secret&lt;br /&gt;
binddn cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&lt;br /&gt;
bindpw xxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
# The DN used for password modifications by root.&lt;br /&gt;
#rootpwmoddn cn=admin,dc=example,dc=com&lt;br /&gt;
&lt;br /&gt;
# SSL options&lt;br /&gt;
ssl off&lt;br /&gt;
ssl start_tls&lt;br /&gt;
#tls_reqcert never&lt;br /&gt;
tls_cacertfile /etc/ssl/certs/cacert.org.pem&lt;br /&gt;
#tls_cert /etc/ssl/private/server.crt&lt;br /&gt;
#tls_key /etc/ssl/private/server.key&lt;br /&gt;
&lt;br /&gt;
# The minimum uid&lt;br /&gt;
nss_min_uid 300&lt;br /&gt;
&lt;br /&gt;
pam_authz_search (&amp;amp;(objectClass=posixAccount)(uid=$username)(|(host=$hostname)(host=$fqdn)(host=\\*)))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===users en groepen toevoegen===&lt;br /&gt;
Hiervoor moet &#039;&#039;&#039;ldapscripts&#039;&#039;&#039; zijn geïnstalleerd. Dit is het geval op de ldap-lb1 server. Dat levert de volgende extra commando&#039;s op:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldaprenamemachine&lt;br /&gt;
ldapadduser&lt;br /&gt;
ldapdeleteuserfromgroup&lt;br /&gt;
ldapfinger&lt;br /&gt;
ldapid&lt;br /&gt;
ldapgid&lt;br /&gt;
ldapmodifyuser&lt;br /&gt;
ldaprenameuser&lt;br /&gt;
lsldap&lt;br /&gt;
ldapaddusertogroup&lt;br /&gt;
ldapsetpasswd&lt;br /&gt;
ldapinit&lt;br /&gt;
ldapaddgroup&lt;br /&gt;
ldapdeletegroup&lt;br /&gt;
ldapmodifygroup&lt;br /&gt;
ldapdeletemachine&lt;br /&gt;
ldaprenamegroup&lt;br /&gt;
ldapaddmachine&lt;br /&gt;
ldapmodifymachine&lt;br /&gt;
ldapsetprimarygroup&lt;br /&gt;
ldapdeleteuser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Meest gebruikt zijn &#039;&#039;&#039;ldapaddgroup, ldapadduser, ldapsetpasswd&#039;&#039;&#039;.  &lt;br /&gt;
Er zijn manpages maar er is ook uitgebreide uitleg in de [https://help.ubuntu.com/14.04/serverguide/openldap-server.html Ubuntu server guide]. Omdat wij het automatisch maken van de home dir uit hebben staan, moet die met de hand aangemaakt worden en moet de owner goed gezet worden.&lt;br /&gt;
&lt;br /&gt;
===host-based login===&lt;br /&gt;
Met een kleine uitbreiding in het schema van de LDAP server, kan host-based login gerealiseerd worden. Ook in de &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; is een uitbreiding nodig.&lt;br /&gt;
&lt;br /&gt;
In de LDAP server dient de objectClass &#039;&#039;&#039;hostObject&#039;&#039;&#039; aan de entries in de ou=users toegevoegd te worden. Deze (auxilary) objectClass brengt slechts één attribute met zich mee: &#039;&#039;&#039;host&#039;&#039;&#039;. De regel in nslcd.conf checkt of één van de waarden van &#039;&#039;&#039;host&#039;&#039;&#039; gelijk is aan de naam van de server waarop ingelogd wordt. De waarde &#039;&#039;&#039;*&#039;&#039;&#039; geldt als wildcard. Zie de regel &#039;&#039;&lt;br /&gt;
&#039;pam_authz_search&#039;&#039;&#039;&#039; in &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Password aanpassen===&lt;br /&gt;
Via LDAP ingelogde gebruikers kunnen net als lokale gebruikers hun wachtwoord met &#039;&#039;&#039;passwd&#039;&#039;&#039; wijzigen. Wel moet aan de eisen in de LDAP ppolicy module voldaan worden.&lt;br /&gt;
&lt;br /&gt;
==PHP scripting==&lt;br /&gt;
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 &#039;&#039;&#039;/usr/local/hobbynet/bin&#039;&#039;&#039; directory.&lt;br /&gt;
Voor de php-scripting zijn enkele php7.x pakketten nodig. Installeer deze met apt-get. Het gaat om:&lt;br /&gt;
* php-cli&lt;br /&gt;
* php-ldap&lt;br /&gt;
&lt;br /&gt;
== Apache authenticatie via LDAP ==&lt;br /&gt;
In plaats van .htpassword authenticatie, kan ook LDAP gebruikt worden. Activeer daartoe de Apache module&lt;br /&gt;
&#039;authnz_ldap&#039;.&lt;br /&gt;
 a2enmod authnz_ldap&lt;br /&gt;
Denk er om dat dit in een loadbalanced situatie op beide servers gedaan dient te worden!&lt;br /&gt;
&lt;br /&gt;
=== Voorbeeld van een LDAP configuratie in de Apache config ===&lt;br /&gt;
(alleen als voorbeeld, niet zo gebruiken!)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# // 1) Hobbynet webmaster&lt;br /&gt;
# // 2) Vraagbaak medewerker van een willekeurige groepering&lt;br /&gt;
# (|(hccRol=*#VRBK)(hccRol=HN#WM))&lt;br /&gt;
  &amp;lt;Location &amp;quot;/apps/vraagbaak&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;RequireAll&amp;gt;&lt;br /&gt;
      Authname &amp;quot;HCC!vraagbaak (gebruik uw hcc.nl gebruikersnaam/wachtwoord)&amp;quot;&lt;br /&gt;
      AuthType Basic&lt;br /&gt;
      AuthBasicProvider ldap&lt;br /&gt;
      AuthLDAPUrl ldap://hcc-ldap-int.hobby.nl/ou=leden,dc=hcc,dc=nl?hccLogin??(|(hccRol=*#VRBK)(hccRol=HN#WM))(hccProfiel=TRUE) TLS&lt;br /&gt;
      require valid-user&lt;br /&gt;
    &amp;lt;/RequireAll&amp;gt;&lt;br /&gt;
  &amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hoe kan LDAP veilig gebruikt worden vanuit Apache===&lt;br /&gt;
Zet een script neer in de gebruikersomgeving, en gebruik mod_authz_external. Doe de controle vervolgens via de XML-RPC server.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zie [[Kadernet]] voor een voorbeeld.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== TODO lijst ==&lt;br /&gt;
&#039;&#039;Dit is een lijst in wording, graag aanvullen&#039;&#039; &lt;br /&gt;
* &#039;dun&#039; loadbalancer script maken om te controleren dat LDAP echt luistert&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79065</id>
		<title>LDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79065"/>
		<updated>2020-12-10T21:37:54Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* modify_index.ldif */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introductie==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==LDAP server keuze==&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Loadbalanced==&lt;br /&gt;
Er zijn twee servers (ldap-lb1 en ldap-lb2) die achter een loadbalancer in preferred server mode staan 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.&lt;br /&gt;
&lt;br /&gt;
Tevens zijn er een test en een development server: ldap-test en ldap-dev.&lt;br /&gt;
&lt;br /&gt;
==Installatie==&lt;br /&gt;
Installatie van OpenLDAP is simpel:&lt;br /&gt;
 aptitude install slapd ldap-utils&lt;br /&gt;
Omdat er gebruikgemaakt wordt van php scripts, is het ook nodig &#039;&#039;&#039;php-cli&#039;&#039;&#039; en &#039;&#039;&#039;php-ldap&#039;&#039;&#039; te installeren. De configuratie van OpenLDAP is sinds Karmic Koala iets gecompliceerder geworden. &#039;cn=config&#039; 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 &amp;quot;dpkg-reconfigure slapd&amp;quot; zet alleen de skeleton configuratie terug. Je moet zelf de database, root dn en acl&#039;s opzetten (als root of met sudo). Run  &#039;&#039;&#039;dpkg-reconfigure slapd&#039;&#039;&#039; om terug te gaan naar een lege directory. &lt;br /&gt;
&lt;br /&gt;
De volgende pakketten dienen geïnstalleerd te zijn (&#039;php -m&#039; toont de geactiveerde modules):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontbrekende pakketten volgens hjv:&lt;br /&gt;
&lt;br /&gt;
apt-get install aptitude &lt;br /&gt;
apt-get install phpmyadmin&lt;br /&gt;
apt-get install php-mbstring&lt;br /&gt;
apt-get install php-gettext&lt;br /&gt;
apt-get install php-xmlrpc&lt;br /&gt;
apt-get install php-ldap&lt;br /&gt;
apt-get install mysql-server&lt;br /&gt;
apt-get install ldapscripts&lt;br /&gt;
apt-get install php-xml&lt;br /&gt;
apt-get install slapd&lt;br /&gt;
apt-get install ldap-utils&lt;br /&gt;
a2enmod ssl&lt;br /&gt;
&lt;br /&gt;
- apache2ctl restart&lt;br /&gt;
&lt;br /&gt;
- openldap moet lid zijn van de groep ssl-cert!&lt;br /&gt;
apt-get install ssl-cert&lt;br /&gt;
adduser openldap ssl-cert&lt;br /&gt;
(of vi /etc/group&lt;br /&gt;
    ssl-cert:x:116:openldap)&lt;br /&gt;
&lt;br /&gt;
- Zorg dat de LDAP daemon bij de certificaten kan komen. &lt;br /&gt;
LET OP: op alle hobbynet servers staan de certificaten in /disk/site/etc/ssl/hobby.nl/&lt;br /&gt;
 chgrp ssl-cert /disk/site/etc/ssl/hobby.nl/hobby.nl.*&lt;br /&gt;
 chmod 440      /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
- mysql laat het bestand ibdata1 ongelimiteerd groeien (InnoDB bestanden)&lt;br /&gt;
 /etc/mysql/mysql.conf.d/innodb_file_per_table.cnf&lt;br /&gt;
 [mysql]&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
&lt;br /&gt;
=============&lt;br /&gt;
Nog meer Hobbynet aanpassingen&lt;br /&gt;
/etc/bash.bashrc&lt;br /&gt;
export http_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export https_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export ftp_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Locatie bestanden===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Alle ldif em tmpl bestanden gaan naar /usr/local/hobbynet/lib&lt;br /&gt;
* init_ldap en andere scripts gaan naar /usr/local/hobbynet/bin&lt;br /&gt;
* alle data bestanden (dumps) en update ldifs gaan naar /usr/local/hobbynet/data&lt;br /&gt;
* etc/ldap/schema/hcc_schema.* gaan naar /etc/ldap/schema&lt;br /&gt;
* etc/ldap/schema/ppolicy.ldif gaat naar /etc/ldap/schema&lt;br /&gt;
&lt;br /&gt;
hcc_schema.ldif wordt middels een script gemaakt. Dit script plaatst de ldif bestand(en) in /etc/ldap/schema. Zie hieronder.&lt;br /&gt;
&lt;br /&gt;
==Initiële database==&lt;br /&gt;
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.sh &amp;lt;admin-pw&amp;gt; gebruikt dan wordt een werkende directory gemaakt met alle statische data (in diverse ou&#039;s) erin. Gebruik na het maken van de initiële database restore_ldap.sh om de database te vullen met de data uit de data directory.&lt;br /&gt;
&lt;br /&gt;
===slapd.init.ldif ===&lt;br /&gt;
Bij installatie en reconfiguratie wordt /usr/share/slapd/slapd.init.ldif ingelezen. Zie aldaar indien nodig.&lt;br /&gt;
&lt;br /&gt;
==init_ldap script==&lt;br /&gt;
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 &#039;&#039;&#039;cn=admin,dc=hcc,dc=nl&#039;&#039;&#039; 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 &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; laadt vervolgens de laatste dump terug. Bij wijzigingen aan het schema is het raadzaam altijd een &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; te doen zodat een later een actuele dump kan worden teruggeladen.&lt;br /&gt;
&lt;br /&gt;
Het (plain text) password van cn=admin,dc=hcc,dc=nl moet bij het aanroepen van &#039;&#039;&#039;init_ldap&#039;&#039;&#039; op de commandline worden meegegeven. Tijdens de dpkg-reconfigure moet het password nog 2x gegeven worden. Lees eventueel ook de [http://www.openldap.org/doc/admin/ OpenLDAP Admin Guide].&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* voorbereidingen om &amp;quot;dpkg-reconfigure slapd&amp;quot; te draaien&lt;br /&gt;
* definities van input files&lt;br /&gt;
* check host&lt;br /&gt;
* bouwen van het skelet van de nieuwe directory&lt;br /&gt;
Zie voor details van de scripts &#039;&#039;&#039;init_ldap&#039;&#039;&#039;, &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; en &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; op een van de servers (in /usr/local/hobbynet/bin).&lt;br /&gt;
&lt;br /&gt;
==onderdelen van init_ldap==&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===add-schema.ldif===&lt;br /&gt;
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. &lt;br /&gt;
* Hiertoe wordt het onderstaande schema in /etc/ldap/schema geplaatst als hcc_schema.schema. &lt;br /&gt;
* Vervolgens worden de stappen uitgevoerd zoals beschreven in de [https://help.ubuntu.com/11.10/serverguide/C/openldap-server.html Ubuntu Server guide], onder &#039;&#039;&#039;Modifying the slapd Configuration Database&#039;&#039;&#039;. &lt;br /&gt;
* De resulterende output file &#039;&#039;&#039;cn=hcc_schema.ldif&#039;&#039;&#039; moet dan nog naar /etc/ldap/schema/hcc_schema.ldif gecopieerd worden. &lt;br /&gt;
Als dit proces herhaald moet worden, start dan met een lege output directory en verwijder een eventueel achtergebleven cn=hcc_schema.ldif bestand. &lt;br /&gt;
&lt;br /&gt;
De extra schema&#039;s worden middels een &#039;&#039;&#039;include&#039;&#039;&#039; toegevoegd. &#039;&#039;&#039;Ppolicy&#039;&#039;&#039; is op gelijke wijze als &#039;&#039;&#039;hcc_schema&#039;&#039;&#039; tot .ldif geconverteerd. Alle stappen om een nieuwe &#039;&#039;&#039;hcc-schema.ldif&#039;&#039;&#039; te maken zijn gescript in &#039;&#039;&#039;upd_schema&#039;&#039;&#039;. In &#039;&#039;&#039;init_ldap&#039;&#039;&#039; wordt het eigen schema en de password policy geladen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: add-schema.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
include: file:///etc/ldap/schema/hcc_schema.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ppolicy.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ldapns.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====schema updates====&lt;br /&gt;
Soms wordt een attribute toegevoegd of gewijzigd. Hiertoe dient het bestand hcc_schema.schema in /usr/local/hobbynet/etc/ldap/schema, gewijzigd te worden. Daarna dient er een ldif versie van gemaakt te worden. Gebruik hiervoor &#039;&#039;&#039;upd_schema.sh&#039;&#039;&#039; in dezelfde directory. De resulterende hcc_schema.ldif wordt in dit script naar /etc/ldap/schema gecopieërd. Bij grote wijzigingen is het aan te bevelen door de hele rebuild cycle te gaan (dump, init, restore). Bij triviale aanpassingen zou hcc_schema.ldif ook &#039;&#039;&#039;direct&#039;&#039;&#039; in de actieve directory geplaatst kunnen worden, gevolgd door slechts een &#039;&#039;&#039;service slapd restart&#039;&#039;&#039;. Gebruik hiervoor (blijf in de lokale schema directory):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp &amp;quot;ldif_output/cn=config/cn=schema/cn={14}hcc_schema.ldif&amp;quot; &amp;quot;/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}hcc_schema.ldif&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
LET OP: De nummers tussen accolades zijn bepaald door de volgorde van andere scripts! Zolang geen andere schema&#039;s worden toegevoegd zullen ze niet veranderen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ook kan met de ldap-tools gewerkt worden. Gebruik ldapsearch en ldapmodify, eventueel met de -f optie om een voorbereide serie opdrachten uit te voeren. Gebruik ldapsearch om eerst de structuur te vinden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier een voorbeeld om een objectClass aan te passen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat pas_aan.ldif&lt;br /&gt;
dn: cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
delete: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description ) )&lt;br /&gt;
-&lt;br /&gt;
add: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description $ hccIg ) )&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
$sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f pas_aan.ldif &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_config.ldif===&lt;br /&gt;
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 &#039;&#039;&#039;STATS&#039;&#039;&#039; gezet. Dit geeft niet teveel logging maar is toch goed bruikbaar. Om extra logging te krijgen op b.v. ACL&#039;s, verander olcLogLevel dan in &amp;quot;stats ACL&amp;quot;.  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-config.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcTLSCACertificateFile&lt;br /&gt;
olcTLSCACertificateFile: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
-&lt;br /&gt;
add: olcTLSCertificateFile&lt;br /&gt;
olcTLSCertificateFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
-&lt;br /&gt;
add: olcTLSCertificateKeyFile&lt;br /&gt;
olcTLSCertificateKeyFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
-&lt;br /&gt;
add: olcPasswordHash&lt;br /&gt;
olcPasswordHash: {CRYPT}&lt;br /&gt;
-&lt;br /&gt;
add: olcPasswordCryptSaltFormat&lt;br /&gt;
olcPasswordCryptSaltFormat: $6$%.16s&lt;br /&gt;
-&lt;br /&gt;
replace: olcLogLevel&lt;br /&gt;
olcLogLevel: stats&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Om de logging in een apart bestand te krijgen moet in /etc/rsyslog.d een extra bestand &#039;&#039;&#039;openldap.conf&#039;&#039;&#039; geplaatst worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local4.*   -/var/log/openldap.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Tevens willen we logrotate op dit bestand. Plaats in /etc/logrotate.d het bestand &#039;&#039;&#039;openldap&#039;&#039;&#039; met de volgende inhoud&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/log/openldap.log&lt;br /&gt;
{&lt;br /&gt;
        rotate 4&lt;br /&gt;
        weekly&lt;br /&gt;
        missingok&lt;br /&gt;
        notifempty&lt;br /&gt;
        compress&lt;br /&gt;
        delaycompress&lt;br /&gt;
        sharedscripts&lt;br /&gt;
        postrotate&lt;br /&gt;
                reload rsyslog &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 || true&lt;br /&gt;
        endscript&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify-mdb.ldif===&lt;br /&gt;
Hier worden de wijzigingen op de backend db gemaakt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-mdb.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
# hjv 2020.06.07 (oldSizeLimit toegevoegd)&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcDbCheckpoint&lt;br /&gt;
olcDbCheckpoint: 4096 1&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbNoSync&lt;br /&gt;
olcDbNoSync: TRUE&lt;br /&gt;
-&lt;br /&gt;
replace: olcSizeLimit&lt;br /&gt;
olcSizeLimit: 100000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===modify-acl===&lt;br /&gt;
Hier worden de rechten bepaald van de diverse rollen en groepen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-acl.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcAccess&lt;br /&gt;
# hobbynetlogin heeft lees rechten t.b.v. MySecureShell aanloggen&lt;br /&gt;
olcAccess: to attrs=@posixAccount,@posixGroup,@shadowAccount,@hostObject&lt;br /&gt;
  by dn=&amp;quot;cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to attrs=@posixAccount&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# sta anonymous search toe (t.b.v. Apache authenticatie)&lt;br /&gt;
olcAccess: to attrs=hccLogin,hccRol,hccProfiel,entry&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# olcAccess: to attrs=hccOptIn&lt;br /&gt;
#   by self write&lt;br /&gt;
#   by dn=&amp;quot;cn=drupal-hcc-nl,ou=klanten,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
#   by * break&lt;br /&gt;
#&lt;br /&gt;
# Anonieme klanten moeten kunnen inloggen&lt;br /&gt;
# en mogen hun eigen password wijzigen&lt;br /&gt;
olcAccess: to attrs=userPassword,shadowLastChange&lt;br /&gt;
  by self write&lt;br /&gt;
  by anonymous auth&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# Gebruiker mag zijn kader email wachtwoord aanpassen&lt;br /&gt;
olcAccess: to attrs=hccKaderPassword,hccKaderForward&lt;br /&gt;
  by self write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# beheerders hebben schrijfrechten op alles (updateDN)&lt;br /&gt;
# klanten hebben alleen lees rechten op alles (readDN)&lt;br /&gt;
# self mag lezen&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by self read&lt;br /&gt;
  by dn=&amp;quot;cn=xml-hoge-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn=&amp;quot;cn=xml-lage-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by dn.one=&amp;quot;ou=beheer,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn.one=&amp;quot;ou=klanten,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# PC30 helpdesk heeft leesrechten op ou=leden&lt;br /&gt;
olcAccess: to attrs=@hccOrgPerson,@hccKaderFunctie&lt;br /&gt;
  by dn.one=&amp;quot;ou=helpdesk,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# partners mogen een paar attrs lezen&lt;br /&gt;
olcAccess: to attrs=hccLidNummer,hccPostcode,hccPostcodeZoekveld,hccIg&lt;br /&gt;
  by dn.one=&amp;quot;ou=partners,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# iedereen moet (pseudo attr) entry en objectClass kunnen lezen&lt;br /&gt;
olcAccess: to attrs=entry,objectClass&lt;br /&gt;
  by * read&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by * none&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_index.ldif===&lt;br /&gt;
Een kale configuratie is heel snel voor wat betreft het opnieuw vullen met gegevens. Bij het aanmaken van een verse LDAP database worden er dan ook zo min mogelijk indexen aangemaakt.&amp;lt;br&amp;gt;&lt;br /&gt;
Zodra de inhoud is ingelezen kunnen de &#039;echte&#039; indexen aangemaakt worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-index.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcDbIndex&lt;br /&gt;
olcDbIndex: default pres,eq&lt;br /&gt;
olcDbIndex: objectClass,entryUUID,entryCSN eq&lt;br /&gt;
olcDbIndex: hccLidNummer,hccLogin,hccForumLogin eq&lt;br /&gt;
olcDbIndex: uid,uidNumber,gidNumber,memberUid,member eq&lt;br /&gt;
olcDbIndex: cn,host,hccPseudoniem,hccOptin,hccLocatie eq&lt;br /&gt;
olcDbIndex: sn,hccPostcodeZoekveld,hccIg,hccRegio eq,subfinal&lt;br /&gt;
olcDbIndex: hccRol,hccBezoek eq,pres,subfinal&lt;br /&gt;
olcDbIndex: hccBulletins pres&lt;br /&gt;
olcDbIndex: aboNummer eq&lt;br /&gt;
olcDbIndex: aboPostcodeZoekveld eq,subfinal&lt;br /&gt;
olcDbIndex: mail,mailHccnet,hccKaderMail,hccKaderForward pres,eq&lt;br /&gt;
olcDbIndex: hccProfiel pres,eq&lt;br /&gt;
olcDbindex: hccKaderUniekeURL eq&lt;br /&gt;
olcDbindex: hccOnderwerp eq,subfinal&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ppolicy overlay===&lt;br /&gt;
* vanuit LDAP de minimale lengte van een wachtwoord afdwingen&lt;br /&gt;
* in LDAP SSHA versleuteling activeren&amp;lt;br&amp;gt;&lt;br /&gt;
(olcPPolicyHashCleartext: TRUE)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-ppolicy.ldif                  ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module, cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectClass: olcModuleList&lt;br /&gt;
objectClass: top&lt;br /&gt;
olcModuleLoad: ppolicy&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=ppolicy,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcPPolicyConfig&lt;br /&gt;
olcOverlay: ppolicy&lt;br /&gt;
olcPPolicyDefault: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
olcPPolicyUseLockout: TRUE&lt;br /&gt;
olcPPolicyHashCleartext: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The default ppolicy looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dn: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
objectClass: pwdPolicy&lt;br /&gt;
objectClass: device&lt;br /&gt;
cn: default&lt;br /&gt;
pwdCheckQuality: 1&lt;br /&gt;
pwdMinLength: 8&lt;br /&gt;
pwdAttribute: 2.5.4.35&lt;br /&gt;
pwdAllowUserChange: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Syncrepl overlay===&lt;br /&gt;
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 [http://www.openldap.org/doc/admin/ LDAP Admin Guide]. &#039;&#039;&#039;Mirror configuratie is specifiek per server!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-syncrepl.tmpl                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
replace: olcServerID&lt;br /&gt;
olcServerID: @SID@&lt;br /&gt;
&lt;br /&gt;
dn: cn=module{0},cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcModuleLoad&lt;br /&gt;
olcModuleLoad: syncprov&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcSyncProvConfig&lt;br /&gt;
olcOverlay: syncprov&lt;br /&gt;
olcSpCheckpoint: 100 5&lt;br /&gt;
olcSpSessionlog: 100&lt;br /&gt;
&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcSyncRepl&lt;br /&gt;
olcSyncRepl: rid=@RID@&lt;br /&gt;
  provider=ldap://@PROVIDER@&lt;br /&gt;
  binddn=&amp;quot;cn=admin,dc=hcc,dc=nl&amp;quot; bindmethod=simple credentials=&amp;quot;@PASSWORD@&amp;quot;&lt;br /&gt;
  searchbase=&amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
  type=refreshAndPersist&lt;br /&gt;
  interval=00:00:00:10&lt;br /&gt;
  retry=&amp;quot;5 5 300 5&amp;quot;&lt;br /&gt;
  timeout=1&lt;br /&gt;
  starttls=yes&lt;br /&gt;
-&lt;br /&gt;
add: olcMirrorMode&lt;br /&gt;
olcMirrorMode: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
De andere server krijgt ServerID 2 en de provider is het IP adres van de andere server.&lt;br /&gt;
&lt;br /&gt;
===Unique overlay===&lt;br /&gt;
Deze overlay dient er voor te zorgen dat o.a het attribuut hccLogin een unieke waarde bevat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-unique.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module,cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectclass: olcModuleList&lt;br /&gt;
objectclass: top&lt;br /&gt;
olcmoduleload: unique&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=unique,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcUniqueConfig&lt;br /&gt;
olcOverlay: unique&lt;br /&gt;
olcUniqueAttribute: uid uidNumber hccLogin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SSL/TLS beveiliging==&lt;br /&gt;
Gebruik de juiste .pem bestanden in /etc/ssl/certs en /etc/ssl/private.&lt;br /&gt;
&lt;br /&gt;
We maken gebruik van een RapidSSL certificaat. Als dit niet standaard in Ubuntu bekend is, zet dan eerst GeoTrust_RapidSSL_-_ca-bundle.pem in de map /etc/ssl/certs neer. Voer nu een &#039;&#039;&#039;c_rehash .&#039;&#039;&#039; uit in /etc/ssl/certs om de cache te updaten (omdat GeoTrust_RapidSSL_-_ca-bundle.pem nieuw werd toegevoegd). &lt;br /&gt;
&lt;br /&gt;
De ownership is belangrijk. Hiertoe wordt de groep &amp;quot;openldap&amp;quot; toegevoegd aan de groep ssl-cert.&lt;br /&gt;
 adduser openldap ssl-cert&lt;br /&gt;
&lt;br /&gt;
Als dit fout gaat, doe dan eerst:&lt;br /&gt;
 apt-get install ssl-cert&lt;br /&gt;
&lt;br /&gt;
Zet het certificaat en de private key in de juiste groep:&lt;br /&gt;
 chgrp ssl-cert /etc/ssl/private/hobby.nl.*&lt;br /&gt;
 chmod 440      /etc/ssl/private/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
Het resultaat is dan als volgt:&lt;br /&gt;
 root@hcc-ldap-lb1:~# ls -l /etc/ssl/private/hcc* &lt;br /&gt;
 -rw-r--r-- 1 root     ssl-cert 1724 Nov 22 20:47 hobby.nl.crt&lt;br /&gt;
 -r--r----- 1 root     ssl-cert 1679 Nov 22 20:25 hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
 root@hcc-ldap-lb1:~# grep openldap /etc/group&lt;br /&gt;
 ssl-cert:x:114:openldap&lt;br /&gt;
 openldap:x:118:&lt;br /&gt;
&lt;br /&gt;
2020.12.09: Op een nieuwe Ubuntu installatie staat apparmor standaard aan. Weg ermee!&lt;br /&gt;
 apt remove --assume-yes --purge apparmor&lt;br /&gt;
&amp;lt;strike&amp;gt;Per september 2017 staan de certificaten in /disk/site/etc/ssl/hobby.nl, net als op alle andere servers. Omdat apparmor actief is moet deze directory worden toegevoegd aan /etc/apparmor.d/local/usr.sbin.slapd. Die file ziet er dan als volgt uit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Site-specific additions and overrides for usr.sbin.slapd.&lt;br /&gt;
# For more details, please see /etc/apparmor.d/local/README.&lt;br /&gt;
#include &amp;lt;abstractions/ssl_certs&amp;gt;&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/ r,&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/* r,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Openldap ook op poort 636 benaderd wordt (naast TLS op 389), moet in /etc/default/slapd ldaps:/// opgenomen worden bij de SLAPD_SERVICES.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;netstat -an&#039; dient dan 636 te laten zien voor zowel IPv4 als IPv6.&lt;br /&gt;
&lt;br /&gt;
Om de cn=config te zien kan je het volgende commando gebruiken:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config&lt;br /&gt;
&lt;br /&gt;
of, wat botter maar korter:&lt;br /&gt;
cat /etc/ldap/slapd.d/cn\=config.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Backup, initialize, restore==&lt;br /&gt;
Om het hele skelet van ldap in één keer te herstellen dient &#039;&#039;&#039;init_ldap&#039;&#039;&#039; gebruikt te worden. Als argument &#039;&#039;&#039;moet&#039;&#039;&#039; het admin beheer wachtwoord mee gegeven worden.&lt;br /&gt;
&lt;br /&gt;
===lokaal===&lt;br /&gt;
Backups kunnen gemaakt worden terwijl slapd draait maar geadviseerd wordt slapd te stoppen. Voor dumpen moet &#039;&#039;&#039;slapcat&#039;&#039;&#039; gebruikt worden. Backups kunnen gemaakt worden per database of een filter daarop, naar een ldif bestand.&lt;br /&gt;
 slapcat -l hcc-dump.ldif -b &amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
Dit maakt een dump van alles onder &#039;&#039;&#039;dc=hcc,dc=nl&#039;&#039;&#039; naar het bestand hcc-dump.ldif. Ook is het mogelijk het database nummer te gebruiken, config is altijd nummer 0, hdb is gewoonlijk 1.&lt;br /&gt;
&lt;br /&gt;
Het &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; script dumpt alle ou&#039;s in aparte .ldif bestanden; het omgekeerde doet &#039;&#039;&#039;restore_ldap&#039;&#039;&#039;.  &lt;br /&gt;
Terug inlezen kan alleen in een lege directory, dus direct nadat &#039;&#039;&#039;init_ldap&#039;&#039;&#039; is gedaan. Gebruik voor het terugplaatsen &#039;&#039;&#039;slapadd&#039;&#039;&#039;. Aan te bevelen is &#039;&#039;&#039;-c&#039;&#039;&#039; mee te geven zodat ondanks fouten doorgegaan wordt. &lt;br /&gt;
&lt;br /&gt;
Voor slapadd &#039;&#039;&#039;moet&#039;&#039;&#039; 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)&lt;br /&gt;
 /etc/init.d/slapd stop&lt;br /&gt;
 slapadd -l hcc-dump.ldif -w -c &amp;gt;errors.txt&lt;br /&gt;
 chown openldap:openldap /var/lib/ldap/*&lt;br /&gt;
 /etc/init.d/slapd start&lt;br /&gt;
&lt;br /&gt;
===remote===&lt;br /&gt;
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 &#039;&#039;&#039;backup-encrypted&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Recente lokale backups zijn te vinden in &#039;&#039;&#039;/usr/local/hobbynet/tmp&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Verse ldap maken===&lt;br /&gt;
Transactie log bij het toevoegen van b.v. een nieuwe ou:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Op beide servers:&lt;br /&gt;
schema van test server gecopieerd en geactiveerd&lt;br /&gt;
dump-ldap gedraaid&lt;br /&gt;
systemctl stop slapd.service &lt;br /&gt;
&lt;br /&gt;
Er is nu géén ldap service! Werk dus snel...&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb1&lt;br /&gt;
systemctl stop slapd.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
op ldap-lb2:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb2&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
systemctl start slapd.service&lt;br /&gt;
Beide slapd servers zijn in de lucht en moeten synchroniseren.&lt;br /&gt;
&lt;br /&gt;
op beide servers:&lt;br /&gt;
check replicatie (netstat en functioneel)&lt;br /&gt;
&lt;br /&gt;
root@ldap-lb1:/usr/local/hobbynet/bin# netstat -n | grep 389&lt;br /&gt;
tcp        0      0 172.31.8.4:36838        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:36836        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58112        ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58114        ESTABLISHED&lt;br /&gt;
&lt;br /&gt;
Functioneel door met ADS op beide servers in te loggen en een willekeurig veld in je eigen entry te wijzigen op lb1. Kijk of het gebeurd is op lb2 en wijzig het daar terug. Check op de andere server of het gebeurd is. Er kan een zekere vertraging in optreden.&lt;br /&gt;
&lt;br /&gt;
Stel er is een nieuwe ou gemaakt: denk aan het bij werken van de dump en restore scripts.&lt;br /&gt;
&lt;br /&gt;
update dump-ldap.sh en restore-ldap.sh met de nieuwe ou&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
export tarieven.ldif op test server en import op ldap-lb1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==crontab==&lt;br /&gt;
 # script dat updates ophaalt (maar niet installeert), zodat nagios ze ook detecteert&lt;br /&gt;
 0 9 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
==LDAP Clients==&lt;br /&gt;
Er zijn meerdere LDAP clients. De meest populaire zijn Apache Directory Studio (&amp;quot;ADS&amp;quot;) en phpLdapAdmin (&amp;quot;PLA&amp;quot;).&amp;lt;br&amp;gt;&lt;br /&gt;
De eerste is veel uitgbreider maar vereist een Java Runtime Environment (&amp;quot;JRE&amp;quot;). Onder Windows is dat JRE(13) of (open)JDK-(13).&amp;lt;br&amp;gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Binnen Hobbynet wordt uitsluitend gebruik gemaakt van ADS.&lt;br /&gt;
&lt;br /&gt;
===StartTLS===&lt;br /&gt;
Aanbevolen wordt StartTLS op poort 389 te gebruiken. Alternatief is LDAPS op poort 636 maar dat is deprecated. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Windows===&lt;br /&gt;
&amp;lt;i&amp;gt;2019-10-31 HJV: Oude info, als referentie leuk, maar niet meer relevant&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Onder Windows moet met &#039;&#039;&#039;keytool.exe&#039;&#039;&#039; gewerkt worden. De uitleg heb ik van  [http://www.talkingtree.com/blog/index.cfm?mode=entry&amp;amp;entry=25AA75A4-45A6-2844-7CA3EECD842DB576 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:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Haal de benodigde bestanden op (op een Linux systeem):&lt;br /&gt;
wget http://www.cacert.org/certs/root.der -O root.der&lt;br /&gt;
wget http://www.cacert.org/certs/class3.der -O class3.der&lt;br /&gt;
copieer de bestanden naar de Windows omgeving in C:\Program Files (x86)\Java\jre6\lib\security.&lt;br /&gt;
&lt;br /&gt;
Open een commandwindow:&lt;br /&gt;
cd C:\Program Files (x86)\Java\jre6\lib\security&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass1 -file root.der&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass3 -file class3.der&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Linux===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS gebruik===&lt;br /&gt;
ADS kan erg handig zijn voor het snel dumpen van hele ou&#039;s in .ldif formaat. Zo&#039;n dump kan direct op een andere server worden ingelezen.&lt;br /&gt;
&lt;br /&gt;
===PhpLdapAdmin onder Linux===&lt;br /&gt;
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 [http://phpldapadmin.sourceforge.net/wiki/index.php/Server:server:tls phpldapadmin wiki].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# LDAP Defaults&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# See ldap.conf(5) for details&lt;br /&gt;
# This file should be world readable but not world writable.&lt;br /&gt;
&lt;br /&gt;
#BASE   dc=example,dc=com&lt;br /&gt;
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666&lt;br /&gt;
&lt;br /&gt;
#SIZELIMIT      12&lt;br /&gt;
#TIMELIMIT      15&lt;br /&gt;
#DEREF          never&lt;br /&gt;
TLS_CACERT      /etc/ssl/certs/CAcert_org.pem&lt;br /&gt;
TLS_CERT        /etc/ssl/private/hobby.nl.crt&lt;br /&gt;
TLS_KEY         /etc/ssl/private/hobby.nl.key&lt;br /&gt;
TLS_REQCERT     allow&lt;br /&gt;
#TLS_REQCERT never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Denk er wel aan na wijzigingen Apache te herstarten.&lt;br /&gt;
===PAM en NSS via LDAP===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Installeer &#039;&#039;&#039;libnss-ldapd&#039;&#039;&#039; om de benodigde libraries te verkrijgen. Apt-get zal tevens &#039;&#039;&#039;libpam-ldapd&#039;&#039;&#039;, &#039;&#039;&#039;nslcd&#039;&#039;&#039; en &#039;&#039;&#039;nscd&#039;&#039;&#039; binnen brengen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install libnss-ldapd auth-client-config ldap-utils&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
    libpam-ldapd nscd nslcd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Libnss-ldapd is een doorontwikkeling van libnss-ldap en bevat meerdere verbeteringen. Zie: [http://arthurdejong.org/nss-pam-ldapd/ deze site] van de ontwikkelaar. Bij de installatie wordt een user &#039;&#039;&#039;nslcd&#039;&#039;&#039; aangemaakt; denk erom die in de .tmpl bestanden te zetten!&lt;br /&gt;
  &lt;br /&gt;
nsswitch.conf laat zich configureren via &#039;&#039;&#039;auth-client-config&#039;&#039;&#039; maar lac_ldap is alleen aanwezig als &#039;&#039;&#039;ldap-auth-config&#039;&#039;&#039; ook is geinstalleerd. Zo niet gebruik dan de tweede regel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auth-client-config -t nss -p lac_ldap&lt;br /&gt;
auth-client-config -t nss -p ldap_example&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het resultaat is dat nsswitch.conf zowel in files (/etc/passwd etc.) zoekt als in ldap.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nsswitch.conf&lt;br /&gt;
#&lt;br /&gt;
# Example configuration of GNU Name Service Switch functionality.&lt;br /&gt;
# If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
# `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # passwd:         compat&lt;br /&gt;
passwd: files ldap&lt;br /&gt;
# pre_auth-client-config # group:          compat&lt;br /&gt;
group: files ldap&lt;br /&gt;
# pre_auth-client-config # shadow:         compat&lt;br /&gt;
shadow: files ldap&lt;br /&gt;
&lt;br /&gt;
hosts:          files dns&lt;br /&gt;
networks:       files&lt;br /&gt;
&lt;br /&gt;
protocols:      db files&lt;br /&gt;
services:       db files&lt;br /&gt;
ethers:         db files&lt;br /&gt;
rpc:            db files&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # netgroup:       nis&lt;br /&gt;
netgroup: nis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het aanpassen van de PAM bestanden gaat sinds enige releases met &#039;&#039;&#039;pam-auth-update&#039;&#039;&#039;. Kies in het menu voor zowel unix als ldap. Default wordt nu ldap authenticatie gebruikt voor uid &amp;gt;= 1000. Bij Hobbynet willen we vanaf 300 ldap gebruiken. Door een licht gemodificeerde versie van /usr/share/pam-configs/ldap te maken (ldap-hobbynet), kan ook voor de hobbynet instelling gekozen worden. Dit is de ldap-hobbynet versie:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Name: LDAP Authentication (uid&amp;gt;300)&lt;br /&gt;
Default: yes&lt;br /&gt;
Priority: 128&lt;br /&gt;
Auth-Type: Primary&lt;br /&gt;
Auth-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Auth:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 use_first_pass&lt;br /&gt;
Account-Type: Additional&lt;br /&gt;
Account:&lt;br /&gt;
        [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad]        pam_ldap.so minimum_uid=300&lt;br /&gt;
Password-Type: Primary&lt;br /&gt;
Password-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Password:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 try_first_pass&lt;br /&gt;
Session-Type: Additional&lt;br /&gt;
Session:&lt;br /&gt;
        [success=ok default=ignore]     pam_ldap.so minimum_uid=300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dit is in een standaard opzet van LDAP voldoende om zowel lokale gebruikers als gebruikers opgeslagen in LDAP, te laten inloggen en hun password te laten wijzigen. In de Hobbynet setup moet er echter nog meer gebeuren in de ACL&#039;s van de LDAP server configuratie. Omdat Hobbynet de laatste ACL regel heeft gewijzigd in een &#039;&#039;&#039;deny-all&#039;&#039;&#039;, is er een helper of proxy account nodig dat read access heeft of een aantal cruciale velden in de posixAccount objectClass. Zie verder de lsiting van nslcd.conf.&lt;br /&gt;
&lt;br /&gt;
Libnss-ldapd en libpam-ldapd hebben een gezamelijke daemon &#039;&#039;&#039;nslcd&#039;&#039;&#039; die z&#039;n configuratie uit &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039; haalt. Hierin is ook een voorziening voor het helper account. Aan het eind vande &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; staat de voorziening voor host-based login. Als het attribute &#039;&#039;&#039;host&#039;&#039;&#039; de fqdn of alleen de host naam bevat, bepaald dat of inloggen op die host mogelijk is. &#039;&#039;&#039;*&#039;&#039;&#039; staat inloggen op alle hosts toe.&lt;br /&gt;
&lt;br /&gt;
Eventueel kan het daemon proces voor debugging doeleinden ook als command (&#039;&#039;&#039;nslcd -d&#039;&#039;&#039;) gestart worden. Om de bevragingen van de LDAP server wat te verminderen, kan &#039;&#039;&#039;nscd&#039;&#039;&#039; voor caching zorgen. Deze cache daemon heeft zijn eigen configuratie bestand: &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039;. De default instellingen zijn goed; eventueel kan de logging naar een bestand gestuurd worden.&lt;br /&gt;
&lt;br /&gt;
Verbinding met de LDAP server kan met StartTLS beveiligd worden. Hier de inhoud van nslcd.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nslcd.conf&lt;br /&gt;
# nslcd configuration file. See nslcd.conf(5)&lt;br /&gt;
# for details.&lt;br /&gt;
&lt;br /&gt;
# The user and group nslcd should run as.&lt;br /&gt;
uid nslcd&lt;br /&gt;
gid nslcd&lt;br /&gt;
&lt;br /&gt;
# log location and level&lt;br /&gt;
#log /var/log/nslcd.log debug&lt;br /&gt;
&lt;br /&gt;
# The location at which the LDAP server(s) should be reachable.&lt;br /&gt;
uri ldap://ldap2-int.hobby.nl/&lt;br /&gt;
&lt;br /&gt;
# The search base that will be used for all queries.&lt;br /&gt;
base dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# Other base mappings&lt;br /&gt;
base   group  ou=groups,dc=hcc,dc=nl&lt;br /&gt;
base   passwd ou=users,dc=hcc,dc=nl&lt;br /&gt;
base   shadow ou=users,dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# The search scope.&lt;br /&gt;
#scope sub&lt;br /&gt;
&lt;br /&gt;
# The LDAP protocol version to use.&lt;br /&gt;
ldap_version 3&lt;br /&gt;
&lt;br /&gt;
# The DN to bind with for normal lookups.&lt;br /&gt;
#binddn cn=annonymous,dc=example,dc=net&lt;br /&gt;
#bindpw secret&lt;br /&gt;
binddn cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&lt;br /&gt;
bindpw xxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
# The DN used for password modifications by root.&lt;br /&gt;
#rootpwmoddn cn=admin,dc=example,dc=com&lt;br /&gt;
&lt;br /&gt;
# SSL options&lt;br /&gt;
ssl off&lt;br /&gt;
ssl start_tls&lt;br /&gt;
#tls_reqcert never&lt;br /&gt;
tls_cacertfile /etc/ssl/certs/cacert.org.pem&lt;br /&gt;
#tls_cert /etc/ssl/private/server.crt&lt;br /&gt;
#tls_key /etc/ssl/private/server.key&lt;br /&gt;
&lt;br /&gt;
# The minimum uid&lt;br /&gt;
nss_min_uid 300&lt;br /&gt;
&lt;br /&gt;
pam_authz_search (&amp;amp;(objectClass=posixAccount)(uid=$username)(|(host=$hostname)(host=$fqdn)(host=\\*)))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===users en groepen toevoegen===&lt;br /&gt;
Hiervoor moet &#039;&#039;&#039;ldapscripts&#039;&#039;&#039; zijn geïnstalleerd. Dit is het geval op de ldap-lb1 server. Dat levert de volgende extra commando&#039;s op:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldaprenamemachine&lt;br /&gt;
ldapadduser&lt;br /&gt;
ldapdeleteuserfromgroup&lt;br /&gt;
ldapfinger&lt;br /&gt;
ldapid&lt;br /&gt;
ldapgid&lt;br /&gt;
ldapmodifyuser&lt;br /&gt;
ldaprenameuser&lt;br /&gt;
lsldap&lt;br /&gt;
ldapaddusertogroup&lt;br /&gt;
ldapsetpasswd&lt;br /&gt;
ldapinit&lt;br /&gt;
ldapaddgroup&lt;br /&gt;
ldapdeletegroup&lt;br /&gt;
ldapmodifygroup&lt;br /&gt;
ldapdeletemachine&lt;br /&gt;
ldaprenamegroup&lt;br /&gt;
ldapaddmachine&lt;br /&gt;
ldapmodifymachine&lt;br /&gt;
ldapsetprimarygroup&lt;br /&gt;
ldapdeleteuser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Meest gebruikt zijn &#039;&#039;&#039;ldapaddgroup, ldapadduser, ldapsetpasswd&#039;&#039;&#039;.  &lt;br /&gt;
Er zijn manpages maar er is ook uitgebreide uitleg in de [https://help.ubuntu.com/14.04/serverguide/openldap-server.html Ubuntu server guide]. Omdat wij het automatisch maken van de home dir uit hebben staan, moet die met de hand aangemaakt worden en moet de owner goed gezet worden.&lt;br /&gt;
&lt;br /&gt;
===host-based login===&lt;br /&gt;
Met een kleine uitbreiding in het schema van de LDAP server, kan host-based login gerealiseerd worden. Ook in de &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; is een uitbreiding nodig.&lt;br /&gt;
&lt;br /&gt;
In de LDAP server dient de objectClass &#039;&#039;&#039;hostObject&#039;&#039;&#039; aan de entries in de ou=users toegevoegd te worden. Deze (auxilary) objectClass brengt slechts één attribute met zich mee: &#039;&#039;&#039;host&#039;&#039;&#039;. De regel in nslcd.conf checkt of één van de waarden van &#039;&#039;&#039;host&#039;&#039;&#039; gelijk is aan de naam van de server waarop ingelogd wordt. De waarde &#039;&#039;&#039;*&#039;&#039;&#039; geldt als wildcard. Zie de regel &#039;&#039;&lt;br /&gt;
&#039;pam_authz_search&#039;&#039;&#039;&#039; in &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Password aanpassen===&lt;br /&gt;
Via LDAP ingelogde gebruikers kunnen net als lokale gebruikers hun wachtwoord met &#039;&#039;&#039;passwd&#039;&#039;&#039; wijzigen. Wel moet aan de eisen in de LDAP ppolicy module voldaan worden.&lt;br /&gt;
&lt;br /&gt;
==PHP scripting==&lt;br /&gt;
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 &#039;&#039;&#039;/usr/local/hobbynet/bin&#039;&#039;&#039; directory.&lt;br /&gt;
Voor de php-scripting zijn enkele php7.x pakketten nodig. Installeer deze met apt-get. Het gaat om:&lt;br /&gt;
* php-cli&lt;br /&gt;
* php-ldap&lt;br /&gt;
&lt;br /&gt;
== Apache authenticatie via LDAP ==&lt;br /&gt;
In plaats van .htpassword authenticatie, kan ook LDAP gebruikt worden. Activeer daartoe de Apache module&lt;br /&gt;
&#039;authnz_ldap&#039;.&lt;br /&gt;
 a2enmod authnz_ldap&lt;br /&gt;
Denk er om dat dit in een loadbalanced situatie op beide servers gedaan dient te worden!&lt;br /&gt;
&lt;br /&gt;
=== Voorbeeld van een LDAP configuratie in de Apache config ===&lt;br /&gt;
(alleen als voorbeeld, niet zo gebruiken!)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# // 1) Hobbynet webmaster&lt;br /&gt;
# // 2) Vraagbaak medewerker van een willekeurige groepering&lt;br /&gt;
# (|(hccRol=*#VRBK)(hccRol=HN#WM))&lt;br /&gt;
  &amp;lt;Location &amp;quot;/apps/vraagbaak&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;RequireAll&amp;gt;&lt;br /&gt;
      Authname &amp;quot;HCC!vraagbaak (gebruik uw hcc.nl gebruikersnaam/wachtwoord)&amp;quot;&lt;br /&gt;
      AuthType Basic&lt;br /&gt;
      AuthBasicProvider ldap&lt;br /&gt;
      AuthLDAPUrl ldap://hcc-ldap-int.hobby.nl/ou=leden,dc=hcc,dc=nl?hccLogin??(|(hccRol=*#VRBK)(hccRol=HN#WM))(hccProfiel=TRUE) TLS&lt;br /&gt;
      require valid-user&lt;br /&gt;
    &amp;lt;/RequireAll&amp;gt;&lt;br /&gt;
  &amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hoe kan LDAP veilig gebruikt worden vanuit Apache===&lt;br /&gt;
Zet een script neer in de gebruikersomgeving, en gebruik mod_authz_external. Doe de controle vervolgens via de XML-RPC server.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zie [[Kadernet]] voor een voorbeeld.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== TODO lijst ==&lt;br /&gt;
&#039;&#039;Dit is een lijst in wording, graag aanvullen&#039;&#039; &lt;br /&gt;
* &#039;dun&#039; loadbalancer script maken om te controleren dat LDAP echt luistert&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79064</id>
		<title>LDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79064"/>
		<updated>2020-12-10T21:25:40Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* add-schema.ldif */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introductie==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==LDAP server keuze==&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Loadbalanced==&lt;br /&gt;
Er zijn twee servers (ldap-lb1 en ldap-lb2) die achter een loadbalancer in preferred server mode staan 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.&lt;br /&gt;
&lt;br /&gt;
Tevens zijn er een test en een development server: ldap-test en ldap-dev.&lt;br /&gt;
&lt;br /&gt;
==Installatie==&lt;br /&gt;
Installatie van OpenLDAP is simpel:&lt;br /&gt;
 aptitude install slapd ldap-utils&lt;br /&gt;
Omdat er gebruikgemaakt wordt van php scripts, is het ook nodig &#039;&#039;&#039;php-cli&#039;&#039;&#039; en &#039;&#039;&#039;php-ldap&#039;&#039;&#039; te installeren. De configuratie van OpenLDAP is sinds Karmic Koala iets gecompliceerder geworden. &#039;cn=config&#039; 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 &amp;quot;dpkg-reconfigure slapd&amp;quot; zet alleen de skeleton configuratie terug. Je moet zelf de database, root dn en acl&#039;s opzetten (als root of met sudo). Run  &#039;&#039;&#039;dpkg-reconfigure slapd&#039;&#039;&#039; om terug te gaan naar een lege directory. &lt;br /&gt;
&lt;br /&gt;
De volgende pakketten dienen geïnstalleerd te zijn (&#039;php -m&#039; toont de geactiveerde modules):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontbrekende pakketten volgens hjv:&lt;br /&gt;
&lt;br /&gt;
apt-get install aptitude &lt;br /&gt;
apt-get install phpmyadmin&lt;br /&gt;
apt-get install php-mbstring&lt;br /&gt;
apt-get install php-gettext&lt;br /&gt;
apt-get install php-xmlrpc&lt;br /&gt;
apt-get install php-ldap&lt;br /&gt;
apt-get install mysql-server&lt;br /&gt;
apt-get install ldapscripts&lt;br /&gt;
apt-get install php-xml&lt;br /&gt;
apt-get install slapd&lt;br /&gt;
apt-get install ldap-utils&lt;br /&gt;
a2enmod ssl&lt;br /&gt;
&lt;br /&gt;
- apache2ctl restart&lt;br /&gt;
&lt;br /&gt;
- openldap moet lid zijn van de groep ssl-cert!&lt;br /&gt;
apt-get install ssl-cert&lt;br /&gt;
adduser openldap ssl-cert&lt;br /&gt;
(of vi /etc/group&lt;br /&gt;
    ssl-cert:x:116:openldap)&lt;br /&gt;
&lt;br /&gt;
- Zorg dat de LDAP daemon bij de certificaten kan komen. &lt;br /&gt;
LET OP: op alle hobbynet servers staan de certificaten in /disk/site/etc/ssl/hobby.nl/&lt;br /&gt;
 chgrp ssl-cert /disk/site/etc/ssl/hobby.nl/hobby.nl.*&lt;br /&gt;
 chmod 440      /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
- mysql laat het bestand ibdata1 ongelimiteerd groeien (InnoDB bestanden)&lt;br /&gt;
 /etc/mysql/mysql.conf.d/innodb_file_per_table.cnf&lt;br /&gt;
 [mysql]&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
&lt;br /&gt;
=============&lt;br /&gt;
Nog meer Hobbynet aanpassingen&lt;br /&gt;
/etc/bash.bashrc&lt;br /&gt;
export http_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export https_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export ftp_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Locatie bestanden===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Alle ldif em tmpl bestanden gaan naar /usr/local/hobbynet/lib&lt;br /&gt;
* init_ldap en andere scripts gaan naar /usr/local/hobbynet/bin&lt;br /&gt;
* alle data bestanden (dumps) en update ldifs gaan naar /usr/local/hobbynet/data&lt;br /&gt;
* etc/ldap/schema/hcc_schema.* gaan naar /etc/ldap/schema&lt;br /&gt;
* etc/ldap/schema/ppolicy.ldif gaat naar /etc/ldap/schema&lt;br /&gt;
&lt;br /&gt;
hcc_schema.ldif wordt middels een script gemaakt. Dit script plaatst de ldif bestand(en) in /etc/ldap/schema. Zie hieronder.&lt;br /&gt;
&lt;br /&gt;
==Initiële database==&lt;br /&gt;
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.sh &amp;lt;admin-pw&amp;gt; gebruikt dan wordt een werkende directory gemaakt met alle statische data (in diverse ou&#039;s) erin. Gebruik na het maken van de initiële database restore_ldap.sh om de database te vullen met de data uit de data directory.&lt;br /&gt;
&lt;br /&gt;
===slapd.init.ldif ===&lt;br /&gt;
Bij installatie en reconfiguratie wordt /usr/share/slapd/slapd.init.ldif ingelezen. Zie aldaar indien nodig.&lt;br /&gt;
&lt;br /&gt;
==init_ldap script==&lt;br /&gt;
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 &#039;&#039;&#039;cn=admin,dc=hcc,dc=nl&#039;&#039;&#039; 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 &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; laadt vervolgens de laatste dump terug. Bij wijzigingen aan het schema is het raadzaam altijd een &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; te doen zodat een later een actuele dump kan worden teruggeladen.&lt;br /&gt;
&lt;br /&gt;
Het (plain text) password van cn=admin,dc=hcc,dc=nl moet bij het aanroepen van &#039;&#039;&#039;init_ldap&#039;&#039;&#039; op de commandline worden meegegeven. Tijdens de dpkg-reconfigure moet het password nog 2x gegeven worden. Lees eventueel ook de [http://www.openldap.org/doc/admin/ OpenLDAP Admin Guide].&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* voorbereidingen om &amp;quot;dpkg-reconfigure slapd&amp;quot; te draaien&lt;br /&gt;
* definities van input files&lt;br /&gt;
* check host&lt;br /&gt;
* bouwen van het skelet van de nieuwe directory&lt;br /&gt;
Zie voor details van de scripts &#039;&#039;&#039;init_ldap&#039;&#039;&#039;, &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; en &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; op een van de servers (in /usr/local/hobbynet/bin).&lt;br /&gt;
&lt;br /&gt;
==onderdelen van init_ldap==&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===add-schema.ldif===&lt;br /&gt;
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. &lt;br /&gt;
* Hiertoe wordt het onderstaande schema in /etc/ldap/schema geplaatst als hcc_schema.schema. &lt;br /&gt;
* Vervolgens worden de stappen uitgevoerd zoals beschreven in de [https://help.ubuntu.com/11.10/serverguide/C/openldap-server.html Ubuntu Server guide], onder &#039;&#039;&#039;Modifying the slapd Configuration Database&#039;&#039;&#039;. &lt;br /&gt;
* De resulterende output file &#039;&#039;&#039;cn=hcc_schema.ldif&#039;&#039;&#039; moet dan nog naar /etc/ldap/schema/hcc_schema.ldif gecopieerd worden. &lt;br /&gt;
Als dit proces herhaald moet worden, start dan met een lege output directory en verwijder een eventueel achtergebleven cn=hcc_schema.ldif bestand. &lt;br /&gt;
&lt;br /&gt;
De extra schema&#039;s worden middels een &#039;&#039;&#039;include&#039;&#039;&#039; toegevoegd. &#039;&#039;&#039;Ppolicy&#039;&#039;&#039; is op gelijke wijze als &#039;&#039;&#039;hcc_schema&#039;&#039;&#039; tot .ldif geconverteerd. Alle stappen om een nieuwe &#039;&#039;&#039;hcc-schema.ldif&#039;&#039;&#039; te maken zijn gescript in &#039;&#039;&#039;upd_schema&#039;&#039;&#039;. In &#039;&#039;&#039;init_ldap&#039;&#039;&#039; wordt het eigen schema en de password policy geladen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: add-schema.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
include: file:///etc/ldap/schema/hcc_schema.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ppolicy.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ldapns.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====schema updates====&lt;br /&gt;
Soms wordt een attribute toegevoegd of gewijzigd. Hiertoe dient het bestand hcc_schema.schema in /usr/local/hobbynet/etc/ldap/schema, gewijzigd te worden. Daarna dient er een ldif versie van gemaakt te worden. Gebruik hiervoor &#039;&#039;&#039;upd_schema.sh&#039;&#039;&#039; in dezelfde directory. De resulterende hcc_schema.ldif wordt in dit script naar /etc/ldap/schema gecopieërd. Bij grote wijzigingen is het aan te bevelen door de hele rebuild cycle te gaan (dump, init, restore). Bij triviale aanpassingen zou hcc_schema.ldif ook &#039;&#039;&#039;direct&#039;&#039;&#039; in de actieve directory geplaatst kunnen worden, gevolgd door slechts een &#039;&#039;&#039;service slapd restart&#039;&#039;&#039;. Gebruik hiervoor (blijf in de lokale schema directory):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp &amp;quot;ldif_output/cn=config/cn=schema/cn={14}hcc_schema.ldif&amp;quot; &amp;quot;/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}hcc_schema.ldif&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
LET OP: De nummers tussen accolades zijn bepaald door de volgorde van andere scripts! Zolang geen andere schema&#039;s worden toegevoegd zullen ze niet veranderen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ook kan met de ldap-tools gewerkt worden. Gebruik ldapsearch en ldapmodify, eventueel met de -f optie om een voorbereide serie opdrachten uit te voeren. Gebruik ldapsearch om eerst de structuur te vinden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier een voorbeeld om een objectClass aan te passen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat pas_aan.ldif&lt;br /&gt;
dn: cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
delete: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description ) )&lt;br /&gt;
-&lt;br /&gt;
add: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description $ hccIg ) )&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
$sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f pas_aan.ldif &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_config.ldif===&lt;br /&gt;
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 &#039;&#039;&#039;STATS&#039;&#039;&#039; gezet. Dit geeft niet teveel logging maar is toch goed bruikbaar. Om extra logging te krijgen op b.v. ACL&#039;s, verander olcLogLevel dan in &amp;quot;stats ACL&amp;quot;.  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-config.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcTLSCACertificateFile&lt;br /&gt;
olcTLSCACertificateFile: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
-&lt;br /&gt;
add: olcTLSCertificateFile&lt;br /&gt;
olcTLSCertificateFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
-&lt;br /&gt;
add: olcTLSCertificateKeyFile&lt;br /&gt;
olcTLSCertificateKeyFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
-&lt;br /&gt;
add: olcPasswordHash&lt;br /&gt;
olcPasswordHash: {CRYPT}&lt;br /&gt;
-&lt;br /&gt;
add: olcPasswordCryptSaltFormat&lt;br /&gt;
olcPasswordCryptSaltFormat: $6$%.16s&lt;br /&gt;
-&lt;br /&gt;
replace: olcLogLevel&lt;br /&gt;
olcLogLevel: stats&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Om de logging in een apart bestand te krijgen moet in /etc/rsyslog.d een extra bestand &#039;&#039;&#039;openldap.conf&#039;&#039;&#039; geplaatst worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local4.*   -/var/log/openldap.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Tevens willen we logrotate op dit bestand. Plaats in /etc/logrotate.d het bestand &#039;&#039;&#039;openldap&#039;&#039;&#039; met de volgende inhoud&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/log/openldap.log&lt;br /&gt;
{&lt;br /&gt;
        rotate 4&lt;br /&gt;
        weekly&lt;br /&gt;
        missingok&lt;br /&gt;
        notifempty&lt;br /&gt;
        compress&lt;br /&gt;
        delaycompress&lt;br /&gt;
        sharedscripts&lt;br /&gt;
        postrotate&lt;br /&gt;
                reload rsyslog &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 || true&lt;br /&gt;
        endscript&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify-mdb.ldif===&lt;br /&gt;
Hier worden de wijzigingen op de backend db gemaakt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-mdb.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
# hjv 2020.06.07 (oldSizeLimit toegevoegd)&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcDbCheckpoint&lt;br /&gt;
olcDbCheckpoint: 4096 1&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbNoSync&lt;br /&gt;
olcDbNoSync: TRUE&lt;br /&gt;
-&lt;br /&gt;
replace: olcSizeLimit&lt;br /&gt;
olcSizeLimit: 100000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===modify-acl===&lt;br /&gt;
Hier worden de rechten bepaald van de diverse rollen en groepen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-acl.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcAccess&lt;br /&gt;
# hobbynetlogin heeft lees rechten t.b.v. MySecureShell aanloggen&lt;br /&gt;
olcAccess: to attrs=@posixAccount,@posixGroup,@shadowAccount,@hostObject&lt;br /&gt;
  by dn=&amp;quot;cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to attrs=@posixAccount&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# sta anonymous search toe (t.b.v. Apache authenticatie)&lt;br /&gt;
olcAccess: to attrs=hccLogin,hccRol,hccProfiel,entry&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# olcAccess: to attrs=hccOptIn&lt;br /&gt;
#   by self write&lt;br /&gt;
#   by dn=&amp;quot;cn=drupal-hcc-nl,ou=klanten,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
#   by * break&lt;br /&gt;
#&lt;br /&gt;
# Anonieme klanten moeten kunnen inloggen&lt;br /&gt;
# en mogen hun eigen password wijzigen&lt;br /&gt;
olcAccess: to attrs=userPassword,shadowLastChange&lt;br /&gt;
  by self write&lt;br /&gt;
  by anonymous auth&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# Gebruiker mag zijn kader email wachtwoord aanpassen&lt;br /&gt;
olcAccess: to attrs=hccKaderPassword,hccKaderForward&lt;br /&gt;
  by self write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# beheerders hebben schrijfrechten op alles (updateDN)&lt;br /&gt;
# klanten hebben alleen lees rechten op alles (readDN)&lt;br /&gt;
# self mag lezen&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by self read&lt;br /&gt;
  by dn=&amp;quot;cn=xml-hoge-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn=&amp;quot;cn=xml-lage-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by dn.one=&amp;quot;ou=beheer,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn.one=&amp;quot;ou=klanten,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# PC30 helpdesk heeft leesrechten op ou=leden&lt;br /&gt;
olcAccess: to attrs=@hccOrgPerson,@hccKaderFunctie&lt;br /&gt;
  by dn.one=&amp;quot;ou=helpdesk,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# partners mogen een paar attrs lezen&lt;br /&gt;
olcAccess: to attrs=hccLidNummer,hccPostcode,hccPostcodeZoekveld,hccIg&lt;br /&gt;
  by dn.one=&amp;quot;ou=partners,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# iedereen moet (pseudo attr) entry en objectClass kunnen lezen&lt;br /&gt;
olcAccess: to attrs=entry,objectClass&lt;br /&gt;
  by * read&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by * none&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_index.ldif===&lt;br /&gt;
Een kale configuratie is heel snel voor wat betreft het opnieuw vullen met gegevens. Bij het aanmaken van een verse LDAP database worden er dan ook zo min mogelijk indexen aangemaakt.&amp;lt;br&amp;gt;&lt;br /&gt;
Zodra de inhoud is ingelezen kunnen de &#039;echte&#039; indexen aangemaakt worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## modify-index.ldif                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
replace: olcDbIndex&lt;br /&gt;
olcDbIndex: default pres,eq&lt;br /&gt;
olcDbIndex: objectClass,entryUUID,entryCSN eq&lt;br /&gt;
olcDbIndex: hccLidNummer,hccLogin,hccForumLogin eq&lt;br /&gt;
olcDbIndex: uid,uidNumber,gidNumber,memberUid,member eq&lt;br /&gt;
olcDbIndex: cn,host,hccPseudoniem,hccOptin,hccLocatie eq&lt;br /&gt;
olcDbIndex: sn,hccPostcodeZoekveld,hccIg,hccRegio eq,subfinal&lt;br /&gt;
olcDbIndex: hccRol,hccBezoek eq,pres,subfinal&lt;br /&gt;
olcDbIndex: hccBulletins pres&lt;br /&gt;
olcDbIndex: aboNummer eq&lt;br /&gt;
olcDbIndex: aboPostcodeZoekveld eq,subfinal&lt;br /&gt;
olcDbIndex: mail,mailHccnet,hccKaderMail pres,eq&lt;br /&gt;
olcDbIndex: hccProfiel pres&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ppolicy overlay===&lt;br /&gt;
* vanuit LDAP de minimale lengte van een wachtwoord afdwingen&lt;br /&gt;
* in LDAP SSHA versleuteling activeren&amp;lt;br&amp;gt;&lt;br /&gt;
(olcPPolicyHashCleartext: TRUE)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-ppolicy.ldif                  ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module, cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectClass: olcModuleList&lt;br /&gt;
objectClass: top&lt;br /&gt;
olcModuleLoad: ppolicy&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=ppolicy,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcPPolicyConfig&lt;br /&gt;
olcOverlay: ppolicy&lt;br /&gt;
olcPPolicyDefault: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
olcPPolicyUseLockout: TRUE&lt;br /&gt;
olcPPolicyHashCleartext: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The default ppolicy looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dn: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
objectClass: pwdPolicy&lt;br /&gt;
objectClass: device&lt;br /&gt;
cn: default&lt;br /&gt;
pwdCheckQuality: 1&lt;br /&gt;
pwdMinLength: 8&lt;br /&gt;
pwdAttribute: 2.5.4.35&lt;br /&gt;
pwdAllowUserChange: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Syncrepl overlay===&lt;br /&gt;
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 [http://www.openldap.org/doc/admin/ LDAP Admin Guide]. &#039;&#039;&#039;Mirror configuratie is specifiek per server!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-syncrepl.tmpl                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
replace: olcServerID&lt;br /&gt;
olcServerID: @SID@&lt;br /&gt;
&lt;br /&gt;
dn: cn=module{0},cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcModuleLoad&lt;br /&gt;
olcModuleLoad: syncprov&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcSyncProvConfig&lt;br /&gt;
olcOverlay: syncprov&lt;br /&gt;
olcSpCheckpoint: 100 5&lt;br /&gt;
olcSpSessionlog: 100&lt;br /&gt;
&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcSyncRepl&lt;br /&gt;
olcSyncRepl: rid=@RID@&lt;br /&gt;
  provider=ldap://@PROVIDER@&lt;br /&gt;
  binddn=&amp;quot;cn=admin,dc=hcc,dc=nl&amp;quot; bindmethod=simple credentials=&amp;quot;@PASSWORD@&amp;quot;&lt;br /&gt;
  searchbase=&amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
  type=refreshAndPersist&lt;br /&gt;
  interval=00:00:00:10&lt;br /&gt;
  retry=&amp;quot;5 5 300 5&amp;quot;&lt;br /&gt;
  timeout=1&lt;br /&gt;
  starttls=yes&lt;br /&gt;
-&lt;br /&gt;
add: olcMirrorMode&lt;br /&gt;
olcMirrorMode: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
De andere server krijgt ServerID 2 en de provider is het IP adres van de andere server.&lt;br /&gt;
&lt;br /&gt;
===Unique overlay===&lt;br /&gt;
Deze overlay dient er voor te zorgen dat o.a het attribuut hccLogin een unieke waarde bevat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-unique.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module,cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectclass: olcModuleList&lt;br /&gt;
objectclass: top&lt;br /&gt;
olcmoduleload: unique&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=unique,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcUniqueConfig&lt;br /&gt;
olcOverlay: unique&lt;br /&gt;
olcUniqueAttribute: uid uidNumber hccLogin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SSL/TLS beveiliging==&lt;br /&gt;
Gebruik de juiste .pem bestanden in /etc/ssl/certs en /etc/ssl/private.&lt;br /&gt;
&lt;br /&gt;
We maken gebruik van een RapidSSL certificaat. Als dit niet standaard in Ubuntu bekend is, zet dan eerst GeoTrust_RapidSSL_-_ca-bundle.pem in de map /etc/ssl/certs neer. Voer nu een &#039;&#039;&#039;c_rehash .&#039;&#039;&#039; uit in /etc/ssl/certs om de cache te updaten (omdat GeoTrust_RapidSSL_-_ca-bundle.pem nieuw werd toegevoegd). &lt;br /&gt;
&lt;br /&gt;
De ownership is belangrijk. Hiertoe wordt de groep &amp;quot;openldap&amp;quot; toegevoegd aan de groep ssl-cert.&lt;br /&gt;
 adduser openldap ssl-cert&lt;br /&gt;
&lt;br /&gt;
Als dit fout gaat, doe dan eerst:&lt;br /&gt;
 apt-get install ssl-cert&lt;br /&gt;
&lt;br /&gt;
Zet het certificaat en de private key in de juiste groep:&lt;br /&gt;
 chgrp ssl-cert /etc/ssl/private/hobby.nl.*&lt;br /&gt;
 chmod 440      /etc/ssl/private/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
Het resultaat is dan als volgt:&lt;br /&gt;
 root@hcc-ldap-lb1:~# ls -l /etc/ssl/private/hcc* &lt;br /&gt;
 -rw-r--r-- 1 root     ssl-cert 1724 Nov 22 20:47 hobby.nl.crt&lt;br /&gt;
 -r--r----- 1 root     ssl-cert 1679 Nov 22 20:25 hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
 root@hcc-ldap-lb1:~# grep openldap /etc/group&lt;br /&gt;
 ssl-cert:x:114:openldap&lt;br /&gt;
 openldap:x:118:&lt;br /&gt;
&lt;br /&gt;
2020.12.09: Op een nieuwe Ubuntu installatie staat apparmor standaard aan. Weg ermee!&lt;br /&gt;
 apt remove --assume-yes --purge apparmor&lt;br /&gt;
&amp;lt;strike&amp;gt;Per september 2017 staan de certificaten in /disk/site/etc/ssl/hobby.nl, net als op alle andere servers. Omdat apparmor actief is moet deze directory worden toegevoegd aan /etc/apparmor.d/local/usr.sbin.slapd. Die file ziet er dan als volgt uit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Site-specific additions and overrides for usr.sbin.slapd.&lt;br /&gt;
# For more details, please see /etc/apparmor.d/local/README.&lt;br /&gt;
#include &amp;lt;abstractions/ssl_certs&amp;gt;&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/ r,&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/* r,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Openldap ook op poort 636 benaderd wordt (naast TLS op 389), moet in /etc/default/slapd ldaps:/// opgenomen worden bij de SLAPD_SERVICES.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;netstat -an&#039; dient dan 636 te laten zien voor zowel IPv4 als IPv6.&lt;br /&gt;
&lt;br /&gt;
Om de cn=config te zien kan je het volgende commando gebruiken:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config&lt;br /&gt;
&lt;br /&gt;
of, wat botter maar korter:&lt;br /&gt;
cat /etc/ldap/slapd.d/cn\=config.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Backup, initialize, restore==&lt;br /&gt;
Om het hele skelet van ldap in één keer te herstellen dient &#039;&#039;&#039;init_ldap&#039;&#039;&#039; gebruikt te worden. Als argument &#039;&#039;&#039;moet&#039;&#039;&#039; het admin beheer wachtwoord mee gegeven worden.&lt;br /&gt;
&lt;br /&gt;
===lokaal===&lt;br /&gt;
Backups kunnen gemaakt worden terwijl slapd draait maar geadviseerd wordt slapd te stoppen. Voor dumpen moet &#039;&#039;&#039;slapcat&#039;&#039;&#039; gebruikt worden. Backups kunnen gemaakt worden per database of een filter daarop, naar een ldif bestand.&lt;br /&gt;
 slapcat -l hcc-dump.ldif -b &amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
Dit maakt een dump van alles onder &#039;&#039;&#039;dc=hcc,dc=nl&#039;&#039;&#039; naar het bestand hcc-dump.ldif. Ook is het mogelijk het database nummer te gebruiken, config is altijd nummer 0, hdb is gewoonlijk 1.&lt;br /&gt;
&lt;br /&gt;
Het &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; script dumpt alle ou&#039;s in aparte .ldif bestanden; het omgekeerde doet &#039;&#039;&#039;restore_ldap&#039;&#039;&#039;.  &lt;br /&gt;
Terug inlezen kan alleen in een lege directory, dus direct nadat &#039;&#039;&#039;init_ldap&#039;&#039;&#039; is gedaan. Gebruik voor het terugplaatsen &#039;&#039;&#039;slapadd&#039;&#039;&#039;. Aan te bevelen is &#039;&#039;&#039;-c&#039;&#039;&#039; mee te geven zodat ondanks fouten doorgegaan wordt. &lt;br /&gt;
&lt;br /&gt;
Voor slapadd &#039;&#039;&#039;moet&#039;&#039;&#039; 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)&lt;br /&gt;
 /etc/init.d/slapd stop&lt;br /&gt;
 slapadd -l hcc-dump.ldif -w -c &amp;gt;errors.txt&lt;br /&gt;
 chown openldap:openldap /var/lib/ldap/*&lt;br /&gt;
 /etc/init.d/slapd start&lt;br /&gt;
&lt;br /&gt;
===remote===&lt;br /&gt;
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 &#039;&#039;&#039;backup-encrypted&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Recente lokale backups zijn te vinden in &#039;&#039;&#039;/usr/local/hobbynet/tmp&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Verse ldap maken===&lt;br /&gt;
Transactie log bij het toevoegen van b.v. een nieuwe ou:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Op beide servers:&lt;br /&gt;
schema van test server gecopieerd en geactiveerd&lt;br /&gt;
dump-ldap gedraaid&lt;br /&gt;
systemctl stop slapd.service &lt;br /&gt;
&lt;br /&gt;
Er is nu géén ldap service! Werk dus snel...&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb1&lt;br /&gt;
systemctl stop slapd.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
op ldap-lb2:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb2&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
systemctl start slapd.service&lt;br /&gt;
Beide slapd servers zijn in de lucht en moeten synchroniseren.&lt;br /&gt;
&lt;br /&gt;
op beide servers:&lt;br /&gt;
check replicatie (netstat en functioneel)&lt;br /&gt;
&lt;br /&gt;
root@ldap-lb1:/usr/local/hobbynet/bin# netstat -n | grep 389&lt;br /&gt;
tcp        0      0 172.31.8.4:36838        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:36836        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58112        ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58114        ESTABLISHED&lt;br /&gt;
&lt;br /&gt;
Functioneel door met ADS op beide servers in te loggen en een willekeurig veld in je eigen entry te wijzigen op lb1. Kijk of het gebeurd is op lb2 en wijzig het daar terug. Check op de andere server of het gebeurd is. Er kan een zekere vertraging in optreden.&lt;br /&gt;
&lt;br /&gt;
Stel er is een nieuwe ou gemaakt: denk aan het bij werken van de dump en restore scripts.&lt;br /&gt;
&lt;br /&gt;
update dump-ldap.sh en restore-ldap.sh met de nieuwe ou&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
export tarieven.ldif op test server en import op ldap-lb1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==crontab==&lt;br /&gt;
 # script dat updates ophaalt (maar niet installeert), zodat nagios ze ook detecteert&lt;br /&gt;
 0 9 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
==LDAP Clients==&lt;br /&gt;
Er zijn meerdere LDAP clients. De meest populaire zijn Apache Directory Studio (&amp;quot;ADS&amp;quot;) en phpLdapAdmin (&amp;quot;PLA&amp;quot;).&amp;lt;br&amp;gt;&lt;br /&gt;
De eerste is veel uitgbreider maar vereist een Java Runtime Environment (&amp;quot;JRE&amp;quot;). Onder Windows is dat JRE(13) of (open)JDK-(13).&amp;lt;br&amp;gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Binnen Hobbynet wordt uitsluitend gebruik gemaakt van ADS.&lt;br /&gt;
&lt;br /&gt;
===StartTLS===&lt;br /&gt;
Aanbevolen wordt StartTLS op poort 389 te gebruiken. Alternatief is LDAPS op poort 636 maar dat is deprecated. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Windows===&lt;br /&gt;
&amp;lt;i&amp;gt;2019-10-31 HJV: Oude info, als referentie leuk, maar niet meer relevant&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Onder Windows moet met &#039;&#039;&#039;keytool.exe&#039;&#039;&#039; gewerkt worden. De uitleg heb ik van  [http://www.talkingtree.com/blog/index.cfm?mode=entry&amp;amp;entry=25AA75A4-45A6-2844-7CA3EECD842DB576 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:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Haal de benodigde bestanden op (op een Linux systeem):&lt;br /&gt;
wget http://www.cacert.org/certs/root.der -O root.der&lt;br /&gt;
wget http://www.cacert.org/certs/class3.der -O class3.der&lt;br /&gt;
copieer de bestanden naar de Windows omgeving in C:\Program Files (x86)\Java\jre6\lib\security.&lt;br /&gt;
&lt;br /&gt;
Open een commandwindow:&lt;br /&gt;
cd C:\Program Files (x86)\Java\jre6\lib\security&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass1 -file root.der&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass3 -file class3.der&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Linux===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS gebruik===&lt;br /&gt;
ADS kan erg handig zijn voor het snel dumpen van hele ou&#039;s in .ldif formaat. Zo&#039;n dump kan direct op een andere server worden ingelezen.&lt;br /&gt;
&lt;br /&gt;
===PhpLdapAdmin onder Linux===&lt;br /&gt;
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 [http://phpldapadmin.sourceforge.net/wiki/index.php/Server:server:tls phpldapadmin wiki].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# LDAP Defaults&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# See ldap.conf(5) for details&lt;br /&gt;
# This file should be world readable but not world writable.&lt;br /&gt;
&lt;br /&gt;
#BASE   dc=example,dc=com&lt;br /&gt;
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666&lt;br /&gt;
&lt;br /&gt;
#SIZELIMIT      12&lt;br /&gt;
#TIMELIMIT      15&lt;br /&gt;
#DEREF          never&lt;br /&gt;
TLS_CACERT      /etc/ssl/certs/CAcert_org.pem&lt;br /&gt;
TLS_CERT        /etc/ssl/private/hobby.nl.crt&lt;br /&gt;
TLS_KEY         /etc/ssl/private/hobby.nl.key&lt;br /&gt;
TLS_REQCERT     allow&lt;br /&gt;
#TLS_REQCERT never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Denk er wel aan na wijzigingen Apache te herstarten.&lt;br /&gt;
===PAM en NSS via LDAP===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Installeer &#039;&#039;&#039;libnss-ldapd&#039;&#039;&#039; om de benodigde libraries te verkrijgen. Apt-get zal tevens &#039;&#039;&#039;libpam-ldapd&#039;&#039;&#039;, &#039;&#039;&#039;nslcd&#039;&#039;&#039; en &#039;&#039;&#039;nscd&#039;&#039;&#039; binnen brengen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install libnss-ldapd auth-client-config ldap-utils&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
    libpam-ldapd nscd nslcd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Libnss-ldapd is een doorontwikkeling van libnss-ldap en bevat meerdere verbeteringen. Zie: [http://arthurdejong.org/nss-pam-ldapd/ deze site] van de ontwikkelaar. Bij de installatie wordt een user &#039;&#039;&#039;nslcd&#039;&#039;&#039; aangemaakt; denk erom die in de .tmpl bestanden te zetten!&lt;br /&gt;
  &lt;br /&gt;
nsswitch.conf laat zich configureren via &#039;&#039;&#039;auth-client-config&#039;&#039;&#039; maar lac_ldap is alleen aanwezig als &#039;&#039;&#039;ldap-auth-config&#039;&#039;&#039; ook is geinstalleerd. Zo niet gebruik dan de tweede regel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auth-client-config -t nss -p lac_ldap&lt;br /&gt;
auth-client-config -t nss -p ldap_example&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het resultaat is dat nsswitch.conf zowel in files (/etc/passwd etc.) zoekt als in ldap.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nsswitch.conf&lt;br /&gt;
#&lt;br /&gt;
# Example configuration of GNU Name Service Switch functionality.&lt;br /&gt;
# If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
# `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # passwd:         compat&lt;br /&gt;
passwd: files ldap&lt;br /&gt;
# pre_auth-client-config # group:          compat&lt;br /&gt;
group: files ldap&lt;br /&gt;
# pre_auth-client-config # shadow:         compat&lt;br /&gt;
shadow: files ldap&lt;br /&gt;
&lt;br /&gt;
hosts:          files dns&lt;br /&gt;
networks:       files&lt;br /&gt;
&lt;br /&gt;
protocols:      db files&lt;br /&gt;
services:       db files&lt;br /&gt;
ethers:         db files&lt;br /&gt;
rpc:            db files&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # netgroup:       nis&lt;br /&gt;
netgroup: nis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het aanpassen van de PAM bestanden gaat sinds enige releases met &#039;&#039;&#039;pam-auth-update&#039;&#039;&#039;. Kies in het menu voor zowel unix als ldap. Default wordt nu ldap authenticatie gebruikt voor uid &amp;gt;= 1000. Bij Hobbynet willen we vanaf 300 ldap gebruiken. Door een licht gemodificeerde versie van /usr/share/pam-configs/ldap te maken (ldap-hobbynet), kan ook voor de hobbynet instelling gekozen worden. Dit is de ldap-hobbynet versie:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Name: LDAP Authentication (uid&amp;gt;300)&lt;br /&gt;
Default: yes&lt;br /&gt;
Priority: 128&lt;br /&gt;
Auth-Type: Primary&lt;br /&gt;
Auth-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Auth:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 use_first_pass&lt;br /&gt;
Account-Type: Additional&lt;br /&gt;
Account:&lt;br /&gt;
        [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad]        pam_ldap.so minimum_uid=300&lt;br /&gt;
Password-Type: Primary&lt;br /&gt;
Password-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Password:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 try_first_pass&lt;br /&gt;
Session-Type: Additional&lt;br /&gt;
Session:&lt;br /&gt;
        [success=ok default=ignore]     pam_ldap.so minimum_uid=300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dit is in een standaard opzet van LDAP voldoende om zowel lokale gebruikers als gebruikers opgeslagen in LDAP, te laten inloggen en hun password te laten wijzigen. In de Hobbynet setup moet er echter nog meer gebeuren in de ACL&#039;s van de LDAP server configuratie. Omdat Hobbynet de laatste ACL regel heeft gewijzigd in een &#039;&#039;&#039;deny-all&#039;&#039;&#039;, is er een helper of proxy account nodig dat read access heeft of een aantal cruciale velden in de posixAccount objectClass. Zie verder de lsiting van nslcd.conf.&lt;br /&gt;
&lt;br /&gt;
Libnss-ldapd en libpam-ldapd hebben een gezamelijke daemon &#039;&#039;&#039;nslcd&#039;&#039;&#039; die z&#039;n configuratie uit &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039; haalt. Hierin is ook een voorziening voor het helper account. Aan het eind vande &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; staat de voorziening voor host-based login. Als het attribute &#039;&#039;&#039;host&#039;&#039;&#039; de fqdn of alleen de host naam bevat, bepaald dat of inloggen op die host mogelijk is. &#039;&#039;&#039;*&#039;&#039;&#039; staat inloggen op alle hosts toe.&lt;br /&gt;
&lt;br /&gt;
Eventueel kan het daemon proces voor debugging doeleinden ook als command (&#039;&#039;&#039;nslcd -d&#039;&#039;&#039;) gestart worden. Om de bevragingen van de LDAP server wat te verminderen, kan &#039;&#039;&#039;nscd&#039;&#039;&#039; voor caching zorgen. Deze cache daemon heeft zijn eigen configuratie bestand: &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039;. De default instellingen zijn goed; eventueel kan de logging naar een bestand gestuurd worden.&lt;br /&gt;
&lt;br /&gt;
Verbinding met de LDAP server kan met StartTLS beveiligd worden. Hier de inhoud van nslcd.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nslcd.conf&lt;br /&gt;
# nslcd configuration file. See nslcd.conf(5)&lt;br /&gt;
# for details.&lt;br /&gt;
&lt;br /&gt;
# The user and group nslcd should run as.&lt;br /&gt;
uid nslcd&lt;br /&gt;
gid nslcd&lt;br /&gt;
&lt;br /&gt;
# log location and level&lt;br /&gt;
#log /var/log/nslcd.log debug&lt;br /&gt;
&lt;br /&gt;
# The location at which the LDAP server(s) should be reachable.&lt;br /&gt;
uri ldap://ldap2-int.hobby.nl/&lt;br /&gt;
&lt;br /&gt;
# The search base that will be used for all queries.&lt;br /&gt;
base dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# Other base mappings&lt;br /&gt;
base   group  ou=groups,dc=hcc,dc=nl&lt;br /&gt;
base   passwd ou=users,dc=hcc,dc=nl&lt;br /&gt;
base   shadow ou=users,dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# The search scope.&lt;br /&gt;
#scope sub&lt;br /&gt;
&lt;br /&gt;
# The LDAP protocol version to use.&lt;br /&gt;
ldap_version 3&lt;br /&gt;
&lt;br /&gt;
# The DN to bind with for normal lookups.&lt;br /&gt;
#binddn cn=annonymous,dc=example,dc=net&lt;br /&gt;
#bindpw secret&lt;br /&gt;
binddn cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&lt;br /&gt;
bindpw xxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
# The DN used for password modifications by root.&lt;br /&gt;
#rootpwmoddn cn=admin,dc=example,dc=com&lt;br /&gt;
&lt;br /&gt;
# SSL options&lt;br /&gt;
ssl off&lt;br /&gt;
ssl start_tls&lt;br /&gt;
#tls_reqcert never&lt;br /&gt;
tls_cacertfile /etc/ssl/certs/cacert.org.pem&lt;br /&gt;
#tls_cert /etc/ssl/private/server.crt&lt;br /&gt;
#tls_key /etc/ssl/private/server.key&lt;br /&gt;
&lt;br /&gt;
# The minimum uid&lt;br /&gt;
nss_min_uid 300&lt;br /&gt;
&lt;br /&gt;
pam_authz_search (&amp;amp;(objectClass=posixAccount)(uid=$username)(|(host=$hostname)(host=$fqdn)(host=\\*)))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===users en groepen toevoegen===&lt;br /&gt;
Hiervoor moet &#039;&#039;&#039;ldapscripts&#039;&#039;&#039; zijn geïnstalleerd. Dit is het geval op de ldap-lb1 server. Dat levert de volgende extra commando&#039;s op:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldaprenamemachine&lt;br /&gt;
ldapadduser&lt;br /&gt;
ldapdeleteuserfromgroup&lt;br /&gt;
ldapfinger&lt;br /&gt;
ldapid&lt;br /&gt;
ldapgid&lt;br /&gt;
ldapmodifyuser&lt;br /&gt;
ldaprenameuser&lt;br /&gt;
lsldap&lt;br /&gt;
ldapaddusertogroup&lt;br /&gt;
ldapsetpasswd&lt;br /&gt;
ldapinit&lt;br /&gt;
ldapaddgroup&lt;br /&gt;
ldapdeletegroup&lt;br /&gt;
ldapmodifygroup&lt;br /&gt;
ldapdeletemachine&lt;br /&gt;
ldaprenamegroup&lt;br /&gt;
ldapaddmachine&lt;br /&gt;
ldapmodifymachine&lt;br /&gt;
ldapsetprimarygroup&lt;br /&gt;
ldapdeleteuser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Meest gebruikt zijn &#039;&#039;&#039;ldapaddgroup, ldapadduser, ldapsetpasswd&#039;&#039;&#039;.  &lt;br /&gt;
Er zijn manpages maar er is ook uitgebreide uitleg in de [https://help.ubuntu.com/14.04/serverguide/openldap-server.html Ubuntu server guide]. Omdat wij het automatisch maken van de home dir uit hebben staan, moet die met de hand aangemaakt worden en moet de owner goed gezet worden.&lt;br /&gt;
&lt;br /&gt;
===host-based login===&lt;br /&gt;
Met een kleine uitbreiding in het schema van de LDAP server, kan host-based login gerealiseerd worden. Ook in de &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; is een uitbreiding nodig.&lt;br /&gt;
&lt;br /&gt;
In de LDAP server dient de objectClass &#039;&#039;&#039;hostObject&#039;&#039;&#039; aan de entries in de ou=users toegevoegd te worden. Deze (auxilary) objectClass brengt slechts één attribute met zich mee: &#039;&#039;&#039;host&#039;&#039;&#039;. De regel in nslcd.conf checkt of één van de waarden van &#039;&#039;&#039;host&#039;&#039;&#039; gelijk is aan de naam van de server waarop ingelogd wordt. De waarde &#039;&#039;&#039;*&#039;&#039;&#039; geldt als wildcard. Zie de regel &#039;&#039;&lt;br /&gt;
&#039;pam_authz_search&#039;&#039;&#039;&#039; in &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Password aanpassen===&lt;br /&gt;
Via LDAP ingelogde gebruikers kunnen net als lokale gebruikers hun wachtwoord met &#039;&#039;&#039;passwd&#039;&#039;&#039; wijzigen. Wel moet aan de eisen in de LDAP ppolicy module voldaan worden.&lt;br /&gt;
&lt;br /&gt;
==PHP scripting==&lt;br /&gt;
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 &#039;&#039;&#039;/usr/local/hobbynet/bin&#039;&#039;&#039; directory.&lt;br /&gt;
Voor de php-scripting zijn enkele php7.x pakketten nodig. Installeer deze met apt-get. Het gaat om:&lt;br /&gt;
* php-cli&lt;br /&gt;
* php-ldap&lt;br /&gt;
&lt;br /&gt;
== Apache authenticatie via LDAP ==&lt;br /&gt;
In plaats van .htpassword authenticatie, kan ook LDAP gebruikt worden. Activeer daartoe de Apache module&lt;br /&gt;
&#039;authnz_ldap&#039;.&lt;br /&gt;
 a2enmod authnz_ldap&lt;br /&gt;
Denk er om dat dit in een loadbalanced situatie op beide servers gedaan dient te worden!&lt;br /&gt;
&lt;br /&gt;
=== Voorbeeld van een LDAP configuratie in de Apache config ===&lt;br /&gt;
(alleen als voorbeeld, niet zo gebruiken!)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# // 1) Hobbynet webmaster&lt;br /&gt;
# // 2) Vraagbaak medewerker van een willekeurige groepering&lt;br /&gt;
# (|(hccRol=*#VRBK)(hccRol=HN#WM))&lt;br /&gt;
  &amp;lt;Location &amp;quot;/apps/vraagbaak&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;RequireAll&amp;gt;&lt;br /&gt;
      Authname &amp;quot;HCC!vraagbaak (gebruik uw hcc.nl gebruikersnaam/wachtwoord)&amp;quot;&lt;br /&gt;
      AuthType Basic&lt;br /&gt;
      AuthBasicProvider ldap&lt;br /&gt;
      AuthLDAPUrl ldap://hcc-ldap-int.hobby.nl/ou=leden,dc=hcc,dc=nl?hccLogin??(|(hccRol=*#VRBK)(hccRol=HN#WM))(hccProfiel=TRUE) TLS&lt;br /&gt;
      require valid-user&lt;br /&gt;
    &amp;lt;/RequireAll&amp;gt;&lt;br /&gt;
  &amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hoe kan LDAP veilig gebruikt worden vanuit Apache===&lt;br /&gt;
Zet een script neer in de gebruikersomgeving, en gebruik mod_authz_external. Doe de controle vervolgens via de XML-RPC server.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zie [[Kadernet]] voor een voorbeeld.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== TODO lijst ==&lt;br /&gt;
&#039;&#039;Dit is een lijst in wording, graag aanvullen&#039;&#039; &lt;br /&gt;
* &#039;dun&#039; loadbalancer script maken om te controleren dat LDAP echt luistert&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79063</id>
		<title>LDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79063"/>
		<updated>2020-12-10T21:23:32Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* modify_config.ldif */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introductie==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==LDAP server keuze==&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Loadbalanced==&lt;br /&gt;
Er zijn twee servers (ldap-lb1 en ldap-lb2) die achter een loadbalancer in preferred server mode staan 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.&lt;br /&gt;
&lt;br /&gt;
Tevens zijn er een test en een development server: ldap-test en ldap-dev.&lt;br /&gt;
&lt;br /&gt;
==Installatie==&lt;br /&gt;
Installatie van OpenLDAP is simpel:&lt;br /&gt;
 aptitude install slapd ldap-utils&lt;br /&gt;
Omdat er gebruikgemaakt wordt van php scripts, is het ook nodig &#039;&#039;&#039;php-cli&#039;&#039;&#039; en &#039;&#039;&#039;php-ldap&#039;&#039;&#039; te installeren. De configuratie van OpenLDAP is sinds Karmic Koala iets gecompliceerder geworden. &#039;cn=config&#039; 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 &amp;quot;dpkg-reconfigure slapd&amp;quot; zet alleen de skeleton configuratie terug. Je moet zelf de database, root dn en acl&#039;s opzetten (als root of met sudo). Run  &#039;&#039;&#039;dpkg-reconfigure slapd&#039;&#039;&#039; om terug te gaan naar een lege directory. &lt;br /&gt;
&lt;br /&gt;
De volgende pakketten dienen geïnstalleerd te zijn (&#039;php -m&#039; toont de geactiveerde modules):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontbrekende pakketten volgens hjv:&lt;br /&gt;
&lt;br /&gt;
apt-get install aptitude &lt;br /&gt;
apt-get install phpmyadmin&lt;br /&gt;
apt-get install php-mbstring&lt;br /&gt;
apt-get install php-gettext&lt;br /&gt;
apt-get install php-xmlrpc&lt;br /&gt;
apt-get install php-ldap&lt;br /&gt;
apt-get install mysql-server&lt;br /&gt;
apt-get install ldapscripts&lt;br /&gt;
apt-get install php-xml&lt;br /&gt;
apt-get install slapd&lt;br /&gt;
apt-get install ldap-utils&lt;br /&gt;
a2enmod ssl&lt;br /&gt;
&lt;br /&gt;
- apache2ctl restart&lt;br /&gt;
&lt;br /&gt;
- openldap moet lid zijn van de groep ssl-cert!&lt;br /&gt;
apt-get install ssl-cert&lt;br /&gt;
adduser openldap ssl-cert&lt;br /&gt;
(of vi /etc/group&lt;br /&gt;
    ssl-cert:x:116:openldap)&lt;br /&gt;
&lt;br /&gt;
- Zorg dat de LDAP daemon bij de certificaten kan komen. &lt;br /&gt;
LET OP: op alle hobbynet servers staan de certificaten in /disk/site/etc/ssl/hobby.nl/&lt;br /&gt;
 chgrp ssl-cert /disk/site/etc/ssl/hobby.nl/hobby.nl.*&lt;br /&gt;
 chmod 440      /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
- mysql laat het bestand ibdata1 ongelimiteerd groeien (InnoDB bestanden)&lt;br /&gt;
 /etc/mysql/mysql.conf.d/innodb_file_per_table.cnf&lt;br /&gt;
 [mysql]&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
&lt;br /&gt;
=============&lt;br /&gt;
Nog meer Hobbynet aanpassingen&lt;br /&gt;
/etc/bash.bashrc&lt;br /&gt;
export http_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export https_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export ftp_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Locatie bestanden===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Alle ldif em tmpl bestanden gaan naar /usr/local/hobbynet/lib&lt;br /&gt;
* init_ldap en andere scripts gaan naar /usr/local/hobbynet/bin&lt;br /&gt;
* alle data bestanden (dumps) en update ldifs gaan naar /usr/local/hobbynet/data&lt;br /&gt;
* etc/ldap/schema/hcc_schema.* gaan naar /etc/ldap/schema&lt;br /&gt;
* etc/ldap/schema/ppolicy.ldif gaat naar /etc/ldap/schema&lt;br /&gt;
&lt;br /&gt;
hcc_schema.ldif wordt middels een script gemaakt. Dit script plaatst de ldif bestand(en) in /etc/ldap/schema. Zie hieronder.&lt;br /&gt;
&lt;br /&gt;
==Initiële database==&lt;br /&gt;
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.sh &amp;lt;admin-pw&amp;gt; gebruikt dan wordt een werkende directory gemaakt met alle statische data (in diverse ou&#039;s) erin. Gebruik na het maken van de initiële database restore_ldap.sh om de database te vullen met de data uit de data directory.&lt;br /&gt;
&lt;br /&gt;
===slapd.init.ldif ===&lt;br /&gt;
Bij installatie en reconfiguratie wordt /usr/share/slapd/slapd.init.ldif ingelezen. Zie aldaar indien nodig.&lt;br /&gt;
&lt;br /&gt;
==init_ldap script==&lt;br /&gt;
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 &#039;&#039;&#039;cn=admin,dc=hcc,dc=nl&#039;&#039;&#039; 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 &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; laadt vervolgens de laatste dump terug. Bij wijzigingen aan het schema is het raadzaam altijd een &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; te doen zodat een later een actuele dump kan worden teruggeladen.&lt;br /&gt;
&lt;br /&gt;
Het (plain text) password van cn=admin,dc=hcc,dc=nl moet bij het aanroepen van &#039;&#039;&#039;init_ldap&#039;&#039;&#039; op de commandline worden meegegeven. Tijdens de dpkg-reconfigure moet het password nog 2x gegeven worden. Lees eventueel ook de [http://www.openldap.org/doc/admin/ OpenLDAP Admin Guide].&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* voorbereidingen om &amp;quot;dpkg-reconfigure slapd&amp;quot; te draaien&lt;br /&gt;
* definities van input files&lt;br /&gt;
* check host&lt;br /&gt;
* bouwen van het skelet van de nieuwe directory&lt;br /&gt;
Zie voor details van de scripts &#039;&#039;&#039;init_ldap&#039;&#039;&#039;, &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; en &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; op een van de servers (in /usr/local/hobbynet/bin).&lt;br /&gt;
&lt;br /&gt;
==onderdelen van init_ldap==&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===add-schema.ldif===&lt;br /&gt;
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. &lt;br /&gt;
* Hiertoe wordt het onderstaande schema in /etc/ldap/schema geplaatst als hcc_schema.schema. &lt;br /&gt;
* Vervolgens worden de stappen uitgevoerd zoals beschreven in de [https://help.ubuntu.com/11.10/serverguide/C/openldap-server.html Ubuntu Server guide], onder &#039;&#039;&#039;Modifying the slapd Configuration Database&#039;&#039;&#039;. &lt;br /&gt;
* De resulterende output file &#039;&#039;&#039;cn=hcc_schema.ldif&#039;&#039;&#039; moet dan nog naar /etc/ldap/schema/hcc_schema.ldif gecopieerd worden. &lt;br /&gt;
Als dit proces herhaald moet worden, start dan met een lege output directory en verwijder een eventueel achtergebleven cn=hcc_schema.ldif bestand. &lt;br /&gt;
&lt;br /&gt;
De extra schema&#039;s worden middels een &#039;&#039;&#039;include&#039;&#039;&#039; toegevoegd. &#039;&#039;&#039;Ppolicy&#039;&#039;&#039; is op gelijke wijze als &#039;&#039;&#039;hcc_schema&#039;&#039;&#039; tot .ldif geconverteerd. Alle stappen om een nieuwe &#039;&#039;&#039;hcc-schema.ldif&#039;&#039;&#039; te maken zijn gescript in &#039;&#039;&#039;upd_schema&#039;&#039;&#039;. In &#039;&#039;&#039;init_ldap&#039;&#039;&#039; wordt het eigen schema en de password policy geladen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-schema.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
include: file:///etc/ldap/schema/hcc_schema.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ppolicy.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ldapns.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====schema updates====&lt;br /&gt;
Soms wordt een attribute toegevoegd of gewijzigd. Hiertoe dient het bestand hcc_schema.schema in /usr/local/hobbynet/etc/ldap/schema, gewijzigd te worden. Daarna dient er een ldif versie van gemaakt te worden. Gebruik hiervoor &#039;&#039;&#039;upd_schema.sh&#039;&#039;&#039; in dezelfde directory. De resulterende hcc_schema.ldif wordt in dit script naar /etc/ldap/schema gecopieërd. Bij grote wijzigingen is het aan te bevelen door de hele rebuild cycle te gaan (dump, init, restore). Bij triviale aanpassingen zou hcc_schema.ldif ook &#039;&#039;&#039;direct&#039;&#039;&#039; in de actieve directory geplaatst kunnen worden, gevolgd door slechts een &#039;&#039;&#039;service slapd restart&#039;&#039;&#039;. Gebruik hiervoor (blijf in de lokale schema directory):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp &amp;quot;ldif_output/cn=config/cn=schema/cn={14}hcc_schema.ldif&amp;quot; &amp;quot;/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}hcc_schema.ldif&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
LET OP: De nummers tussen accolades zijn bepaald door de volgorde van andere scripts! Zolang geen andere schema&#039;s worden toegevoegd zullen ze niet veranderen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ook kan met de ldap-tools gewerkt worden. Gebruik ldapsearch en ldapmodify, eventueel met de -f optie om een voorbereide serie opdrachten uit te voeren. Gebruik ldapsearch om eerst de structuur te vinden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier een voorbeeld om een objectClass aan te passen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat pas_aan.ldif&lt;br /&gt;
dn: cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
delete: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description ) )&lt;br /&gt;
-&lt;br /&gt;
add: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description $ hccIg ) )&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
$sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f pas_aan.ldif &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_config.ldif===&lt;br /&gt;
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 &#039;&#039;&#039;STATS&#039;&#039;&#039; gezet. Dit geeft niet teveel logging maar is toch goed bruikbaar. Om extra logging te krijgen op b.v. ACL&#039;s, verander olcLogLevel dan in &amp;quot;stats ACL&amp;quot;.  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-config.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcTLSCACertificateFile&lt;br /&gt;
olcTLSCACertificateFile: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
-&lt;br /&gt;
add: olcTLSCertificateFile&lt;br /&gt;
olcTLSCertificateFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
-&lt;br /&gt;
add: olcTLSCertificateKeyFile&lt;br /&gt;
olcTLSCertificateKeyFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
-&lt;br /&gt;
add: olcPasswordHash&lt;br /&gt;
olcPasswordHash: {CRYPT}&lt;br /&gt;
-&lt;br /&gt;
add: olcPasswordCryptSaltFormat&lt;br /&gt;
olcPasswordCryptSaltFormat: $6$%.16s&lt;br /&gt;
-&lt;br /&gt;
replace: olcLogLevel&lt;br /&gt;
olcLogLevel: stats&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Om de logging in een apart bestand te krijgen moet in /etc/rsyslog.d een extra bestand &#039;&#039;&#039;openldap.conf&#039;&#039;&#039; geplaatst worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local4.*   -/var/log/openldap.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Tevens willen we logrotate op dit bestand. Plaats in /etc/logrotate.d het bestand &#039;&#039;&#039;openldap&#039;&#039;&#039; met de volgende inhoud&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/log/openldap.log&lt;br /&gt;
{&lt;br /&gt;
        rotate 4&lt;br /&gt;
        weekly&lt;br /&gt;
        missingok&lt;br /&gt;
        notifempty&lt;br /&gt;
        compress&lt;br /&gt;
        delaycompress&lt;br /&gt;
        sharedscripts&lt;br /&gt;
        postrotate&lt;br /&gt;
                reload rsyslog &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 || true&lt;br /&gt;
        endscript&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify-mdb.ldif===&lt;br /&gt;
Hier worden de wijzigingen op de backend db gemaakt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-mdb.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
# hjv 2020.06.07 (oldSizeLimit toegevoegd)&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcDbCheckpoint&lt;br /&gt;
olcDbCheckpoint: 4096 1&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbNoSync&lt;br /&gt;
olcDbNoSync: TRUE&lt;br /&gt;
-&lt;br /&gt;
replace: olcSizeLimit&lt;br /&gt;
olcSizeLimit: 100000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===modify-acl===&lt;br /&gt;
Hier worden de rechten bepaald van de diverse rollen en groepen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-acl.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcAccess&lt;br /&gt;
# hobbynetlogin heeft lees rechten t.b.v. MySecureShell aanloggen&lt;br /&gt;
olcAccess: to attrs=@posixAccount,@posixGroup,@shadowAccount,@hostObject&lt;br /&gt;
  by dn=&amp;quot;cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to attrs=@posixAccount&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# sta anonymous search toe (t.b.v. Apache authenticatie)&lt;br /&gt;
olcAccess: to attrs=hccLogin,hccRol,hccProfiel,entry&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# olcAccess: to attrs=hccOptIn&lt;br /&gt;
#   by self write&lt;br /&gt;
#   by dn=&amp;quot;cn=drupal-hcc-nl,ou=klanten,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
#   by * break&lt;br /&gt;
#&lt;br /&gt;
# Anonieme klanten moeten kunnen inloggen&lt;br /&gt;
# en mogen hun eigen password wijzigen&lt;br /&gt;
olcAccess: to attrs=userPassword,shadowLastChange&lt;br /&gt;
  by self write&lt;br /&gt;
  by anonymous auth&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# Gebruiker mag zijn kader email wachtwoord aanpassen&lt;br /&gt;
olcAccess: to attrs=hccKaderPassword,hccKaderForward&lt;br /&gt;
  by self write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# beheerders hebben schrijfrechten op alles (updateDN)&lt;br /&gt;
# klanten hebben alleen lees rechten op alles (readDN)&lt;br /&gt;
# self mag lezen&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by self read&lt;br /&gt;
  by dn=&amp;quot;cn=xml-hoge-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn=&amp;quot;cn=xml-lage-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by dn.one=&amp;quot;ou=beheer,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn.one=&amp;quot;ou=klanten,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# PC30 helpdesk heeft leesrechten op ou=leden&lt;br /&gt;
olcAccess: to attrs=@hccOrgPerson,@hccKaderFunctie&lt;br /&gt;
  by dn.one=&amp;quot;ou=helpdesk,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# partners mogen een paar attrs lezen&lt;br /&gt;
olcAccess: to attrs=hccLidNummer,hccPostcode,hccPostcodeZoekveld,hccIg&lt;br /&gt;
  by dn.one=&amp;quot;ou=partners,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# iedereen moet (pseudo attr) entry en objectClass kunnen lezen&lt;br /&gt;
olcAccess: to attrs=entry,objectClass&lt;br /&gt;
  by * read&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by * none&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_index.ldif===&lt;br /&gt;
Een kale configuratie is heel snel voor wat betreft het opnieuw vullen met gegevens. Bij het aanmaken van een verse LDAP database worden er dan ook zo min mogelijk indexen aangemaakt.&amp;lt;br&amp;gt;&lt;br /&gt;
Zodra de inhoud is ingelezen kunnen de &#039;echte&#039; indexen aangemaakt worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## modify-index.ldif                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
replace: olcDbIndex&lt;br /&gt;
olcDbIndex: default pres,eq&lt;br /&gt;
olcDbIndex: objectClass,entryUUID,entryCSN eq&lt;br /&gt;
olcDbIndex: hccLidNummer,hccLogin,hccForumLogin eq&lt;br /&gt;
olcDbIndex: uid,uidNumber,gidNumber,memberUid,member eq&lt;br /&gt;
olcDbIndex: cn,host,hccPseudoniem,hccOptin,hccLocatie eq&lt;br /&gt;
olcDbIndex: sn,hccPostcodeZoekveld,hccIg,hccRegio eq,subfinal&lt;br /&gt;
olcDbIndex: hccRol,hccBezoek eq,pres,subfinal&lt;br /&gt;
olcDbIndex: hccBulletins pres&lt;br /&gt;
olcDbIndex: aboNummer eq&lt;br /&gt;
olcDbIndex: aboPostcodeZoekveld eq,subfinal&lt;br /&gt;
olcDbIndex: mail,mailHccnet,hccKaderMail pres,eq&lt;br /&gt;
olcDbIndex: hccProfiel pres&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ppolicy overlay===&lt;br /&gt;
* vanuit LDAP de minimale lengte van een wachtwoord afdwingen&lt;br /&gt;
* in LDAP SSHA versleuteling activeren&amp;lt;br&amp;gt;&lt;br /&gt;
(olcPPolicyHashCleartext: TRUE)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-ppolicy.ldif                  ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module, cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectClass: olcModuleList&lt;br /&gt;
objectClass: top&lt;br /&gt;
olcModuleLoad: ppolicy&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=ppolicy,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcPPolicyConfig&lt;br /&gt;
olcOverlay: ppolicy&lt;br /&gt;
olcPPolicyDefault: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
olcPPolicyUseLockout: TRUE&lt;br /&gt;
olcPPolicyHashCleartext: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The default ppolicy looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dn: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
objectClass: pwdPolicy&lt;br /&gt;
objectClass: device&lt;br /&gt;
cn: default&lt;br /&gt;
pwdCheckQuality: 1&lt;br /&gt;
pwdMinLength: 8&lt;br /&gt;
pwdAttribute: 2.5.4.35&lt;br /&gt;
pwdAllowUserChange: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Syncrepl overlay===&lt;br /&gt;
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 [http://www.openldap.org/doc/admin/ LDAP Admin Guide]. &#039;&#039;&#039;Mirror configuratie is specifiek per server!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-syncrepl.tmpl                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
replace: olcServerID&lt;br /&gt;
olcServerID: @SID@&lt;br /&gt;
&lt;br /&gt;
dn: cn=module{0},cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcModuleLoad&lt;br /&gt;
olcModuleLoad: syncprov&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcSyncProvConfig&lt;br /&gt;
olcOverlay: syncprov&lt;br /&gt;
olcSpCheckpoint: 100 5&lt;br /&gt;
olcSpSessionlog: 100&lt;br /&gt;
&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcSyncRepl&lt;br /&gt;
olcSyncRepl: rid=@RID@&lt;br /&gt;
  provider=ldap://@PROVIDER@&lt;br /&gt;
  binddn=&amp;quot;cn=admin,dc=hcc,dc=nl&amp;quot; bindmethod=simple credentials=&amp;quot;@PASSWORD@&amp;quot;&lt;br /&gt;
  searchbase=&amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
  type=refreshAndPersist&lt;br /&gt;
  interval=00:00:00:10&lt;br /&gt;
  retry=&amp;quot;5 5 300 5&amp;quot;&lt;br /&gt;
  timeout=1&lt;br /&gt;
  starttls=yes&lt;br /&gt;
-&lt;br /&gt;
add: olcMirrorMode&lt;br /&gt;
olcMirrorMode: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
De andere server krijgt ServerID 2 en de provider is het IP adres van de andere server.&lt;br /&gt;
&lt;br /&gt;
===Unique overlay===&lt;br /&gt;
Deze overlay dient er voor te zorgen dat o.a het attribuut hccLogin een unieke waarde bevat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-unique.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module,cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectclass: olcModuleList&lt;br /&gt;
objectclass: top&lt;br /&gt;
olcmoduleload: unique&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=unique,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcUniqueConfig&lt;br /&gt;
olcOverlay: unique&lt;br /&gt;
olcUniqueAttribute: uid uidNumber hccLogin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SSL/TLS beveiliging==&lt;br /&gt;
Gebruik de juiste .pem bestanden in /etc/ssl/certs en /etc/ssl/private.&lt;br /&gt;
&lt;br /&gt;
We maken gebruik van een RapidSSL certificaat. Als dit niet standaard in Ubuntu bekend is, zet dan eerst GeoTrust_RapidSSL_-_ca-bundle.pem in de map /etc/ssl/certs neer. Voer nu een &#039;&#039;&#039;c_rehash .&#039;&#039;&#039; uit in /etc/ssl/certs om de cache te updaten (omdat GeoTrust_RapidSSL_-_ca-bundle.pem nieuw werd toegevoegd). &lt;br /&gt;
&lt;br /&gt;
De ownership is belangrijk. Hiertoe wordt de groep &amp;quot;openldap&amp;quot; toegevoegd aan de groep ssl-cert.&lt;br /&gt;
 adduser openldap ssl-cert&lt;br /&gt;
&lt;br /&gt;
Als dit fout gaat, doe dan eerst:&lt;br /&gt;
 apt-get install ssl-cert&lt;br /&gt;
&lt;br /&gt;
Zet het certificaat en de private key in de juiste groep:&lt;br /&gt;
 chgrp ssl-cert /etc/ssl/private/hobby.nl.*&lt;br /&gt;
 chmod 440      /etc/ssl/private/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
Het resultaat is dan als volgt:&lt;br /&gt;
 root@hcc-ldap-lb1:~# ls -l /etc/ssl/private/hcc* &lt;br /&gt;
 -rw-r--r-- 1 root     ssl-cert 1724 Nov 22 20:47 hobby.nl.crt&lt;br /&gt;
 -r--r----- 1 root     ssl-cert 1679 Nov 22 20:25 hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
 root@hcc-ldap-lb1:~# grep openldap /etc/group&lt;br /&gt;
 ssl-cert:x:114:openldap&lt;br /&gt;
 openldap:x:118:&lt;br /&gt;
&lt;br /&gt;
2020.12.09: Op een nieuwe Ubuntu installatie staat apparmor standaard aan. Weg ermee!&lt;br /&gt;
 apt remove --assume-yes --purge apparmor&lt;br /&gt;
&amp;lt;strike&amp;gt;Per september 2017 staan de certificaten in /disk/site/etc/ssl/hobby.nl, net als op alle andere servers. Omdat apparmor actief is moet deze directory worden toegevoegd aan /etc/apparmor.d/local/usr.sbin.slapd. Die file ziet er dan als volgt uit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Site-specific additions and overrides for usr.sbin.slapd.&lt;br /&gt;
# For more details, please see /etc/apparmor.d/local/README.&lt;br /&gt;
#include &amp;lt;abstractions/ssl_certs&amp;gt;&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/ r,&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/* r,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Openldap ook op poort 636 benaderd wordt (naast TLS op 389), moet in /etc/default/slapd ldaps:/// opgenomen worden bij de SLAPD_SERVICES.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;netstat -an&#039; dient dan 636 te laten zien voor zowel IPv4 als IPv6.&lt;br /&gt;
&lt;br /&gt;
Om de cn=config te zien kan je het volgende commando gebruiken:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config&lt;br /&gt;
&lt;br /&gt;
of, wat botter maar korter:&lt;br /&gt;
cat /etc/ldap/slapd.d/cn\=config.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Backup, initialize, restore==&lt;br /&gt;
Om het hele skelet van ldap in één keer te herstellen dient &#039;&#039;&#039;init_ldap&#039;&#039;&#039; gebruikt te worden. Als argument &#039;&#039;&#039;moet&#039;&#039;&#039; het admin beheer wachtwoord mee gegeven worden.&lt;br /&gt;
&lt;br /&gt;
===lokaal===&lt;br /&gt;
Backups kunnen gemaakt worden terwijl slapd draait maar geadviseerd wordt slapd te stoppen. Voor dumpen moet &#039;&#039;&#039;slapcat&#039;&#039;&#039; gebruikt worden. Backups kunnen gemaakt worden per database of een filter daarop, naar een ldif bestand.&lt;br /&gt;
 slapcat -l hcc-dump.ldif -b &amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
Dit maakt een dump van alles onder &#039;&#039;&#039;dc=hcc,dc=nl&#039;&#039;&#039; naar het bestand hcc-dump.ldif. Ook is het mogelijk het database nummer te gebruiken, config is altijd nummer 0, hdb is gewoonlijk 1.&lt;br /&gt;
&lt;br /&gt;
Het &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; script dumpt alle ou&#039;s in aparte .ldif bestanden; het omgekeerde doet &#039;&#039;&#039;restore_ldap&#039;&#039;&#039;.  &lt;br /&gt;
Terug inlezen kan alleen in een lege directory, dus direct nadat &#039;&#039;&#039;init_ldap&#039;&#039;&#039; is gedaan. Gebruik voor het terugplaatsen &#039;&#039;&#039;slapadd&#039;&#039;&#039;. Aan te bevelen is &#039;&#039;&#039;-c&#039;&#039;&#039; mee te geven zodat ondanks fouten doorgegaan wordt. &lt;br /&gt;
&lt;br /&gt;
Voor slapadd &#039;&#039;&#039;moet&#039;&#039;&#039; 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)&lt;br /&gt;
 /etc/init.d/slapd stop&lt;br /&gt;
 slapadd -l hcc-dump.ldif -w -c &amp;gt;errors.txt&lt;br /&gt;
 chown openldap:openldap /var/lib/ldap/*&lt;br /&gt;
 /etc/init.d/slapd start&lt;br /&gt;
&lt;br /&gt;
===remote===&lt;br /&gt;
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 &#039;&#039;&#039;backup-encrypted&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Recente lokale backups zijn te vinden in &#039;&#039;&#039;/usr/local/hobbynet/tmp&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Verse ldap maken===&lt;br /&gt;
Transactie log bij het toevoegen van b.v. een nieuwe ou:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Op beide servers:&lt;br /&gt;
schema van test server gecopieerd en geactiveerd&lt;br /&gt;
dump-ldap gedraaid&lt;br /&gt;
systemctl stop slapd.service &lt;br /&gt;
&lt;br /&gt;
Er is nu géén ldap service! Werk dus snel...&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb1&lt;br /&gt;
systemctl stop slapd.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
op ldap-lb2:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb2&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
systemctl start slapd.service&lt;br /&gt;
Beide slapd servers zijn in de lucht en moeten synchroniseren.&lt;br /&gt;
&lt;br /&gt;
op beide servers:&lt;br /&gt;
check replicatie (netstat en functioneel)&lt;br /&gt;
&lt;br /&gt;
root@ldap-lb1:/usr/local/hobbynet/bin# netstat -n | grep 389&lt;br /&gt;
tcp        0      0 172.31.8.4:36838        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:36836        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58112        ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58114        ESTABLISHED&lt;br /&gt;
&lt;br /&gt;
Functioneel door met ADS op beide servers in te loggen en een willekeurig veld in je eigen entry te wijzigen op lb1. Kijk of het gebeurd is op lb2 en wijzig het daar terug. Check op de andere server of het gebeurd is. Er kan een zekere vertraging in optreden.&lt;br /&gt;
&lt;br /&gt;
Stel er is een nieuwe ou gemaakt: denk aan het bij werken van de dump en restore scripts.&lt;br /&gt;
&lt;br /&gt;
update dump-ldap.sh en restore-ldap.sh met de nieuwe ou&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
export tarieven.ldif op test server en import op ldap-lb1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==crontab==&lt;br /&gt;
 # script dat updates ophaalt (maar niet installeert), zodat nagios ze ook detecteert&lt;br /&gt;
 0 9 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
==LDAP Clients==&lt;br /&gt;
Er zijn meerdere LDAP clients. De meest populaire zijn Apache Directory Studio (&amp;quot;ADS&amp;quot;) en phpLdapAdmin (&amp;quot;PLA&amp;quot;).&amp;lt;br&amp;gt;&lt;br /&gt;
De eerste is veel uitgbreider maar vereist een Java Runtime Environment (&amp;quot;JRE&amp;quot;). Onder Windows is dat JRE(13) of (open)JDK-(13).&amp;lt;br&amp;gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Binnen Hobbynet wordt uitsluitend gebruik gemaakt van ADS.&lt;br /&gt;
&lt;br /&gt;
===StartTLS===&lt;br /&gt;
Aanbevolen wordt StartTLS op poort 389 te gebruiken. Alternatief is LDAPS op poort 636 maar dat is deprecated. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Windows===&lt;br /&gt;
&amp;lt;i&amp;gt;2019-10-31 HJV: Oude info, als referentie leuk, maar niet meer relevant&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Onder Windows moet met &#039;&#039;&#039;keytool.exe&#039;&#039;&#039; gewerkt worden. De uitleg heb ik van  [http://www.talkingtree.com/blog/index.cfm?mode=entry&amp;amp;entry=25AA75A4-45A6-2844-7CA3EECD842DB576 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:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Haal de benodigde bestanden op (op een Linux systeem):&lt;br /&gt;
wget http://www.cacert.org/certs/root.der -O root.der&lt;br /&gt;
wget http://www.cacert.org/certs/class3.der -O class3.der&lt;br /&gt;
copieer de bestanden naar de Windows omgeving in C:\Program Files (x86)\Java\jre6\lib\security.&lt;br /&gt;
&lt;br /&gt;
Open een commandwindow:&lt;br /&gt;
cd C:\Program Files (x86)\Java\jre6\lib\security&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass1 -file root.der&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass3 -file class3.der&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Linux===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS gebruik===&lt;br /&gt;
ADS kan erg handig zijn voor het snel dumpen van hele ou&#039;s in .ldif formaat. Zo&#039;n dump kan direct op een andere server worden ingelezen.&lt;br /&gt;
&lt;br /&gt;
===PhpLdapAdmin onder Linux===&lt;br /&gt;
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 [http://phpldapadmin.sourceforge.net/wiki/index.php/Server:server:tls phpldapadmin wiki].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# LDAP Defaults&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# See ldap.conf(5) for details&lt;br /&gt;
# This file should be world readable but not world writable.&lt;br /&gt;
&lt;br /&gt;
#BASE   dc=example,dc=com&lt;br /&gt;
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666&lt;br /&gt;
&lt;br /&gt;
#SIZELIMIT      12&lt;br /&gt;
#TIMELIMIT      15&lt;br /&gt;
#DEREF          never&lt;br /&gt;
TLS_CACERT      /etc/ssl/certs/CAcert_org.pem&lt;br /&gt;
TLS_CERT        /etc/ssl/private/hobby.nl.crt&lt;br /&gt;
TLS_KEY         /etc/ssl/private/hobby.nl.key&lt;br /&gt;
TLS_REQCERT     allow&lt;br /&gt;
#TLS_REQCERT never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Denk er wel aan na wijzigingen Apache te herstarten.&lt;br /&gt;
===PAM en NSS via LDAP===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Installeer &#039;&#039;&#039;libnss-ldapd&#039;&#039;&#039; om de benodigde libraries te verkrijgen. Apt-get zal tevens &#039;&#039;&#039;libpam-ldapd&#039;&#039;&#039;, &#039;&#039;&#039;nslcd&#039;&#039;&#039; en &#039;&#039;&#039;nscd&#039;&#039;&#039; binnen brengen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install libnss-ldapd auth-client-config ldap-utils&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
    libpam-ldapd nscd nslcd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Libnss-ldapd is een doorontwikkeling van libnss-ldap en bevat meerdere verbeteringen. Zie: [http://arthurdejong.org/nss-pam-ldapd/ deze site] van de ontwikkelaar. Bij de installatie wordt een user &#039;&#039;&#039;nslcd&#039;&#039;&#039; aangemaakt; denk erom die in de .tmpl bestanden te zetten!&lt;br /&gt;
  &lt;br /&gt;
nsswitch.conf laat zich configureren via &#039;&#039;&#039;auth-client-config&#039;&#039;&#039; maar lac_ldap is alleen aanwezig als &#039;&#039;&#039;ldap-auth-config&#039;&#039;&#039; ook is geinstalleerd. Zo niet gebruik dan de tweede regel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auth-client-config -t nss -p lac_ldap&lt;br /&gt;
auth-client-config -t nss -p ldap_example&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het resultaat is dat nsswitch.conf zowel in files (/etc/passwd etc.) zoekt als in ldap.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nsswitch.conf&lt;br /&gt;
#&lt;br /&gt;
# Example configuration of GNU Name Service Switch functionality.&lt;br /&gt;
# If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
# `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # passwd:         compat&lt;br /&gt;
passwd: files ldap&lt;br /&gt;
# pre_auth-client-config # group:          compat&lt;br /&gt;
group: files ldap&lt;br /&gt;
# pre_auth-client-config # shadow:         compat&lt;br /&gt;
shadow: files ldap&lt;br /&gt;
&lt;br /&gt;
hosts:          files dns&lt;br /&gt;
networks:       files&lt;br /&gt;
&lt;br /&gt;
protocols:      db files&lt;br /&gt;
services:       db files&lt;br /&gt;
ethers:         db files&lt;br /&gt;
rpc:            db files&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # netgroup:       nis&lt;br /&gt;
netgroup: nis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het aanpassen van de PAM bestanden gaat sinds enige releases met &#039;&#039;&#039;pam-auth-update&#039;&#039;&#039;. Kies in het menu voor zowel unix als ldap. Default wordt nu ldap authenticatie gebruikt voor uid &amp;gt;= 1000. Bij Hobbynet willen we vanaf 300 ldap gebruiken. Door een licht gemodificeerde versie van /usr/share/pam-configs/ldap te maken (ldap-hobbynet), kan ook voor de hobbynet instelling gekozen worden. Dit is de ldap-hobbynet versie:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Name: LDAP Authentication (uid&amp;gt;300)&lt;br /&gt;
Default: yes&lt;br /&gt;
Priority: 128&lt;br /&gt;
Auth-Type: Primary&lt;br /&gt;
Auth-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Auth:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 use_first_pass&lt;br /&gt;
Account-Type: Additional&lt;br /&gt;
Account:&lt;br /&gt;
        [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad]        pam_ldap.so minimum_uid=300&lt;br /&gt;
Password-Type: Primary&lt;br /&gt;
Password-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Password:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 try_first_pass&lt;br /&gt;
Session-Type: Additional&lt;br /&gt;
Session:&lt;br /&gt;
        [success=ok default=ignore]     pam_ldap.so minimum_uid=300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dit is in een standaard opzet van LDAP voldoende om zowel lokale gebruikers als gebruikers opgeslagen in LDAP, te laten inloggen en hun password te laten wijzigen. In de Hobbynet setup moet er echter nog meer gebeuren in de ACL&#039;s van de LDAP server configuratie. Omdat Hobbynet de laatste ACL regel heeft gewijzigd in een &#039;&#039;&#039;deny-all&#039;&#039;&#039;, is er een helper of proxy account nodig dat read access heeft of een aantal cruciale velden in de posixAccount objectClass. Zie verder de lsiting van nslcd.conf.&lt;br /&gt;
&lt;br /&gt;
Libnss-ldapd en libpam-ldapd hebben een gezamelijke daemon &#039;&#039;&#039;nslcd&#039;&#039;&#039; die z&#039;n configuratie uit &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039; haalt. Hierin is ook een voorziening voor het helper account. Aan het eind vande &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; staat de voorziening voor host-based login. Als het attribute &#039;&#039;&#039;host&#039;&#039;&#039; de fqdn of alleen de host naam bevat, bepaald dat of inloggen op die host mogelijk is. &#039;&#039;&#039;*&#039;&#039;&#039; staat inloggen op alle hosts toe.&lt;br /&gt;
&lt;br /&gt;
Eventueel kan het daemon proces voor debugging doeleinden ook als command (&#039;&#039;&#039;nslcd -d&#039;&#039;&#039;) gestart worden. Om de bevragingen van de LDAP server wat te verminderen, kan &#039;&#039;&#039;nscd&#039;&#039;&#039; voor caching zorgen. Deze cache daemon heeft zijn eigen configuratie bestand: &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039;. De default instellingen zijn goed; eventueel kan de logging naar een bestand gestuurd worden.&lt;br /&gt;
&lt;br /&gt;
Verbinding met de LDAP server kan met StartTLS beveiligd worden. Hier de inhoud van nslcd.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nslcd.conf&lt;br /&gt;
# nslcd configuration file. See nslcd.conf(5)&lt;br /&gt;
# for details.&lt;br /&gt;
&lt;br /&gt;
# The user and group nslcd should run as.&lt;br /&gt;
uid nslcd&lt;br /&gt;
gid nslcd&lt;br /&gt;
&lt;br /&gt;
# log location and level&lt;br /&gt;
#log /var/log/nslcd.log debug&lt;br /&gt;
&lt;br /&gt;
# The location at which the LDAP server(s) should be reachable.&lt;br /&gt;
uri ldap://ldap2-int.hobby.nl/&lt;br /&gt;
&lt;br /&gt;
# The search base that will be used for all queries.&lt;br /&gt;
base dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# Other base mappings&lt;br /&gt;
base   group  ou=groups,dc=hcc,dc=nl&lt;br /&gt;
base   passwd ou=users,dc=hcc,dc=nl&lt;br /&gt;
base   shadow ou=users,dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# The search scope.&lt;br /&gt;
#scope sub&lt;br /&gt;
&lt;br /&gt;
# The LDAP protocol version to use.&lt;br /&gt;
ldap_version 3&lt;br /&gt;
&lt;br /&gt;
# The DN to bind with for normal lookups.&lt;br /&gt;
#binddn cn=annonymous,dc=example,dc=net&lt;br /&gt;
#bindpw secret&lt;br /&gt;
binddn cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&lt;br /&gt;
bindpw xxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
# The DN used for password modifications by root.&lt;br /&gt;
#rootpwmoddn cn=admin,dc=example,dc=com&lt;br /&gt;
&lt;br /&gt;
# SSL options&lt;br /&gt;
ssl off&lt;br /&gt;
ssl start_tls&lt;br /&gt;
#tls_reqcert never&lt;br /&gt;
tls_cacertfile /etc/ssl/certs/cacert.org.pem&lt;br /&gt;
#tls_cert /etc/ssl/private/server.crt&lt;br /&gt;
#tls_key /etc/ssl/private/server.key&lt;br /&gt;
&lt;br /&gt;
# The minimum uid&lt;br /&gt;
nss_min_uid 300&lt;br /&gt;
&lt;br /&gt;
pam_authz_search (&amp;amp;(objectClass=posixAccount)(uid=$username)(|(host=$hostname)(host=$fqdn)(host=\\*)))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===users en groepen toevoegen===&lt;br /&gt;
Hiervoor moet &#039;&#039;&#039;ldapscripts&#039;&#039;&#039; zijn geïnstalleerd. Dit is het geval op de ldap-lb1 server. Dat levert de volgende extra commando&#039;s op:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldaprenamemachine&lt;br /&gt;
ldapadduser&lt;br /&gt;
ldapdeleteuserfromgroup&lt;br /&gt;
ldapfinger&lt;br /&gt;
ldapid&lt;br /&gt;
ldapgid&lt;br /&gt;
ldapmodifyuser&lt;br /&gt;
ldaprenameuser&lt;br /&gt;
lsldap&lt;br /&gt;
ldapaddusertogroup&lt;br /&gt;
ldapsetpasswd&lt;br /&gt;
ldapinit&lt;br /&gt;
ldapaddgroup&lt;br /&gt;
ldapdeletegroup&lt;br /&gt;
ldapmodifygroup&lt;br /&gt;
ldapdeletemachine&lt;br /&gt;
ldaprenamegroup&lt;br /&gt;
ldapaddmachine&lt;br /&gt;
ldapmodifymachine&lt;br /&gt;
ldapsetprimarygroup&lt;br /&gt;
ldapdeleteuser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Meest gebruikt zijn &#039;&#039;&#039;ldapaddgroup, ldapadduser, ldapsetpasswd&#039;&#039;&#039;.  &lt;br /&gt;
Er zijn manpages maar er is ook uitgebreide uitleg in de [https://help.ubuntu.com/14.04/serverguide/openldap-server.html Ubuntu server guide]. Omdat wij het automatisch maken van de home dir uit hebben staan, moet die met de hand aangemaakt worden en moet de owner goed gezet worden.&lt;br /&gt;
&lt;br /&gt;
===host-based login===&lt;br /&gt;
Met een kleine uitbreiding in het schema van de LDAP server, kan host-based login gerealiseerd worden. Ook in de &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; is een uitbreiding nodig.&lt;br /&gt;
&lt;br /&gt;
In de LDAP server dient de objectClass &#039;&#039;&#039;hostObject&#039;&#039;&#039; aan de entries in de ou=users toegevoegd te worden. Deze (auxilary) objectClass brengt slechts één attribute met zich mee: &#039;&#039;&#039;host&#039;&#039;&#039;. De regel in nslcd.conf checkt of één van de waarden van &#039;&#039;&#039;host&#039;&#039;&#039; gelijk is aan de naam van de server waarop ingelogd wordt. De waarde &#039;&#039;&#039;*&#039;&#039;&#039; geldt als wildcard. Zie de regel &#039;&#039;&lt;br /&gt;
&#039;pam_authz_search&#039;&#039;&#039;&#039; in &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Password aanpassen===&lt;br /&gt;
Via LDAP ingelogde gebruikers kunnen net als lokale gebruikers hun wachtwoord met &#039;&#039;&#039;passwd&#039;&#039;&#039; wijzigen. Wel moet aan de eisen in de LDAP ppolicy module voldaan worden.&lt;br /&gt;
&lt;br /&gt;
==PHP scripting==&lt;br /&gt;
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 &#039;&#039;&#039;/usr/local/hobbynet/bin&#039;&#039;&#039; directory.&lt;br /&gt;
Voor de php-scripting zijn enkele php7.x pakketten nodig. Installeer deze met apt-get. Het gaat om:&lt;br /&gt;
* php-cli&lt;br /&gt;
* php-ldap&lt;br /&gt;
&lt;br /&gt;
== Apache authenticatie via LDAP ==&lt;br /&gt;
In plaats van .htpassword authenticatie, kan ook LDAP gebruikt worden. Activeer daartoe de Apache module&lt;br /&gt;
&#039;authnz_ldap&#039;.&lt;br /&gt;
 a2enmod authnz_ldap&lt;br /&gt;
Denk er om dat dit in een loadbalanced situatie op beide servers gedaan dient te worden!&lt;br /&gt;
&lt;br /&gt;
=== Voorbeeld van een LDAP configuratie in de Apache config ===&lt;br /&gt;
(alleen als voorbeeld, niet zo gebruiken!)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# // 1) Hobbynet webmaster&lt;br /&gt;
# // 2) Vraagbaak medewerker van een willekeurige groepering&lt;br /&gt;
# (|(hccRol=*#VRBK)(hccRol=HN#WM))&lt;br /&gt;
  &amp;lt;Location &amp;quot;/apps/vraagbaak&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;RequireAll&amp;gt;&lt;br /&gt;
      Authname &amp;quot;HCC!vraagbaak (gebruik uw hcc.nl gebruikersnaam/wachtwoord)&amp;quot;&lt;br /&gt;
      AuthType Basic&lt;br /&gt;
      AuthBasicProvider ldap&lt;br /&gt;
      AuthLDAPUrl ldap://hcc-ldap-int.hobby.nl/ou=leden,dc=hcc,dc=nl?hccLogin??(|(hccRol=*#VRBK)(hccRol=HN#WM))(hccProfiel=TRUE) TLS&lt;br /&gt;
      require valid-user&lt;br /&gt;
    &amp;lt;/RequireAll&amp;gt;&lt;br /&gt;
  &amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hoe kan LDAP veilig gebruikt worden vanuit Apache===&lt;br /&gt;
Zet een script neer in de gebruikersomgeving, en gebruik mod_authz_external. Doe de controle vervolgens via de XML-RPC server.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zie [[Kadernet]] voor een voorbeeld.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== TODO lijst ==&lt;br /&gt;
&#039;&#039;Dit is een lijst in wording, graag aanvullen&#039;&#039; &lt;br /&gt;
* &#039;dun&#039; loadbalancer script maken om te controleren dat LDAP echt luistert&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79062</id>
		<title>LDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79062"/>
		<updated>2020-12-10T21:15:44Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* modify-acl */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introductie==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==LDAP server keuze==&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Loadbalanced==&lt;br /&gt;
Er zijn twee servers (ldap-lb1 en ldap-lb2) die achter een loadbalancer in preferred server mode staan 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.&lt;br /&gt;
&lt;br /&gt;
Tevens zijn er een test en een development server: ldap-test en ldap-dev.&lt;br /&gt;
&lt;br /&gt;
==Installatie==&lt;br /&gt;
Installatie van OpenLDAP is simpel:&lt;br /&gt;
 aptitude install slapd ldap-utils&lt;br /&gt;
Omdat er gebruikgemaakt wordt van php scripts, is het ook nodig &#039;&#039;&#039;php-cli&#039;&#039;&#039; en &#039;&#039;&#039;php-ldap&#039;&#039;&#039; te installeren. De configuratie van OpenLDAP is sinds Karmic Koala iets gecompliceerder geworden. &#039;cn=config&#039; 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 &amp;quot;dpkg-reconfigure slapd&amp;quot; zet alleen de skeleton configuratie terug. Je moet zelf de database, root dn en acl&#039;s opzetten (als root of met sudo). Run  &#039;&#039;&#039;dpkg-reconfigure slapd&#039;&#039;&#039; om terug te gaan naar een lege directory. &lt;br /&gt;
&lt;br /&gt;
De volgende pakketten dienen geïnstalleerd te zijn (&#039;php -m&#039; toont de geactiveerde modules):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontbrekende pakketten volgens hjv:&lt;br /&gt;
&lt;br /&gt;
apt-get install aptitude &lt;br /&gt;
apt-get install phpmyadmin&lt;br /&gt;
apt-get install php-mbstring&lt;br /&gt;
apt-get install php-gettext&lt;br /&gt;
apt-get install php-xmlrpc&lt;br /&gt;
apt-get install php-ldap&lt;br /&gt;
apt-get install mysql-server&lt;br /&gt;
apt-get install ldapscripts&lt;br /&gt;
apt-get install php-xml&lt;br /&gt;
apt-get install slapd&lt;br /&gt;
apt-get install ldap-utils&lt;br /&gt;
a2enmod ssl&lt;br /&gt;
&lt;br /&gt;
- apache2ctl restart&lt;br /&gt;
&lt;br /&gt;
- openldap moet lid zijn van de groep ssl-cert!&lt;br /&gt;
apt-get install ssl-cert&lt;br /&gt;
adduser openldap ssl-cert&lt;br /&gt;
(of vi /etc/group&lt;br /&gt;
    ssl-cert:x:116:openldap)&lt;br /&gt;
&lt;br /&gt;
- Zorg dat de LDAP daemon bij de certificaten kan komen. &lt;br /&gt;
LET OP: op alle hobbynet servers staan de certificaten in /disk/site/etc/ssl/hobby.nl/&lt;br /&gt;
 chgrp ssl-cert /disk/site/etc/ssl/hobby.nl/hobby.nl.*&lt;br /&gt;
 chmod 440      /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
- mysql laat het bestand ibdata1 ongelimiteerd groeien (InnoDB bestanden)&lt;br /&gt;
 /etc/mysql/mysql.conf.d/innodb_file_per_table.cnf&lt;br /&gt;
 [mysql]&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
&lt;br /&gt;
=============&lt;br /&gt;
Nog meer Hobbynet aanpassingen&lt;br /&gt;
/etc/bash.bashrc&lt;br /&gt;
export http_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export https_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export ftp_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Locatie bestanden===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Alle ldif em tmpl bestanden gaan naar /usr/local/hobbynet/lib&lt;br /&gt;
* init_ldap en andere scripts gaan naar /usr/local/hobbynet/bin&lt;br /&gt;
* alle data bestanden (dumps) en update ldifs gaan naar /usr/local/hobbynet/data&lt;br /&gt;
* etc/ldap/schema/hcc_schema.* gaan naar /etc/ldap/schema&lt;br /&gt;
* etc/ldap/schema/ppolicy.ldif gaat naar /etc/ldap/schema&lt;br /&gt;
&lt;br /&gt;
hcc_schema.ldif wordt middels een script gemaakt. Dit script plaatst de ldif bestand(en) in /etc/ldap/schema. Zie hieronder.&lt;br /&gt;
&lt;br /&gt;
==Initiële database==&lt;br /&gt;
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.sh &amp;lt;admin-pw&amp;gt; gebruikt dan wordt een werkende directory gemaakt met alle statische data (in diverse ou&#039;s) erin. Gebruik na het maken van de initiële database restore_ldap.sh om de database te vullen met de data uit de data directory.&lt;br /&gt;
&lt;br /&gt;
===slapd.init.ldif ===&lt;br /&gt;
Bij installatie en reconfiguratie wordt /usr/share/slapd/slapd.init.ldif ingelezen. Zie aldaar indien nodig.&lt;br /&gt;
&lt;br /&gt;
==init_ldap script==&lt;br /&gt;
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 &#039;&#039;&#039;cn=admin,dc=hcc,dc=nl&#039;&#039;&#039; 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 &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; laadt vervolgens de laatste dump terug. Bij wijzigingen aan het schema is het raadzaam altijd een &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; te doen zodat een later een actuele dump kan worden teruggeladen.&lt;br /&gt;
&lt;br /&gt;
Het (plain text) password van cn=admin,dc=hcc,dc=nl moet bij het aanroepen van &#039;&#039;&#039;init_ldap&#039;&#039;&#039; op de commandline worden meegegeven. Tijdens de dpkg-reconfigure moet het password nog 2x gegeven worden. Lees eventueel ook de [http://www.openldap.org/doc/admin/ OpenLDAP Admin Guide].&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* voorbereidingen om &amp;quot;dpkg-reconfigure slapd&amp;quot; te draaien&lt;br /&gt;
* definities van input files&lt;br /&gt;
* check host&lt;br /&gt;
* bouwen van het skelet van de nieuwe directory&lt;br /&gt;
Zie voor details van de scripts &#039;&#039;&#039;init_ldap&#039;&#039;&#039;, &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; en &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; op een van de servers (in /usr/local/hobbynet/bin).&lt;br /&gt;
&lt;br /&gt;
==onderdelen van init_ldap==&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===add-schema.ldif===&lt;br /&gt;
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. &lt;br /&gt;
* Hiertoe wordt het onderstaande schema in /etc/ldap/schema geplaatst als hcc_schema.schema. &lt;br /&gt;
* Vervolgens worden de stappen uitgevoerd zoals beschreven in de [https://help.ubuntu.com/11.10/serverguide/C/openldap-server.html Ubuntu Server guide], onder &#039;&#039;&#039;Modifying the slapd Configuration Database&#039;&#039;&#039;. &lt;br /&gt;
* De resulterende output file &#039;&#039;&#039;cn=hcc_schema.ldif&#039;&#039;&#039; moet dan nog naar /etc/ldap/schema/hcc_schema.ldif gecopieerd worden. &lt;br /&gt;
Als dit proces herhaald moet worden, start dan met een lege output directory en verwijder een eventueel achtergebleven cn=hcc_schema.ldif bestand. &lt;br /&gt;
&lt;br /&gt;
De extra schema&#039;s worden middels een &#039;&#039;&#039;include&#039;&#039;&#039; toegevoegd. &#039;&#039;&#039;Ppolicy&#039;&#039;&#039; is op gelijke wijze als &#039;&#039;&#039;hcc_schema&#039;&#039;&#039; tot .ldif geconverteerd. Alle stappen om een nieuwe &#039;&#039;&#039;hcc-schema.ldif&#039;&#039;&#039; te maken zijn gescript in &#039;&#039;&#039;upd_schema&#039;&#039;&#039;. In &#039;&#039;&#039;init_ldap&#039;&#039;&#039; wordt het eigen schema en de password policy geladen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-schema.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
include: file:///etc/ldap/schema/hcc_schema.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ppolicy.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ldapns.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====schema updates====&lt;br /&gt;
Soms wordt een attribute toegevoegd of gewijzigd. Hiertoe dient het bestand hcc_schema.schema in /usr/local/hobbynet/etc/ldap/schema, gewijzigd te worden. Daarna dient er een ldif versie van gemaakt te worden. Gebruik hiervoor &#039;&#039;&#039;upd_schema.sh&#039;&#039;&#039; in dezelfde directory. De resulterende hcc_schema.ldif wordt in dit script naar /etc/ldap/schema gecopieërd. Bij grote wijzigingen is het aan te bevelen door de hele rebuild cycle te gaan (dump, init, restore). Bij triviale aanpassingen zou hcc_schema.ldif ook &#039;&#039;&#039;direct&#039;&#039;&#039; in de actieve directory geplaatst kunnen worden, gevolgd door slechts een &#039;&#039;&#039;service slapd restart&#039;&#039;&#039;. Gebruik hiervoor (blijf in de lokale schema directory):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp &amp;quot;ldif_output/cn=config/cn=schema/cn={14}hcc_schema.ldif&amp;quot; &amp;quot;/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}hcc_schema.ldif&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
LET OP: De nummers tussen accolades zijn bepaald door de volgorde van andere scripts! Zolang geen andere schema&#039;s worden toegevoegd zullen ze niet veranderen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ook kan met de ldap-tools gewerkt worden. Gebruik ldapsearch en ldapmodify, eventueel met de -f optie om een voorbereide serie opdrachten uit te voeren. Gebruik ldapsearch om eerst de structuur te vinden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier een voorbeeld om een objectClass aan te passen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat pas_aan.ldif&lt;br /&gt;
dn: cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
delete: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description ) )&lt;br /&gt;
-&lt;br /&gt;
add: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description $ hccIg ) )&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
$sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f pas_aan.ldif &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_config.ldif===&lt;br /&gt;
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 &#039;&#039;&#039;STATS&#039;&#039;&#039; gezet. Dit geeft niet teveel logging maar is toch goed bruikbaar. Om extra logging te krijgen op b.v. ACL&#039;s, verander olcLogLevel dan in &amp;quot;stats ACL&amp;quot;.  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## modify-config.hobbynet            ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
replace: olcLogLevel&lt;br /&gt;
olcLogLevel: stats&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCACertificateFile&lt;br /&gt;
olcTLSCACertificateFile: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCertificateFile&lt;br /&gt;
olcTLSCertificateFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCertificateKeyFile&lt;br /&gt;
olcTLSCertificateKeyFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Om de logging in een apart bestand te krijgen moet in /etc/rsyslog.d een extra bestand &#039;&#039;&#039;openldap.conf&#039;&#039;&#039; geplaatst worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local4.*   -/var/log/openldap.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Tevens willen we logrotate op dit bestand. Plaats in /etc/logrotate.d het bestand &#039;&#039;&#039;openldap&#039;&#039;&#039; met de volgende inhoud&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/log/openldap.log&lt;br /&gt;
{&lt;br /&gt;
        rotate 4&lt;br /&gt;
        weekly&lt;br /&gt;
        missingok&lt;br /&gt;
        notifempty&lt;br /&gt;
        compress&lt;br /&gt;
        delaycompress&lt;br /&gt;
        sharedscripts&lt;br /&gt;
        postrotate&lt;br /&gt;
                reload rsyslog &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 || true&lt;br /&gt;
        endscript&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify-mdb.ldif===&lt;br /&gt;
Hier worden de wijzigingen op de backend db gemaakt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-mdb.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
# hjv 2020.06.07 (oldSizeLimit toegevoegd)&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcDbCheckpoint&lt;br /&gt;
olcDbCheckpoint: 4096 1&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbNoSync&lt;br /&gt;
olcDbNoSync: TRUE&lt;br /&gt;
-&lt;br /&gt;
replace: olcSizeLimit&lt;br /&gt;
olcSizeLimit: 100000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===modify-acl===&lt;br /&gt;
Hier worden de rechten bepaald van de diverse rollen en groepen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-acl.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcAccess&lt;br /&gt;
# hobbynetlogin heeft lees rechten t.b.v. MySecureShell aanloggen&lt;br /&gt;
olcAccess: to attrs=@posixAccount,@posixGroup,@shadowAccount,@hostObject&lt;br /&gt;
  by dn=&amp;quot;cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to attrs=@posixAccount&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# sta anonymous search toe (t.b.v. Apache authenticatie)&lt;br /&gt;
olcAccess: to attrs=hccLogin,hccRol,hccProfiel,entry&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# olcAccess: to attrs=hccOptIn&lt;br /&gt;
#   by self write&lt;br /&gt;
#   by dn=&amp;quot;cn=drupal-hcc-nl,ou=klanten,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
#   by * break&lt;br /&gt;
#&lt;br /&gt;
# Anonieme klanten moeten kunnen inloggen&lt;br /&gt;
# en mogen hun eigen password wijzigen&lt;br /&gt;
olcAccess: to attrs=userPassword,shadowLastChange&lt;br /&gt;
  by self write&lt;br /&gt;
  by anonymous auth&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# Gebruiker mag zijn kader email wachtwoord aanpassen&lt;br /&gt;
olcAccess: to attrs=hccKaderPassword,hccKaderForward&lt;br /&gt;
  by self write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# beheerders hebben schrijfrechten op alles (updateDN)&lt;br /&gt;
# klanten hebben alleen lees rechten op alles (readDN)&lt;br /&gt;
# self mag lezen&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by self read&lt;br /&gt;
  by dn=&amp;quot;cn=xml-hoge-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn=&amp;quot;cn=xml-lage-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by dn.one=&amp;quot;ou=beheer,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn.one=&amp;quot;ou=klanten,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# PC30 helpdesk heeft leesrechten op ou=leden&lt;br /&gt;
olcAccess: to attrs=@hccOrgPerson,@hccKaderFunctie&lt;br /&gt;
  by dn.one=&amp;quot;ou=helpdesk,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# partners mogen een paar attrs lezen&lt;br /&gt;
olcAccess: to attrs=hccLidNummer,hccPostcode,hccPostcodeZoekveld,hccIg&lt;br /&gt;
  by dn.one=&amp;quot;ou=partners,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# iedereen moet (pseudo attr) entry en objectClass kunnen lezen&lt;br /&gt;
olcAccess: to attrs=entry,objectClass&lt;br /&gt;
  by * read&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by * none&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_index.ldif===&lt;br /&gt;
Een kale configuratie is heel snel voor wat betreft het opnieuw vullen met gegevens. Bij het aanmaken van een verse LDAP database worden er dan ook zo min mogelijk indexen aangemaakt.&amp;lt;br&amp;gt;&lt;br /&gt;
Zodra de inhoud is ingelezen kunnen de &#039;echte&#039; indexen aangemaakt worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## modify-index.ldif                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
replace: olcDbIndex&lt;br /&gt;
olcDbIndex: default pres,eq&lt;br /&gt;
olcDbIndex: objectClass,entryUUID,entryCSN eq&lt;br /&gt;
olcDbIndex: hccLidNummer,hccLogin,hccForumLogin eq&lt;br /&gt;
olcDbIndex: uid,uidNumber,gidNumber,memberUid,member eq&lt;br /&gt;
olcDbIndex: cn,host,hccPseudoniem,hccOptin,hccLocatie eq&lt;br /&gt;
olcDbIndex: sn,hccPostcodeZoekveld,hccIg,hccRegio eq,subfinal&lt;br /&gt;
olcDbIndex: hccRol,hccBezoek eq,pres,subfinal&lt;br /&gt;
olcDbIndex: hccBulletins pres&lt;br /&gt;
olcDbIndex: aboNummer eq&lt;br /&gt;
olcDbIndex: aboPostcodeZoekveld eq,subfinal&lt;br /&gt;
olcDbIndex: mail,mailHccnet,hccKaderMail pres,eq&lt;br /&gt;
olcDbIndex: hccProfiel pres&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ppolicy overlay===&lt;br /&gt;
* vanuit LDAP de minimale lengte van een wachtwoord afdwingen&lt;br /&gt;
* in LDAP SSHA versleuteling activeren&amp;lt;br&amp;gt;&lt;br /&gt;
(olcPPolicyHashCleartext: TRUE)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-ppolicy.ldif                  ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module, cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectClass: olcModuleList&lt;br /&gt;
objectClass: top&lt;br /&gt;
olcModuleLoad: ppolicy&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=ppolicy,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcPPolicyConfig&lt;br /&gt;
olcOverlay: ppolicy&lt;br /&gt;
olcPPolicyDefault: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
olcPPolicyUseLockout: TRUE&lt;br /&gt;
olcPPolicyHashCleartext: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The default ppolicy looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dn: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
objectClass: pwdPolicy&lt;br /&gt;
objectClass: device&lt;br /&gt;
cn: default&lt;br /&gt;
pwdCheckQuality: 1&lt;br /&gt;
pwdMinLength: 8&lt;br /&gt;
pwdAttribute: 2.5.4.35&lt;br /&gt;
pwdAllowUserChange: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Syncrepl overlay===&lt;br /&gt;
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 [http://www.openldap.org/doc/admin/ LDAP Admin Guide]. &#039;&#039;&#039;Mirror configuratie is specifiek per server!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-syncrepl.tmpl                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
replace: olcServerID&lt;br /&gt;
olcServerID: @SID@&lt;br /&gt;
&lt;br /&gt;
dn: cn=module{0},cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcModuleLoad&lt;br /&gt;
olcModuleLoad: syncprov&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcSyncProvConfig&lt;br /&gt;
olcOverlay: syncprov&lt;br /&gt;
olcSpCheckpoint: 100 5&lt;br /&gt;
olcSpSessionlog: 100&lt;br /&gt;
&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcSyncRepl&lt;br /&gt;
olcSyncRepl: rid=@RID@&lt;br /&gt;
  provider=ldap://@PROVIDER@&lt;br /&gt;
  binddn=&amp;quot;cn=admin,dc=hcc,dc=nl&amp;quot; bindmethod=simple credentials=&amp;quot;@PASSWORD@&amp;quot;&lt;br /&gt;
  searchbase=&amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
  type=refreshAndPersist&lt;br /&gt;
  interval=00:00:00:10&lt;br /&gt;
  retry=&amp;quot;5 5 300 5&amp;quot;&lt;br /&gt;
  timeout=1&lt;br /&gt;
  starttls=yes&lt;br /&gt;
-&lt;br /&gt;
add: olcMirrorMode&lt;br /&gt;
olcMirrorMode: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
De andere server krijgt ServerID 2 en de provider is het IP adres van de andere server.&lt;br /&gt;
&lt;br /&gt;
===Unique overlay===&lt;br /&gt;
Deze overlay dient er voor te zorgen dat o.a het attribuut hccLogin een unieke waarde bevat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-unique.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module,cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectclass: olcModuleList&lt;br /&gt;
objectclass: top&lt;br /&gt;
olcmoduleload: unique&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=unique,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcUniqueConfig&lt;br /&gt;
olcOverlay: unique&lt;br /&gt;
olcUniqueAttribute: uid uidNumber hccLogin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SSL/TLS beveiliging==&lt;br /&gt;
Gebruik de juiste .pem bestanden in /etc/ssl/certs en /etc/ssl/private.&lt;br /&gt;
&lt;br /&gt;
We maken gebruik van een RapidSSL certificaat. Als dit niet standaard in Ubuntu bekend is, zet dan eerst GeoTrust_RapidSSL_-_ca-bundle.pem in de map /etc/ssl/certs neer. Voer nu een &#039;&#039;&#039;c_rehash .&#039;&#039;&#039; uit in /etc/ssl/certs om de cache te updaten (omdat GeoTrust_RapidSSL_-_ca-bundle.pem nieuw werd toegevoegd). &lt;br /&gt;
&lt;br /&gt;
De ownership is belangrijk. Hiertoe wordt de groep &amp;quot;openldap&amp;quot; toegevoegd aan de groep ssl-cert.&lt;br /&gt;
 adduser openldap ssl-cert&lt;br /&gt;
&lt;br /&gt;
Als dit fout gaat, doe dan eerst:&lt;br /&gt;
 apt-get install ssl-cert&lt;br /&gt;
&lt;br /&gt;
Zet het certificaat en de private key in de juiste groep:&lt;br /&gt;
 chgrp ssl-cert /etc/ssl/private/hobby.nl.*&lt;br /&gt;
 chmod 440      /etc/ssl/private/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
Het resultaat is dan als volgt:&lt;br /&gt;
 root@hcc-ldap-lb1:~# ls -l /etc/ssl/private/hcc* &lt;br /&gt;
 -rw-r--r-- 1 root     ssl-cert 1724 Nov 22 20:47 hobby.nl.crt&lt;br /&gt;
 -r--r----- 1 root     ssl-cert 1679 Nov 22 20:25 hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
 root@hcc-ldap-lb1:~# grep openldap /etc/group&lt;br /&gt;
 ssl-cert:x:114:openldap&lt;br /&gt;
 openldap:x:118:&lt;br /&gt;
&lt;br /&gt;
2020.12.09: Op een nieuwe Ubuntu installatie staat apparmor standaard aan. Weg ermee!&lt;br /&gt;
 apt remove --assume-yes --purge apparmor&lt;br /&gt;
&amp;lt;strike&amp;gt;Per september 2017 staan de certificaten in /disk/site/etc/ssl/hobby.nl, net als op alle andere servers. Omdat apparmor actief is moet deze directory worden toegevoegd aan /etc/apparmor.d/local/usr.sbin.slapd. Die file ziet er dan als volgt uit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Site-specific additions and overrides for usr.sbin.slapd.&lt;br /&gt;
# For more details, please see /etc/apparmor.d/local/README.&lt;br /&gt;
#include &amp;lt;abstractions/ssl_certs&amp;gt;&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/ r,&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/* r,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Openldap ook op poort 636 benaderd wordt (naast TLS op 389), moet in /etc/default/slapd ldaps:/// opgenomen worden bij de SLAPD_SERVICES.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;netstat -an&#039; dient dan 636 te laten zien voor zowel IPv4 als IPv6.&lt;br /&gt;
&lt;br /&gt;
Om de cn=config te zien kan je het volgende commando gebruiken:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config&lt;br /&gt;
&lt;br /&gt;
of, wat botter maar korter:&lt;br /&gt;
cat /etc/ldap/slapd.d/cn\=config.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Backup, initialize, restore==&lt;br /&gt;
Om het hele skelet van ldap in één keer te herstellen dient &#039;&#039;&#039;init_ldap&#039;&#039;&#039; gebruikt te worden. Als argument &#039;&#039;&#039;moet&#039;&#039;&#039; het admin beheer wachtwoord mee gegeven worden.&lt;br /&gt;
&lt;br /&gt;
===lokaal===&lt;br /&gt;
Backups kunnen gemaakt worden terwijl slapd draait maar geadviseerd wordt slapd te stoppen. Voor dumpen moet &#039;&#039;&#039;slapcat&#039;&#039;&#039; gebruikt worden. Backups kunnen gemaakt worden per database of een filter daarop, naar een ldif bestand.&lt;br /&gt;
 slapcat -l hcc-dump.ldif -b &amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
Dit maakt een dump van alles onder &#039;&#039;&#039;dc=hcc,dc=nl&#039;&#039;&#039; naar het bestand hcc-dump.ldif. Ook is het mogelijk het database nummer te gebruiken, config is altijd nummer 0, hdb is gewoonlijk 1.&lt;br /&gt;
&lt;br /&gt;
Het &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; script dumpt alle ou&#039;s in aparte .ldif bestanden; het omgekeerde doet &#039;&#039;&#039;restore_ldap&#039;&#039;&#039;.  &lt;br /&gt;
Terug inlezen kan alleen in een lege directory, dus direct nadat &#039;&#039;&#039;init_ldap&#039;&#039;&#039; is gedaan. Gebruik voor het terugplaatsen &#039;&#039;&#039;slapadd&#039;&#039;&#039;. Aan te bevelen is &#039;&#039;&#039;-c&#039;&#039;&#039; mee te geven zodat ondanks fouten doorgegaan wordt. &lt;br /&gt;
&lt;br /&gt;
Voor slapadd &#039;&#039;&#039;moet&#039;&#039;&#039; 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)&lt;br /&gt;
 /etc/init.d/slapd stop&lt;br /&gt;
 slapadd -l hcc-dump.ldif -w -c &amp;gt;errors.txt&lt;br /&gt;
 chown openldap:openldap /var/lib/ldap/*&lt;br /&gt;
 /etc/init.d/slapd start&lt;br /&gt;
&lt;br /&gt;
===remote===&lt;br /&gt;
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 &#039;&#039;&#039;backup-encrypted&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Recente lokale backups zijn te vinden in &#039;&#039;&#039;/usr/local/hobbynet/tmp&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Verse ldap maken===&lt;br /&gt;
Transactie log bij het toevoegen van b.v. een nieuwe ou:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Op beide servers:&lt;br /&gt;
schema van test server gecopieerd en geactiveerd&lt;br /&gt;
dump-ldap gedraaid&lt;br /&gt;
systemctl stop slapd.service &lt;br /&gt;
&lt;br /&gt;
Er is nu géén ldap service! Werk dus snel...&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb1&lt;br /&gt;
systemctl stop slapd.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
op ldap-lb2:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb2&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
systemctl start slapd.service&lt;br /&gt;
Beide slapd servers zijn in de lucht en moeten synchroniseren.&lt;br /&gt;
&lt;br /&gt;
op beide servers:&lt;br /&gt;
check replicatie (netstat en functioneel)&lt;br /&gt;
&lt;br /&gt;
root@ldap-lb1:/usr/local/hobbynet/bin# netstat -n | grep 389&lt;br /&gt;
tcp        0      0 172.31.8.4:36838        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:36836        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58112        ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58114        ESTABLISHED&lt;br /&gt;
&lt;br /&gt;
Functioneel door met ADS op beide servers in te loggen en een willekeurig veld in je eigen entry te wijzigen op lb1. Kijk of het gebeurd is op lb2 en wijzig het daar terug. Check op de andere server of het gebeurd is. Er kan een zekere vertraging in optreden.&lt;br /&gt;
&lt;br /&gt;
Stel er is een nieuwe ou gemaakt: denk aan het bij werken van de dump en restore scripts.&lt;br /&gt;
&lt;br /&gt;
update dump-ldap.sh en restore-ldap.sh met de nieuwe ou&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
export tarieven.ldif op test server en import op ldap-lb1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==crontab==&lt;br /&gt;
 # script dat updates ophaalt (maar niet installeert), zodat nagios ze ook detecteert&lt;br /&gt;
 0 9 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
==LDAP Clients==&lt;br /&gt;
Er zijn meerdere LDAP clients. De meest populaire zijn Apache Directory Studio (&amp;quot;ADS&amp;quot;) en phpLdapAdmin (&amp;quot;PLA&amp;quot;).&amp;lt;br&amp;gt;&lt;br /&gt;
De eerste is veel uitgbreider maar vereist een Java Runtime Environment (&amp;quot;JRE&amp;quot;). Onder Windows is dat JRE(13) of (open)JDK-(13).&amp;lt;br&amp;gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Binnen Hobbynet wordt uitsluitend gebruik gemaakt van ADS.&lt;br /&gt;
&lt;br /&gt;
===StartTLS===&lt;br /&gt;
Aanbevolen wordt StartTLS op poort 389 te gebruiken. Alternatief is LDAPS op poort 636 maar dat is deprecated. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Windows===&lt;br /&gt;
&amp;lt;i&amp;gt;2019-10-31 HJV: Oude info, als referentie leuk, maar niet meer relevant&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Onder Windows moet met &#039;&#039;&#039;keytool.exe&#039;&#039;&#039; gewerkt worden. De uitleg heb ik van  [http://www.talkingtree.com/blog/index.cfm?mode=entry&amp;amp;entry=25AA75A4-45A6-2844-7CA3EECD842DB576 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:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Haal de benodigde bestanden op (op een Linux systeem):&lt;br /&gt;
wget http://www.cacert.org/certs/root.der -O root.der&lt;br /&gt;
wget http://www.cacert.org/certs/class3.der -O class3.der&lt;br /&gt;
copieer de bestanden naar de Windows omgeving in C:\Program Files (x86)\Java\jre6\lib\security.&lt;br /&gt;
&lt;br /&gt;
Open een commandwindow:&lt;br /&gt;
cd C:\Program Files (x86)\Java\jre6\lib\security&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass1 -file root.der&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass3 -file class3.der&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Linux===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS gebruik===&lt;br /&gt;
ADS kan erg handig zijn voor het snel dumpen van hele ou&#039;s in .ldif formaat. Zo&#039;n dump kan direct op een andere server worden ingelezen.&lt;br /&gt;
&lt;br /&gt;
===PhpLdapAdmin onder Linux===&lt;br /&gt;
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 [http://phpldapadmin.sourceforge.net/wiki/index.php/Server:server:tls phpldapadmin wiki].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# LDAP Defaults&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# See ldap.conf(5) for details&lt;br /&gt;
# This file should be world readable but not world writable.&lt;br /&gt;
&lt;br /&gt;
#BASE   dc=example,dc=com&lt;br /&gt;
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666&lt;br /&gt;
&lt;br /&gt;
#SIZELIMIT      12&lt;br /&gt;
#TIMELIMIT      15&lt;br /&gt;
#DEREF          never&lt;br /&gt;
TLS_CACERT      /etc/ssl/certs/CAcert_org.pem&lt;br /&gt;
TLS_CERT        /etc/ssl/private/hobby.nl.crt&lt;br /&gt;
TLS_KEY         /etc/ssl/private/hobby.nl.key&lt;br /&gt;
TLS_REQCERT     allow&lt;br /&gt;
#TLS_REQCERT never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Denk er wel aan na wijzigingen Apache te herstarten.&lt;br /&gt;
===PAM en NSS via LDAP===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Installeer &#039;&#039;&#039;libnss-ldapd&#039;&#039;&#039; om de benodigde libraries te verkrijgen. Apt-get zal tevens &#039;&#039;&#039;libpam-ldapd&#039;&#039;&#039;, &#039;&#039;&#039;nslcd&#039;&#039;&#039; en &#039;&#039;&#039;nscd&#039;&#039;&#039; binnen brengen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install libnss-ldapd auth-client-config ldap-utils&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
    libpam-ldapd nscd nslcd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Libnss-ldapd is een doorontwikkeling van libnss-ldap en bevat meerdere verbeteringen. Zie: [http://arthurdejong.org/nss-pam-ldapd/ deze site] van de ontwikkelaar. Bij de installatie wordt een user &#039;&#039;&#039;nslcd&#039;&#039;&#039; aangemaakt; denk erom die in de .tmpl bestanden te zetten!&lt;br /&gt;
  &lt;br /&gt;
nsswitch.conf laat zich configureren via &#039;&#039;&#039;auth-client-config&#039;&#039;&#039; maar lac_ldap is alleen aanwezig als &#039;&#039;&#039;ldap-auth-config&#039;&#039;&#039; ook is geinstalleerd. Zo niet gebruik dan de tweede regel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auth-client-config -t nss -p lac_ldap&lt;br /&gt;
auth-client-config -t nss -p ldap_example&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het resultaat is dat nsswitch.conf zowel in files (/etc/passwd etc.) zoekt als in ldap.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nsswitch.conf&lt;br /&gt;
#&lt;br /&gt;
# Example configuration of GNU Name Service Switch functionality.&lt;br /&gt;
# If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
# `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # passwd:         compat&lt;br /&gt;
passwd: files ldap&lt;br /&gt;
# pre_auth-client-config # group:          compat&lt;br /&gt;
group: files ldap&lt;br /&gt;
# pre_auth-client-config # shadow:         compat&lt;br /&gt;
shadow: files ldap&lt;br /&gt;
&lt;br /&gt;
hosts:          files dns&lt;br /&gt;
networks:       files&lt;br /&gt;
&lt;br /&gt;
protocols:      db files&lt;br /&gt;
services:       db files&lt;br /&gt;
ethers:         db files&lt;br /&gt;
rpc:            db files&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # netgroup:       nis&lt;br /&gt;
netgroup: nis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het aanpassen van de PAM bestanden gaat sinds enige releases met &#039;&#039;&#039;pam-auth-update&#039;&#039;&#039;. Kies in het menu voor zowel unix als ldap. Default wordt nu ldap authenticatie gebruikt voor uid &amp;gt;= 1000. Bij Hobbynet willen we vanaf 300 ldap gebruiken. Door een licht gemodificeerde versie van /usr/share/pam-configs/ldap te maken (ldap-hobbynet), kan ook voor de hobbynet instelling gekozen worden. Dit is de ldap-hobbynet versie:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Name: LDAP Authentication (uid&amp;gt;300)&lt;br /&gt;
Default: yes&lt;br /&gt;
Priority: 128&lt;br /&gt;
Auth-Type: Primary&lt;br /&gt;
Auth-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Auth:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 use_first_pass&lt;br /&gt;
Account-Type: Additional&lt;br /&gt;
Account:&lt;br /&gt;
        [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad]        pam_ldap.so minimum_uid=300&lt;br /&gt;
Password-Type: Primary&lt;br /&gt;
Password-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Password:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 try_first_pass&lt;br /&gt;
Session-Type: Additional&lt;br /&gt;
Session:&lt;br /&gt;
        [success=ok default=ignore]     pam_ldap.so minimum_uid=300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dit is in een standaard opzet van LDAP voldoende om zowel lokale gebruikers als gebruikers opgeslagen in LDAP, te laten inloggen en hun password te laten wijzigen. In de Hobbynet setup moet er echter nog meer gebeuren in de ACL&#039;s van de LDAP server configuratie. Omdat Hobbynet de laatste ACL regel heeft gewijzigd in een &#039;&#039;&#039;deny-all&#039;&#039;&#039;, is er een helper of proxy account nodig dat read access heeft of een aantal cruciale velden in de posixAccount objectClass. Zie verder de lsiting van nslcd.conf.&lt;br /&gt;
&lt;br /&gt;
Libnss-ldapd en libpam-ldapd hebben een gezamelijke daemon &#039;&#039;&#039;nslcd&#039;&#039;&#039; die z&#039;n configuratie uit &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039; haalt. Hierin is ook een voorziening voor het helper account. Aan het eind vande &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; staat de voorziening voor host-based login. Als het attribute &#039;&#039;&#039;host&#039;&#039;&#039; de fqdn of alleen de host naam bevat, bepaald dat of inloggen op die host mogelijk is. &#039;&#039;&#039;*&#039;&#039;&#039; staat inloggen op alle hosts toe.&lt;br /&gt;
&lt;br /&gt;
Eventueel kan het daemon proces voor debugging doeleinden ook als command (&#039;&#039;&#039;nslcd -d&#039;&#039;&#039;) gestart worden. Om de bevragingen van de LDAP server wat te verminderen, kan &#039;&#039;&#039;nscd&#039;&#039;&#039; voor caching zorgen. Deze cache daemon heeft zijn eigen configuratie bestand: &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039;. De default instellingen zijn goed; eventueel kan de logging naar een bestand gestuurd worden.&lt;br /&gt;
&lt;br /&gt;
Verbinding met de LDAP server kan met StartTLS beveiligd worden. Hier de inhoud van nslcd.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nslcd.conf&lt;br /&gt;
# nslcd configuration file. See nslcd.conf(5)&lt;br /&gt;
# for details.&lt;br /&gt;
&lt;br /&gt;
# The user and group nslcd should run as.&lt;br /&gt;
uid nslcd&lt;br /&gt;
gid nslcd&lt;br /&gt;
&lt;br /&gt;
# log location and level&lt;br /&gt;
#log /var/log/nslcd.log debug&lt;br /&gt;
&lt;br /&gt;
# The location at which the LDAP server(s) should be reachable.&lt;br /&gt;
uri ldap://ldap2-int.hobby.nl/&lt;br /&gt;
&lt;br /&gt;
# The search base that will be used for all queries.&lt;br /&gt;
base dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# Other base mappings&lt;br /&gt;
base   group  ou=groups,dc=hcc,dc=nl&lt;br /&gt;
base   passwd ou=users,dc=hcc,dc=nl&lt;br /&gt;
base   shadow ou=users,dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# The search scope.&lt;br /&gt;
#scope sub&lt;br /&gt;
&lt;br /&gt;
# The LDAP protocol version to use.&lt;br /&gt;
ldap_version 3&lt;br /&gt;
&lt;br /&gt;
# The DN to bind with for normal lookups.&lt;br /&gt;
#binddn cn=annonymous,dc=example,dc=net&lt;br /&gt;
#bindpw secret&lt;br /&gt;
binddn cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&lt;br /&gt;
bindpw xxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
# The DN used for password modifications by root.&lt;br /&gt;
#rootpwmoddn cn=admin,dc=example,dc=com&lt;br /&gt;
&lt;br /&gt;
# SSL options&lt;br /&gt;
ssl off&lt;br /&gt;
ssl start_tls&lt;br /&gt;
#tls_reqcert never&lt;br /&gt;
tls_cacertfile /etc/ssl/certs/cacert.org.pem&lt;br /&gt;
#tls_cert /etc/ssl/private/server.crt&lt;br /&gt;
#tls_key /etc/ssl/private/server.key&lt;br /&gt;
&lt;br /&gt;
# The minimum uid&lt;br /&gt;
nss_min_uid 300&lt;br /&gt;
&lt;br /&gt;
pam_authz_search (&amp;amp;(objectClass=posixAccount)(uid=$username)(|(host=$hostname)(host=$fqdn)(host=\\*)))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===users en groepen toevoegen===&lt;br /&gt;
Hiervoor moet &#039;&#039;&#039;ldapscripts&#039;&#039;&#039; zijn geïnstalleerd. Dit is het geval op de ldap-lb1 server. Dat levert de volgende extra commando&#039;s op:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldaprenamemachine&lt;br /&gt;
ldapadduser&lt;br /&gt;
ldapdeleteuserfromgroup&lt;br /&gt;
ldapfinger&lt;br /&gt;
ldapid&lt;br /&gt;
ldapgid&lt;br /&gt;
ldapmodifyuser&lt;br /&gt;
ldaprenameuser&lt;br /&gt;
lsldap&lt;br /&gt;
ldapaddusertogroup&lt;br /&gt;
ldapsetpasswd&lt;br /&gt;
ldapinit&lt;br /&gt;
ldapaddgroup&lt;br /&gt;
ldapdeletegroup&lt;br /&gt;
ldapmodifygroup&lt;br /&gt;
ldapdeletemachine&lt;br /&gt;
ldaprenamegroup&lt;br /&gt;
ldapaddmachine&lt;br /&gt;
ldapmodifymachine&lt;br /&gt;
ldapsetprimarygroup&lt;br /&gt;
ldapdeleteuser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Meest gebruikt zijn &#039;&#039;&#039;ldapaddgroup, ldapadduser, ldapsetpasswd&#039;&#039;&#039;.  &lt;br /&gt;
Er zijn manpages maar er is ook uitgebreide uitleg in de [https://help.ubuntu.com/14.04/serverguide/openldap-server.html Ubuntu server guide]. Omdat wij het automatisch maken van de home dir uit hebben staan, moet die met de hand aangemaakt worden en moet de owner goed gezet worden.&lt;br /&gt;
&lt;br /&gt;
===host-based login===&lt;br /&gt;
Met een kleine uitbreiding in het schema van de LDAP server, kan host-based login gerealiseerd worden. Ook in de &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; is een uitbreiding nodig.&lt;br /&gt;
&lt;br /&gt;
In de LDAP server dient de objectClass &#039;&#039;&#039;hostObject&#039;&#039;&#039; aan de entries in de ou=users toegevoegd te worden. Deze (auxilary) objectClass brengt slechts één attribute met zich mee: &#039;&#039;&#039;host&#039;&#039;&#039;. De regel in nslcd.conf checkt of één van de waarden van &#039;&#039;&#039;host&#039;&#039;&#039; gelijk is aan de naam van de server waarop ingelogd wordt. De waarde &#039;&#039;&#039;*&#039;&#039;&#039; geldt als wildcard. Zie de regel &#039;&#039;&lt;br /&gt;
&#039;pam_authz_search&#039;&#039;&#039;&#039; in &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Password aanpassen===&lt;br /&gt;
Via LDAP ingelogde gebruikers kunnen net als lokale gebruikers hun wachtwoord met &#039;&#039;&#039;passwd&#039;&#039;&#039; wijzigen. Wel moet aan de eisen in de LDAP ppolicy module voldaan worden.&lt;br /&gt;
&lt;br /&gt;
==PHP scripting==&lt;br /&gt;
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 &#039;&#039;&#039;/usr/local/hobbynet/bin&#039;&#039;&#039; directory.&lt;br /&gt;
Voor de php-scripting zijn enkele php7.x pakketten nodig. Installeer deze met apt-get. Het gaat om:&lt;br /&gt;
* php-cli&lt;br /&gt;
* php-ldap&lt;br /&gt;
&lt;br /&gt;
== Apache authenticatie via LDAP ==&lt;br /&gt;
In plaats van .htpassword authenticatie, kan ook LDAP gebruikt worden. Activeer daartoe de Apache module&lt;br /&gt;
&#039;authnz_ldap&#039;.&lt;br /&gt;
 a2enmod authnz_ldap&lt;br /&gt;
Denk er om dat dit in een loadbalanced situatie op beide servers gedaan dient te worden!&lt;br /&gt;
&lt;br /&gt;
=== Voorbeeld van een LDAP configuratie in de Apache config ===&lt;br /&gt;
(alleen als voorbeeld, niet zo gebruiken!)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# // 1) Hobbynet webmaster&lt;br /&gt;
# // 2) Vraagbaak medewerker van een willekeurige groepering&lt;br /&gt;
# (|(hccRol=*#VRBK)(hccRol=HN#WM))&lt;br /&gt;
  &amp;lt;Location &amp;quot;/apps/vraagbaak&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;RequireAll&amp;gt;&lt;br /&gt;
      Authname &amp;quot;HCC!vraagbaak (gebruik uw hcc.nl gebruikersnaam/wachtwoord)&amp;quot;&lt;br /&gt;
      AuthType Basic&lt;br /&gt;
      AuthBasicProvider ldap&lt;br /&gt;
      AuthLDAPUrl ldap://hcc-ldap-int.hobby.nl/ou=leden,dc=hcc,dc=nl?hccLogin??(|(hccRol=*#VRBK)(hccRol=HN#WM))(hccProfiel=TRUE) TLS&lt;br /&gt;
      require valid-user&lt;br /&gt;
    &amp;lt;/RequireAll&amp;gt;&lt;br /&gt;
  &amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hoe kan LDAP veilig gebruikt worden vanuit Apache===&lt;br /&gt;
Zet een script neer in de gebruikersomgeving, en gebruik mod_authz_external. Doe de controle vervolgens via de XML-RPC server.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zie [[Kadernet]] voor een voorbeeld.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== TODO lijst ==&lt;br /&gt;
&#039;&#039;Dit is een lijst in wording, graag aanvullen&#039;&#039; &lt;br /&gt;
* &#039;dun&#039; loadbalancer script maken om te controleren dat LDAP echt luistert&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79060</id>
		<title>LDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79060"/>
		<updated>2020-12-10T21:14:46Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* modify-mdb.ldif */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introductie==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==LDAP server keuze==&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Loadbalanced==&lt;br /&gt;
Er zijn twee servers (ldap-lb1 en ldap-lb2) die achter een loadbalancer in preferred server mode staan 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.&lt;br /&gt;
&lt;br /&gt;
Tevens zijn er een test en een development server: ldap-test en ldap-dev.&lt;br /&gt;
&lt;br /&gt;
==Installatie==&lt;br /&gt;
Installatie van OpenLDAP is simpel:&lt;br /&gt;
 aptitude install slapd ldap-utils&lt;br /&gt;
Omdat er gebruikgemaakt wordt van php scripts, is het ook nodig &#039;&#039;&#039;php-cli&#039;&#039;&#039; en &#039;&#039;&#039;php-ldap&#039;&#039;&#039; te installeren. De configuratie van OpenLDAP is sinds Karmic Koala iets gecompliceerder geworden. &#039;cn=config&#039; 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 &amp;quot;dpkg-reconfigure slapd&amp;quot; zet alleen de skeleton configuratie terug. Je moet zelf de database, root dn en acl&#039;s opzetten (als root of met sudo). Run  &#039;&#039;&#039;dpkg-reconfigure slapd&#039;&#039;&#039; om terug te gaan naar een lege directory. &lt;br /&gt;
&lt;br /&gt;
De volgende pakketten dienen geïnstalleerd te zijn (&#039;php -m&#039; toont de geactiveerde modules):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontbrekende pakketten volgens hjv:&lt;br /&gt;
&lt;br /&gt;
apt-get install aptitude &lt;br /&gt;
apt-get install phpmyadmin&lt;br /&gt;
apt-get install php-mbstring&lt;br /&gt;
apt-get install php-gettext&lt;br /&gt;
apt-get install php-xmlrpc&lt;br /&gt;
apt-get install php-ldap&lt;br /&gt;
apt-get install mysql-server&lt;br /&gt;
apt-get install ldapscripts&lt;br /&gt;
apt-get install php-xml&lt;br /&gt;
apt-get install slapd&lt;br /&gt;
apt-get install ldap-utils&lt;br /&gt;
a2enmod ssl&lt;br /&gt;
&lt;br /&gt;
- apache2ctl restart&lt;br /&gt;
&lt;br /&gt;
- openldap moet lid zijn van de groep ssl-cert!&lt;br /&gt;
apt-get install ssl-cert&lt;br /&gt;
adduser openldap ssl-cert&lt;br /&gt;
(of vi /etc/group&lt;br /&gt;
    ssl-cert:x:116:openldap)&lt;br /&gt;
&lt;br /&gt;
- Zorg dat de LDAP daemon bij de certificaten kan komen. &lt;br /&gt;
LET OP: op alle hobbynet servers staan de certificaten in /disk/site/etc/ssl/hobby.nl/&lt;br /&gt;
 chgrp ssl-cert /disk/site/etc/ssl/hobby.nl/hobby.nl.*&lt;br /&gt;
 chmod 440      /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
- mysql laat het bestand ibdata1 ongelimiteerd groeien (InnoDB bestanden)&lt;br /&gt;
 /etc/mysql/mysql.conf.d/innodb_file_per_table.cnf&lt;br /&gt;
 [mysql]&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
&lt;br /&gt;
=============&lt;br /&gt;
Nog meer Hobbynet aanpassingen&lt;br /&gt;
/etc/bash.bashrc&lt;br /&gt;
export http_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export https_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export ftp_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Locatie bestanden===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Alle ldif em tmpl bestanden gaan naar /usr/local/hobbynet/lib&lt;br /&gt;
* init_ldap en andere scripts gaan naar /usr/local/hobbynet/bin&lt;br /&gt;
* alle data bestanden (dumps) en update ldifs gaan naar /usr/local/hobbynet/data&lt;br /&gt;
* etc/ldap/schema/hcc_schema.* gaan naar /etc/ldap/schema&lt;br /&gt;
* etc/ldap/schema/ppolicy.ldif gaat naar /etc/ldap/schema&lt;br /&gt;
&lt;br /&gt;
hcc_schema.ldif wordt middels een script gemaakt. Dit script plaatst de ldif bestand(en) in /etc/ldap/schema. Zie hieronder.&lt;br /&gt;
&lt;br /&gt;
==Initiële database==&lt;br /&gt;
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.sh &amp;lt;admin-pw&amp;gt; gebruikt dan wordt een werkende directory gemaakt met alle statische data (in diverse ou&#039;s) erin. Gebruik na het maken van de initiële database restore_ldap.sh om de database te vullen met de data uit de data directory.&lt;br /&gt;
&lt;br /&gt;
===slapd.init.ldif ===&lt;br /&gt;
Bij installatie en reconfiguratie wordt /usr/share/slapd/slapd.init.ldif ingelezen. Zie aldaar indien nodig.&lt;br /&gt;
&lt;br /&gt;
==init_ldap script==&lt;br /&gt;
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 &#039;&#039;&#039;cn=admin,dc=hcc,dc=nl&#039;&#039;&#039; 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 &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; laadt vervolgens de laatste dump terug. Bij wijzigingen aan het schema is het raadzaam altijd een &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; te doen zodat een later een actuele dump kan worden teruggeladen.&lt;br /&gt;
&lt;br /&gt;
Het (plain text) password van cn=admin,dc=hcc,dc=nl moet bij het aanroepen van &#039;&#039;&#039;init_ldap&#039;&#039;&#039; op de commandline worden meegegeven. Tijdens de dpkg-reconfigure moet het password nog 2x gegeven worden. Lees eventueel ook de [http://www.openldap.org/doc/admin/ OpenLDAP Admin Guide].&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* voorbereidingen om &amp;quot;dpkg-reconfigure slapd&amp;quot; te draaien&lt;br /&gt;
* definities van input files&lt;br /&gt;
* check host&lt;br /&gt;
* bouwen van het skelet van de nieuwe directory&lt;br /&gt;
Zie voor details van de scripts &#039;&#039;&#039;init_ldap&#039;&#039;&#039;, &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; en &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; op een van de servers (in /usr/local/hobbynet/bin).&lt;br /&gt;
&lt;br /&gt;
==onderdelen van init_ldap==&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===add-schema.ldif===&lt;br /&gt;
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. &lt;br /&gt;
* Hiertoe wordt het onderstaande schema in /etc/ldap/schema geplaatst als hcc_schema.schema. &lt;br /&gt;
* Vervolgens worden de stappen uitgevoerd zoals beschreven in de [https://help.ubuntu.com/11.10/serverguide/C/openldap-server.html Ubuntu Server guide], onder &#039;&#039;&#039;Modifying the slapd Configuration Database&#039;&#039;&#039;. &lt;br /&gt;
* De resulterende output file &#039;&#039;&#039;cn=hcc_schema.ldif&#039;&#039;&#039; moet dan nog naar /etc/ldap/schema/hcc_schema.ldif gecopieerd worden. &lt;br /&gt;
Als dit proces herhaald moet worden, start dan met een lege output directory en verwijder een eventueel achtergebleven cn=hcc_schema.ldif bestand. &lt;br /&gt;
&lt;br /&gt;
De extra schema&#039;s worden middels een &#039;&#039;&#039;include&#039;&#039;&#039; toegevoegd. &#039;&#039;&#039;Ppolicy&#039;&#039;&#039; is op gelijke wijze als &#039;&#039;&#039;hcc_schema&#039;&#039;&#039; tot .ldif geconverteerd. Alle stappen om een nieuwe &#039;&#039;&#039;hcc-schema.ldif&#039;&#039;&#039; te maken zijn gescript in &#039;&#039;&#039;upd_schema&#039;&#039;&#039;. In &#039;&#039;&#039;init_ldap&#039;&#039;&#039; wordt het eigen schema en de password policy geladen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-schema.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
include: file:///etc/ldap/schema/hcc_schema.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ppolicy.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ldapns.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====schema updates====&lt;br /&gt;
Soms wordt een attribute toegevoegd of gewijzigd. Hiertoe dient het bestand hcc_schema.schema in /usr/local/hobbynet/etc/ldap/schema, gewijzigd te worden. Daarna dient er een ldif versie van gemaakt te worden. Gebruik hiervoor &#039;&#039;&#039;upd_schema.sh&#039;&#039;&#039; in dezelfde directory. De resulterende hcc_schema.ldif wordt in dit script naar /etc/ldap/schema gecopieërd. Bij grote wijzigingen is het aan te bevelen door de hele rebuild cycle te gaan (dump, init, restore). Bij triviale aanpassingen zou hcc_schema.ldif ook &#039;&#039;&#039;direct&#039;&#039;&#039; in de actieve directory geplaatst kunnen worden, gevolgd door slechts een &#039;&#039;&#039;service slapd restart&#039;&#039;&#039;. Gebruik hiervoor (blijf in de lokale schema directory):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp &amp;quot;ldif_output/cn=config/cn=schema/cn={14}hcc_schema.ldif&amp;quot; &amp;quot;/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}hcc_schema.ldif&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
LET OP: De nummers tussen accolades zijn bepaald door de volgorde van andere scripts! Zolang geen andere schema&#039;s worden toegevoegd zullen ze niet veranderen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ook kan met de ldap-tools gewerkt worden. Gebruik ldapsearch en ldapmodify, eventueel met de -f optie om een voorbereide serie opdrachten uit te voeren. Gebruik ldapsearch om eerst de structuur te vinden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier een voorbeeld om een objectClass aan te passen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat pas_aan.ldif&lt;br /&gt;
dn: cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
delete: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description ) )&lt;br /&gt;
-&lt;br /&gt;
add: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description $ hccIg ) )&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
$sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f pas_aan.ldif &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_config.ldif===&lt;br /&gt;
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 &#039;&#039;&#039;STATS&#039;&#039;&#039; gezet. Dit geeft niet teveel logging maar is toch goed bruikbaar. Om extra logging te krijgen op b.v. ACL&#039;s, verander olcLogLevel dan in &amp;quot;stats ACL&amp;quot;.  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## modify-config.hobbynet            ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
replace: olcLogLevel&lt;br /&gt;
olcLogLevel: stats&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCACertificateFile&lt;br /&gt;
olcTLSCACertificateFile: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCertificateFile&lt;br /&gt;
olcTLSCertificateFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCertificateKeyFile&lt;br /&gt;
olcTLSCertificateKeyFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Om de logging in een apart bestand te krijgen moet in /etc/rsyslog.d een extra bestand &#039;&#039;&#039;openldap.conf&#039;&#039;&#039; geplaatst worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local4.*   -/var/log/openldap.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Tevens willen we logrotate op dit bestand. Plaats in /etc/logrotate.d het bestand &#039;&#039;&#039;openldap&#039;&#039;&#039; met de volgende inhoud&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/log/openldap.log&lt;br /&gt;
{&lt;br /&gt;
        rotate 4&lt;br /&gt;
        weekly&lt;br /&gt;
        missingok&lt;br /&gt;
        notifempty&lt;br /&gt;
        compress&lt;br /&gt;
        delaycompress&lt;br /&gt;
        sharedscripts&lt;br /&gt;
        postrotate&lt;br /&gt;
                reload rsyslog &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 || true&lt;br /&gt;
        endscript&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify-mdb.ldif===&lt;br /&gt;
Hier worden de wijzigingen op de backend db gemaakt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-mdb.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
# hjv 2020.06.07 (oldSizeLimit toegevoegd)&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcDbCheckpoint&lt;br /&gt;
olcDbCheckpoint: 4096 1&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbNoSync&lt;br /&gt;
olcDbNoSync: TRUE&lt;br /&gt;
-&lt;br /&gt;
replace: olcSizeLimit&lt;br /&gt;
olcSizeLimit: 100000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===modify-acl===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-acl.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcAccess&lt;br /&gt;
# hobbynetlogin heeft lees rechten t.b.v. MySecureShell aanloggen&lt;br /&gt;
olcAccess: to attrs=@posixAccount,@posixGroup,@shadowAccount,@hostObject&lt;br /&gt;
  by dn=&amp;quot;cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to attrs=@posixAccount&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# sta anonymous search toe (t.b.v. Apache authenticatie)&lt;br /&gt;
olcAccess: to attrs=hccLogin,hccRol,hccProfiel,entry&lt;br /&gt;
  by anonymous read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# olcAccess: to attrs=hccOptIn&lt;br /&gt;
#   by self write&lt;br /&gt;
#   by dn=&amp;quot;cn=drupal-hcc-nl,ou=klanten,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
#   by * break&lt;br /&gt;
#&lt;br /&gt;
# Anonieme klanten moeten kunnen inloggen&lt;br /&gt;
# en mogen hun eigen password wijzigen&lt;br /&gt;
olcAccess: to attrs=userPassword,shadowLastChange&lt;br /&gt;
  by self write&lt;br /&gt;
  by anonymous auth&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# Gebruiker mag zijn kader email wachtwoord aanpassen&lt;br /&gt;
olcAccess: to attrs=hccKaderPassword,hccKaderForward&lt;br /&gt;
  by self write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# beheerders hebben schrijfrechten op alles (updateDN)&lt;br /&gt;
# klanten hebben alleen lees rechten op alles (readDN)&lt;br /&gt;
# self mag lezen&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by self read&lt;br /&gt;
  by dn=&amp;quot;cn=xml-hoge-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn=&amp;quot;cn=xml-lage-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by dn.one=&amp;quot;ou=beheer,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn.one=&amp;quot;ou=klanten,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# PC30 helpdesk heeft leesrechten op ou=leden&lt;br /&gt;
olcAccess: to attrs=@hccOrgPerson,@hccKaderFunctie&lt;br /&gt;
  by dn.one=&amp;quot;ou=helpdesk,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# partners mogen een paar attrs lezen&lt;br /&gt;
olcAccess: to attrs=hccLidNummer,hccPostcode,hccPostcodeZoekveld,hccIg&lt;br /&gt;
  by dn.one=&amp;quot;ou=partners,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# iedereen moet (pseudo attr) entry en objectClass kunnen lezen&lt;br /&gt;
olcAccess: to attrs=entry,objectClass&lt;br /&gt;
  by * read&lt;br /&gt;
#&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by * none&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_index.ldif===&lt;br /&gt;
Een kale configuratie is heel snel voor wat betreft het opnieuw vullen met gegevens. Bij het aanmaken van een verse LDAP database worden er dan ook zo min mogelijk indexen aangemaakt.&amp;lt;br&amp;gt;&lt;br /&gt;
Zodra de inhoud is ingelezen kunnen de &#039;echte&#039; indexen aangemaakt worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## modify-index.ldif                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
replace: olcDbIndex&lt;br /&gt;
olcDbIndex: default pres,eq&lt;br /&gt;
olcDbIndex: objectClass,entryUUID,entryCSN eq&lt;br /&gt;
olcDbIndex: hccLidNummer,hccLogin,hccForumLogin eq&lt;br /&gt;
olcDbIndex: uid,uidNumber,gidNumber,memberUid,member eq&lt;br /&gt;
olcDbIndex: cn,host,hccPseudoniem,hccOptin,hccLocatie eq&lt;br /&gt;
olcDbIndex: sn,hccPostcodeZoekveld,hccIg,hccRegio eq,subfinal&lt;br /&gt;
olcDbIndex: hccRol,hccBezoek eq,pres,subfinal&lt;br /&gt;
olcDbIndex: hccBulletins pres&lt;br /&gt;
olcDbIndex: aboNummer eq&lt;br /&gt;
olcDbIndex: aboPostcodeZoekveld eq,subfinal&lt;br /&gt;
olcDbIndex: mail,mailHccnet,hccKaderMail pres,eq&lt;br /&gt;
olcDbIndex: hccProfiel pres&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ppolicy overlay===&lt;br /&gt;
* vanuit LDAP de minimale lengte van een wachtwoord afdwingen&lt;br /&gt;
* in LDAP SSHA versleuteling activeren&amp;lt;br&amp;gt;&lt;br /&gt;
(olcPPolicyHashCleartext: TRUE)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-ppolicy.ldif                  ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module, cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectClass: olcModuleList&lt;br /&gt;
objectClass: top&lt;br /&gt;
olcModuleLoad: ppolicy&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=ppolicy,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcPPolicyConfig&lt;br /&gt;
olcOverlay: ppolicy&lt;br /&gt;
olcPPolicyDefault: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
olcPPolicyUseLockout: TRUE&lt;br /&gt;
olcPPolicyHashCleartext: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The default ppolicy looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dn: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
objectClass: pwdPolicy&lt;br /&gt;
objectClass: device&lt;br /&gt;
cn: default&lt;br /&gt;
pwdCheckQuality: 1&lt;br /&gt;
pwdMinLength: 8&lt;br /&gt;
pwdAttribute: 2.5.4.35&lt;br /&gt;
pwdAllowUserChange: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Syncrepl overlay===&lt;br /&gt;
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 [http://www.openldap.org/doc/admin/ LDAP Admin Guide]. &#039;&#039;&#039;Mirror configuratie is specifiek per server!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-syncrepl.tmpl                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
replace: olcServerID&lt;br /&gt;
olcServerID: @SID@&lt;br /&gt;
&lt;br /&gt;
dn: cn=module{0},cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcModuleLoad&lt;br /&gt;
olcModuleLoad: syncprov&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcSyncProvConfig&lt;br /&gt;
olcOverlay: syncprov&lt;br /&gt;
olcSpCheckpoint: 100 5&lt;br /&gt;
olcSpSessionlog: 100&lt;br /&gt;
&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcSyncRepl&lt;br /&gt;
olcSyncRepl: rid=@RID@&lt;br /&gt;
  provider=ldap://@PROVIDER@&lt;br /&gt;
  binddn=&amp;quot;cn=admin,dc=hcc,dc=nl&amp;quot; bindmethod=simple credentials=&amp;quot;@PASSWORD@&amp;quot;&lt;br /&gt;
  searchbase=&amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
  type=refreshAndPersist&lt;br /&gt;
  interval=00:00:00:10&lt;br /&gt;
  retry=&amp;quot;5 5 300 5&amp;quot;&lt;br /&gt;
  timeout=1&lt;br /&gt;
  starttls=yes&lt;br /&gt;
-&lt;br /&gt;
add: olcMirrorMode&lt;br /&gt;
olcMirrorMode: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
De andere server krijgt ServerID 2 en de provider is het IP adres van de andere server.&lt;br /&gt;
&lt;br /&gt;
===Unique overlay===&lt;br /&gt;
Deze overlay dient er voor te zorgen dat o.a het attribuut hccLogin een unieke waarde bevat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-unique.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module,cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectclass: olcModuleList&lt;br /&gt;
objectclass: top&lt;br /&gt;
olcmoduleload: unique&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=unique,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcUniqueConfig&lt;br /&gt;
olcOverlay: unique&lt;br /&gt;
olcUniqueAttribute: uid uidNumber hccLogin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SSL/TLS beveiliging==&lt;br /&gt;
Gebruik de juiste .pem bestanden in /etc/ssl/certs en /etc/ssl/private.&lt;br /&gt;
&lt;br /&gt;
We maken gebruik van een RapidSSL certificaat. Als dit niet standaard in Ubuntu bekend is, zet dan eerst GeoTrust_RapidSSL_-_ca-bundle.pem in de map /etc/ssl/certs neer. Voer nu een &#039;&#039;&#039;c_rehash .&#039;&#039;&#039; uit in /etc/ssl/certs om de cache te updaten (omdat GeoTrust_RapidSSL_-_ca-bundle.pem nieuw werd toegevoegd). &lt;br /&gt;
&lt;br /&gt;
De ownership is belangrijk. Hiertoe wordt de groep &amp;quot;openldap&amp;quot; toegevoegd aan de groep ssl-cert.&lt;br /&gt;
 adduser openldap ssl-cert&lt;br /&gt;
&lt;br /&gt;
Als dit fout gaat, doe dan eerst:&lt;br /&gt;
 apt-get install ssl-cert&lt;br /&gt;
&lt;br /&gt;
Zet het certificaat en de private key in de juiste groep:&lt;br /&gt;
 chgrp ssl-cert /etc/ssl/private/hobby.nl.*&lt;br /&gt;
 chmod 440      /etc/ssl/private/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
Het resultaat is dan als volgt:&lt;br /&gt;
 root@hcc-ldap-lb1:~# ls -l /etc/ssl/private/hcc* &lt;br /&gt;
 -rw-r--r-- 1 root     ssl-cert 1724 Nov 22 20:47 hobby.nl.crt&lt;br /&gt;
 -r--r----- 1 root     ssl-cert 1679 Nov 22 20:25 hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
 root@hcc-ldap-lb1:~# grep openldap /etc/group&lt;br /&gt;
 ssl-cert:x:114:openldap&lt;br /&gt;
 openldap:x:118:&lt;br /&gt;
&lt;br /&gt;
2020.12.09: Op een nieuwe Ubuntu installatie staat apparmor standaard aan. Weg ermee!&lt;br /&gt;
 apt remove --assume-yes --purge apparmor&lt;br /&gt;
&amp;lt;strike&amp;gt;Per september 2017 staan de certificaten in /disk/site/etc/ssl/hobby.nl, net als op alle andere servers. Omdat apparmor actief is moet deze directory worden toegevoegd aan /etc/apparmor.d/local/usr.sbin.slapd. Die file ziet er dan als volgt uit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Site-specific additions and overrides for usr.sbin.slapd.&lt;br /&gt;
# For more details, please see /etc/apparmor.d/local/README.&lt;br /&gt;
#include &amp;lt;abstractions/ssl_certs&amp;gt;&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/ r,&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/* r,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Openldap ook op poort 636 benaderd wordt (naast TLS op 389), moet in /etc/default/slapd ldaps:/// opgenomen worden bij de SLAPD_SERVICES.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;netstat -an&#039; dient dan 636 te laten zien voor zowel IPv4 als IPv6.&lt;br /&gt;
&lt;br /&gt;
Om de cn=config te zien kan je het volgende commando gebruiken:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config&lt;br /&gt;
&lt;br /&gt;
of, wat botter maar korter:&lt;br /&gt;
cat /etc/ldap/slapd.d/cn\=config.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Backup, initialize, restore==&lt;br /&gt;
Om het hele skelet van ldap in één keer te herstellen dient &#039;&#039;&#039;init_ldap&#039;&#039;&#039; gebruikt te worden. Als argument &#039;&#039;&#039;moet&#039;&#039;&#039; het admin beheer wachtwoord mee gegeven worden.&lt;br /&gt;
&lt;br /&gt;
===lokaal===&lt;br /&gt;
Backups kunnen gemaakt worden terwijl slapd draait maar geadviseerd wordt slapd te stoppen. Voor dumpen moet &#039;&#039;&#039;slapcat&#039;&#039;&#039; gebruikt worden. Backups kunnen gemaakt worden per database of een filter daarop, naar een ldif bestand.&lt;br /&gt;
 slapcat -l hcc-dump.ldif -b &amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
Dit maakt een dump van alles onder &#039;&#039;&#039;dc=hcc,dc=nl&#039;&#039;&#039; naar het bestand hcc-dump.ldif. Ook is het mogelijk het database nummer te gebruiken, config is altijd nummer 0, hdb is gewoonlijk 1.&lt;br /&gt;
&lt;br /&gt;
Het &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; script dumpt alle ou&#039;s in aparte .ldif bestanden; het omgekeerde doet &#039;&#039;&#039;restore_ldap&#039;&#039;&#039;.  &lt;br /&gt;
Terug inlezen kan alleen in een lege directory, dus direct nadat &#039;&#039;&#039;init_ldap&#039;&#039;&#039; is gedaan. Gebruik voor het terugplaatsen &#039;&#039;&#039;slapadd&#039;&#039;&#039;. Aan te bevelen is &#039;&#039;&#039;-c&#039;&#039;&#039; mee te geven zodat ondanks fouten doorgegaan wordt. &lt;br /&gt;
&lt;br /&gt;
Voor slapadd &#039;&#039;&#039;moet&#039;&#039;&#039; 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)&lt;br /&gt;
 /etc/init.d/slapd stop&lt;br /&gt;
 slapadd -l hcc-dump.ldif -w -c &amp;gt;errors.txt&lt;br /&gt;
 chown openldap:openldap /var/lib/ldap/*&lt;br /&gt;
 /etc/init.d/slapd start&lt;br /&gt;
&lt;br /&gt;
===remote===&lt;br /&gt;
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 &#039;&#039;&#039;backup-encrypted&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Recente lokale backups zijn te vinden in &#039;&#039;&#039;/usr/local/hobbynet/tmp&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Verse ldap maken===&lt;br /&gt;
Transactie log bij het toevoegen van b.v. een nieuwe ou:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Op beide servers:&lt;br /&gt;
schema van test server gecopieerd en geactiveerd&lt;br /&gt;
dump-ldap gedraaid&lt;br /&gt;
systemctl stop slapd.service &lt;br /&gt;
&lt;br /&gt;
Er is nu géén ldap service! Werk dus snel...&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb1&lt;br /&gt;
systemctl stop slapd.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
op ldap-lb2:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb2&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
systemctl start slapd.service&lt;br /&gt;
Beide slapd servers zijn in de lucht en moeten synchroniseren.&lt;br /&gt;
&lt;br /&gt;
op beide servers:&lt;br /&gt;
check replicatie (netstat en functioneel)&lt;br /&gt;
&lt;br /&gt;
root@ldap-lb1:/usr/local/hobbynet/bin# netstat -n | grep 389&lt;br /&gt;
tcp        0      0 172.31.8.4:36838        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:36836        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58112        ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58114        ESTABLISHED&lt;br /&gt;
&lt;br /&gt;
Functioneel door met ADS op beide servers in te loggen en een willekeurig veld in je eigen entry te wijzigen op lb1. Kijk of het gebeurd is op lb2 en wijzig het daar terug. Check op de andere server of het gebeurd is. Er kan een zekere vertraging in optreden.&lt;br /&gt;
&lt;br /&gt;
Stel er is een nieuwe ou gemaakt: denk aan het bij werken van de dump en restore scripts.&lt;br /&gt;
&lt;br /&gt;
update dump-ldap.sh en restore-ldap.sh met de nieuwe ou&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
export tarieven.ldif op test server en import op ldap-lb1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==crontab==&lt;br /&gt;
 # script dat updates ophaalt (maar niet installeert), zodat nagios ze ook detecteert&lt;br /&gt;
 0 9 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
==LDAP Clients==&lt;br /&gt;
Er zijn meerdere LDAP clients. De meest populaire zijn Apache Directory Studio (&amp;quot;ADS&amp;quot;) en phpLdapAdmin (&amp;quot;PLA&amp;quot;).&amp;lt;br&amp;gt;&lt;br /&gt;
De eerste is veel uitgbreider maar vereist een Java Runtime Environment (&amp;quot;JRE&amp;quot;). Onder Windows is dat JRE(13) of (open)JDK-(13).&amp;lt;br&amp;gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Binnen Hobbynet wordt uitsluitend gebruik gemaakt van ADS.&lt;br /&gt;
&lt;br /&gt;
===StartTLS===&lt;br /&gt;
Aanbevolen wordt StartTLS op poort 389 te gebruiken. Alternatief is LDAPS op poort 636 maar dat is deprecated. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Windows===&lt;br /&gt;
&amp;lt;i&amp;gt;2019-10-31 HJV: Oude info, als referentie leuk, maar niet meer relevant&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Onder Windows moet met &#039;&#039;&#039;keytool.exe&#039;&#039;&#039; gewerkt worden. De uitleg heb ik van  [http://www.talkingtree.com/blog/index.cfm?mode=entry&amp;amp;entry=25AA75A4-45A6-2844-7CA3EECD842DB576 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:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Haal de benodigde bestanden op (op een Linux systeem):&lt;br /&gt;
wget http://www.cacert.org/certs/root.der -O root.der&lt;br /&gt;
wget http://www.cacert.org/certs/class3.der -O class3.der&lt;br /&gt;
copieer de bestanden naar de Windows omgeving in C:\Program Files (x86)\Java\jre6\lib\security.&lt;br /&gt;
&lt;br /&gt;
Open een commandwindow:&lt;br /&gt;
cd C:\Program Files (x86)\Java\jre6\lib\security&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass1 -file root.der&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass3 -file class3.der&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Linux===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS gebruik===&lt;br /&gt;
ADS kan erg handig zijn voor het snel dumpen van hele ou&#039;s in .ldif formaat. Zo&#039;n dump kan direct op een andere server worden ingelezen.&lt;br /&gt;
&lt;br /&gt;
===PhpLdapAdmin onder Linux===&lt;br /&gt;
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 [http://phpldapadmin.sourceforge.net/wiki/index.php/Server:server:tls phpldapadmin wiki].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# LDAP Defaults&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# See ldap.conf(5) for details&lt;br /&gt;
# This file should be world readable but not world writable.&lt;br /&gt;
&lt;br /&gt;
#BASE   dc=example,dc=com&lt;br /&gt;
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666&lt;br /&gt;
&lt;br /&gt;
#SIZELIMIT      12&lt;br /&gt;
#TIMELIMIT      15&lt;br /&gt;
#DEREF          never&lt;br /&gt;
TLS_CACERT      /etc/ssl/certs/CAcert_org.pem&lt;br /&gt;
TLS_CERT        /etc/ssl/private/hobby.nl.crt&lt;br /&gt;
TLS_KEY         /etc/ssl/private/hobby.nl.key&lt;br /&gt;
TLS_REQCERT     allow&lt;br /&gt;
#TLS_REQCERT never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Denk er wel aan na wijzigingen Apache te herstarten.&lt;br /&gt;
===PAM en NSS via LDAP===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Installeer &#039;&#039;&#039;libnss-ldapd&#039;&#039;&#039; om de benodigde libraries te verkrijgen. Apt-get zal tevens &#039;&#039;&#039;libpam-ldapd&#039;&#039;&#039;, &#039;&#039;&#039;nslcd&#039;&#039;&#039; en &#039;&#039;&#039;nscd&#039;&#039;&#039; binnen brengen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install libnss-ldapd auth-client-config ldap-utils&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
    libpam-ldapd nscd nslcd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Libnss-ldapd is een doorontwikkeling van libnss-ldap en bevat meerdere verbeteringen. Zie: [http://arthurdejong.org/nss-pam-ldapd/ deze site] van de ontwikkelaar. Bij de installatie wordt een user &#039;&#039;&#039;nslcd&#039;&#039;&#039; aangemaakt; denk erom die in de .tmpl bestanden te zetten!&lt;br /&gt;
  &lt;br /&gt;
nsswitch.conf laat zich configureren via &#039;&#039;&#039;auth-client-config&#039;&#039;&#039; maar lac_ldap is alleen aanwezig als &#039;&#039;&#039;ldap-auth-config&#039;&#039;&#039; ook is geinstalleerd. Zo niet gebruik dan de tweede regel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auth-client-config -t nss -p lac_ldap&lt;br /&gt;
auth-client-config -t nss -p ldap_example&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het resultaat is dat nsswitch.conf zowel in files (/etc/passwd etc.) zoekt als in ldap.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nsswitch.conf&lt;br /&gt;
#&lt;br /&gt;
# Example configuration of GNU Name Service Switch functionality.&lt;br /&gt;
# If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
# `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # passwd:         compat&lt;br /&gt;
passwd: files ldap&lt;br /&gt;
# pre_auth-client-config # group:          compat&lt;br /&gt;
group: files ldap&lt;br /&gt;
# pre_auth-client-config # shadow:         compat&lt;br /&gt;
shadow: files ldap&lt;br /&gt;
&lt;br /&gt;
hosts:          files dns&lt;br /&gt;
networks:       files&lt;br /&gt;
&lt;br /&gt;
protocols:      db files&lt;br /&gt;
services:       db files&lt;br /&gt;
ethers:         db files&lt;br /&gt;
rpc:            db files&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # netgroup:       nis&lt;br /&gt;
netgroup: nis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het aanpassen van de PAM bestanden gaat sinds enige releases met &#039;&#039;&#039;pam-auth-update&#039;&#039;&#039;. Kies in het menu voor zowel unix als ldap. Default wordt nu ldap authenticatie gebruikt voor uid &amp;gt;= 1000. Bij Hobbynet willen we vanaf 300 ldap gebruiken. Door een licht gemodificeerde versie van /usr/share/pam-configs/ldap te maken (ldap-hobbynet), kan ook voor de hobbynet instelling gekozen worden. Dit is de ldap-hobbynet versie:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Name: LDAP Authentication (uid&amp;gt;300)&lt;br /&gt;
Default: yes&lt;br /&gt;
Priority: 128&lt;br /&gt;
Auth-Type: Primary&lt;br /&gt;
Auth-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Auth:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 use_first_pass&lt;br /&gt;
Account-Type: Additional&lt;br /&gt;
Account:&lt;br /&gt;
        [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad]        pam_ldap.so minimum_uid=300&lt;br /&gt;
Password-Type: Primary&lt;br /&gt;
Password-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Password:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 try_first_pass&lt;br /&gt;
Session-Type: Additional&lt;br /&gt;
Session:&lt;br /&gt;
        [success=ok default=ignore]     pam_ldap.so minimum_uid=300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dit is in een standaard opzet van LDAP voldoende om zowel lokale gebruikers als gebruikers opgeslagen in LDAP, te laten inloggen en hun password te laten wijzigen. In de Hobbynet setup moet er echter nog meer gebeuren in de ACL&#039;s van de LDAP server configuratie. Omdat Hobbynet de laatste ACL regel heeft gewijzigd in een &#039;&#039;&#039;deny-all&#039;&#039;&#039;, is er een helper of proxy account nodig dat read access heeft of een aantal cruciale velden in de posixAccount objectClass. Zie verder de lsiting van nslcd.conf.&lt;br /&gt;
&lt;br /&gt;
Libnss-ldapd en libpam-ldapd hebben een gezamelijke daemon &#039;&#039;&#039;nslcd&#039;&#039;&#039; die z&#039;n configuratie uit &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039; haalt. Hierin is ook een voorziening voor het helper account. Aan het eind vande &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; staat de voorziening voor host-based login. Als het attribute &#039;&#039;&#039;host&#039;&#039;&#039; de fqdn of alleen de host naam bevat, bepaald dat of inloggen op die host mogelijk is. &#039;&#039;&#039;*&#039;&#039;&#039; staat inloggen op alle hosts toe.&lt;br /&gt;
&lt;br /&gt;
Eventueel kan het daemon proces voor debugging doeleinden ook als command (&#039;&#039;&#039;nslcd -d&#039;&#039;&#039;) gestart worden. Om de bevragingen van de LDAP server wat te verminderen, kan &#039;&#039;&#039;nscd&#039;&#039;&#039; voor caching zorgen. Deze cache daemon heeft zijn eigen configuratie bestand: &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039;. De default instellingen zijn goed; eventueel kan de logging naar een bestand gestuurd worden.&lt;br /&gt;
&lt;br /&gt;
Verbinding met de LDAP server kan met StartTLS beveiligd worden. Hier de inhoud van nslcd.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nslcd.conf&lt;br /&gt;
# nslcd configuration file. See nslcd.conf(5)&lt;br /&gt;
# for details.&lt;br /&gt;
&lt;br /&gt;
# The user and group nslcd should run as.&lt;br /&gt;
uid nslcd&lt;br /&gt;
gid nslcd&lt;br /&gt;
&lt;br /&gt;
# log location and level&lt;br /&gt;
#log /var/log/nslcd.log debug&lt;br /&gt;
&lt;br /&gt;
# The location at which the LDAP server(s) should be reachable.&lt;br /&gt;
uri ldap://ldap2-int.hobby.nl/&lt;br /&gt;
&lt;br /&gt;
# The search base that will be used for all queries.&lt;br /&gt;
base dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# Other base mappings&lt;br /&gt;
base   group  ou=groups,dc=hcc,dc=nl&lt;br /&gt;
base   passwd ou=users,dc=hcc,dc=nl&lt;br /&gt;
base   shadow ou=users,dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# The search scope.&lt;br /&gt;
#scope sub&lt;br /&gt;
&lt;br /&gt;
# The LDAP protocol version to use.&lt;br /&gt;
ldap_version 3&lt;br /&gt;
&lt;br /&gt;
# The DN to bind with for normal lookups.&lt;br /&gt;
#binddn cn=annonymous,dc=example,dc=net&lt;br /&gt;
#bindpw secret&lt;br /&gt;
binddn cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&lt;br /&gt;
bindpw xxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
# The DN used for password modifications by root.&lt;br /&gt;
#rootpwmoddn cn=admin,dc=example,dc=com&lt;br /&gt;
&lt;br /&gt;
# SSL options&lt;br /&gt;
ssl off&lt;br /&gt;
ssl start_tls&lt;br /&gt;
#tls_reqcert never&lt;br /&gt;
tls_cacertfile /etc/ssl/certs/cacert.org.pem&lt;br /&gt;
#tls_cert /etc/ssl/private/server.crt&lt;br /&gt;
#tls_key /etc/ssl/private/server.key&lt;br /&gt;
&lt;br /&gt;
# The minimum uid&lt;br /&gt;
nss_min_uid 300&lt;br /&gt;
&lt;br /&gt;
pam_authz_search (&amp;amp;(objectClass=posixAccount)(uid=$username)(|(host=$hostname)(host=$fqdn)(host=\\*)))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===users en groepen toevoegen===&lt;br /&gt;
Hiervoor moet &#039;&#039;&#039;ldapscripts&#039;&#039;&#039; zijn geïnstalleerd. Dit is het geval op de ldap-lb1 server. Dat levert de volgende extra commando&#039;s op:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldaprenamemachine&lt;br /&gt;
ldapadduser&lt;br /&gt;
ldapdeleteuserfromgroup&lt;br /&gt;
ldapfinger&lt;br /&gt;
ldapid&lt;br /&gt;
ldapgid&lt;br /&gt;
ldapmodifyuser&lt;br /&gt;
ldaprenameuser&lt;br /&gt;
lsldap&lt;br /&gt;
ldapaddusertogroup&lt;br /&gt;
ldapsetpasswd&lt;br /&gt;
ldapinit&lt;br /&gt;
ldapaddgroup&lt;br /&gt;
ldapdeletegroup&lt;br /&gt;
ldapmodifygroup&lt;br /&gt;
ldapdeletemachine&lt;br /&gt;
ldaprenamegroup&lt;br /&gt;
ldapaddmachine&lt;br /&gt;
ldapmodifymachine&lt;br /&gt;
ldapsetprimarygroup&lt;br /&gt;
ldapdeleteuser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Meest gebruikt zijn &#039;&#039;&#039;ldapaddgroup, ldapadduser, ldapsetpasswd&#039;&#039;&#039;.  &lt;br /&gt;
Er zijn manpages maar er is ook uitgebreide uitleg in de [https://help.ubuntu.com/14.04/serverguide/openldap-server.html Ubuntu server guide]. Omdat wij het automatisch maken van de home dir uit hebben staan, moet die met de hand aangemaakt worden en moet de owner goed gezet worden.&lt;br /&gt;
&lt;br /&gt;
===host-based login===&lt;br /&gt;
Met een kleine uitbreiding in het schema van de LDAP server, kan host-based login gerealiseerd worden. Ook in de &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; is een uitbreiding nodig.&lt;br /&gt;
&lt;br /&gt;
In de LDAP server dient de objectClass &#039;&#039;&#039;hostObject&#039;&#039;&#039; aan de entries in de ou=users toegevoegd te worden. Deze (auxilary) objectClass brengt slechts één attribute met zich mee: &#039;&#039;&#039;host&#039;&#039;&#039;. De regel in nslcd.conf checkt of één van de waarden van &#039;&#039;&#039;host&#039;&#039;&#039; gelijk is aan de naam van de server waarop ingelogd wordt. De waarde &#039;&#039;&#039;*&#039;&#039;&#039; geldt als wildcard. Zie de regel &#039;&#039;&lt;br /&gt;
&#039;pam_authz_search&#039;&#039;&#039;&#039; in &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Password aanpassen===&lt;br /&gt;
Via LDAP ingelogde gebruikers kunnen net als lokale gebruikers hun wachtwoord met &#039;&#039;&#039;passwd&#039;&#039;&#039; wijzigen. Wel moet aan de eisen in de LDAP ppolicy module voldaan worden.&lt;br /&gt;
&lt;br /&gt;
==PHP scripting==&lt;br /&gt;
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 &#039;&#039;&#039;/usr/local/hobbynet/bin&#039;&#039;&#039; directory.&lt;br /&gt;
Voor de php-scripting zijn enkele php7.x pakketten nodig. Installeer deze met apt-get. Het gaat om:&lt;br /&gt;
* php-cli&lt;br /&gt;
* php-ldap&lt;br /&gt;
&lt;br /&gt;
== Apache authenticatie via LDAP ==&lt;br /&gt;
In plaats van .htpassword authenticatie, kan ook LDAP gebruikt worden. Activeer daartoe de Apache module&lt;br /&gt;
&#039;authnz_ldap&#039;.&lt;br /&gt;
 a2enmod authnz_ldap&lt;br /&gt;
Denk er om dat dit in een loadbalanced situatie op beide servers gedaan dient te worden!&lt;br /&gt;
&lt;br /&gt;
=== Voorbeeld van een LDAP configuratie in de Apache config ===&lt;br /&gt;
(alleen als voorbeeld, niet zo gebruiken!)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# // 1) Hobbynet webmaster&lt;br /&gt;
# // 2) Vraagbaak medewerker van een willekeurige groepering&lt;br /&gt;
# (|(hccRol=*#VRBK)(hccRol=HN#WM))&lt;br /&gt;
  &amp;lt;Location &amp;quot;/apps/vraagbaak&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;RequireAll&amp;gt;&lt;br /&gt;
      Authname &amp;quot;HCC!vraagbaak (gebruik uw hcc.nl gebruikersnaam/wachtwoord)&amp;quot;&lt;br /&gt;
      AuthType Basic&lt;br /&gt;
      AuthBasicProvider ldap&lt;br /&gt;
      AuthLDAPUrl ldap://hcc-ldap-int.hobby.nl/ou=leden,dc=hcc,dc=nl?hccLogin??(|(hccRol=*#VRBK)(hccRol=HN#WM))(hccProfiel=TRUE) TLS&lt;br /&gt;
      require valid-user&lt;br /&gt;
    &amp;lt;/RequireAll&amp;gt;&lt;br /&gt;
  &amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hoe kan LDAP veilig gebruikt worden vanuit Apache===&lt;br /&gt;
Zet een script neer in de gebruikersomgeving, en gebruik mod_authz_external. Doe de controle vervolgens via de XML-RPC server.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zie [[Kadernet]] voor een voorbeeld.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== TODO lijst ==&lt;br /&gt;
&#039;&#039;Dit is een lijst in wording, graag aanvullen&#039;&#039; &lt;br /&gt;
* &#039;dun&#039; loadbalancer script maken om te controleren dat LDAP echt luistert&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79059</id>
		<title>LDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79059"/>
		<updated>2020-12-10T21:11:53Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* modify-hdb.ldif */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introductie==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==LDAP server keuze==&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Loadbalanced==&lt;br /&gt;
Er zijn twee servers (ldap-lb1 en ldap-lb2) die achter een loadbalancer in preferred server mode staan 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.&lt;br /&gt;
&lt;br /&gt;
Tevens zijn er een test en een development server: ldap-test en ldap-dev.&lt;br /&gt;
&lt;br /&gt;
==Installatie==&lt;br /&gt;
Installatie van OpenLDAP is simpel:&lt;br /&gt;
 aptitude install slapd ldap-utils&lt;br /&gt;
Omdat er gebruikgemaakt wordt van php scripts, is het ook nodig &#039;&#039;&#039;php-cli&#039;&#039;&#039; en &#039;&#039;&#039;php-ldap&#039;&#039;&#039; te installeren. De configuratie van OpenLDAP is sinds Karmic Koala iets gecompliceerder geworden. &#039;cn=config&#039; 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 &amp;quot;dpkg-reconfigure slapd&amp;quot; zet alleen de skeleton configuratie terug. Je moet zelf de database, root dn en acl&#039;s opzetten (als root of met sudo). Run  &#039;&#039;&#039;dpkg-reconfigure slapd&#039;&#039;&#039; om terug te gaan naar een lege directory. &lt;br /&gt;
&lt;br /&gt;
De volgende pakketten dienen geïnstalleerd te zijn (&#039;php -m&#039; toont de geactiveerde modules):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontbrekende pakketten volgens hjv:&lt;br /&gt;
&lt;br /&gt;
apt-get install aptitude &lt;br /&gt;
apt-get install phpmyadmin&lt;br /&gt;
apt-get install php-mbstring&lt;br /&gt;
apt-get install php-gettext&lt;br /&gt;
apt-get install php-xmlrpc&lt;br /&gt;
apt-get install php-ldap&lt;br /&gt;
apt-get install mysql-server&lt;br /&gt;
apt-get install ldapscripts&lt;br /&gt;
apt-get install php-xml&lt;br /&gt;
apt-get install slapd&lt;br /&gt;
apt-get install ldap-utils&lt;br /&gt;
a2enmod ssl&lt;br /&gt;
&lt;br /&gt;
- apache2ctl restart&lt;br /&gt;
&lt;br /&gt;
- openldap moet lid zijn van de groep ssl-cert!&lt;br /&gt;
apt-get install ssl-cert&lt;br /&gt;
adduser openldap ssl-cert&lt;br /&gt;
(of vi /etc/group&lt;br /&gt;
    ssl-cert:x:116:openldap)&lt;br /&gt;
&lt;br /&gt;
- Zorg dat de LDAP daemon bij de certificaten kan komen. &lt;br /&gt;
LET OP: op alle hobbynet servers staan de certificaten in /disk/site/etc/ssl/hobby.nl/&lt;br /&gt;
 chgrp ssl-cert /disk/site/etc/ssl/hobby.nl/hobby.nl.*&lt;br /&gt;
 chmod 440      /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
- mysql laat het bestand ibdata1 ongelimiteerd groeien (InnoDB bestanden)&lt;br /&gt;
 /etc/mysql/mysql.conf.d/innodb_file_per_table.cnf&lt;br /&gt;
 [mysql]&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
&lt;br /&gt;
=============&lt;br /&gt;
Nog meer Hobbynet aanpassingen&lt;br /&gt;
/etc/bash.bashrc&lt;br /&gt;
export http_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export https_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export ftp_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Locatie bestanden===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Alle ldif em tmpl bestanden gaan naar /usr/local/hobbynet/lib&lt;br /&gt;
* init_ldap en andere scripts gaan naar /usr/local/hobbynet/bin&lt;br /&gt;
* alle data bestanden (dumps) en update ldifs gaan naar /usr/local/hobbynet/data&lt;br /&gt;
* etc/ldap/schema/hcc_schema.* gaan naar /etc/ldap/schema&lt;br /&gt;
* etc/ldap/schema/ppolicy.ldif gaat naar /etc/ldap/schema&lt;br /&gt;
&lt;br /&gt;
hcc_schema.ldif wordt middels een script gemaakt. Dit script plaatst de ldif bestand(en) in /etc/ldap/schema. Zie hieronder.&lt;br /&gt;
&lt;br /&gt;
==Initiële database==&lt;br /&gt;
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.sh &amp;lt;admin-pw&amp;gt; gebruikt dan wordt een werkende directory gemaakt met alle statische data (in diverse ou&#039;s) erin. Gebruik na het maken van de initiële database restore_ldap.sh om de database te vullen met de data uit de data directory.&lt;br /&gt;
&lt;br /&gt;
===slapd.init.ldif ===&lt;br /&gt;
Bij installatie en reconfiguratie wordt /usr/share/slapd/slapd.init.ldif ingelezen. Zie aldaar indien nodig.&lt;br /&gt;
&lt;br /&gt;
==init_ldap script==&lt;br /&gt;
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 &#039;&#039;&#039;cn=admin,dc=hcc,dc=nl&#039;&#039;&#039; 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 &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; laadt vervolgens de laatste dump terug. Bij wijzigingen aan het schema is het raadzaam altijd een &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; te doen zodat een later een actuele dump kan worden teruggeladen.&lt;br /&gt;
&lt;br /&gt;
Het (plain text) password van cn=admin,dc=hcc,dc=nl moet bij het aanroepen van &#039;&#039;&#039;init_ldap&#039;&#039;&#039; op de commandline worden meegegeven. Tijdens de dpkg-reconfigure moet het password nog 2x gegeven worden. Lees eventueel ook de [http://www.openldap.org/doc/admin/ OpenLDAP Admin Guide].&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* voorbereidingen om &amp;quot;dpkg-reconfigure slapd&amp;quot; te draaien&lt;br /&gt;
* definities van input files&lt;br /&gt;
* check host&lt;br /&gt;
* bouwen van het skelet van de nieuwe directory&lt;br /&gt;
Zie voor details van de scripts &#039;&#039;&#039;init_ldap&#039;&#039;&#039;, &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; en &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; op een van de servers (in /usr/local/hobbynet/bin).&lt;br /&gt;
&lt;br /&gt;
==onderdelen van init_ldap==&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===add-schema.ldif===&lt;br /&gt;
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. &lt;br /&gt;
* Hiertoe wordt het onderstaande schema in /etc/ldap/schema geplaatst als hcc_schema.schema. &lt;br /&gt;
* Vervolgens worden de stappen uitgevoerd zoals beschreven in de [https://help.ubuntu.com/11.10/serverguide/C/openldap-server.html Ubuntu Server guide], onder &#039;&#039;&#039;Modifying the slapd Configuration Database&#039;&#039;&#039;. &lt;br /&gt;
* De resulterende output file &#039;&#039;&#039;cn=hcc_schema.ldif&#039;&#039;&#039; moet dan nog naar /etc/ldap/schema/hcc_schema.ldif gecopieerd worden. &lt;br /&gt;
Als dit proces herhaald moet worden, start dan met een lege output directory en verwijder een eventueel achtergebleven cn=hcc_schema.ldif bestand. &lt;br /&gt;
&lt;br /&gt;
De extra schema&#039;s worden middels een &#039;&#039;&#039;include&#039;&#039;&#039; toegevoegd. &#039;&#039;&#039;Ppolicy&#039;&#039;&#039; is op gelijke wijze als &#039;&#039;&#039;hcc_schema&#039;&#039;&#039; tot .ldif geconverteerd. Alle stappen om een nieuwe &#039;&#039;&#039;hcc-schema.ldif&#039;&#039;&#039; te maken zijn gescript in &#039;&#039;&#039;upd_schema&#039;&#039;&#039;. In &#039;&#039;&#039;init_ldap&#039;&#039;&#039; wordt het eigen schema en de password policy geladen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-schema.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
include: file:///etc/ldap/schema/hcc_schema.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ppolicy.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ldapns.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====schema updates====&lt;br /&gt;
Soms wordt een attribute toegevoegd of gewijzigd. Hiertoe dient het bestand hcc_schema.schema in /usr/local/hobbynet/etc/ldap/schema, gewijzigd te worden. Daarna dient er een ldif versie van gemaakt te worden. Gebruik hiervoor &#039;&#039;&#039;upd_schema.sh&#039;&#039;&#039; in dezelfde directory. De resulterende hcc_schema.ldif wordt in dit script naar /etc/ldap/schema gecopieërd. Bij grote wijzigingen is het aan te bevelen door de hele rebuild cycle te gaan (dump, init, restore). Bij triviale aanpassingen zou hcc_schema.ldif ook &#039;&#039;&#039;direct&#039;&#039;&#039; in de actieve directory geplaatst kunnen worden, gevolgd door slechts een &#039;&#039;&#039;service slapd restart&#039;&#039;&#039;. Gebruik hiervoor (blijf in de lokale schema directory):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp &amp;quot;ldif_output/cn=config/cn=schema/cn={14}hcc_schema.ldif&amp;quot; &amp;quot;/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}hcc_schema.ldif&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
LET OP: De nummers tussen accolades zijn bepaald door de volgorde van andere scripts! Zolang geen andere schema&#039;s worden toegevoegd zullen ze niet veranderen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ook kan met de ldap-tools gewerkt worden. Gebruik ldapsearch en ldapmodify, eventueel met de -f optie om een voorbereide serie opdrachten uit te voeren. Gebruik ldapsearch om eerst de structuur te vinden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier een voorbeeld om een objectClass aan te passen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat pas_aan.ldif&lt;br /&gt;
dn: cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
delete: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description ) )&lt;br /&gt;
-&lt;br /&gt;
add: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description $ hccIg ) )&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
$sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f pas_aan.ldif &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_config.ldif===&lt;br /&gt;
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 &#039;&#039;&#039;STATS&#039;&#039;&#039; gezet. Dit geeft niet teveel logging maar is toch goed bruikbaar. Om extra logging te krijgen op b.v. ACL&#039;s, verander olcLogLevel dan in &amp;quot;stats ACL&amp;quot;.  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## modify-config.hobbynet            ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
replace: olcLogLevel&lt;br /&gt;
olcLogLevel: stats&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCACertificateFile&lt;br /&gt;
olcTLSCACertificateFile: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCertificateFile&lt;br /&gt;
olcTLSCertificateFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCertificateKeyFile&lt;br /&gt;
olcTLSCertificateKeyFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Om de logging in een apart bestand te krijgen moet in /etc/rsyslog.d een extra bestand &#039;&#039;&#039;openldap.conf&#039;&#039;&#039; geplaatst worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local4.*   -/var/log/openldap.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Tevens willen we logrotate op dit bestand. Plaats in /etc/logrotate.d het bestand &#039;&#039;&#039;openldap&#039;&#039;&#039; met de volgende inhoud&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/log/openldap.log&lt;br /&gt;
{&lt;br /&gt;
        rotate 4&lt;br /&gt;
        weekly&lt;br /&gt;
        missingok&lt;br /&gt;
        notifempty&lt;br /&gt;
        compress&lt;br /&gt;
        delaycompress&lt;br /&gt;
        sharedscripts&lt;br /&gt;
        postrotate&lt;br /&gt;
                reload rsyslog &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 || true&lt;br /&gt;
        endscript&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify-mdb.ldif===&lt;br /&gt;
Hier worden de wijzigingen op de backend db gemaakt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# file: modify-mdb.ldif&lt;br /&gt;
# date: vbs20200415&lt;br /&gt;
# hjv 2020.06.07 (oldSizeLimit toegevoegd)&lt;br /&gt;
#&lt;br /&gt;
dn: olcDatabase={1}mdb,cn=config&lt;br /&gt;
replace: olcDbCheckpoint&lt;br /&gt;
olcDbCheckpoint: 4096 1&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbNoSync&lt;br /&gt;
olcDbNoSync: TRUE&lt;br /&gt;
-&lt;br /&gt;
replace: olcSizeLimit&lt;br /&gt;
olcSizeLimit: 100000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_index.ldif===&lt;br /&gt;
Een kale configuratie is heel snel voor wat betreft het opnieuw vullen met gegevens. Bij het aanmaken van een verse LDAP database worden er dan ook zo min mogelijk indexen aangemaakt.&amp;lt;br&amp;gt;&lt;br /&gt;
Zodra de inhoud is ingelezen kunnen de &#039;echte&#039; indexen aangemaakt worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## modify-index.ldif                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
replace: olcDbIndex&lt;br /&gt;
olcDbIndex: default pres,eq&lt;br /&gt;
olcDbIndex: objectClass,entryUUID,entryCSN eq&lt;br /&gt;
olcDbIndex: hccLidNummer,hccLogin,hccForumLogin eq&lt;br /&gt;
olcDbIndex: uid,uidNumber,gidNumber,memberUid,member eq&lt;br /&gt;
olcDbIndex: cn,host,hccPseudoniem,hccOptin,hccLocatie eq&lt;br /&gt;
olcDbIndex: sn,hccPostcodeZoekveld,hccIg,hccRegio eq,subfinal&lt;br /&gt;
olcDbIndex: hccRol,hccBezoek eq,pres,subfinal&lt;br /&gt;
olcDbIndex: hccBulletins pres&lt;br /&gt;
olcDbIndex: aboNummer eq&lt;br /&gt;
olcDbIndex: aboPostcodeZoekveld eq,subfinal&lt;br /&gt;
olcDbIndex: mail,mailHccnet,hccKaderMail pres,eq&lt;br /&gt;
olcDbIndex: hccProfiel pres&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ppolicy overlay===&lt;br /&gt;
* vanuit LDAP de minimale lengte van een wachtwoord afdwingen&lt;br /&gt;
* in LDAP SSHA versleuteling activeren&amp;lt;br&amp;gt;&lt;br /&gt;
(olcPPolicyHashCleartext: TRUE)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-ppolicy.ldif                  ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module, cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectClass: olcModuleList&lt;br /&gt;
objectClass: top&lt;br /&gt;
olcModuleLoad: ppolicy&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=ppolicy,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcPPolicyConfig&lt;br /&gt;
olcOverlay: ppolicy&lt;br /&gt;
olcPPolicyDefault: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
olcPPolicyUseLockout: TRUE&lt;br /&gt;
olcPPolicyHashCleartext: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The default ppolicy looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dn: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
objectClass: pwdPolicy&lt;br /&gt;
objectClass: device&lt;br /&gt;
cn: default&lt;br /&gt;
pwdCheckQuality: 1&lt;br /&gt;
pwdMinLength: 8&lt;br /&gt;
pwdAttribute: 2.5.4.35&lt;br /&gt;
pwdAllowUserChange: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Syncrepl overlay===&lt;br /&gt;
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 [http://www.openldap.org/doc/admin/ LDAP Admin Guide]. &#039;&#039;&#039;Mirror configuratie is specifiek per server!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-syncrepl.tmpl                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
replace: olcServerID&lt;br /&gt;
olcServerID: @SID@&lt;br /&gt;
&lt;br /&gt;
dn: cn=module{0},cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcModuleLoad&lt;br /&gt;
olcModuleLoad: syncprov&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcSyncProvConfig&lt;br /&gt;
olcOverlay: syncprov&lt;br /&gt;
olcSpCheckpoint: 100 5&lt;br /&gt;
olcSpSessionlog: 100&lt;br /&gt;
&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcSyncRepl&lt;br /&gt;
olcSyncRepl: rid=@RID@&lt;br /&gt;
  provider=ldap://@PROVIDER@&lt;br /&gt;
  binddn=&amp;quot;cn=admin,dc=hcc,dc=nl&amp;quot; bindmethod=simple credentials=&amp;quot;@PASSWORD@&amp;quot;&lt;br /&gt;
  searchbase=&amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
  type=refreshAndPersist&lt;br /&gt;
  interval=00:00:00:10&lt;br /&gt;
  retry=&amp;quot;5 5 300 5&amp;quot;&lt;br /&gt;
  timeout=1&lt;br /&gt;
  starttls=yes&lt;br /&gt;
-&lt;br /&gt;
add: olcMirrorMode&lt;br /&gt;
olcMirrorMode: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
De andere server krijgt ServerID 2 en de provider is het IP adres van de andere server.&lt;br /&gt;
&lt;br /&gt;
===Unique overlay===&lt;br /&gt;
Deze overlay dient er voor te zorgen dat o.a het attribuut hccLogin een unieke waarde bevat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-unique.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module,cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectclass: olcModuleList&lt;br /&gt;
objectclass: top&lt;br /&gt;
olcmoduleload: unique&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=unique,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcUniqueConfig&lt;br /&gt;
olcOverlay: unique&lt;br /&gt;
olcUniqueAttribute: uid uidNumber hccLogin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SSL/TLS beveiliging==&lt;br /&gt;
Gebruik de juiste .pem bestanden in /etc/ssl/certs en /etc/ssl/private.&lt;br /&gt;
&lt;br /&gt;
We maken gebruik van een RapidSSL certificaat. Als dit niet standaard in Ubuntu bekend is, zet dan eerst GeoTrust_RapidSSL_-_ca-bundle.pem in de map /etc/ssl/certs neer. Voer nu een &#039;&#039;&#039;c_rehash .&#039;&#039;&#039; uit in /etc/ssl/certs om de cache te updaten (omdat GeoTrust_RapidSSL_-_ca-bundle.pem nieuw werd toegevoegd). &lt;br /&gt;
&lt;br /&gt;
De ownership is belangrijk. Hiertoe wordt de groep &amp;quot;openldap&amp;quot; toegevoegd aan de groep ssl-cert.&lt;br /&gt;
 adduser openldap ssl-cert&lt;br /&gt;
&lt;br /&gt;
Als dit fout gaat, doe dan eerst:&lt;br /&gt;
 apt-get install ssl-cert&lt;br /&gt;
&lt;br /&gt;
Zet het certificaat en de private key in de juiste groep:&lt;br /&gt;
 chgrp ssl-cert /etc/ssl/private/hobby.nl.*&lt;br /&gt;
 chmod 440      /etc/ssl/private/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
Het resultaat is dan als volgt:&lt;br /&gt;
 root@hcc-ldap-lb1:~# ls -l /etc/ssl/private/hcc* &lt;br /&gt;
 -rw-r--r-- 1 root     ssl-cert 1724 Nov 22 20:47 hobby.nl.crt&lt;br /&gt;
 -r--r----- 1 root     ssl-cert 1679 Nov 22 20:25 hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
 root@hcc-ldap-lb1:~# grep openldap /etc/group&lt;br /&gt;
 ssl-cert:x:114:openldap&lt;br /&gt;
 openldap:x:118:&lt;br /&gt;
&lt;br /&gt;
2020.12.09: Op een nieuwe Ubuntu installatie staat apparmor standaard aan. Weg ermee!&lt;br /&gt;
 apt remove --assume-yes --purge apparmor&lt;br /&gt;
&amp;lt;strike&amp;gt;Per september 2017 staan de certificaten in /disk/site/etc/ssl/hobby.nl, net als op alle andere servers. Omdat apparmor actief is moet deze directory worden toegevoegd aan /etc/apparmor.d/local/usr.sbin.slapd. Die file ziet er dan als volgt uit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Site-specific additions and overrides for usr.sbin.slapd.&lt;br /&gt;
# For more details, please see /etc/apparmor.d/local/README.&lt;br /&gt;
#include &amp;lt;abstractions/ssl_certs&amp;gt;&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/ r,&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/* r,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Openldap ook op poort 636 benaderd wordt (naast TLS op 389), moet in /etc/default/slapd ldaps:/// opgenomen worden bij de SLAPD_SERVICES.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;netstat -an&#039; dient dan 636 te laten zien voor zowel IPv4 als IPv6.&lt;br /&gt;
&lt;br /&gt;
Om de cn=config te zien kan je het volgende commando gebruiken:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config&lt;br /&gt;
&lt;br /&gt;
of, wat botter maar korter:&lt;br /&gt;
cat /etc/ldap/slapd.d/cn\=config.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Backup, initialize, restore==&lt;br /&gt;
Om het hele skelet van ldap in één keer te herstellen dient &#039;&#039;&#039;init_ldap&#039;&#039;&#039; gebruikt te worden. Als argument &#039;&#039;&#039;moet&#039;&#039;&#039; het admin beheer wachtwoord mee gegeven worden.&lt;br /&gt;
&lt;br /&gt;
===lokaal===&lt;br /&gt;
Backups kunnen gemaakt worden terwijl slapd draait maar geadviseerd wordt slapd te stoppen. Voor dumpen moet &#039;&#039;&#039;slapcat&#039;&#039;&#039; gebruikt worden. Backups kunnen gemaakt worden per database of een filter daarop, naar een ldif bestand.&lt;br /&gt;
 slapcat -l hcc-dump.ldif -b &amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
Dit maakt een dump van alles onder &#039;&#039;&#039;dc=hcc,dc=nl&#039;&#039;&#039; naar het bestand hcc-dump.ldif. Ook is het mogelijk het database nummer te gebruiken, config is altijd nummer 0, hdb is gewoonlijk 1.&lt;br /&gt;
&lt;br /&gt;
Het &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; script dumpt alle ou&#039;s in aparte .ldif bestanden; het omgekeerde doet &#039;&#039;&#039;restore_ldap&#039;&#039;&#039;.  &lt;br /&gt;
Terug inlezen kan alleen in een lege directory, dus direct nadat &#039;&#039;&#039;init_ldap&#039;&#039;&#039; is gedaan. Gebruik voor het terugplaatsen &#039;&#039;&#039;slapadd&#039;&#039;&#039;. Aan te bevelen is &#039;&#039;&#039;-c&#039;&#039;&#039; mee te geven zodat ondanks fouten doorgegaan wordt. &lt;br /&gt;
&lt;br /&gt;
Voor slapadd &#039;&#039;&#039;moet&#039;&#039;&#039; 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)&lt;br /&gt;
 /etc/init.d/slapd stop&lt;br /&gt;
 slapadd -l hcc-dump.ldif -w -c &amp;gt;errors.txt&lt;br /&gt;
 chown openldap:openldap /var/lib/ldap/*&lt;br /&gt;
 /etc/init.d/slapd start&lt;br /&gt;
&lt;br /&gt;
===remote===&lt;br /&gt;
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 &#039;&#039;&#039;backup-encrypted&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Recente lokale backups zijn te vinden in &#039;&#039;&#039;/usr/local/hobbynet/tmp&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Verse ldap maken===&lt;br /&gt;
Transactie log bij het toevoegen van b.v. een nieuwe ou:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Op beide servers:&lt;br /&gt;
schema van test server gecopieerd en geactiveerd&lt;br /&gt;
dump-ldap gedraaid&lt;br /&gt;
systemctl stop slapd.service &lt;br /&gt;
&lt;br /&gt;
Er is nu géén ldap service! Werk dus snel...&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb1&lt;br /&gt;
systemctl stop slapd.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
op ldap-lb2:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb2&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
systemctl start slapd.service&lt;br /&gt;
Beide slapd servers zijn in de lucht en moeten synchroniseren.&lt;br /&gt;
&lt;br /&gt;
op beide servers:&lt;br /&gt;
check replicatie (netstat en functioneel)&lt;br /&gt;
&lt;br /&gt;
root@ldap-lb1:/usr/local/hobbynet/bin# netstat -n | grep 389&lt;br /&gt;
tcp        0      0 172.31.8.4:36838        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:36836        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58112        ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58114        ESTABLISHED&lt;br /&gt;
&lt;br /&gt;
Functioneel door met ADS op beide servers in te loggen en een willekeurig veld in je eigen entry te wijzigen op lb1. Kijk of het gebeurd is op lb2 en wijzig het daar terug. Check op de andere server of het gebeurd is. Er kan een zekere vertraging in optreden.&lt;br /&gt;
&lt;br /&gt;
Stel er is een nieuwe ou gemaakt: denk aan het bij werken van de dump en restore scripts.&lt;br /&gt;
&lt;br /&gt;
update dump-ldap.sh en restore-ldap.sh met de nieuwe ou&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
export tarieven.ldif op test server en import op ldap-lb1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==crontab==&lt;br /&gt;
 # script dat updates ophaalt (maar niet installeert), zodat nagios ze ook detecteert&lt;br /&gt;
 0 9 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
==LDAP Clients==&lt;br /&gt;
Er zijn meerdere LDAP clients. De meest populaire zijn Apache Directory Studio (&amp;quot;ADS&amp;quot;) en phpLdapAdmin (&amp;quot;PLA&amp;quot;).&amp;lt;br&amp;gt;&lt;br /&gt;
De eerste is veel uitgbreider maar vereist een Java Runtime Environment (&amp;quot;JRE&amp;quot;). Onder Windows is dat JRE(13) of (open)JDK-(13).&amp;lt;br&amp;gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Binnen Hobbynet wordt uitsluitend gebruik gemaakt van ADS.&lt;br /&gt;
&lt;br /&gt;
===StartTLS===&lt;br /&gt;
Aanbevolen wordt StartTLS op poort 389 te gebruiken. Alternatief is LDAPS op poort 636 maar dat is deprecated. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Windows===&lt;br /&gt;
&amp;lt;i&amp;gt;2019-10-31 HJV: Oude info, als referentie leuk, maar niet meer relevant&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Onder Windows moet met &#039;&#039;&#039;keytool.exe&#039;&#039;&#039; gewerkt worden. De uitleg heb ik van  [http://www.talkingtree.com/blog/index.cfm?mode=entry&amp;amp;entry=25AA75A4-45A6-2844-7CA3EECD842DB576 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:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Haal de benodigde bestanden op (op een Linux systeem):&lt;br /&gt;
wget http://www.cacert.org/certs/root.der -O root.der&lt;br /&gt;
wget http://www.cacert.org/certs/class3.der -O class3.der&lt;br /&gt;
copieer de bestanden naar de Windows omgeving in C:\Program Files (x86)\Java\jre6\lib\security.&lt;br /&gt;
&lt;br /&gt;
Open een commandwindow:&lt;br /&gt;
cd C:\Program Files (x86)\Java\jre6\lib\security&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass1 -file root.der&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass3 -file class3.der&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Linux===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS gebruik===&lt;br /&gt;
ADS kan erg handig zijn voor het snel dumpen van hele ou&#039;s in .ldif formaat. Zo&#039;n dump kan direct op een andere server worden ingelezen.&lt;br /&gt;
&lt;br /&gt;
===PhpLdapAdmin onder Linux===&lt;br /&gt;
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 [http://phpldapadmin.sourceforge.net/wiki/index.php/Server:server:tls phpldapadmin wiki].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# LDAP Defaults&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# See ldap.conf(5) for details&lt;br /&gt;
# This file should be world readable but not world writable.&lt;br /&gt;
&lt;br /&gt;
#BASE   dc=example,dc=com&lt;br /&gt;
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666&lt;br /&gt;
&lt;br /&gt;
#SIZELIMIT      12&lt;br /&gt;
#TIMELIMIT      15&lt;br /&gt;
#DEREF          never&lt;br /&gt;
TLS_CACERT      /etc/ssl/certs/CAcert_org.pem&lt;br /&gt;
TLS_CERT        /etc/ssl/private/hobby.nl.crt&lt;br /&gt;
TLS_KEY         /etc/ssl/private/hobby.nl.key&lt;br /&gt;
TLS_REQCERT     allow&lt;br /&gt;
#TLS_REQCERT never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Denk er wel aan na wijzigingen Apache te herstarten.&lt;br /&gt;
===PAM en NSS via LDAP===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Installeer &#039;&#039;&#039;libnss-ldapd&#039;&#039;&#039; om de benodigde libraries te verkrijgen. Apt-get zal tevens &#039;&#039;&#039;libpam-ldapd&#039;&#039;&#039;, &#039;&#039;&#039;nslcd&#039;&#039;&#039; en &#039;&#039;&#039;nscd&#039;&#039;&#039; binnen brengen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install libnss-ldapd auth-client-config ldap-utils&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
    libpam-ldapd nscd nslcd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Libnss-ldapd is een doorontwikkeling van libnss-ldap en bevat meerdere verbeteringen. Zie: [http://arthurdejong.org/nss-pam-ldapd/ deze site] van de ontwikkelaar. Bij de installatie wordt een user &#039;&#039;&#039;nslcd&#039;&#039;&#039; aangemaakt; denk erom die in de .tmpl bestanden te zetten!&lt;br /&gt;
  &lt;br /&gt;
nsswitch.conf laat zich configureren via &#039;&#039;&#039;auth-client-config&#039;&#039;&#039; maar lac_ldap is alleen aanwezig als &#039;&#039;&#039;ldap-auth-config&#039;&#039;&#039; ook is geinstalleerd. Zo niet gebruik dan de tweede regel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auth-client-config -t nss -p lac_ldap&lt;br /&gt;
auth-client-config -t nss -p ldap_example&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het resultaat is dat nsswitch.conf zowel in files (/etc/passwd etc.) zoekt als in ldap.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nsswitch.conf&lt;br /&gt;
#&lt;br /&gt;
# Example configuration of GNU Name Service Switch functionality.&lt;br /&gt;
# If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
# `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # passwd:         compat&lt;br /&gt;
passwd: files ldap&lt;br /&gt;
# pre_auth-client-config # group:          compat&lt;br /&gt;
group: files ldap&lt;br /&gt;
# pre_auth-client-config # shadow:         compat&lt;br /&gt;
shadow: files ldap&lt;br /&gt;
&lt;br /&gt;
hosts:          files dns&lt;br /&gt;
networks:       files&lt;br /&gt;
&lt;br /&gt;
protocols:      db files&lt;br /&gt;
services:       db files&lt;br /&gt;
ethers:         db files&lt;br /&gt;
rpc:            db files&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # netgroup:       nis&lt;br /&gt;
netgroup: nis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het aanpassen van de PAM bestanden gaat sinds enige releases met &#039;&#039;&#039;pam-auth-update&#039;&#039;&#039;. Kies in het menu voor zowel unix als ldap. Default wordt nu ldap authenticatie gebruikt voor uid &amp;gt;= 1000. Bij Hobbynet willen we vanaf 300 ldap gebruiken. Door een licht gemodificeerde versie van /usr/share/pam-configs/ldap te maken (ldap-hobbynet), kan ook voor de hobbynet instelling gekozen worden. Dit is de ldap-hobbynet versie:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Name: LDAP Authentication (uid&amp;gt;300)&lt;br /&gt;
Default: yes&lt;br /&gt;
Priority: 128&lt;br /&gt;
Auth-Type: Primary&lt;br /&gt;
Auth-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Auth:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 use_first_pass&lt;br /&gt;
Account-Type: Additional&lt;br /&gt;
Account:&lt;br /&gt;
        [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad]        pam_ldap.so minimum_uid=300&lt;br /&gt;
Password-Type: Primary&lt;br /&gt;
Password-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Password:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 try_first_pass&lt;br /&gt;
Session-Type: Additional&lt;br /&gt;
Session:&lt;br /&gt;
        [success=ok default=ignore]     pam_ldap.so minimum_uid=300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dit is in een standaard opzet van LDAP voldoende om zowel lokale gebruikers als gebruikers opgeslagen in LDAP, te laten inloggen en hun password te laten wijzigen. In de Hobbynet setup moet er echter nog meer gebeuren in de ACL&#039;s van de LDAP server configuratie. Omdat Hobbynet de laatste ACL regel heeft gewijzigd in een &#039;&#039;&#039;deny-all&#039;&#039;&#039;, is er een helper of proxy account nodig dat read access heeft of een aantal cruciale velden in de posixAccount objectClass. Zie verder de lsiting van nslcd.conf.&lt;br /&gt;
&lt;br /&gt;
Libnss-ldapd en libpam-ldapd hebben een gezamelijke daemon &#039;&#039;&#039;nslcd&#039;&#039;&#039; die z&#039;n configuratie uit &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039; haalt. Hierin is ook een voorziening voor het helper account. Aan het eind vande &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; staat de voorziening voor host-based login. Als het attribute &#039;&#039;&#039;host&#039;&#039;&#039; de fqdn of alleen de host naam bevat, bepaald dat of inloggen op die host mogelijk is. &#039;&#039;&#039;*&#039;&#039;&#039; staat inloggen op alle hosts toe.&lt;br /&gt;
&lt;br /&gt;
Eventueel kan het daemon proces voor debugging doeleinden ook als command (&#039;&#039;&#039;nslcd -d&#039;&#039;&#039;) gestart worden. Om de bevragingen van de LDAP server wat te verminderen, kan &#039;&#039;&#039;nscd&#039;&#039;&#039; voor caching zorgen. Deze cache daemon heeft zijn eigen configuratie bestand: &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039;. De default instellingen zijn goed; eventueel kan de logging naar een bestand gestuurd worden.&lt;br /&gt;
&lt;br /&gt;
Verbinding met de LDAP server kan met StartTLS beveiligd worden. Hier de inhoud van nslcd.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nslcd.conf&lt;br /&gt;
# nslcd configuration file. See nslcd.conf(5)&lt;br /&gt;
# for details.&lt;br /&gt;
&lt;br /&gt;
# The user and group nslcd should run as.&lt;br /&gt;
uid nslcd&lt;br /&gt;
gid nslcd&lt;br /&gt;
&lt;br /&gt;
# log location and level&lt;br /&gt;
#log /var/log/nslcd.log debug&lt;br /&gt;
&lt;br /&gt;
# The location at which the LDAP server(s) should be reachable.&lt;br /&gt;
uri ldap://ldap2-int.hobby.nl/&lt;br /&gt;
&lt;br /&gt;
# The search base that will be used for all queries.&lt;br /&gt;
base dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# Other base mappings&lt;br /&gt;
base   group  ou=groups,dc=hcc,dc=nl&lt;br /&gt;
base   passwd ou=users,dc=hcc,dc=nl&lt;br /&gt;
base   shadow ou=users,dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# The search scope.&lt;br /&gt;
#scope sub&lt;br /&gt;
&lt;br /&gt;
# The LDAP protocol version to use.&lt;br /&gt;
ldap_version 3&lt;br /&gt;
&lt;br /&gt;
# The DN to bind with for normal lookups.&lt;br /&gt;
#binddn cn=annonymous,dc=example,dc=net&lt;br /&gt;
#bindpw secret&lt;br /&gt;
binddn cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&lt;br /&gt;
bindpw xxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
# The DN used for password modifications by root.&lt;br /&gt;
#rootpwmoddn cn=admin,dc=example,dc=com&lt;br /&gt;
&lt;br /&gt;
# SSL options&lt;br /&gt;
ssl off&lt;br /&gt;
ssl start_tls&lt;br /&gt;
#tls_reqcert never&lt;br /&gt;
tls_cacertfile /etc/ssl/certs/cacert.org.pem&lt;br /&gt;
#tls_cert /etc/ssl/private/server.crt&lt;br /&gt;
#tls_key /etc/ssl/private/server.key&lt;br /&gt;
&lt;br /&gt;
# The minimum uid&lt;br /&gt;
nss_min_uid 300&lt;br /&gt;
&lt;br /&gt;
pam_authz_search (&amp;amp;(objectClass=posixAccount)(uid=$username)(|(host=$hostname)(host=$fqdn)(host=\\*)))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===users en groepen toevoegen===&lt;br /&gt;
Hiervoor moet &#039;&#039;&#039;ldapscripts&#039;&#039;&#039; zijn geïnstalleerd. Dit is het geval op de ldap-lb1 server. Dat levert de volgende extra commando&#039;s op:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldaprenamemachine&lt;br /&gt;
ldapadduser&lt;br /&gt;
ldapdeleteuserfromgroup&lt;br /&gt;
ldapfinger&lt;br /&gt;
ldapid&lt;br /&gt;
ldapgid&lt;br /&gt;
ldapmodifyuser&lt;br /&gt;
ldaprenameuser&lt;br /&gt;
lsldap&lt;br /&gt;
ldapaddusertogroup&lt;br /&gt;
ldapsetpasswd&lt;br /&gt;
ldapinit&lt;br /&gt;
ldapaddgroup&lt;br /&gt;
ldapdeletegroup&lt;br /&gt;
ldapmodifygroup&lt;br /&gt;
ldapdeletemachine&lt;br /&gt;
ldaprenamegroup&lt;br /&gt;
ldapaddmachine&lt;br /&gt;
ldapmodifymachine&lt;br /&gt;
ldapsetprimarygroup&lt;br /&gt;
ldapdeleteuser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Meest gebruikt zijn &#039;&#039;&#039;ldapaddgroup, ldapadduser, ldapsetpasswd&#039;&#039;&#039;.  &lt;br /&gt;
Er zijn manpages maar er is ook uitgebreide uitleg in de [https://help.ubuntu.com/14.04/serverguide/openldap-server.html Ubuntu server guide]. Omdat wij het automatisch maken van de home dir uit hebben staan, moet die met de hand aangemaakt worden en moet de owner goed gezet worden.&lt;br /&gt;
&lt;br /&gt;
===host-based login===&lt;br /&gt;
Met een kleine uitbreiding in het schema van de LDAP server, kan host-based login gerealiseerd worden. Ook in de &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; is een uitbreiding nodig.&lt;br /&gt;
&lt;br /&gt;
In de LDAP server dient de objectClass &#039;&#039;&#039;hostObject&#039;&#039;&#039; aan de entries in de ou=users toegevoegd te worden. Deze (auxilary) objectClass brengt slechts één attribute met zich mee: &#039;&#039;&#039;host&#039;&#039;&#039;. De regel in nslcd.conf checkt of één van de waarden van &#039;&#039;&#039;host&#039;&#039;&#039; gelijk is aan de naam van de server waarop ingelogd wordt. De waarde &#039;&#039;&#039;*&#039;&#039;&#039; geldt als wildcard. Zie de regel &#039;&#039;&lt;br /&gt;
&#039;pam_authz_search&#039;&#039;&#039;&#039; in &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Password aanpassen===&lt;br /&gt;
Via LDAP ingelogde gebruikers kunnen net als lokale gebruikers hun wachtwoord met &#039;&#039;&#039;passwd&#039;&#039;&#039; wijzigen. Wel moet aan de eisen in de LDAP ppolicy module voldaan worden.&lt;br /&gt;
&lt;br /&gt;
==PHP scripting==&lt;br /&gt;
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 &#039;&#039;&#039;/usr/local/hobbynet/bin&#039;&#039;&#039; directory.&lt;br /&gt;
Voor de php-scripting zijn enkele php7.x pakketten nodig. Installeer deze met apt-get. Het gaat om:&lt;br /&gt;
* php-cli&lt;br /&gt;
* php-ldap&lt;br /&gt;
&lt;br /&gt;
== Apache authenticatie via LDAP ==&lt;br /&gt;
In plaats van .htpassword authenticatie, kan ook LDAP gebruikt worden. Activeer daartoe de Apache module&lt;br /&gt;
&#039;authnz_ldap&#039;.&lt;br /&gt;
 a2enmod authnz_ldap&lt;br /&gt;
Denk er om dat dit in een loadbalanced situatie op beide servers gedaan dient te worden!&lt;br /&gt;
&lt;br /&gt;
=== Voorbeeld van een LDAP configuratie in de Apache config ===&lt;br /&gt;
(alleen als voorbeeld, niet zo gebruiken!)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# // 1) Hobbynet webmaster&lt;br /&gt;
# // 2) Vraagbaak medewerker van een willekeurige groepering&lt;br /&gt;
# (|(hccRol=*#VRBK)(hccRol=HN#WM))&lt;br /&gt;
  &amp;lt;Location &amp;quot;/apps/vraagbaak&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;RequireAll&amp;gt;&lt;br /&gt;
      Authname &amp;quot;HCC!vraagbaak (gebruik uw hcc.nl gebruikersnaam/wachtwoord)&amp;quot;&lt;br /&gt;
      AuthType Basic&lt;br /&gt;
      AuthBasicProvider ldap&lt;br /&gt;
      AuthLDAPUrl ldap://hcc-ldap-int.hobby.nl/ou=leden,dc=hcc,dc=nl?hccLogin??(|(hccRol=*#VRBK)(hccRol=HN#WM))(hccProfiel=TRUE) TLS&lt;br /&gt;
      require valid-user&lt;br /&gt;
    &amp;lt;/RequireAll&amp;gt;&lt;br /&gt;
  &amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hoe kan LDAP veilig gebruikt worden vanuit Apache===&lt;br /&gt;
Zet een script neer in de gebruikersomgeving, en gebruik mod_authz_external. Doe de controle vervolgens via de XML-RPC server.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zie [[Kadernet]] voor een voorbeeld.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== TODO lijst ==&lt;br /&gt;
&#039;&#039;Dit is een lijst in wording, graag aanvullen&#039;&#039; &lt;br /&gt;
* &#039;dun&#039; loadbalancer script maken om te controleren dat LDAP echt luistert&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79058</id>
		<title>LDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79058"/>
		<updated>2020-12-10T21:08:37Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* modify_config.ldif */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introductie==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==LDAP server keuze==&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Loadbalanced==&lt;br /&gt;
Er zijn twee servers (ldap-lb1 en ldap-lb2) die achter een loadbalancer in preferred server mode staan 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.&lt;br /&gt;
&lt;br /&gt;
Tevens zijn er een test en een development server: ldap-test en ldap-dev.&lt;br /&gt;
&lt;br /&gt;
==Installatie==&lt;br /&gt;
Installatie van OpenLDAP is simpel:&lt;br /&gt;
 aptitude install slapd ldap-utils&lt;br /&gt;
Omdat er gebruikgemaakt wordt van php scripts, is het ook nodig &#039;&#039;&#039;php-cli&#039;&#039;&#039; en &#039;&#039;&#039;php-ldap&#039;&#039;&#039; te installeren. De configuratie van OpenLDAP is sinds Karmic Koala iets gecompliceerder geworden. &#039;cn=config&#039; 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 &amp;quot;dpkg-reconfigure slapd&amp;quot; zet alleen de skeleton configuratie terug. Je moet zelf de database, root dn en acl&#039;s opzetten (als root of met sudo). Run  &#039;&#039;&#039;dpkg-reconfigure slapd&#039;&#039;&#039; om terug te gaan naar een lege directory. &lt;br /&gt;
&lt;br /&gt;
De volgende pakketten dienen geïnstalleerd te zijn (&#039;php -m&#039; toont de geactiveerde modules):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontbrekende pakketten volgens hjv:&lt;br /&gt;
&lt;br /&gt;
apt-get install aptitude &lt;br /&gt;
apt-get install phpmyadmin&lt;br /&gt;
apt-get install php-mbstring&lt;br /&gt;
apt-get install php-gettext&lt;br /&gt;
apt-get install php-xmlrpc&lt;br /&gt;
apt-get install php-ldap&lt;br /&gt;
apt-get install mysql-server&lt;br /&gt;
apt-get install ldapscripts&lt;br /&gt;
apt-get install php-xml&lt;br /&gt;
apt-get install slapd&lt;br /&gt;
apt-get install ldap-utils&lt;br /&gt;
a2enmod ssl&lt;br /&gt;
&lt;br /&gt;
- apache2ctl restart&lt;br /&gt;
&lt;br /&gt;
- openldap moet lid zijn van de groep ssl-cert!&lt;br /&gt;
apt-get install ssl-cert&lt;br /&gt;
adduser openldap ssl-cert&lt;br /&gt;
(of vi /etc/group&lt;br /&gt;
    ssl-cert:x:116:openldap)&lt;br /&gt;
&lt;br /&gt;
- Zorg dat de LDAP daemon bij de certificaten kan komen. &lt;br /&gt;
LET OP: op alle hobbynet servers staan de certificaten in /disk/site/etc/ssl/hobby.nl/&lt;br /&gt;
 chgrp ssl-cert /disk/site/etc/ssl/hobby.nl/hobby.nl.*&lt;br /&gt;
 chmod 440      /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
- mysql laat het bestand ibdata1 ongelimiteerd groeien (InnoDB bestanden)&lt;br /&gt;
 /etc/mysql/mysql.conf.d/innodb_file_per_table.cnf&lt;br /&gt;
 [mysql]&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
&lt;br /&gt;
=============&lt;br /&gt;
Nog meer Hobbynet aanpassingen&lt;br /&gt;
/etc/bash.bashrc&lt;br /&gt;
export http_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export https_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export ftp_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Locatie bestanden===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Alle ldif em tmpl bestanden gaan naar /usr/local/hobbynet/lib&lt;br /&gt;
* init_ldap en andere scripts gaan naar /usr/local/hobbynet/bin&lt;br /&gt;
* alle data bestanden (dumps) en update ldifs gaan naar /usr/local/hobbynet/data&lt;br /&gt;
* etc/ldap/schema/hcc_schema.* gaan naar /etc/ldap/schema&lt;br /&gt;
* etc/ldap/schema/ppolicy.ldif gaat naar /etc/ldap/schema&lt;br /&gt;
&lt;br /&gt;
hcc_schema.ldif wordt middels een script gemaakt. Dit script plaatst de ldif bestand(en) in /etc/ldap/schema. Zie hieronder.&lt;br /&gt;
&lt;br /&gt;
==Initiële database==&lt;br /&gt;
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.sh &amp;lt;admin-pw&amp;gt; gebruikt dan wordt een werkende directory gemaakt met alle statische data (in diverse ou&#039;s) erin. Gebruik na het maken van de initiële database restore_ldap.sh om de database te vullen met de data uit de data directory.&lt;br /&gt;
&lt;br /&gt;
===slapd.init.ldif ===&lt;br /&gt;
Bij installatie en reconfiguratie wordt /usr/share/slapd/slapd.init.ldif ingelezen. Zie aldaar indien nodig.&lt;br /&gt;
&lt;br /&gt;
==init_ldap script==&lt;br /&gt;
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 &#039;&#039;&#039;cn=admin,dc=hcc,dc=nl&#039;&#039;&#039; 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 &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; laadt vervolgens de laatste dump terug. Bij wijzigingen aan het schema is het raadzaam altijd een &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; te doen zodat een later een actuele dump kan worden teruggeladen.&lt;br /&gt;
&lt;br /&gt;
Het (plain text) password van cn=admin,dc=hcc,dc=nl moet bij het aanroepen van &#039;&#039;&#039;init_ldap&#039;&#039;&#039; op de commandline worden meegegeven. Tijdens de dpkg-reconfigure moet het password nog 2x gegeven worden. Lees eventueel ook de [http://www.openldap.org/doc/admin/ OpenLDAP Admin Guide].&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* voorbereidingen om &amp;quot;dpkg-reconfigure slapd&amp;quot; te draaien&lt;br /&gt;
* definities van input files&lt;br /&gt;
* check host&lt;br /&gt;
* bouwen van het skelet van de nieuwe directory&lt;br /&gt;
Zie voor details van de scripts &#039;&#039;&#039;init_ldap&#039;&#039;&#039;, &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; en &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; op een van de servers (in /usr/local/hobbynet/bin).&lt;br /&gt;
&lt;br /&gt;
==onderdelen van init_ldap==&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===add-schema.ldif===&lt;br /&gt;
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. &lt;br /&gt;
* Hiertoe wordt het onderstaande schema in /etc/ldap/schema geplaatst als hcc_schema.schema. &lt;br /&gt;
* Vervolgens worden de stappen uitgevoerd zoals beschreven in de [https://help.ubuntu.com/11.10/serverguide/C/openldap-server.html Ubuntu Server guide], onder &#039;&#039;&#039;Modifying the slapd Configuration Database&#039;&#039;&#039;. &lt;br /&gt;
* De resulterende output file &#039;&#039;&#039;cn=hcc_schema.ldif&#039;&#039;&#039; moet dan nog naar /etc/ldap/schema/hcc_schema.ldif gecopieerd worden. &lt;br /&gt;
Als dit proces herhaald moet worden, start dan met een lege output directory en verwijder een eventueel achtergebleven cn=hcc_schema.ldif bestand. &lt;br /&gt;
&lt;br /&gt;
De extra schema&#039;s worden middels een &#039;&#039;&#039;include&#039;&#039;&#039; toegevoegd. &#039;&#039;&#039;Ppolicy&#039;&#039;&#039; is op gelijke wijze als &#039;&#039;&#039;hcc_schema&#039;&#039;&#039; tot .ldif geconverteerd. Alle stappen om een nieuwe &#039;&#039;&#039;hcc-schema.ldif&#039;&#039;&#039; te maken zijn gescript in &#039;&#039;&#039;upd_schema&#039;&#039;&#039;. In &#039;&#039;&#039;init_ldap&#039;&#039;&#039; wordt het eigen schema en de password policy geladen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-schema.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
include: file:///etc/ldap/schema/hcc_schema.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ppolicy.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ldapns.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====schema updates====&lt;br /&gt;
Soms wordt een attribute toegevoegd of gewijzigd. Hiertoe dient het bestand hcc_schema.schema in /usr/local/hobbynet/etc/ldap/schema, gewijzigd te worden. Daarna dient er een ldif versie van gemaakt te worden. Gebruik hiervoor &#039;&#039;&#039;upd_schema.sh&#039;&#039;&#039; in dezelfde directory. De resulterende hcc_schema.ldif wordt in dit script naar /etc/ldap/schema gecopieërd. Bij grote wijzigingen is het aan te bevelen door de hele rebuild cycle te gaan (dump, init, restore). Bij triviale aanpassingen zou hcc_schema.ldif ook &#039;&#039;&#039;direct&#039;&#039;&#039; in de actieve directory geplaatst kunnen worden, gevolgd door slechts een &#039;&#039;&#039;service slapd restart&#039;&#039;&#039;. Gebruik hiervoor (blijf in de lokale schema directory):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp &amp;quot;ldif_output/cn=config/cn=schema/cn={14}hcc_schema.ldif&amp;quot; &amp;quot;/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}hcc_schema.ldif&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
LET OP: De nummers tussen accolades zijn bepaald door de volgorde van andere scripts! Zolang geen andere schema&#039;s worden toegevoegd zullen ze niet veranderen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ook kan met de ldap-tools gewerkt worden. Gebruik ldapsearch en ldapmodify, eventueel met de -f optie om een voorbereide serie opdrachten uit te voeren. Gebruik ldapsearch om eerst de structuur te vinden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier een voorbeeld om een objectClass aan te passen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat pas_aan.ldif&lt;br /&gt;
dn: cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
delete: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description ) )&lt;br /&gt;
-&lt;br /&gt;
add: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description $ hccIg ) )&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
$sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f pas_aan.ldif &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_config.ldif===&lt;br /&gt;
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 &#039;&#039;&#039;STATS&#039;&#039;&#039; gezet. Dit geeft niet teveel logging maar is toch goed bruikbaar. Om extra logging te krijgen op b.v. ACL&#039;s, verander olcLogLevel dan in &amp;quot;stats ACL&amp;quot;.  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## modify-config.hobbynet            ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
replace: olcLogLevel&lt;br /&gt;
olcLogLevel: stats&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCACertificateFile&lt;br /&gt;
olcTLSCACertificateFile: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCertificateFile&lt;br /&gt;
olcTLSCertificateFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCertificateKeyFile&lt;br /&gt;
olcTLSCertificateKeyFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Om de logging in een apart bestand te krijgen moet in /etc/rsyslog.d een extra bestand &#039;&#039;&#039;openldap.conf&#039;&#039;&#039; geplaatst worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local4.*   -/var/log/openldap.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Tevens willen we logrotate op dit bestand. Plaats in /etc/logrotate.d het bestand &#039;&#039;&#039;openldap&#039;&#039;&#039; met de volgende inhoud&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/log/openldap.log&lt;br /&gt;
{&lt;br /&gt;
        rotate 4&lt;br /&gt;
        weekly&lt;br /&gt;
        missingok&lt;br /&gt;
        notifempty&lt;br /&gt;
        compress&lt;br /&gt;
        delaycompress&lt;br /&gt;
        sharedscripts&lt;br /&gt;
        postrotate&lt;br /&gt;
                reload rsyslog &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 || true&lt;br /&gt;
        endscript&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify-hdb.ldif===&lt;br /&gt;
Hier worden de wijzigingen op de backend db gemaakt. Er worden een aantal attributes ge-indexeerd en de search SizeLimit wordt op &#039;&#039;&#039;unlimited&#039;&#039;&#039; gezet. De waarden die in DB_CONFIG moeten komen (Berkely DB parameters) staan ook in dit bestand. Deze versie is outdated. De ACL regels zijn drastisch gewijzigd. Raadpleeg altijd de laatste versie op de server zelf.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## modify-hdb.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
replace: olcAccess&lt;br /&gt;
#&lt;br /&gt;
# hobbynetlogin heeft lees rechten op ou=users&lt;br /&gt;
olcAccess: to attrs=@posixAccount,@posixGroup,@shadowAccount,@hostObject&lt;br /&gt;
  by dn=&amp;quot;cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# drupal/test moet hccOptIn kunnen schrijven vanaf de&lt;br /&gt;
# profiel pagina. Overige klanten kunnen hccOptin&lt;br /&gt;
# alleen lezen. self mag schrijven&lt;br /&gt;
olcAccess: to attrs=hccOptIn&lt;br /&gt;
  by self write&lt;br /&gt;
  by dn=&amp;quot;cn=drupal-hcc-nl,ou=klanten,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# anonieme klanten moeten kunnen inloggen&lt;br /&gt;
# en mogen hun eigen password wijzigen&lt;br /&gt;
olcAccess: to attrs=userPassword,shadowLastChange&lt;br /&gt;
  by self write&lt;br /&gt;
  by anonymous auth&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# user mag enkele eigen attr wijzigen&lt;br /&gt;
olcAccess: to attrs=hccLogin,hccPseudoniem,hccKaderPassword&lt;br /&gt;
  by self write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# beheerders hebben schrijfrechten op alles (updateDN)&lt;br /&gt;
# klanten hebben alleen lees rechten op alles (readDN)&lt;br /&gt;
# self mag  lezen&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by self read&lt;br /&gt;
  by dn=&amp;quot;cn=xml-hoge-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn=&amp;quot;cn=xml-lage-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by dn.one=&amp;quot;ou=beheer,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn.one=&amp;quot;ou=klanten,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# helpdesk heeft leesrechten op ou=leden&lt;br /&gt;
olcAccess: to attrs=@hccOrgPerson,@hccKaderFunctie&lt;br /&gt;
  by dn.one=&amp;quot;ou=helpdesk,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# partners mogen een paar attrs lezen&lt;br /&gt;
olcAccess: to attrs=hccLidNummer,hccPostcode,hccPostcodeZoekveld&lt;br /&gt;
  by dn.one=&amp;quot;ou=partners,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
#&lt;br /&gt;
# iedereen moet (pseudo attr) entry en objectClass kunnen lezen&lt;br /&gt;
olcAccess: to attrs=entry,objectClass&lt;br /&gt;
  by * read&lt;br /&gt;
#&lt;br /&gt;
# vangnet: blokkeer alle toegang tot de overige attrs.&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by * none&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbDirectory&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
-&lt;br /&gt;
replace: olcSizeLimit&lt;br /&gt;
olcSizeLimit: 100000&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbCachesize&lt;br /&gt;
olcDbCachesize: 200000&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbCheckpoint&lt;br /&gt;
olcDbCheckpoint: 1024 5&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbConfig&lt;br /&gt;
olcDbConfig: set_cachesize 0 536870912 0&lt;br /&gt;
olcDbConfig: set_lk_max_objects 1000&lt;br /&gt;
olcDbConfig: set_lk_max_locks 1000&lt;br /&gt;
olcDbConfig: set_lk_max_lockers 1000&lt;br /&gt;
olcDbConfig: set_flags DB_LOG_AUTOREMOVE&lt;br /&gt;
olcDbConfig: set_flags DB_TXN_NOSYNC&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbIDLcacheSize&lt;br /&gt;
olcDbIDLcacheSize: 600000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_index.ldif===&lt;br /&gt;
Een kale configuratie is heel snel voor wat betreft het opnieuw vullen met gegevens. Bij het aanmaken van een verse LDAP database worden er dan ook zo min mogelijk indexen aangemaakt.&amp;lt;br&amp;gt;&lt;br /&gt;
Zodra de inhoud is ingelezen kunnen de &#039;echte&#039; indexen aangemaakt worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## modify-index.ldif                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
replace: olcDbIndex&lt;br /&gt;
olcDbIndex: default pres,eq&lt;br /&gt;
olcDbIndex: objectClass,entryUUID,entryCSN eq&lt;br /&gt;
olcDbIndex: hccLidNummer,hccLogin,hccForumLogin eq&lt;br /&gt;
olcDbIndex: uid,uidNumber,gidNumber,memberUid,member eq&lt;br /&gt;
olcDbIndex: cn,host,hccPseudoniem,hccOptin,hccLocatie eq&lt;br /&gt;
olcDbIndex: sn,hccPostcodeZoekveld,hccIg,hccRegio eq,subfinal&lt;br /&gt;
olcDbIndex: hccRol,hccBezoek eq,pres,subfinal&lt;br /&gt;
olcDbIndex: hccBulletins pres&lt;br /&gt;
olcDbIndex: aboNummer eq&lt;br /&gt;
olcDbIndex: aboPostcodeZoekveld eq,subfinal&lt;br /&gt;
olcDbIndex: mail,mailHccnet,hccKaderMail pres,eq&lt;br /&gt;
olcDbIndex: hccProfiel pres&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ppolicy overlay===&lt;br /&gt;
* vanuit LDAP de minimale lengte van een wachtwoord afdwingen&lt;br /&gt;
* in LDAP SSHA versleuteling activeren&amp;lt;br&amp;gt;&lt;br /&gt;
(olcPPolicyHashCleartext: TRUE)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-ppolicy.ldif                  ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module, cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectClass: olcModuleList&lt;br /&gt;
objectClass: top&lt;br /&gt;
olcModuleLoad: ppolicy&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=ppolicy,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcPPolicyConfig&lt;br /&gt;
olcOverlay: ppolicy&lt;br /&gt;
olcPPolicyDefault: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
olcPPolicyUseLockout: TRUE&lt;br /&gt;
olcPPolicyHashCleartext: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The default ppolicy looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dn: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
objectClass: pwdPolicy&lt;br /&gt;
objectClass: device&lt;br /&gt;
cn: default&lt;br /&gt;
pwdCheckQuality: 1&lt;br /&gt;
pwdMinLength: 8&lt;br /&gt;
pwdAttribute: 2.5.4.35&lt;br /&gt;
pwdAllowUserChange: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Syncrepl overlay===&lt;br /&gt;
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 [http://www.openldap.org/doc/admin/ LDAP Admin Guide]. &#039;&#039;&#039;Mirror configuratie is specifiek per server!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-syncrepl.tmpl                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
replace: olcServerID&lt;br /&gt;
olcServerID: @SID@&lt;br /&gt;
&lt;br /&gt;
dn: cn=module{0},cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcModuleLoad&lt;br /&gt;
olcModuleLoad: syncprov&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcSyncProvConfig&lt;br /&gt;
olcOverlay: syncprov&lt;br /&gt;
olcSpCheckpoint: 100 5&lt;br /&gt;
olcSpSessionlog: 100&lt;br /&gt;
&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcSyncRepl&lt;br /&gt;
olcSyncRepl: rid=@RID@&lt;br /&gt;
  provider=ldap://@PROVIDER@&lt;br /&gt;
  binddn=&amp;quot;cn=admin,dc=hcc,dc=nl&amp;quot; bindmethod=simple credentials=&amp;quot;@PASSWORD@&amp;quot;&lt;br /&gt;
  searchbase=&amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
  type=refreshAndPersist&lt;br /&gt;
  interval=00:00:00:10&lt;br /&gt;
  retry=&amp;quot;5 5 300 5&amp;quot;&lt;br /&gt;
  timeout=1&lt;br /&gt;
  starttls=yes&lt;br /&gt;
-&lt;br /&gt;
add: olcMirrorMode&lt;br /&gt;
olcMirrorMode: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
De andere server krijgt ServerID 2 en de provider is het IP adres van de andere server.&lt;br /&gt;
&lt;br /&gt;
===Unique overlay===&lt;br /&gt;
Deze overlay dient er voor te zorgen dat o.a het attribuut hccLogin een unieke waarde bevat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-unique.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module,cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectclass: olcModuleList&lt;br /&gt;
objectclass: top&lt;br /&gt;
olcmoduleload: unique&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=unique,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcUniqueConfig&lt;br /&gt;
olcOverlay: unique&lt;br /&gt;
olcUniqueAttribute: uid uidNumber hccLogin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SSL/TLS beveiliging==&lt;br /&gt;
Gebruik de juiste .pem bestanden in /etc/ssl/certs en /etc/ssl/private.&lt;br /&gt;
&lt;br /&gt;
We maken gebruik van een RapidSSL certificaat. Als dit niet standaard in Ubuntu bekend is, zet dan eerst GeoTrust_RapidSSL_-_ca-bundle.pem in de map /etc/ssl/certs neer. Voer nu een &#039;&#039;&#039;c_rehash .&#039;&#039;&#039; uit in /etc/ssl/certs om de cache te updaten (omdat GeoTrust_RapidSSL_-_ca-bundle.pem nieuw werd toegevoegd). &lt;br /&gt;
&lt;br /&gt;
De ownership is belangrijk. Hiertoe wordt de groep &amp;quot;openldap&amp;quot; toegevoegd aan de groep ssl-cert.&lt;br /&gt;
 adduser openldap ssl-cert&lt;br /&gt;
&lt;br /&gt;
Als dit fout gaat, doe dan eerst:&lt;br /&gt;
 apt-get install ssl-cert&lt;br /&gt;
&lt;br /&gt;
Zet het certificaat en de private key in de juiste groep:&lt;br /&gt;
 chgrp ssl-cert /etc/ssl/private/hobby.nl.*&lt;br /&gt;
 chmod 440      /etc/ssl/private/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
Het resultaat is dan als volgt:&lt;br /&gt;
 root@hcc-ldap-lb1:~# ls -l /etc/ssl/private/hcc* &lt;br /&gt;
 -rw-r--r-- 1 root     ssl-cert 1724 Nov 22 20:47 hobby.nl.crt&lt;br /&gt;
 -r--r----- 1 root     ssl-cert 1679 Nov 22 20:25 hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
 root@hcc-ldap-lb1:~# grep openldap /etc/group&lt;br /&gt;
 ssl-cert:x:114:openldap&lt;br /&gt;
 openldap:x:118:&lt;br /&gt;
&lt;br /&gt;
2020.12.09: Op een nieuwe Ubuntu installatie staat apparmor standaard aan. Weg ermee!&lt;br /&gt;
 apt remove --assume-yes --purge apparmor&lt;br /&gt;
&amp;lt;strike&amp;gt;Per september 2017 staan de certificaten in /disk/site/etc/ssl/hobby.nl, net als op alle andere servers. Omdat apparmor actief is moet deze directory worden toegevoegd aan /etc/apparmor.d/local/usr.sbin.slapd. Die file ziet er dan als volgt uit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Site-specific additions and overrides for usr.sbin.slapd.&lt;br /&gt;
# For more details, please see /etc/apparmor.d/local/README.&lt;br /&gt;
#include &amp;lt;abstractions/ssl_certs&amp;gt;&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/ r,&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/* r,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Openldap ook op poort 636 benaderd wordt (naast TLS op 389), moet in /etc/default/slapd ldaps:/// opgenomen worden bij de SLAPD_SERVICES.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;netstat -an&#039; dient dan 636 te laten zien voor zowel IPv4 als IPv6.&lt;br /&gt;
&lt;br /&gt;
Om de cn=config te zien kan je het volgende commando gebruiken:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config&lt;br /&gt;
&lt;br /&gt;
of, wat botter maar korter:&lt;br /&gt;
cat /etc/ldap/slapd.d/cn\=config.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Backup, initialize, restore==&lt;br /&gt;
Om het hele skelet van ldap in één keer te herstellen dient &#039;&#039;&#039;init_ldap&#039;&#039;&#039; gebruikt te worden. Als argument &#039;&#039;&#039;moet&#039;&#039;&#039; het admin beheer wachtwoord mee gegeven worden.&lt;br /&gt;
&lt;br /&gt;
===lokaal===&lt;br /&gt;
Backups kunnen gemaakt worden terwijl slapd draait maar geadviseerd wordt slapd te stoppen. Voor dumpen moet &#039;&#039;&#039;slapcat&#039;&#039;&#039; gebruikt worden. Backups kunnen gemaakt worden per database of een filter daarop, naar een ldif bestand.&lt;br /&gt;
 slapcat -l hcc-dump.ldif -b &amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
Dit maakt een dump van alles onder &#039;&#039;&#039;dc=hcc,dc=nl&#039;&#039;&#039; naar het bestand hcc-dump.ldif. Ook is het mogelijk het database nummer te gebruiken, config is altijd nummer 0, hdb is gewoonlijk 1.&lt;br /&gt;
&lt;br /&gt;
Het &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; script dumpt alle ou&#039;s in aparte .ldif bestanden; het omgekeerde doet &#039;&#039;&#039;restore_ldap&#039;&#039;&#039;.  &lt;br /&gt;
Terug inlezen kan alleen in een lege directory, dus direct nadat &#039;&#039;&#039;init_ldap&#039;&#039;&#039; is gedaan. Gebruik voor het terugplaatsen &#039;&#039;&#039;slapadd&#039;&#039;&#039;. Aan te bevelen is &#039;&#039;&#039;-c&#039;&#039;&#039; mee te geven zodat ondanks fouten doorgegaan wordt. &lt;br /&gt;
&lt;br /&gt;
Voor slapadd &#039;&#039;&#039;moet&#039;&#039;&#039; 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)&lt;br /&gt;
 /etc/init.d/slapd stop&lt;br /&gt;
 slapadd -l hcc-dump.ldif -w -c &amp;gt;errors.txt&lt;br /&gt;
 chown openldap:openldap /var/lib/ldap/*&lt;br /&gt;
 /etc/init.d/slapd start&lt;br /&gt;
&lt;br /&gt;
===remote===&lt;br /&gt;
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 &#039;&#039;&#039;backup-encrypted&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Recente lokale backups zijn te vinden in &#039;&#039;&#039;/usr/local/hobbynet/tmp&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Verse ldap maken===&lt;br /&gt;
Transactie log bij het toevoegen van b.v. een nieuwe ou:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Op beide servers:&lt;br /&gt;
schema van test server gecopieerd en geactiveerd&lt;br /&gt;
dump-ldap gedraaid&lt;br /&gt;
systemctl stop slapd.service &lt;br /&gt;
&lt;br /&gt;
Er is nu géén ldap service! Werk dus snel...&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb1&lt;br /&gt;
systemctl stop slapd.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
op ldap-lb2:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb2&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
systemctl start slapd.service&lt;br /&gt;
Beide slapd servers zijn in de lucht en moeten synchroniseren.&lt;br /&gt;
&lt;br /&gt;
op beide servers:&lt;br /&gt;
check replicatie (netstat en functioneel)&lt;br /&gt;
&lt;br /&gt;
root@ldap-lb1:/usr/local/hobbynet/bin# netstat -n | grep 389&lt;br /&gt;
tcp        0      0 172.31.8.4:36838        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:36836        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58112        ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58114        ESTABLISHED&lt;br /&gt;
&lt;br /&gt;
Functioneel door met ADS op beide servers in te loggen en een willekeurig veld in je eigen entry te wijzigen op lb1. Kijk of het gebeurd is op lb2 en wijzig het daar terug. Check op de andere server of het gebeurd is. Er kan een zekere vertraging in optreden.&lt;br /&gt;
&lt;br /&gt;
Stel er is een nieuwe ou gemaakt: denk aan het bij werken van de dump en restore scripts.&lt;br /&gt;
&lt;br /&gt;
update dump-ldap.sh en restore-ldap.sh met de nieuwe ou&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
export tarieven.ldif op test server en import op ldap-lb1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==crontab==&lt;br /&gt;
 # script dat updates ophaalt (maar niet installeert), zodat nagios ze ook detecteert&lt;br /&gt;
 0 9 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
==LDAP Clients==&lt;br /&gt;
Er zijn meerdere LDAP clients. De meest populaire zijn Apache Directory Studio (&amp;quot;ADS&amp;quot;) en phpLdapAdmin (&amp;quot;PLA&amp;quot;).&amp;lt;br&amp;gt;&lt;br /&gt;
De eerste is veel uitgbreider maar vereist een Java Runtime Environment (&amp;quot;JRE&amp;quot;). Onder Windows is dat JRE(13) of (open)JDK-(13).&amp;lt;br&amp;gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Binnen Hobbynet wordt uitsluitend gebruik gemaakt van ADS.&lt;br /&gt;
&lt;br /&gt;
===StartTLS===&lt;br /&gt;
Aanbevolen wordt StartTLS op poort 389 te gebruiken. Alternatief is LDAPS op poort 636 maar dat is deprecated. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Windows===&lt;br /&gt;
&amp;lt;i&amp;gt;2019-10-31 HJV: Oude info, als referentie leuk, maar niet meer relevant&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Onder Windows moet met &#039;&#039;&#039;keytool.exe&#039;&#039;&#039; gewerkt worden. De uitleg heb ik van  [http://www.talkingtree.com/blog/index.cfm?mode=entry&amp;amp;entry=25AA75A4-45A6-2844-7CA3EECD842DB576 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:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Haal de benodigde bestanden op (op een Linux systeem):&lt;br /&gt;
wget http://www.cacert.org/certs/root.der -O root.der&lt;br /&gt;
wget http://www.cacert.org/certs/class3.der -O class3.der&lt;br /&gt;
copieer de bestanden naar de Windows omgeving in C:\Program Files (x86)\Java\jre6\lib\security.&lt;br /&gt;
&lt;br /&gt;
Open een commandwindow:&lt;br /&gt;
cd C:\Program Files (x86)\Java\jre6\lib\security&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass1 -file root.der&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass3 -file class3.der&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Linux===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS gebruik===&lt;br /&gt;
ADS kan erg handig zijn voor het snel dumpen van hele ou&#039;s in .ldif formaat. Zo&#039;n dump kan direct op een andere server worden ingelezen.&lt;br /&gt;
&lt;br /&gt;
===PhpLdapAdmin onder Linux===&lt;br /&gt;
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 [http://phpldapadmin.sourceforge.net/wiki/index.php/Server:server:tls phpldapadmin wiki].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# LDAP Defaults&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# See ldap.conf(5) for details&lt;br /&gt;
# This file should be world readable but not world writable.&lt;br /&gt;
&lt;br /&gt;
#BASE   dc=example,dc=com&lt;br /&gt;
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666&lt;br /&gt;
&lt;br /&gt;
#SIZELIMIT      12&lt;br /&gt;
#TIMELIMIT      15&lt;br /&gt;
#DEREF          never&lt;br /&gt;
TLS_CACERT      /etc/ssl/certs/CAcert_org.pem&lt;br /&gt;
TLS_CERT        /etc/ssl/private/hobby.nl.crt&lt;br /&gt;
TLS_KEY         /etc/ssl/private/hobby.nl.key&lt;br /&gt;
TLS_REQCERT     allow&lt;br /&gt;
#TLS_REQCERT never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Denk er wel aan na wijzigingen Apache te herstarten.&lt;br /&gt;
===PAM en NSS via LDAP===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Installeer &#039;&#039;&#039;libnss-ldapd&#039;&#039;&#039; om de benodigde libraries te verkrijgen. Apt-get zal tevens &#039;&#039;&#039;libpam-ldapd&#039;&#039;&#039;, &#039;&#039;&#039;nslcd&#039;&#039;&#039; en &#039;&#039;&#039;nscd&#039;&#039;&#039; binnen brengen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install libnss-ldapd auth-client-config ldap-utils&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
    libpam-ldapd nscd nslcd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Libnss-ldapd is een doorontwikkeling van libnss-ldap en bevat meerdere verbeteringen. Zie: [http://arthurdejong.org/nss-pam-ldapd/ deze site] van de ontwikkelaar. Bij de installatie wordt een user &#039;&#039;&#039;nslcd&#039;&#039;&#039; aangemaakt; denk erom die in de .tmpl bestanden te zetten!&lt;br /&gt;
  &lt;br /&gt;
nsswitch.conf laat zich configureren via &#039;&#039;&#039;auth-client-config&#039;&#039;&#039; maar lac_ldap is alleen aanwezig als &#039;&#039;&#039;ldap-auth-config&#039;&#039;&#039; ook is geinstalleerd. Zo niet gebruik dan de tweede regel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auth-client-config -t nss -p lac_ldap&lt;br /&gt;
auth-client-config -t nss -p ldap_example&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het resultaat is dat nsswitch.conf zowel in files (/etc/passwd etc.) zoekt als in ldap.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nsswitch.conf&lt;br /&gt;
#&lt;br /&gt;
# Example configuration of GNU Name Service Switch functionality.&lt;br /&gt;
# If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
# `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # passwd:         compat&lt;br /&gt;
passwd: files ldap&lt;br /&gt;
# pre_auth-client-config # group:          compat&lt;br /&gt;
group: files ldap&lt;br /&gt;
# pre_auth-client-config # shadow:         compat&lt;br /&gt;
shadow: files ldap&lt;br /&gt;
&lt;br /&gt;
hosts:          files dns&lt;br /&gt;
networks:       files&lt;br /&gt;
&lt;br /&gt;
protocols:      db files&lt;br /&gt;
services:       db files&lt;br /&gt;
ethers:         db files&lt;br /&gt;
rpc:            db files&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # netgroup:       nis&lt;br /&gt;
netgroup: nis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het aanpassen van de PAM bestanden gaat sinds enige releases met &#039;&#039;&#039;pam-auth-update&#039;&#039;&#039;. Kies in het menu voor zowel unix als ldap. Default wordt nu ldap authenticatie gebruikt voor uid &amp;gt;= 1000. Bij Hobbynet willen we vanaf 300 ldap gebruiken. Door een licht gemodificeerde versie van /usr/share/pam-configs/ldap te maken (ldap-hobbynet), kan ook voor de hobbynet instelling gekozen worden. Dit is de ldap-hobbynet versie:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Name: LDAP Authentication (uid&amp;gt;300)&lt;br /&gt;
Default: yes&lt;br /&gt;
Priority: 128&lt;br /&gt;
Auth-Type: Primary&lt;br /&gt;
Auth-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Auth:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 use_first_pass&lt;br /&gt;
Account-Type: Additional&lt;br /&gt;
Account:&lt;br /&gt;
        [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad]        pam_ldap.so minimum_uid=300&lt;br /&gt;
Password-Type: Primary&lt;br /&gt;
Password-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Password:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 try_first_pass&lt;br /&gt;
Session-Type: Additional&lt;br /&gt;
Session:&lt;br /&gt;
        [success=ok default=ignore]     pam_ldap.so minimum_uid=300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dit is in een standaard opzet van LDAP voldoende om zowel lokale gebruikers als gebruikers opgeslagen in LDAP, te laten inloggen en hun password te laten wijzigen. In de Hobbynet setup moet er echter nog meer gebeuren in de ACL&#039;s van de LDAP server configuratie. Omdat Hobbynet de laatste ACL regel heeft gewijzigd in een &#039;&#039;&#039;deny-all&#039;&#039;&#039;, is er een helper of proxy account nodig dat read access heeft of een aantal cruciale velden in de posixAccount objectClass. Zie verder de lsiting van nslcd.conf.&lt;br /&gt;
&lt;br /&gt;
Libnss-ldapd en libpam-ldapd hebben een gezamelijke daemon &#039;&#039;&#039;nslcd&#039;&#039;&#039; die z&#039;n configuratie uit &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039; haalt. Hierin is ook een voorziening voor het helper account. Aan het eind vande &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; staat de voorziening voor host-based login. Als het attribute &#039;&#039;&#039;host&#039;&#039;&#039; de fqdn of alleen de host naam bevat, bepaald dat of inloggen op die host mogelijk is. &#039;&#039;&#039;*&#039;&#039;&#039; staat inloggen op alle hosts toe.&lt;br /&gt;
&lt;br /&gt;
Eventueel kan het daemon proces voor debugging doeleinden ook als command (&#039;&#039;&#039;nslcd -d&#039;&#039;&#039;) gestart worden. Om de bevragingen van de LDAP server wat te verminderen, kan &#039;&#039;&#039;nscd&#039;&#039;&#039; voor caching zorgen. Deze cache daemon heeft zijn eigen configuratie bestand: &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039;. De default instellingen zijn goed; eventueel kan de logging naar een bestand gestuurd worden.&lt;br /&gt;
&lt;br /&gt;
Verbinding met de LDAP server kan met StartTLS beveiligd worden. Hier de inhoud van nslcd.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nslcd.conf&lt;br /&gt;
# nslcd configuration file. See nslcd.conf(5)&lt;br /&gt;
# for details.&lt;br /&gt;
&lt;br /&gt;
# The user and group nslcd should run as.&lt;br /&gt;
uid nslcd&lt;br /&gt;
gid nslcd&lt;br /&gt;
&lt;br /&gt;
# log location and level&lt;br /&gt;
#log /var/log/nslcd.log debug&lt;br /&gt;
&lt;br /&gt;
# The location at which the LDAP server(s) should be reachable.&lt;br /&gt;
uri ldap://ldap2-int.hobby.nl/&lt;br /&gt;
&lt;br /&gt;
# The search base that will be used for all queries.&lt;br /&gt;
base dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# Other base mappings&lt;br /&gt;
base   group  ou=groups,dc=hcc,dc=nl&lt;br /&gt;
base   passwd ou=users,dc=hcc,dc=nl&lt;br /&gt;
base   shadow ou=users,dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# The search scope.&lt;br /&gt;
#scope sub&lt;br /&gt;
&lt;br /&gt;
# The LDAP protocol version to use.&lt;br /&gt;
ldap_version 3&lt;br /&gt;
&lt;br /&gt;
# The DN to bind with for normal lookups.&lt;br /&gt;
#binddn cn=annonymous,dc=example,dc=net&lt;br /&gt;
#bindpw secret&lt;br /&gt;
binddn cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&lt;br /&gt;
bindpw xxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
# The DN used for password modifications by root.&lt;br /&gt;
#rootpwmoddn cn=admin,dc=example,dc=com&lt;br /&gt;
&lt;br /&gt;
# SSL options&lt;br /&gt;
ssl off&lt;br /&gt;
ssl start_tls&lt;br /&gt;
#tls_reqcert never&lt;br /&gt;
tls_cacertfile /etc/ssl/certs/cacert.org.pem&lt;br /&gt;
#tls_cert /etc/ssl/private/server.crt&lt;br /&gt;
#tls_key /etc/ssl/private/server.key&lt;br /&gt;
&lt;br /&gt;
# The minimum uid&lt;br /&gt;
nss_min_uid 300&lt;br /&gt;
&lt;br /&gt;
pam_authz_search (&amp;amp;(objectClass=posixAccount)(uid=$username)(|(host=$hostname)(host=$fqdn)(host=\\*)))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===users en groepen toevoegen===&lt;br /&gt;
Hiervoor moet &#039;&#039;&#039;ldapscripts&#039;&#039;&#039; zijn geïnstalleerd. Dit is het geval op de ldap-lb1 server. Dat levert de volgende extra commando&#039;s op:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldaprenamemachine&lt;br /&gt;
ldapadduser&lt;br /&gt;
ldapdeleteuserfromgroup&lt;br /&gt;
ldapfinger&lt;br /&gt;
ldapid&lt;br /&gt;
ldapgid&lt;br /&gt;
ldapmodifyuser&lt;br /&gt;
ldaprenameuser&lt;br /&gt;
lsldap&lt;br /&gt;
ldapaddusertogroup&lt;br /&gt;
ldapsetpasswd&lt;br /&gt;
ldapinit&lt;br /&gt;
ldapaddgroup&lt;br /&gt;
ldapdeletegroup&lt;br /&gt;
ldapmodifygroup&lt;br /&gt;
ldapdeletemachine&lt;br /&gt;
ldaprenamegroup&lt;br /&gt;
ldapaddmachine&lt;br /&gt;
ldapmodifymachine&lt;br /&gt;
ldapsetprimarygroup&lt;br /&gt;
ldapdeleteuser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Meest gebruikt zijn &#039;&#039;&#039;ldapaddgroup, ldapadduser, ldapsetpasswd&#039;&#039;&#039;.  &lt;br /&gt;
Er zijn manpages maar er is ook uitgebreide uitleg in de [https://help.ubuntu.com/14.04/serverguide/openldap-server.html Ubuntu server guide]. Omdat wij het automatisch maken van de home dir uit hebben staan, moet die met de hand aangemaakt worden en moet de owner goed gezet worden.&lt;br /&gt;
&lt;br /&gt;
===host-based login===&lt;br /&gt;
Met een kleine uitbreiding in het schema van de LDAP server, kan host-based login gerealiseerd worden. Ook in de &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; is een uitbreiding nodig.&lt;br /&gt;
&lt;br /&gt;
In de LDAP server dient de objectClass &#039;&#039;&#039;hostObject&#039;&#039;&#039; aan de entries in de ou=users toegevoegd te worden. Deze (auxilary) objectClass brengt slechts één attribute met zich mee: &#039;&#039;&#039;host&#039;&#039;&#039;. De regel in nslcd.conf checkt of één van de waarden van &#039;&#039;&#039;host&#039;&#039;&#039; gelijk is aan de naam van de server waarop ingelogd wordt. De waarde &#039;&#039;&#039;*&#039;&#039;&#039; geldt als wildcard. Zie de regel &#039;&#039;&lt;br /&gt;
&#039;pam_authz_search&#039;&#039;&#039;&#039; in &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Password aanpassen===&lt;br /&gt;
Via LDAP ingelogde gebruikers kunnen net als lokale gebruikers hun wachtwoord met &#039;&#039;&#039;passwd&#039;&#039;&#039; wijzigen. Wel moet aan de eisen in de LDAP ppolicy module voldaan worden.&lt;br /&gt;
&lt;br /&gt;
==PHP scripting==&lt;br /&gt;
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 &#039;&#039;&#039;/usr/local/hobbynet/bin&#039;&#039;&#039; directory.&lt;br /&gt;
Voor de php-scripting zijn enkele php7.x pakketten nodig. Installeer deze met apt-get. Het gaat om:&lt;br /&gt;
* php-cli&lt;br /&gt;
* php-ldap&lt;br /&gt;
&lt;br /&gt;
== Apache authenticatie via LDAP ==&lt;br /&gt;
In plaats van .htpassword authenticatie, kan ook LDAP gebruikt worden. Activeer daartoe de Apache module&lt;br /&gt;
&#039;authnz_ldap&#039;.&lt;br /&gt;
 a2enmod authnz_ldap&lt;br /&gt;
Denk er om dat dit in een loadbalanced situatie op beide servers gedaan dient te worden!&lt;br /&gt;
&lt;br /&gt;
=== Voorbeeld van een LDAP configuratie in de Apache config ===&lt;br /&gt;
(alleen als voorbeeld, niet zo gebruiken!)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# // 1) Hobbynet webmaster&lt;br /&gt;
# // 2) Vraagbaak medewerker van een willekeurige groepering&lt;br /&gt;
# (|(hccRol=*#VRBK)(hccRol=HN#WM))&lt;br /&gt;
  &amp;lt;Location &amp;quot;/apps/vraagbaak&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;RequireAll&amp;gt;&lt;br /&gt;
      Authname &amp;quot;HCC!vraagbaak (gebruik uw hcc.nl gebruikersnaam/wachtwoord)&amp;quot;&lt;br /&gt;
      AuthType Basic&lt;br /&gt;
      AuthBasicProvider ldap&lt;br /&gt;
      AuthLDAPUrl ldap://hcc-ldap-int.hobby.nl/ou=leden,dc=hcc,dc=nl?hccLogin??(|(hccRol=*#VRBK)(hccRol=HN#WM))(hccProfiel=TRUE) TLS&lt;br /&gt;
      require valid-user&lt;br /&gt;
    &amp;lt;/RequireAll&amp;gt;&lt;br /&gt;
  &amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hoe kan LDAP veilig gebruikt worden vanuit Apache===&lt;br /&gt;
Zet een script neer in de gebruikersomgeving, en gebruik mod_authz_external. Doe de controle vervolgens via de XML-RPC server.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zie [[Kadernet]] voor een voorbeeld.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== TODO lijst ==&lt;br /&gt;
&#039;&#039;Dit is een lijst in wording, graag aanvullen&#039;&#039; &lt;br /&gt;
* &#039;dun&#039; loadbalancer script maken om te controleren dat LDAP echt luistert&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79056</id>
		<title>LDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79056"/>
		<updated>2020-12-10T21:04:52Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* Initiële database */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introductie==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==LDAP server keuze==&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Loadbalanced==&lt;br /&gt;
Er zijn twee servers (ldap-lb1 en ldap-lb2) die achter een loadbalancer in preferred server mode staan 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.&lt;br /&gt;
&lt;br /&gt;
Tevens zijn er een test en een development server: ldap-test en ldap-dev.&lt;br /&gt;
&lt;br /&gt;
==Installatie==&lt;br /&gt;
Installatie van OpenLDAP is simpel:&lt;br /&gt;
 aptitude install slapd ldap-utils&lt;br /&gt;
Omdat er gebruikgemaakt wordt van php scripts, is het ook nodig &#039;&#039;&#039;php-cli&#039;&#039;&#039; en &#039;&#039;&#039;php-ldap&#039;&#039;&#039; te installeren. De configuratie van OpenLDAP is sinds Karmic Koala iets gecompliceerder geworden. &#039;cn=config&#039; 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 &amp;quot;dpkg-reconfigure slapd&amp;quot; zet alleen de skeleton configuratie terug. Je moet zelf de database, root dn en acl&#039;s opzetten (als root of met sudo). Run  &#039;&#039;&#039;dpkg-reconfigure slapd&#039;&#039;&#039; om terug te gaan naar een lege directory. &lt;br /&gt;
&lt;br /&gt;
De volgende pakketten dienen geïnstalleerd te zijn (&#039;php -m&#039; toont de geactiveerde modules):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontbrekende pakketten volgens hjv:&lt;br /&gt;
&lt;br /&gt;
apt-get install aptitude &lt;br /&gt;
apt-get install phpmyadmin&lt;br /&gt;
apt-get install php-mbstring&lt;br /&gt;
apt-get install php-gettext&lt;br /&gt;
apt-get install php-xmlrpc&lt;br /&gt;
apt-get install php-ldap&lt;br /&gt;
apt-get install mysql-server&lt;br /&gt;
apt-get install ldapscripts&lt;br /&gt;
apt-get install php-xml&lt;br /&gt;
apt-get install slapd&lt;br /&gt;
apt-get install ldap-utils&lt;br /&gt;
a2enmod ssl&lt;br /&gt;
&lt;br /&gt;
- apache2ctl restart&lt;br /&gt;
&lt;br /&gt;
- openldap moet lid zijn van de groep ssl-cert!&lt;br /&gt;
apt-get install ssl-cert&lt;br /&gt;
adduser openldap ssl-cert&lt;br /&gt;
(of vi /etc/group&lt;br /&gt;
    ssl-cert:x:116:openldap)&lt;br /&gt;
&lt;br /&gt;
- Zorg dat de LDAP daemon bij de certificaten kan komen. &lt;br /&gt;
LET OP: op alle hobbynet servers staan de certificaten in /disk/site/etc/ssl/hobby.nl/&lt;br /&gt;
 chgrp ssl-cert /disk/site/etc/ssl/hobby.nl/hobby.nl.*&lt;br /&gt;
 chmod 440      /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
- mysql laat het bestand ibdata1 ongelimiteerd groeien (InnoDB bestanden)&lt;br /&gt;
 /etc/mysql/mysql.conf.d/innodb_file_per_table.cnf&lt;br /&gt;
 [mysql]&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
&lt;br /&gt;
=============&lt;br /&gt;
Nog meer Hobbynet aanpassingen&lt;br /&gt;
/etc/bash.bashrc&lt;br /&gt;
export http_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export https_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export ftp_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Locatie bestanden===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Alle ldif em tmpl bestanden gaan naar /usr/local/hobbynet/lib&lt;br /&gt;
* init_ldap en andere scripts gaan naar /usr/local/hobbynet/bin&lt;br /&gt;
* alle data bestanden (dumps) en update ldifs gaan naar /usr/local/hobbynet/data&lt;br /&gt;
* etc/ldap/schema/hcc_schema.* gaan naar /etc/ldap/schema&lt;br /&gt;
* etc/ldap/schema/ppolicy.ldif gaat naar /etc/ldap/schema&lt;br /&gt;
&lt;br /&gt;
hcc_schema.ldif wordt middels een script gemaakt. Dit script plaatst de ldif bestand(en) in /etc/ldap/schema. Zie hieronder.&lt;br /&gt;
&lt;br /&gt;
==Initiële database==&lt;br /&gt;
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.sh &amp;lt;admin-pw&amp;gt; gebruikt dan wordt een werkende directory gemaakt met alle statische data (in diverse ou&#039;s) erin. Gebruik na het maken van de initiële database restore_ldap.sh om de database te vullen met de data uit de data directory.&lt;br /&gt;
&lt;br /&gt;
===slapd.init.ldif ===&lt;br /&gt;
Bij installatie en reconfiguratie wordt /usr/share/slapd/slapd.init.ldif ingelezen. Zie aldaar indien nodig.&lt;br /&gt;
&lt;br /&gt;
==init_ldap script==&lt;br /&gt;
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 &#039;&#039;&#039;cn=admin,dc=hcc,dc=nl&#039;&#039;&#039; 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 &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; laadt vervolgens de laatste dump terug. Bij wijzigingen aan het schema is het raadzaam altijd een &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; te doen zodat een later een actuele dump kan worden teruggeladen.&lt;br /&gt;
&lt;br /&gt;
Het (plain text) password van cn=admin,dc=hcc,dc=nl moet bij het aanroepen van &#039;&#039;&#039;init_ldap&#039;&#039;&#039; op de commandline worden meegegeven. Tijdens de dpkg-reconfigure moet het password nog 2x gegeven worden. Lees eventueel ook de [http://www.openldap.org/doc/admin/ OpenLDAP Admin Guide].&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* voorbereidingen om &amp;quot;dpkg-reconfigure slapd&amp;quot; te draaien&lt;br /&gt;
* definities van input files&lt;br /&gt;
* check host&lt;br /&gt;
* bouwen van het skelet van de nieuwe directory&lt;br /&gt;
Zie voor details van de scripts &#039;&#039;&#039;init_ldap&#039;&#039;&#039;, &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; en &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; op een van de servers (in /usr/local/hobbynet/bin).&lt;br /&gt;
&lt;br /&gt;
==onderdelen van init_ldap==&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===add-schema.ldif===&lt;br /&gt;
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. &lt;br /&gt;
* Hiertoe wordt het onderstaande schema in /etc/ldap/schema geplaatst als hcc_schema.schema. &lt;br /&gt;
* Vervolgens worden de stappen uitgevoerd zoals beschreven in de [https://help.ubuntu.com/11.10/serverguide/C/openldap-server.html Ubuntu Server guide], onder &#039;&#039;&#039;Modifying the slapd Configuration Database&#039;&#039;&#039;. &lt;br /&gt;
* De resulterende output file &#039;&#039;&#039;cn=hcc_schema.ldif&#039;&#039;&#039; moet dan nog naar /etc/ldap/schema/hcc_schema.ldif gecopieerd worden. &lt;br /&gt;
Als dit proces herhaald moet worden, start dan met een lege output directory en verwijder een eventueel achtergebleven cn=hcc_schema.ldif bestand. &lt;br /&gt;
&lt;br /&gt;
De extra schema&#039;s worden middels een &#039;&#039;&#039;include&#039;&#039;&#039; toegevoegd. &#039;&#039;&#039;Ppolicy&#039;&#039;&#039; is op gelijke wijze als &#039;&#039;&#039;hcc_schema&#039;&#039;&#039; tot .ldif geconverteerd. Alle stappen om een nieuwe &#039;&#039;&#039;hcc-schema.ldif&#039;&#039;&#039; te maken zijn gescript in &#039;&#039;&#039;upd_schema&#039;&#039;&#039;. In &#039;&#039;&#039;init_ldap&#039;&#039;&#039; wordt het eigen schema en de password policy geladen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-schema.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
include: file:///etc/ldap/schema/hcc_schema.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ppolicy.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ldapns.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====schema updates====&lt;br /&gt;
Soms wordt een attribute toegevoegd of gewijzigd. Hiertoe dient het bestand hcc_schema.schema in /usr/local/hobbynet/etc/ldap/schema, gewijzigd te worden. Daarna dient er een ldif versie van gemaakt te worden. Gebruik hiervoor &#039;&#039;&#039;upd_schema.sh&#039;&#039;&#039; in dezelfde directory. De resulterende hcc_schema.ldif wordt in dit script naar /etc/ldap/schema gecopieërd. Bij grote wijzigingen is het aan te bevelen door de hele rebuild cycle te gaan (dump, init, restore). Bij triviale aanpassingen zou hcc_schema.ldif ook &#039;&#039;&#039;direct&#039;&#039;&#039; in de actieve directory geplaatst kunnen worden, gevolgd door slechts een &#039;&#039;&#039;service slapd restart&#039;&#039;&#039;. Gebruik hiervoor (blijf in de lokale schema directory):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp &amp;quot;ldif_output/cn=config/cn=schema/cn={14}hcc_schema.ldif&amp;quot; &amp;quot;/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}hcc_schema.ldif&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
LET OP: De nummers tussen accolades zijn bepaald door de volgorde van andere scripts! Zolang geen andere schema&#039;s worden toegevoegd zullen ze niet veranderen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ook kan met de ldap-tools gewerkt worden. Gebruik ldapsearch en ldapmodify, eventueel met de -f optie om een voorbereide serie opdrachten uit te voeren. Gebruik ldapsearch om eerst de structuur te vinden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier een voorbeeld om een objectClass aan te passen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat pas_aan.ldif&lt;br /&gt;
dn: cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
delete: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description ) )&lt;br /&gt;
-&lt;br /&gt;
add: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description $ hccIg ) )&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
$sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f pas_aan.ldif &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_config.ldif===&lt;br /&gt;
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 &#039;&#039;&#039;STATS&#039;&#039;&#039; gezet. Dit geeft niet teveel logging maar is toch goed bruikbaar. Om extra logging te krijgen op b.v. ACL&#039;s, verander olcLogLevel dan in &amp;quot;stats ACL&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Dit template wordt tijdens het draaien van het init_ldap script gecopieerd naar modify-config.ldif. Eventueel kan met place holders gewerkt worden (@...@), dit om op alle servers (ook test servers) één en hetzelfde script te kunnen gebruiken. Er zijn nog enkele van deze templates. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## modify-config.hobbynet            ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
replace: olcLogLevel&lt;br /&gt;
olcLogLevel: stats&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCACertificateFile&lt;br /&gt;
olcTLSCACertificateFile: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCertificateFile&lt;br /&gt;
olcTLSCertificateFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCertificateKeyFile&lt;br /&gt;
olcTLSCertificateKeyFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Om de logging in een apart bestand te krijgen moet in /etc/rsyslog.d een extra bestand &#039;&#039;&#039;openldap.conf&#039;&#039;&#039; geplaatst worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local4.*   -/var/log/openldap.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Tevens willen we logrotate op dit bestand. Plaats in /etc/logrotate.d het bestand &#039;&#039;&#039;openldap&#039;&#039;&#039; met de volgende inhoud&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/log/openldap.log&lt;br /&gt;
{&lt;br /&gt;
        rotate 4&lt;br /&gt;
        weekly&lt;br /&gt;
        missingok&lt;br /&gt;
        notifempty&lt;br /&gt;
        compress&lt;br /&gt;
        delaycompress&lt;br /&gt;
        sharedscripts&lt;br /&gt;
        postrotate&lt;br /&gt;
                reload rsyslog &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 || true&lt;br /&gt;
        endscript&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify-hdb.ldif===&lt;br /&gt;
Hier worden de wijzigingen op de backend db gemaakt. Er worden een aantal attributes ge-indexeerd en de search SizeLimit wordt op &#039;&#039;&#039;unlimited&#039;&#039;&#039; gezet. De waarden die in DB_CONFIG moeten komen (Berkely DB parameters) staan ook in dit bestand. Deze versie is outdated. De ACL regels zijn drastisch gewijzigd. Raadpleeg altijd de laatste versie op de server zelf.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## modify-hdb.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
replace: olcAccess&lt;br /&gt;
#&lt;br /&gt;
# hobbynetlogin heeft lees rechten op ou=users&lt;br /&gt;
olcAccess: to attrs=@posixAccount,@posixGroup,@shadowAccount,@hostObject&lt;br /&gt;
  by dn=&amp;quot;cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# drupal/test moet hccOptIn kunnen schrijven vanaf de&lt;br /&gt;
# profiel pagina. Overige klanten kunnen hccOptin&lt;br /&gt;
# alleen lezen. self mag schrijven&lt;br /&gt;
olcAccess: to attrs=hccOptIn&lt;br /&gt;
  by self write&lt;br /&gt;
  by dn=&amp;quot;cn=drupal-hcc-nl,ou=klanten,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# anonieme klanten moeten kunnen inloggen&lt;br /&gt;
# en mogen hun eigen password wijzigen&lt;br /&gt;
olcAccess: to attrs=userPassword,shadowLastChange&lt;br /&gt;
  by self write&lt;br /&gt;
  by anonymous auth&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# user mag enkele eigen attr wijzigen&lt;br /&gt;
olcAccess: to attrs=hccLogin,hccPseudoniem,hccKaderPassword&lt;br /&gt;
  by self write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# beheerders hebben schrijfrechten op alles (updateDN)&lt;br /&gt;
# klanten hebben alleen lees rechten op alles (readDN)&lt;br /&gt;
# self mag  lezen&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by self read&lt;br /&gt;
  by dn=&amp;quot;cn=xml-hoge-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn=&amp;quot;cn=xml-lage-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by dn.one=&amp;quot;ou=beheer,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn.one=&amp;quot;ou=klanten,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# helpdesk heeft leesrechten op ou=leden&lt;br /&gt;
olcAccess: to attrs=@hccOrgPerson,@hccKaderFunctie&lt;br /&gt;
  by dn.one=&amp;quot;ou=helpdesk,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# partners mogen een paar attrs lezen&lt;br /&gt;
olcAccess: to attrs=hccLidNummer,hccPostcode,hccPostcodeZoekveld&lt;br /&gt;
  by dn.one=&amp;quot;ou=partners,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
#&lt;br /&gt;
# iedereen moet (pseudo attr) entry en objectClass kunnen lezen&lt;br /&gt;
olcAccess: to attrs=entry,objectClass&lt;br /&gt;
  by * read&lt;br /&gt;
#&lt;br /&gt;
# vangnet: blokkeer alle toegang tot de overige attrs.&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by * none&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbDirectory&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
-&lt;br /&gt;
replace: olcSizeLimit&lt;br /&gt;
olcSizeLimit: 100000&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbCachesize&lt;br /&gt;
olcDbCachesize: 200000&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbCheckpoint&lt;br /&gt;
olcDbCheckpoint: 1024 5&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbConfig&lt;br /&gt;
olcDbConfig: set_cachesize 0 536870912 0&lt;br /&gt;
olcDbConfig: set_lk_max_objects 1000&lt;br /&gt;
olcDbConfig: set_lk_max_locks 1000&lt;br /&gt;
olcDbConfig: set_lk_max_lockers 1000&lt;br /&gt;
olcDbConfig: set_flags DB_LOG_AUTOREMOVE&lt;br /&gt;
olcDbConfig: set_flags DB_TXN_NOSYNC&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbIDLcacheSize&lt;br /&gt;
olcDbIDLcacheSize: 600000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_index.ldif===&lt;br /&gt;
Een kale configuratie is heel snel voor wat betreft het opnieuw vullen met gegevens. Bij het aanmaken van een verse LDAP database worden er dan ook zo min mogelijk indexen aangemaakt.&amp;lt;br&amp;gt;&lt;br /&gt;
Zodra de inhoud is ingelezen kunnen de &#039;echte&#039; indexen aangemaakt worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## modify-index.ldif                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
replace: olcDbIndex&lt;br /&gt;
olcDbIndex: default pres,eq&lt;br /&gt;
olcDbIndex: objectClass,entryUUID,entryCSN eq&lt;br /&gt;
olcDbIndex: hccLidNummer,hccLogin,hccForumLogin eq&lt;br /&gt;
olcDbIndex: uid,uidNumber,gidNumber,memberUid,member eq&lt;br /&gt;
olcDbIndex: cn,host,hccPseudoniem,hccOptin,hccLocatie eq&lt;br /&gt;
olcDbIndex: sn,hccPostcodeZoekveld,hccIg,hccRegio eq,subfinal&lt;br /&gt;
olcDbIndex: hccRol,hccBezoek eq,pres,subfinal&lt;br /&gt;
olcDbIndex: hccBulletins pres&lt;br /&gt;
olcDbIndex: aboNummer eq&lt;br /&gt;
olcDbIndex: aboPostcodeZoekveld eq,subfinal&lt;br /&gt;
olcDbIndex: mail,mailHccnet,hccKaderMail pres,eq&lt;br /&gt;
olcDbIndex: hccProfiel pres&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ppolicy overlay===&lt;br /&gt;
* vanuit LDAP de minimale lengte van een wachtwoord afdwingen&lt;br /&gt;
* in LDAP SSHA versleuteling activeren&amp;lt;br&amp;gt;&lt;br /&gt;
(olcPPolicyHashCleartext: TRUE)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-ppolicy.ldif                  ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module, cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectClass: olcModuleList&lt;br /&gt;
objectClass: top&lt;br /&gt;
olcModuleLoad: ppolicy&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=ppolicy,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcPPolicyConfig&lt;br /&gt;
olcOverlay: ppolicy&lt;br /&gt;
olcPPolicyDefault: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
olcPPolicyUseLockout: TRUE&lt;br /&gt;
olcPPolicyHashCleartext: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The default ppolicy looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dn: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
objectClass: pwdPolicy&lt;br /&gt;
objectClass: device&lt;br /&gt;
cn: default&lt;br /&gt;
pwdCheckQuality: 1&lt;br /&gt;
pwdMinLength: 8&lt;br /&gt;
pwdAttribute: 2.5.4.35&lt;br /&gt;
pwdAllowUserChange: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Syncrepl overlay===&lt;br /&gt;
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 [http://www.openldap.org/doc/admin/ LDAP Admin Guide]. &#039;&#039;&#039;Mirror configuratie is specifiek per server!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-syncrepl.tmpl                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
replace: olcServerID&lt;br /&gt;
olcServerID: @SID@&lt;br /&gt;
&lt;br /&gt;
dn: cn=module{0},cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcModuleLoad&lt;br /&gt;
olcModuleLoad: syncprov&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcSyncProvConfig&lt;br /&gt;
olcOverlay: syncprov&lt;br /&gt;
olcSpCheckpoint: 100 5&lt;br /&gt;
olcSpSessionlog: 100&lt;br /&gt;
&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcSyncRepl&lt;br /&gt;
olcSyncRepl: rid=@RID@&lt;br /&gt;
  provider=ldap://@PROVIDER@&lt;br /&gt;
  binddn=&amp;quot;cn=admin,dc=hcc,dc=nl&amp;quot; bindmethod=simple credentials=&amp;quot;@PASSWORD@&amp;quot;&lt;br /&gt;
  searchbase=&amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
  type=refreshAndPersist&lt;br /&gt;
  interval=00:00:00:10&lt;br /&gt;
  retry=&amp;quot;5 5 300 5&amp;quot;&lt;br /&gt;
  timeout=1&lt;br /&gt;
  starttls=yes&lt;br /&gt;
-&lt;br /&gt;
add: olcMirrorMode&lt;br /&gt;
olcMirrorMode: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
De andere server krijgt ServerID 2 en de provider is het IP adres van de andere server.&lt;br /&gt;
&lt;br /&gt;
===Unique overlay===&lt;br /&gt;
Deze overlay dient er voor te zorgen dat o.a het attribuut hccLogin een unieke waarde bevat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-unique.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module,cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectclass: olcModuleList&lt;br /&gt;
objectclass: top&lt;br /&gt;
olcmoduleload: unique&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=unique,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcUniqueConfig&lt;br /&gt;
olcOverlay: unique&lt;br /&gt;
olcUniqueAttribute: uid uidNumber hccLogin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SSL/TLS beveiliging==&lt;br /&gt;
Gebruik de juiste .pem bestanden in /etc/ssl/certs en /etc/ssl/private.&lt;br /&gt;
&lt;br /&gt;
We maken gebruik van een RapidSSL certificaat. Als dit niet standaard in Ubuntu bekend is, zet dan eerst GeoTrust_RapidSSL_-_ca-bundle.pem in de map /etc/ssl/certs neer. Voer nu een &#039;&#039;&#039;c_rehash .&#039;&#039;&#039; uit in /etc/ssl/certs om de cache te updaten (omdat GeoTrust_RapidSSL_-_ca-bundle.pem nieuw werd toegevoegd). &lt;br /&gt;
&lt;br /&gt;
De ownership is belangrijk. Hiertoe wordt de groep &amp;quot;openldap&amp;quot; toegevoegd aan de groep ssl-cert.&lt;br /&gt;
 adduser openldap ssl-cert&lt;br /&gt;
&lt;br /&gt;
Als dit fout gaat, doe dan eerst:&lt;br /&gt;
 apt-get install ssl-cert&lt;br /&gt;
&lt;br /&gt;
Zet het certificaat en de private key in de juiste groep:&lt;br /&gt;
 chgrp ssl-cert /etc/ssl/private/hobby.nl.*&lt;br /&gt;
 chmod 440      /etc/ssl/private/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
Het resultaat is dan als volgt:&lt;br /&gt;
 root@hcc-ldap-lb1:~# ls -l /etc/ssl/private/hcc* &lt;br /&gt;
 -rw-r--r-- 1 root     ssl-cert 1724 Nov 22 20:47 hobby.nl.crt&lt;br /&gt;
 -r--r----- 1 root     ssl-cert 1679 Nov 22 20:25 hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
 root@hcc-ldap-lb1:~# grep openldap /etc/group&lt;br /&gt;
 ssl-cert:x:114:openldap&lt;br /&gt;
 openldap:x:118:&lt;br /&gt;
&lt;br /&gt;
2020.12.09: Op een nieuwe Ubuntu installatie staat apparmor standaard aan. Weg ermee!&lt;br /&gt;
 apt remove --assume-yes --purge apparmor&lt;br /&gt;
&amp;lt;strike&amp;gt;Per september 2017 staan de certificaten in /disk/site/etc/ssl/hobby.nl, net als op alle andere servers. Omdat apparmor actief is moet deze directory worden toegevoegd aan /etc/apparmor.d/local/usr.sbin.slapd. Die file ziet er dan als volgt uit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Site-specific additions and overrides for usr.sbin.slapd.&lt;br /&gt;
# For more details, please see /etc/apparmor.d/local/README.&lt;br /&gt;
#include &amp;lt;abstractions/ssl_certs&amp;gt;&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/ r,&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/* r,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Openldap ook op poort 636 benaderd wordt (naast TLS op 389), moet in /etc/default/slapd ldaps:/// opgenomen worden bij de SLAPD_SERVICES.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;netstat -an&#039; dient dan 636 te laten zien voor zowel IPv4 als IPv6.&lt;br /&gt;
&lt;br /&gt;
Om de cn=config te zien kan je het volgende commando gebruiken:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config&lt;br /&gt;
&lt;br /&gt;
of, wat botter maar korter:&lt;br /&gt;
cat /etc/ldap/slapd.d/cn\=config.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Backup, initialize, restore==&lt;br /&gt;
Om het hele skelet van ldap in één keer te herstellen dient &#039;&#039;&#039;init_ldap&#039;&#039;&#039; gebruikt te worden. Als argument &#039;&#039;&#039;moet&#039;&#039;&#039; het admin beheer wachtwoord mee gegeven worden.&lt;br /&gt;
&lt;br /&gt;
===lokaal===&lt;br /&gt;
Backups kunnen gemaakt worden terwijl slapd draait maar geadviseerd wordt slapd te stoppen. Voor dumpen moet &#039;&#039;&#039;slapcat&#039;&#039;&#039; gebruikt worden. Backups kunnen gemaakt worden per database of een filter daarop, naar een ldif bestand.&lt;br /&gt;
 slapcat -l hcc-dump.ldif -b &amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
Dit maakt een dump van alles onder &#039;&#039;&#039;dc=hcc,dc=nl&#039;&#039;&#039; naar het bestand hcc-dump.ldif. Ook is het mogelijk het database nummer te gebruiken, config is altijd nummer 0, hdb is gewoonlijk 1.&lt;br /&gt;
&lt;br /&gt;
Het &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; script dumpt alle ou&#039;s in aparte .ldif bestanden; het omgekeerde doet &#039;&#039;&#039;restore_ldap&#039;&#039;&#039;.  &lt;br /&gt;
Terug inlezen kan alleen in een lege directory, dus direct nadat &#039;&#039;&#039;init_ldap&#039;&#039;&#039; is gedaan. Gebruik voor het terugplaatsen &#039;&#039;&#039;slapadd&#039;&#039;&#039;. Aan te bevelen is &#039;&#039;&#039;-c&#039;&#039;&#039; mee te geven zodat ondanks fouten doorgegaan wordt. &lt;br /&gt;
&lt;br /&gt;
Voor slapadd &#039;&#039;&#039;moet&#039;&#039;&#039; 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)&lt;br /&gt;
 /etc/init.d/slapd stop&lt;br /&gt;
 slapadd -l hcc-dump.ldif -w -c &amp;gt;errors.txt&lt;br /&gt;
 chown openldap:openldap /var/lib/ldap/*&lt;br /&gt;
 /etc/init.d/slapd start&lt;br /&gt;
&lt;br /&gt;
===remote===&lt;br /&gt;
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 &#039;&#039;&#039;backup-encrypted&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Recente lokale backups zijn te vinden in &#039;&#039;&#039;/usr/local/hobbynet/tmp&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Verse ldap maken===&lt;br /&gt;
Transactie log bij het toevoegen van b.v. een nieuwe ou:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Op beide servers:&lt;br /&gt;
schema van test server gecopieerd en geactiveerd&lt;br /&gt;
dump-ldap gedraaid&lt;br /&gt;
systemctl stop slapd.service &lt;br /&gt;
&lt;br /&gt;
Er is nu géén ldap service! Werk dus snel...&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb1&lt;br /&gt;
systemctl stop slapd.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
op ldap-lb2:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb2&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
systemctl start slapd.service&lt;br /&gt;
Beide slapd servers zijn in de lucht en moeten synchroniseren.&lt;br /&gt;
&lt;br /&gt;
op beide servers:&lt;br /&gt;
check replicatie (netstat en functioneel)&lt;br /&gt;
&lt;br /&gt;
root@ldap-lb1:/usr/local/hobbynet/bin# netstat -n | grep 389&lt;br /&gt;
tcp        0      0 172.31.8.4:36838        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:36836        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58112        ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58114        ESTABLISHED&lt;br /&gt;
&lt;br /&gt;
Functioneel door met ADS op beide servers in te loggen en een willekeurig veld in je eigen entry te wijzigen op lb1. Kijk of het gebeurd is op lb2 en wijzig het daar terug. Check op de andere server of het gebeurd is. Er kan een zekere vertraging in optreden.&lt;br /&gt;
&lt;br /&gt;
Stel er is een nieuwe ou gemaakt: denk aan het bij werken van de dump en restore scripts.&lt;br /&gt;
&lt;br /&gt;
update dump-ldap.sh en restore-ldap.sh met de nieuwe ou&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
export tarieven.ldif op test server en import op ldap-lb1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==crontab==&lt;br /&gt;
 # script dat updates ophaalt (maar niet installeert), zodat nagios ze ook detecteert&lt;br /&gt;
 0 9 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
==LDAP Clients==&lt;br /&gt;
Er zijn meerdere LDAP clients. De meest populaire zijn Apache Directory Studio (&amp;quot;ADS&amp;quot;) en phpLdapAdmin (&amp;quot;PLA&amp;quot;).&amp;lt;br&amp;gt;&lt;br /&gt;
De eerste is veel uitgbreider maar vereist een Java Runtime Environment (&amp;quot;JRE&amp;quot;). Onder Windows is dat JRE(13) of (open)JDK-(13).&amp;lt;br&amp;gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Binnen Hobbynet wordt uitsluitend gebruik gemaakt van ADS.&lt;br /&gt;
&lt;br /&gt;
===StartTLS===&lt;br /&gt;
Aanbevolen wordt StartTLS op poort 389 te gebruiken. Alternatief is LDAPS op poort 636 maar dat is deprecated. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Windows===&lt;br /&gt;
&amp;lt;i&amp;gt;2019-10-31 HJV: Oude info, als referentie leuk, maar niet meer relevant&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Onder Windows moet met &#039;&#039;&#039;keytool.exe&#039;&#039;&#039; gewerkt worden. De uitleg heb ik van  [http://www.talkingtree.com/blog/index.cfm?mode=entry&amp;amp;entry=25AA75A4-45A6-2844-7CA3EECD842DB576 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:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Haal de benodigde bestanden op (op een Linux systeem):&lt;br /&gt;
wget http://www.cacert.org/certs/root.der -O root.der&lt;br /&gt;
wget http://www.cacert.org/certs/class3.der -O class3.der&lt;br /&gt;
copieer de bestanden naar de Windows omgeving in C:\Program Files (x86)\Java\jre6\lib\security.&lt;br /&gt;
&lt;br /&gt;
Open een commandwindow:&lt;br /&gt;
cd C:\Program Files (x86)\Java\jre6\lib\security&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass1 -file root.der&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass3 -file class3.der&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Linux===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS gebruik===&lt;br /&gt;
ADS kan erg handig zijn voor het snel dumpen van hele ou&#039;s in .ldif formaat. Zo&#039;n dump kan direct op een andere server worden ingelezen.&lt;br /&gt;
&lt;br /&gt;
===PhpLdapAdmin onder Linux===&lt;br /&gt;
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 [http://phpldapadmin.sourceforge.net/wiki/index.php/Server:server:tls phpldapadmin wiki].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# LDAP Defaults&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# See ldap.conf(5) for details&lt;br /&gt;
# This file should be world readable but not world writable.&lt;br /&gt;
&lt;br /&gt;
#BASE   dc=example,dc=com&lt;br /&gt;
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666&lt;br /&gt;
&lt;br /&gt;
#SIZELIMIT      12&lt;br /&gt;
#TIMELIMIT      15&lt;br /&gt;
#DEREF          never&lt;br /&gt;
TLS_CACERT      /etc/ssl/certs/CAcert_org.pem&lt;br /&gt;
TLS_CERT        /etc/ssl/private/hobby.nl.crt&lt;br /&gt;
TLS_KEY         /etc/ssl/private/hobby.nl.key&lt;br /&gt;
TLS_REQCERT     allow&lt;br /&gt;
#TLS_REQCERT never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Denk er wel aan na wijzigingen Apache te herstarten.&lt;br /&gt;
===PAM en NSS via LDAP===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Installeer &#039;&#039;&#039;libnss-ldapd&#039;&#039;&#039; om de benodigde libraries te verkrijgen. Apt-get zal tevens &#039;&#039;&#039;libpam-ldapd&#039;&#039;&#039;, &#039;&#039;&#039;nslcd&#039;&#039;&#039; en &#039;&#039;&#039;nscd&#039;&#039;&#039; binnen brengen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install libnss-ldapd auth-client-config ldap-utils&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
    libpam-ldapd nscd nslcd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Libnss-ldapd is een doorontwikkeling van libnss-ldap en bevat meerdere verbeteringen. Zie: [http://arthurdejong.org/nss-pam-ldapd/ deze site] van de ontwikkelaar. Bij de installatie wordt een user &#039;&#039;&#039;nslcd&#039;&#039;&#039; aangemaakt; denk erom die in de .tmpl bestanden te zetten!&lt;br /&gt;
  &lt;br /&gt;
nsswitch.conf laat zich configureren via &#039;&#039;&#039;auth-client-config&#039;&#039;&#039; maar lac_ldap is alleen aanwezig als &#039;&#039;&#039;ldap-auth-config&#039;&#039;&#039; ook is geinstalleerd. Zo niet gebruik dan de tweede regel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auth-client-config -t nss -p lac_ldap&lt;br /&gt;
auth-client-config -t nss -p ldap_example&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het resultaat is dat nsswitch.conf zowel in files (/etc/passwd etc.) zoekt als in ldap.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nsswitch.conf&lt;br /&gt;
#&lt;br /&gt;
# Example configuration of GNU Name Service Switch functionality.&lt;br /&gt;
# If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
# `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # passwd:         compat&lt;br /&gt;
passwd: files ldap&lt;br /&gt;
# pre_auth-client-config # group:          compat&lt;br /&gt;
group: files ldap&lt;br /&gt;
# pre_auth-client-config # shadow:         compat&lt;br /&gt;
shadow: files ldap&lt;br /&gt;
&lt;br /&gt;
hosts:          files dns&lt;br /&gt;
networks:       files&lt;br /&gt;
&lt;br /&gt;
protocols:      db files&lt;br /&gt;
services:       db files&lt;br /&gt;
ethers:         db files&lt;br /&gt;
rpc:            db files&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # netgroup:       nis&lt;br /&gt;
netgroup: nis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het aanpassen van de PAM bestanden gaat sinds enige releases met &#039;&#039;&#039;pam-auth-update&#039;&#039;&#039;. Kies in het menu voor zowel unix als ldap. Default wordt nu ldap authenticatie gebruikt voor uid &amp;gt;= 1000. Bij Hobbynet willen we vanaf 300 ldap gebruiken. Door een licht gemodificeerde versie van /usr/share/pam-configs/ldap te maken (ldap-hobbynet), kan ook voor de hobbynet instelling gekozen worden. Dit is de ldap-hobbynet versie:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Name: LDAP Authentication (uid&amp;gt;300)&lt;br /&gt;
Default: yes&lt;br /&gt;
Priority: 128&lt;br /&gt;
Auth-Type: Primary&lt;br /&gt;
Auth-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Auth:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 use_first_pass&lt;br /&gt;
Account-Type: Additional&lt;br /&gt;
Account:&lt;br /&gt;
        [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad]        pam_ldap.so minimum_uid=300&lt;br /&gt;
Password-Type: Primary&lt;br /&gt;
Password-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Password:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 try_first_pass&lt;br /&gt;
Session-Type: Additional&lt;br /&gt;
Session:&lt;br /&gt;
        [success=ok default=ignore]     pam_ldap.so minimum_uid=300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dit is in een standaard opzet van LDAP voldoende om zowel lokale gebruikers als gebruikers opgeslagen in LDAP, te laten inloggen en hun password te laten wijzigen. In de Hobbynet setup moet er echter nog meer gebeuren in de ACL&#039;s van de LDAP server configuratie. Omdat Hobbynet de laatste ACL regel heeft gewijzigd in een &#039;&#039;&#039;deny-all&#039;&#039;&#039;, is er een helper of proxy account nodig dat read access heeft of een aantal cruciale velden in de posixAccount objectClass. Zie verder de lsiting van nslcd.conf.&lt;br /&gt;
&lt;br /&gt;
Libnss-ldapd en libpam-ldapd hebben een gezamelijke daemon &#039;&#039;&#039;nslcd&#039;&#039;&#039; die z&#039;n configuratie uit &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039; haalt. Hierin is ook een voorziening voor het helper account. Aan het eind vande &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; staat de voorziening voor host-based login. Als het attribute &#039;&#039;&#039;host&#039;&#039;&#039; de fqdn of alleen de host naam bevat, bepaald dat of inloggen op die host mogelijk is. &#039;&#039;&#039;*&#039;&#039;&#039; staat inloggen op alle hosts toe.&lt;br /&gt;
&lt;br /&gt;
Eventueel kan het daemon proces voor debugging doeleinden ook als command (&#039;&#039;&#039;nslcd -d&#039;&#039;&#039;) gestart worden. Om de bevragingen van de LDAP server wat te verminderen, kan &#039;&#039;&#039;nscd&#039;&#039;&#039; voor caching zorgen. Deze cache daemon heeft zijn eigen configuratie bestand: &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039;. De default instellingen zijn goed; eventueel kan de logging naar een bestand gestuurd worden.&lt;br /&gt;
&lt;br /&gt;
Verbinding met de LDAP server kan met StartTLS beveiligd worden. Hier de inhoud van nslcd.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nslcd.conf&lt;br /&gt;
# nslcd configuration file. See nslcd.conf(5)&lt;br /&gt;
# for details.&lt;br /&gt;
&lt;br /&gt;
# The user and group nslcd should run as.&lt;br /&gt;
uid nslcd&lt;br /&gt;
gid nslcd&lt;br /&gt;
&lt;br /&gt;
# log location and level&lt;br /&gt;
#log /var/log/nslcd.log debug&lt;br /&gt;
&lt;br /&gt;
# The location at which the LDAP server(s) should be reachable.&lt;br /&gt;
uri ldap://ldap2-int.hobby.nl/&lt;br /&gt;
&lt;br /&gt;
# The search base that will be used for all queries.&lt;br /&gt;
base dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# Other base mappings&lt;br /&gt;
base   group  ou=groups,dc=hcc,dc=nl&lt;br /&gt;
base   passwd ou=users,dc=hcc,dc=nl&lt;br /&gt;
base   shadow ou=users,dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# The search scope.&lt;br /&gt;
#scope sub&lt;br /&gt;
&lt;br /&gt;
# The LDAP protocol version to use.&lt;br /&gt;
ldap_version 3&lt;br /&gt;
&lt;br /&gt;
# The DN to bind with for normal lookups.&lt;br /&gt;
#binddn cn=annonymous,dc=example,dc=net&lt;br /&gt;
#bindpw secret&lt;br /&gt;
binddn cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&lt;br /&gt;
bindpw xxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
# The DN used for password modifications by root.&lt;br /&gt;
#rootpwmoddn cn=admin,dc=example,dc=com&lt;br /&gt;
&lt;br /&gt;
# SSL options&lt;br /&gt;
ssl off&lt;br /&gt;
ssl start_tls&lt;br /&gt;
#tls_reqcert never&lt;br /&gt;
tls_cacertfile /etc/ssl/certs/cacert.org.pem&lt;br /&gt;
#tls_cert /etc/ssl/private/server.crt&lt;br /&gt;
#tls_key /etc/ssl/private/server.key&lt;br /&gt;
&lt;br /&gt;
# The minimum uid&lt;br /&gt;
nss_min_uid 300&lt;br /&gt;
&lt;br /&gt;
pam_authz_search (&amp;amp;(objectClass=posixAccount)(uid=$username)(|(host=$hostname)(host=$fqdn)(host=\\*)))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===users en groepen toevoegen===&lt;br /&gt;
Hiervoor moet &#039;&#039;&#039;ldapscripts&#039;&#039;&#039; zijn geïnstalleerd. Dit is het geval op de ldap-lb1 server. Dat levert de volgende extra commando&#039;s op:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldaprenamemachine&lt;br /&gt;
ldapadduser&lt;br /&gt;
ldapdeleteuserfromgroup&lt;br /&gt;
ldapfinger&lt;br /&gt;
ldapid&lt;br /&gt;
ldapgid&lt;br /&gt;
ldapmodifyuser&lt;br /&gt;
ldaprenameuser&lt;br /&gt;
lsldap&lt;br /&gt;
ldapaddusertogroup&lt;br /&gt;
ldapsetpasswd&lt;br /&gt;
ldapinit&lt;br /&gt;
ldapaddgroup&lt;br /&gt;
ldapdeletegroup&lt;br /&gt;
ldapmodifygroup&lt;br /&gt;
ldapdeletemachine&lt;br /&gt;
ldaprenamegroup&lt;br /&gt;
ldapaddmachine&lt;br /&gt;
ldapmodifymachine&lt;br /&gt;
ldapsetprimarygroup&lt;br /&gt;
ldapdeleteuser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Meest gebruikt zijn &#039;&#039;&#039;ldapaddgroup, ldapadduser, ldapsetpasswd&#039;&#039;&#039;.  &lt;br /&gt;
Er zijn manpages maar er is ook uitgebreide uitleg in de [https://help.ubuntu.com/14.04/serverguide/openldap-server.html Ubuntu server guide]. Omdat wij het automatisch maken van de home dir uit hebben staan, moet die met de hand aangemaakt worden en moet de owner goed gezet worden.&lt;br /&gt;
&lt;br /&gt;
===host-based login===&lt;br /&gt;
Met een kleine uitbreiding in het schema van de LDAP server, kan host-based login gerealiseerd worden. Ook in de &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; is een uitbreiding nodig.&lt;br /&gt;
&lt;br /&gt;
In de LDAP server dient de objectClass &#039;&#039;&#039;hostObject&#039;&#039;&#039; aan de entries in de ou=users toegevoegd te worden. Deze (auxilary) objectClass brengt slechts één attribute met zich mee: &#039;&#039;&#039;host&#039;&#039;&#039;. De regel in nslcd.conf checkt of één van de waarden van &#039;&#039;&#039;host&#039;&#039;&#039; gelijk is aan de naam van de server waarop ingelogd wordt. De waarde &#039;&#039;&#039;*&#039;&#039;&#039; geldt als wildcard. Zie de regel &#039;&#039;&lt;br /&gt;
&#039;pam_authz_search&#039;&#039;&#039;&#039; in &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Password aanpassen===&lt;br /&gt;
Via LDAP ingelogde gebruikers kunnen net als lokale gebruikers hun wachtwoord met &#039;&#039;&#039;passwd&#039;&#039;&#039; wijzigen. Wel moet aan de eisen in de LDAP ppolicy module voldaan worden.&lt;br /&gt;
&lt;br /&gt;
==PHP scripting==&lt;br /&gt;
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 &#039;&#039;&#039;/usr/local/hobbynet/bin&#039;&#039;&#039; directory.&lt;br /&gt;
Voor de php-scripting zijn enkele php7.x pakketten nodig. Installeer deze met apt-get. Het gaat om:&lt;br /&gt;
* php-cli&lt;br /&gt;
* php-ldap&lt;br /&gt;
&lt;br /&gt;
== Apache authenticatie via LDAP ==&lt;br /&gt;
In plaats van .htpassword authenticatie, kan ook LDAP gebruikt worden. Activeer daartoe de Apache module&lt;br /&gt;
&#039;authnz_ldap&#039;.&lt;br /&gt;
 a2enmod authnz_ldap&lt;br /&gt;
Denk er om dat dit in een loadbalanced situatie op beide servers gedaan dient te worden!&lt;br /&gt;
&lt;br /&gt;
=== Voorbeeld van een LDAP configuratie in de Apache config ===&lt;br /&gt;
(alleen als voorbeeld, niet zo gebruiken!)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# // 1) Hobbynet webmaster&lt;br /&gt;
# // 2) Vraagbaak medewerker van een willekeurige groepering&lt;br /&gt;
# (|(hccRol=*#VRBK)(hccRol=HN#WM))&lt;br /&gt;
  &amp;lt;Location &amp;quot;/apps/vraagbaak&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;RequireAll&amp;gt;&lt;br /&gt;
      Authname &amp;quot;HCC!vraagbaak (gebruik uw hcc.nl gebruikersnaam/wachtwoord)&amp;quot;&lt;br /&gt;
      AuthType Basic&lt;br /&gt;
      AuthBasicProvider ldap&lt;br /&gt;
      AuthLDAPUrl ldap://hcc-ldap-int.hobby.nl/ou=leden,dc=hcc,dc=nl?hccLogin??(|(hccRol=*#VRBK)(hccRol=HN#WM))(hccProfiel=TRUE) TLS&lt;br /&gt;
      require valid-user&lt;br /&gt;
    &amp;lt;/RequireAll&amp;gt;&lt;br /&gt;
  &amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hoe kan LDAP veilig gebruikt worden vanuit Apache===&lt;br /&gt;
Zet een script neer in de gebruikersomgeving, en gebruik mod_authz_external. Doe de controle vervolgens via de XML-RPC server.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zie [[Kadernet]] voor een voorbeeld.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== TODO lijst ==&lt;br /&gt;
&#039;&#039;Dit is een lijst in wording, graag aanvullen&#039;&#039; &lt;br /&gt;
* &#039;dun&#039; loadbalancer script maken om te controleren dat LDAP echt luistert&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79055</id>
		<title>LDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79055"/>
		<updated>2020-12-10T20:59:47Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* Locatie bestanden */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introductie==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==LDAP server keuze==&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Loadbalanced==&lt;br /&gt;
Er zijn twee servers (ldap-lb1 en ldap-lb2) die achter een loadbalancer in preferred server mode staan 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.&lt;br /&gt;
&lt;br /&gt;
Tevens zijn er een test en een development server: ldap-test en ldap-dev.&lt;br /&gt;
&lt;br /&gt;
==Installatie==&lt;br /&gt;
Installatie van OpenLDAP is simpel:&lt;br /&gt;
 aptitude install slapd ldap-utils&lt;br /&gt;
Omdat er gebruikgemaakt wordt van php scripts, is het ook nodig &#039;&#039;&#039;php-cli&#039;&#039;&#039; en &#039;&#039;&#039;php-ldap&#039;&#039;&#039; te installeren. De configuratie van OpenLDAP is sinds Karmic Koala iets gecompliceerder geworden. &#039;cn=config&#039; 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 &amp;quot;dpkg-reconfigure slapd&amp;quot; zet alleen de skeleton configuratie terug. Je moet zelf de database, root dn en acl&#039;s opzetten (als root of met sudo). Run  &#039;&#039;&#039;dpkg-reconfigure slapd&#039;&#039;&#039; om terug te gaan naar een lege directory. &lt;br /&gt;
&lt;br /&gt;
De volgende pakketten dienen geïnstalleerd te zijn (&#039;php -m&#039; toont de geactiveerde modules):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontbrekende pakketten volgens hjv:&lt;br /&gt;
&lt;br /&gt;
apt-get install aptitude &lt;br /&gt;
apt-get install phpmyadmin&lt;br /&gt;
apt-get install php-mbstring&lt;br /&gt;
apt-get install php-gettext&lt;br /&gt;
apt-get install php-xmlrpc&lt;br /&gt;
apt-get install php-ldap&lt;br /&gt;
apt-get install mysql-server&lt;br /&gt;
apt-get install ldapscripts&lt;br /&gt;
apt-get install php-xml&lt;br /&gt;
apt-get install slapd&lt;br /&gt;
apt-get install ldap-utils&lt;br /&gt;
a2enmod ssl&lt;br /&gt;
&lt;br /&gt;
- apache2ctl restart&lt;br /&gt;
&lt;br /&gt;
- openldap moet lid zijn van de groep ssl-cert!&lt;br /&gt;
apt-get install ssl-cert&lt;br /&gt;
adduser openldap ssl-cert&lt;br /&gt;
(of vi /etc/group&lt;br /&gt;
    ssl-cert:x:116:openldap)&lt;br /&gt;
&lt;br /&gt;
- Zorg dat de LDAP daemon bij de certificaten kan komen. &lt;br /&gt;
LET OP: op alle hobbynet servers staan de certificaten in /disk/site/etc/ssl/hobby.nl/&lt;br /&gt;
 chgrp ssl-cert /disk/site/etc/ssl/hobby.nl/hobby.nl.*&lt;br /&gt;
 chmod 440      /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
- mysql laat het bestand ibdata1 ongelimiteerd groeien (InnoDB bestanden)&lt;br /&gt;
 /etc/mysql/mysql.conf.d/innodb_file_per_table.cnf&lt;br /&gt;
 [mysql]&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
&lt;br /&gt;
=============&lt;br /&gt;
Nog meer Hobbynet aanpassingen&lt;br /&gt;
/etc/bash.bashrc&lt;br /&gt;
export http_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export https_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export ftp_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Locatie bestanden===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Alle ldif em tmpl bestanden gaan naar /usr/local/hobbynet/lib&lt;br /&gt;
* init_ldap en andere scripts gaan naar /usr/local/hobbynet/bin&lt;br /&gt;
* alle data bestanden (dumps) en update ldifs gaan naar /usr/local/hobbynet/data&lt;br /&gt;
* etc/ldap/schema/hcc_schema.* gaan naar /etc/ldap/schema&lt;br /&gt;
* etc/ldap/schema/ppolicy.ldif gaat naar /etc/ldap/schema&lt;br /&gt;
&lt;br /&gt;
hcc_schema.ldif wordt middels een script gemaakt. Dit script plaatst de ldif bestand(en) in /etc/ldap/schema. Zie hieronder.&lt;br /&gt;
&lt;br /&gt;
==Initiële database==&lt;br /&gt;
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&#039;s) erin. Alleen zijn er geen leden geladen in de ou=leden en ou=inactieve_leden.&lt;br /&gt;
===slapd.init.ldif ===&lt;br /&gt;
Bij installatie/reconfiguratie wordt /usr/share/slapd/slapd.init.ldif ingelezen. Zie aldaar indien nodig.&lt;br /&gt;
&lt;br /&gt;
==init_ldap script==&lt;br /&gt;
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 &#039;&#039;&#039;cn=admin,dc=hcc,dc=nl&#039;&#039;&#039; 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 &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; laadt vervolgens de laatste dump terug. Bij wijzigingen aan het schema is het raadzaam altijd een &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; te doen zodat een later een actuele dump kan worden teruggeladen.&lt;br /&gt;
&lt;br /&gt;
Het (plain text) password van cn=admin,dc=hcc,dc=nl moet bij het aanroepen van &#039;&#039;&#039;init_ldap&#039;&#039;&#039; op de commandline worden meegegeven. Tijdens de dpkg-reconfigure moet het password nog 2x gegeven worden. Lees eventueel ook de [http://www.openldap.org/doc/admin/ OpenLDAP Admin Guide].&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* voorbereidingen om &amp;quot;dpkg-reconfigure slapd&amp;quot; te draaien&lt;br /&gt;
* definities van input files&lt;br /&gt;
* check host&lt;br /&gt;
* bouwen van het skelet van de nieuwe directory&lt;br /&gt;
Zie voor details van de scripts &#039;&#039;&#039;init_ldap&#039;&#039;&#039;, &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; en &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; op een van de servers (in /usr/local/hobbynet/bin).&lt;br /&gt;
&lt;br /&gt;
==onderdelen van init_ldap==&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===add-schema.ldif===&lt;br /&gt;
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. &lt;br /&gt;
* Hiertoe wordt het onderstaande schema in /etc/ldap/schema geplaatst als hcc_schema.schema. &lt;br /&gt;
* Vervolgens worden de stappen uitgevoerd zoals beschreven in de [https://help.ubuntu.com/11.10/serverguide/C/openldap-server.html Ubuntu Server guide], onder &#039;&#039;&#039;Modifying the slapd Configuration Database&#039;&#039;&#039;. &lt;br /&gt;
* De resulterende output file &#039;&#039;&#039;cn=hcc_schema.ldif&#039;&#039;&#039; moet dan nog naar /etc/ldap/schema/hcc_schema.ldif gecopieerd worden. &lt;br /&gt;
Als dit proces herhaald moet worden, start dan met een lege output directory en verwijder een eventueel achtergebleven cn=hcc_schema.ldif bestand. &lt;br /&gt;
&lt;br /&gt;
De extra schema&#039;s worden middels een &#039;&#039;&#039;include&#039;&#039;&#039; toegevoegd. &#039;&#039;&#039;Ppolicy&#039;&#039;&#039; is op gelijke wijze als &#039;&#039;&#039;hcc_schema&#039;&#039;&#039; tot .ldif geconverteerd. Alle stappen om een nieuwe &#039;&#039;&#039;hcc-schema.ldif&#039;&#039;&#039; te maken zijn gescript in &#039;&#039;&#039;upd_schema&#039;&#039;&#039;. In &#039;&#039;&#039;init_ldap&#039;&#039;&#039; wordt het eigen schema en de password policy geladen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-schema.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
include: file:///etc/ldap/schema/hcc_schema.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ppolicy.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ldapns.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====schema updates====&lt;br /&gt;
Soms wordt een attribute toegevoegd of gewijzigd. Hiertoe dient het bestand hcc_schema.schema in /usr/local/hobbynet/etc/ldap/schema, gewijzigd te worden. Daarna dient er een ldif versie van gemaakt te worden. Gebruik hiervoor &#039;&#039;&#039;upd_schema.sh&#039;&#039;&#039; in dezelfde directory. De resulterende hcc_schema.ldif wordt in dit script naar /etc/ldap/schema gecopieërd. Bij grote wijzigingen is het aan te bevelen door de hele rebuild cycle te gaan (dump, init, restore). Bij triviale aanpassingen zou hcc_schema.ldif ook &#039;&#039;&#039;direct&#039;&#039;&#039; in de actieve directory geplaatst kunnen worden, gevolgd door slechts een &#039;&#039;&#039;service slapd restart&#039;&#039;&#039;. Gebruik hiervoor (blijf in de lokale schema directory):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp &amp;quot;ldif_output/cn=config/cn=schema/cn={14}hcc_schema.ldif&amp;quot; &amp;quot;/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}hcc_schema.ldif&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
LET OP: De nummers tussen accolades zijn bepaald door de volgorde van andere scripts! Zolang geen andere schema&#039;s worden toegevoegd zullen ze niet veranderen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ook kan met de ldap-tools gewerkt worden. Gebruik ldapsearch en ldapmodify, eventueel met de -f optie om een voorbereide serie opdrachten uit te voeren. Gebruik ldapsearch om eerst de structuur te vinden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier een voorbeeld om een objectClass aan te passen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat pas_aan.ldif&lt;br /&gt;
dn: cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
delete: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description ) )&lt;br /&gt;
-&lt;br /&gt;
add: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description $ hccIg ) )&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
$sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f pas_aan.ldif &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_config.ldif===&lt;br /&gt;
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 &#039;&#039;&#039;STATS&#039;&#039;&#039; gezet. Dit geeft niet teveel logging maar is toch goed bruikbaar. Om extra logging te krijgen op b.v. ACL&#039;s, verander olcLogLevel dan in &amp;quot;stats ACL&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Dit template wordt tijdens het draaien van het init_ldap script gecopieerd naar modify-config.ldif. Eventueel kan met place holders gewerkt worden (@...@), dit om op alle servers (ook test servers) één en hetzelfde script te kunnen gebruiken. Er zijn nog enkele van deze templates. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## modify-config.hobbynet            ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
replace: olcLogLevel&lt;br /&gt;
olcLogLevel: stats&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCACertificateFile&lt;br /&gt;
olcTLSCACertificateFile: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCertificateFile&lt;br /&gt;
olcTLSCertificateFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCertificateKeyFile&lt;br /&gt;
olcTLSCertificateKeyFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Om de logging in een apart bestand te krijgen moet in /etc/rsyslog.d een extra bestand &#039;&#039;&#039;openldap.conf&#039;&#039;&#039; geplaatst worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local4.*   -/var/log/openldap.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Tevens willen we logrotate op dit bestand. Plaats in /etc/logrotate.d het bestand &#039;&#039;&#039;openldap&#039;&#039;&#039; met de volgende inhoud&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/log/openldap.log&lt;br /&gt;
{&lt;br /&gt;
        rotate 4&lt;br /&gt;
        weekly&lt;br /&gt;
        missingok&lt;br /&gt;
        notifempty&lt;br /&gt;
        compress&lt;br /&gt;
        delaycompress&lt;br /&gt;
        sharedscripts&lt;br /&gt;
        postrotate&lt;br /&gt;
                reload rsyslog &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 || true&lt;br /&gt;
        endscript&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify-hdb.ldif===&lt;br /&gt;
Hier worden de wijzigingen op de backend db gemaakt. Er worden een aantal attributes ge-indexeerd en de search SizeLimit wordt op &#039;&#039;&#039;unlimited&#039;&#039;&#039; gezet. De waarden die in DB_CONFIG moeten komen (Berkely DB parameters) staan ook in dit bestand. Deze versie is outdated. De ACL regels zijn drastisch gewijzigd. Raadpleeg altijd de laatste versie op de server zelf.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## modify-hdb.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
replace: olcAccess&lt;br /&gt;
#&lt;br /&gt;
# hobbynetlogin heeft lees rechten op ou=users&lt;br /&gt;
olcAccess: to attrs=@posixAccount,@posixGroup,@shadowAccount,@hostObject&lt;br /&gt;
  by dn=&amp;quot;cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# drupal/test moet hccOptIn kunnen schrijven vanaf de&lt;br /&gt;
# profiel pagina. Overige klanten kunnen hccOptin&lt;br /&gt;
# alleen lezen. self mag schrijven&lt;br /&gt;
olcAccess: to attrs=hccOptIn&lt;br /&gt;
  by self write&lt;br /&gt;
  by dn=&amp;quot;cn=drupal-hcc-nl,ou=klanten,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# anonieme klanten moeten kunnen inloggen&lt;br /&gt;
# en mogen hun eigen password wijzigen&lt;br /&gt;
olcAccess: to attrs=userPassword,shadowLastChange&lt;br /&gt;
  by self write&lt;br /&gt;
  by anonymous auth&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# user mag enkele eigen attr wijzigen&lt;br /&gt;
olcAccess: to attrs=hccLogin,hccPseudoniem,hccKaderPassword&lt;br /&gt;
  by self write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# beheerders hebben schrijfrechten op alles (updateDN)&lt;br /&gt;
# klanten hebben alleen lees rechten op alles (readDN)&lt;br /&gt;
# self mag  lezen&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by self read&lt;br /&gt;
  by dn=&amp;quot;cn=xml-hoge-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn=&amp;quot;cn=xml-lage-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by dn.one=&amp;quot;ou=beheer,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn.one=&amp;quot;ou=klanten,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# helpdesk heeft leesrechten op ou=leden&lt;br /&gt;
olcAccess: to attrs=@hccOrgPerson,@hccKaderFunctie&lt;br /&gt;
  by dn.one=&amp;quot;ou=helpdesk,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# partners mogen een paar attrs lezen&lt;br /&gt;
olcAccess: to attrs=hccLidNummer,hccPostcode,hccPostcodeZoekveld&lt;br /&gt;
  by dn.one=&amp;quot;ou=partners,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
#&lt;br /&gt;
# iedereen moet (pseudo attr) entry en objectClass kunnen lezen&lt;br /&gt;
olcAccess: to attrs=entry,objectClass&lt;br /&gt;
  by * read&lt;br /&gt;
#&lt;br /&gt;
# vangnet: blokkeer alle toegang tot de overige attrs.&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by * none&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbDirectory&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
-&lt;br /&gt;
replace: olcSizeLimit&lt;br /&gt;
olcSizeLimit: 100000&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbCachesize&lt;br /&gt;
olcDbCachesize: 200000&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbCheckpoint&lt;br /&gt;
olcDbCheckpoint: 1024 5&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbConfig&lt;br /&gt;
olcDbConfig: set_cachesize 0 536870912 0&lt;br /&gt;
olcDbConfig: set_lk_max_objects 1000&lt;br /&gt;
olcDbConfig: set_lk_max_locks 1000&lt;br /&gt;
olcDbConfig: set_lk_max_lockers 1000&lt;br /&gt;
olcDbConfig: set_flags DB_LOG_AUTOREMOVE&lt;br /&gt;
olcDbConfig: set_flags DB_TXN_NOSYNC&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbIDLcacheSize&lt;br /&gt;
olcDbIDLcacheSize: 600000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_index.ldif===&lt;br /&gt;
Een kale configuratie is heel snel voor wat betreft het opnieuw vullen met gegevens. Bij het aanmaken van een verse LDAP database worden er dan ook zo min mogelijk indexen aangemaakt.&amp;lt;br&amp;gt;&lt;br /&gt;
Zodra de inhoud is ingelezen kunnen de &#039;echte&#039; indexen aangemaakt worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## modify-index.ldif                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
replace: olcDbIndex&lt;br /&gt;
olcDbIndex: default pres,eq&lt;br /&gt;
olcDbIndex: objectClass,entryUUID,entryCSN eq&lt;br /&gt;
olcDbIndex: hccLidNummer,hccLogin,hccForumLogin eq&lt;br /&gt;
olcDbIndex: uid,uidNumber,gidNumber,memberUid,member eq&lt;br /&gt;
olcDbIndex: cn,host,hccPseudoniem,hccOptin,hccLocatie eq&lt;br /&gt;
olcDbIndex: sn,hccPostcodeZoekveld,hccIg,hccRegio eq,subfinal&lt;br /&gt;
olcDbIndex: hccRol,hccBezoek eq,pres,subfinal&lt;br /&gt;
olcDbIndex: hccBulletins pres&lt;br /&gt;
olcDbIndex: aboNummer eq&lt;br /&gt;
olcDbIndex: aboPostcodeZoekveld eq,subfinal&lt;br /&gt;
olcDbIndex: mail,mailHccnet,hccKaderMail pres,eq&lt;br /&gt;
olcDbIndex: hccProfiel pres&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ppolicy overlay===&lt;br /&gt;
* vanuit LDAP de minimale lengte van een wachtwoord afdwingen&lt;br /&gt;
* in LDAP SSHA versleuteling activeren&amp;lt;br&amp;gt;&lt;br /&gt;
(olcPPolicyHashCleartext: TRUE)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-ppolicy.ldif                  ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module, cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectClass: olcModuleList&lt;br /&gt;
objectClass: top&lt;br /&gt;
olcModuleLoad: ppolicy&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=ppolicy,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcPPolicyConfig&lt;br /&gt;
olcOverlay: ppolicy&lt;br /&gt;
olcPPolicyDefault: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
olcPPolicyUseLockout: TRUE&lt;br /&gt;
olcPPolicyHashCleartext: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The default ppolicy looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dn: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
objectClass: pwdPolicy&lt;br /&gt;
objectClass: device&lt;br /&gt;
cn: default&lt;br /&gt;
pwdCheckQuality: 1&lt;br /&gt;
pwdMinLength: 8&lt;br /&gt;
pwdAttribute: 2.5.4.35&lt;br /&gt;
pwdAllowUserChange: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Syncrepl overlay===&lt;br /&gt;
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 [http://www.openldap.org/doc/admin/ LDAP Admin Guide]. &#039;&#039;&#039;Mirror configuratie is specifiek per server!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-syncrepl.tmpl                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
replace: olcServerID&lt;br /&gt;
olcServerID: @SID@&lt;br /&gt;
&lt;br /&gt;
dn: cn=module{0},cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcModuleLoad&lt;br /&gt;
olcModuleLoad: syncprov&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcSyncProvConfig&lt;br /&gt;
olcOverlay: syncprov&lt;br /&gt;
olcSpCheckpoint: 100 5&lt;br /&gt;
olcSpSessionlog: 100&lt;br /&gt;
&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcSyncRepl&lt;br /&gt;
olcSyncRepl: rid=@RID@&lt;br /&gt;
  provider=ldap://@PROVIDER@&lt;br /&gt;
  binddn=&amp;quot;cn=admin,dc=hcc,dc=nl&amp;quot; bindmethod=simple credentials=&amp;quot;@PASSWORD@&amp;quot;&lt;br /&gt;
  searchbase=&amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
  type=refreshAndPersist&lt;br /&gt;
  interval=00:00:00:10&lt;br /&gt;
  retry=&amp;quot;5 5 300 5&amp;quot;&lt;br /&gt;
  timeout=1&lt;br /&gt;
  starttls=yes&lt;br /&gt;
-&lt;br /&gt;
add: olcMirrorMode&lt;br /&gt;
olcMirrorMode: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
De andere server krijgt ServerID 2 en de provider is het IP adres van de andere server.&lt;br /&gt;
&lt;br /&gt;
===Unique overlay===&lt;br /&gt;
Deze overlay dient er voor te zorgen dat o.a het attribuut hccLogin een unieke waarde bevat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-unique.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module,cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectclass: olcModuleList&lt;br /&gt;
objectclass: top&lt;br /&gt;
olcmoduleload: unique&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=unique,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcUniqueConfig&lt;br /&gt;
olcOverlay: unique&lt;br /&gt;
olcUniqueAttribute: uid uidNumber hccLogin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SSL/TLS beveiliging==&lt;br /&gt;
Gebruik de juiste .pem bestanden in /etc/ssl/certs en /etc/ssl/private.&lt;br /&gt;
&lt;br /&gt;
We maken gebruik van een RapidSSL certificaat. Als dit niet standaard in Ubuntu bekend is, zet dan eerst GeoTrust_RapidSSL_-_ca-bundle.pem in de map /etc/ssl/certs neer. Voer nu een &#039;&#039;&#039;c_rehash .&#039;&#039;&#039; uit in /etc/ssl/certs om de cache te updaten (omdat GeoTrust_RapidSSL_-_ca-bundle.pem nieuw werd toegevoegd). &lt;br /&gt;
&lt;br /&gt;
De ownership is belangrijk. Hiertoe wordt de groep &amp;quot;openldap&amp;quot; toegevoegd aan de groep ssl-cert.&lt;br /&gt;
 adduser openldap ssl-cert&lt;br /&gt;
&lt;br /&gt;
Als dit fout gaat, doe dan eerst:&lt;br /&gt;
 apt-get install ssl-cert&lt;br /&gt;
&lt;br /&gt;
Zet het certificaat en de private key in de juiste groep:&lt;br /&gt;
 chgrp ssl-cert /etc/ssl/private/hobby.nl.*&lt;br /&gt;
 chmod 440      /etc/ssl/private/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
Het resultaat is dan als volgt:&lt;br /&gt;
 root@hcc-ldap-lb1:~# ls -l /etc/ssl/private/hcc* &lt;br /&gt;
 -rw-r--r-- 1 root     ssl-cert 1724 Nov 22 20:47 hobby.nl.crt&lt;br /&gt;
 -r--r----- 1 root     ssl-cert 1679 Nov 22 20:25 hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
 root@hcc-ldap-lb1:~# grep openldap /etc/group&lt;br /&gt;
 ssl-cert:x:114:openldap&lt;br /&gt;
 openldap:x:118:&lt;br /&gt;
&lt;br /&gt;
2020.12.09: Op een nieuwe Ubuntu installatie staat apparmor standaard aan. Weg ermee!&lt;br /&gt;
 apt remove --assume-yes --purge apparmor&lt;br /&gt;
&amp;lt;strike&amp;gt;Per september 2017 staan de certificaten in /disk/site/etc/ssl/hobby.nl, net als op alle andere servers. Omdat apparmor actief is moet deze directory worden toegevoegd aan /etc/apparmor.d/local/usr.sbin.slapd. Die file ziet er dan als volgt uit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Site-specific additions and overrides for usr.sbin.slapd.&lt;br /&gt;
# For more details, please see /etc/apparmor.d/local/README.&lt;br /&gt;
#include &amp;lt;abstractions/ssl_certs&amp;gt;&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/ r,&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/* r,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Openldap ook op poort 636 benaderd wordt (naast TLS op 389), moet in /etc/default/slapd ldaps:/// opgenomen worden bij de SLAPD_SERVICES.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;netstat -an&#039; dient dan 636 te laten zien voor zowel IPv4 als IPv6.&lt;br /&gt;
&lt;br /&gt;
Om de cn=config te zien kan je het volgende commando gebruiken:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config&lt;br /&gt;
&lt;br /&gt;
of, wat botter maar korter:&lt;br /&gt;
cat /etc/ldap/slapd.d/cn\=config.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Backup, initialize, restore==&lt;br /&gt;
Om het hele skelet van ldap in één keer te herstellen dient &#039;&#039;&#039;init_ldap&#039;&#039;&#039; gebruikt te worden. Als argument &#039;&#039;&#039;moet&#039;&#039;&#039; het admin beheer wachtwoord mee gegeven worden.&lt;br /&gt;
&lt;br /&gt;
===lokaal===&lt;br /&gt;
Backups kunnen gemaakt worden terwijl slapd draait maar geadviseerd wordt slapd te stoppen. Voor dumpen moet &#039;&#039;&#039;slapcat&#039;&#039;&#039; gebruikt worden. Backups kunnen gemaakt worden per database of een filter daarop, naar een ldif bestand.&lt;br /&gt;
 slapcat -l hcc-dump.ldif -b &amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
Dit maakt een dump van alles onder &#039;&#039;&#039;dc=hcc,dc=nl&#039;&#039;&#039; naar het bestand hcc-dump.ldif. Ook is het mogelijk het database nummer te gebruiken, config is altijd nummer 0, hdb is gewoonlijk 1.&lt;br /&gt;
&lt;br /&gt;
Het &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; script dumpt alle ou&#039;s in aparte .ldif bestanden; het omgekeerde doet &#039;&#039;&#039;restore_ldap&#039;&#039;&#039;.  &lt;br /&gt;
Terug inlezen kan alleen in een lege directory, dus direct nadat &#039;&#039;&#039;init_ldap&#039;&#039;&#039; is gedaan. Gebruik voor het terugplaatsen &#039;&#039;&#039;slapadd&#039;&#039;&#039;. Aan te bevelen is &#039;&#039;&#039;-c&#039;&#039;&#039; mee te geven zodat ondanks fouten doorgegaan wordt. &lt;br /&gt;
&lt;br /&gt;
Voor slapadd &#039;&#039;&#039;moet&#039;&#039;&#039; 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)&lt;br /&gt;
 /etc/init.d/slapd stop&lt;br /&gt;
 slapadd -l hcc-dump.ldif -w -c &amp;gt;errors.txt&lt;br /&gt;
 chown openldap:openldap /var/lib/ldap/*&lt;br /&gt;
 /etc/init.d/slapd start&lt;br /&gt;
&lt;br /&gt;
===remote===&lt;br /&gt;
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 &#039;&#039;&#039;backup-encrypted&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Recente lokale backups zijn te vinden in &#039;&#039;&#039;/usr/local/hobbynet/tmp&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Verse ldap maken===&lt;br /&gt;
Transactie log bij het toevoegen van b.v. een nieuwe ou:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Op beide servers:&lt;br /&gt;
schema van test server gecopieerd en geactiveerd&lt;br /&gt;
dump-ldap gedraaid&lt;br /&gt;
systemctl stop slapd.service &lt;br /&gt;
&lt;br /&gt;
Er is nu géén ldap service! Werk dus snel...&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb1&lt;br /&gt;
systemctl stop slapd.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
op ldap-lb2:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb2&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
systemctl start slapd.service&lt;br /&gt;
Beide slapd servers zijn in de lucht en moeten synchroniseren.&lt;br /&gt;
&lt;br /&gt;
op beide servers:&lt;br /&gt;
check replicatie (netstat en functioneel)&lt;br /&gt;
&lt;br /&gt;
root@ldap-lb1:/usr/local/hobbynet/bin# netstat -n | grep 389&lt;br /&gt;
tcp        0      0 172.31.8.4:36838        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:36836        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58112        ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58114        ESTABLISHED&lt;br /&gt;
&lt;br /&gt;
Functioneel door met ADS op beide servers in te loggen en een willekeurig veld in je eigen entry te wijzigen op lb1. Kijk of het gebeurd is op lb2 en wijzig het daar terug. Check op de andere server of het gebeurd is. Er kan een zekere vertraging in optreden.&lt;br /&gt;
&lt;br /&gt;
Stel er is een nieuwe ou gemaakt: denk aan het bij werken van de dump en restore scripts.&lt;br /&gt;
&lt;br /&gt;
update dump-ldap.sh en restore-ldap.sh met de nieuwe ou&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
export tarieven.ldif op test server en import op ldap-lb1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==crontab==&lt;br /&gt;
 # script dat updates ophaalt (maar niet installeert), zodat nagios ze ook detecteert&lt;br /&gt;
 0 9 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
==LDAP Clients==&lt;br /&gt;
Er zijn meerdere LDAP clients. De meest populaire zijn Apache Directory Studio (&amp;quot;ADS&amp;quot;) en phpLdapAdmin (&amp;quot;PLA&amp;quot;).&amp;lt;br&amp;gt;&lt;br /&gt;
De eerste is veel uitgbreider maar vereist een Java Runtime Environment (&amp;quot;JRE&amp;quot;). Onder Windows is dat JRE(13) of (open)JDK-(13).&amp;lt;br&amp;gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Binnen Hobbynet wordt uitsluitend gebruik gemaakt van ADS.&lt;br /&gt;
&lt;br /&gt;
===StartTLS===&lt;br /&gt;
Aanbevolen wordt StartTLS op poort 389 te gebruiken. Alternatief is LDAPS op poort 636 maar dat is deprecated. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Windows===&lt;br /&gt;
&amp;lt;i&amp;gt;2019-10-31 HJV: Oude info, als referentie leuk, maar niet meer relevant&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Onder Windows moet met &#039;&#039;&#039;keytool.exe&#039;&#039;&#039; gewerkt worden. De uitleg heb ik van  [http://www.talkingtree.com/blog/index.cfm?mode=entry&amp;amp;entry=25AA75A4-45A6-2844-7CA3EECD842DB576 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:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Haal de benodigde bestanden op (op een Linux systeem):&lt;br /&gt;
wget http://www.cacert.org/certs/root.der -O root.der&lt;br /&gt;
wget http://www.cacert.org/certs/class3.der -O class3.der&lt;br /&gt;
copieer de bestanden naar de Windows omgeving in C:\Program Files (x86)\Java\jre6\lib\security.&lt;br /&gt;
&lt;br /&gt;
Open een commandwindow:&lt;br /&gt;
cd C:\Program Files (x86)\Java\jre6\lib\security&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass1 -file root.der&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass3 -file class3.der&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Linux===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS gebruik===&lt;br /&gt;
ADS kan erg handig zijn voor het snel dumpen van hele ou&#039;s in .ldif formaat. Zo&#039;n dump kan direct op een andere server worden ingelezen.&lt;br /&gt;
&lt;br /&gt;
===PhpLdapAdmin onder Linux===&lt;br /&gt;
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 [http://phpldapadmin.sourceforge.net/wiki/index.php/Server:server:tls phpldapadmin wiki].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# LDAP Defaults&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# See ldap.conf(5) for details&lt;br /&gt;
# This file should be world readable but not world writable.&lt;br /&gt;
&lt;br /&gt;
#BASE   dc=example,dc=com&lt;br /&gt;
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666&lt;br /&gt;
&lt;br /&gt;
#SIZELIMIT      12&lt;br /&gt;
#TIMELIMIT      15&lt;br /&gt;
#DEREF          never&lt;br /&gt;
TLS_CACERT      /etc/ssl/certs/CAcert_org.pem&lt;br /&gt;
TLS_CERT        /etc/ssl/private/hobby.nl.crt&lt;br /&gt;
TLS_KEY         /etc/ssl/private/hobby.nl.key&lt;br /&gt;
TLS_REQCERT     allow&lt;br /&gt;
#TLS_REQCERT never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Denk er wel aan na wijzigingen Apache te herstarten.&lt;br /&gt;
===PAM en NSS via LDAP===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Installeer &#039;&#039;&#039;libnss-ldapd&#039;&#039;&#039; om de benodigde libraries te verkrijgen. Apt-get zal tevens &#039;&#039;&#039;libpam-ldapd&#039;&#039;&#039;, &#039;&#039;&#039;nslcd&#039;&#039;&#039; en &#039;&#039;&#039;nscd&#039;&#039;&#039; binnen brengen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install libnss-ldapd auth-client-config ldap-utils&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
    libpam-ldapd nscd nslcd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Libnss-ldapd is een doorontwikkeling van libnss-ldap en bevat meerdere verbeteringen. Zie: [http://arthurdejong.org/nss-pam-ldapd/ deze site] van de ontwikkelaar. Bij de installatie wordt een user &#039;&#039;&#039;nslcd&#039;&#039;&#039; aangemaakt; denk erom die in de .tmpl bestanden te zetten!&lt;br /&gt;
  &lt;br /&gt;
nsswitch.conf laat zich configureren via &#039;&#039;&#039;auth-client-config&#039;&#039;&#039; maar lac_ldap is alleen aanwezig als &#039;&#039;&#039;ldap-auth-config&#039;&#039;&#039; ook is geinstalleerd. Zo niet gebruik dan de tweede regel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auth-client-config -t nss -p lac_ldap&lt;br /&gt;
auth-client-config -t nss -p ldap_example&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het resultaat is dat nsswitch.conf zowel in files (/etc/passwd etc.) zoekt als in ldap.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nsswitch.conf&lt;br /&gt;
#&lt;br /&gt;
# Example configuration of GNU Name Service Switch functionality.&lt;br /&gt;
# If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
# `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # passwd:         compat&lt;br /&gt;
passwd: files ldap&lt;br /&gt;
# pre_auth-client-config # group:          compat&lt;br /&gt;
group: files ldap&lt;br /&gt;
# pre_auth-client-config # shadow:         compat&lt;br /&gt;
shadow: files ldap&lt;br /&gt;
&lt;br /&gt;
hosts:          files dns&lt;br /&gt;
networks:       files&lt;br /&gt;
&lt;br /&gt;
protocols:      db files&lt;br /&gt;
services:       db files&lt;br /&gt;
ethers:         db files&lt;br /&gt;
rpc:            db files&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # netgroup:       nis&lt;br /&gt;
netgroup: nis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het aanpassen van de PAM bestanden gaat sinds enige releases met &#039;&#039;&#039;pam-auth-update&#039;&#039;&#039;. Kies in het menu voor zowel unix als ldap. Default wordt nu ldap authenticatie gebruikt voor uid &amp;gt;= 1000. Bij Hobbynet willen we vanaf 300 ldap gebruiken. Door een licht gemodificeerde versie van /usr/share/pam-configs/ldap te maken (ldap-hobbynet), kan ook voor de hobbynet instelling gekozen worden. Dit is de ldap-hobbynet versie:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Name: LDAP Authentication (uid&amp;gt;300)&lt;br /&gt;
Default: yes&lt;br /&gt;
Priority: 128&lt;br /&gt;
Auth-Type: Primary&lt;br /&gt;
Auth-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Auth:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 use_first_pass&lt;br /&gt;
Account-Type: Additional&lt;br /&gt;
Account:&lt;br /&gt;
        [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad]        pam_ldap.so minimum_uid=300&lt;br /&gt;
Password-Type: Primary&lt;br /&gt;
Password-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Password:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 try_first_pass&lt;br /&gt;
Session-Type: Additional&lt;br /&gt;
Session:&lt;br /&gt;
        [success=ok default=ignore]     pam_ldap.so minimum_uid=300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dit is in een standaard opzet van LDAP voldoende om zowel lokale gebruikers als gebruikers opgeslagen in LDAP, te laten inloggen en hun password te laten wijzigen. In de Hobbynet setup moet er echter nog meer gebeuren in de ACL&#039;s van de LDAP server configuratie. Omdat Hobbynet de laatste ACL regel heeft gewijzigd in een &#039;&#039;&#039;deny-all&#039;&#039;&#039;, is er een helper of proxy account nodig dat read access heeft of een aantal cruciale velden in de posixAccount objectClass. Zie verder de lsiting van nslcd.conf.&lt;br /&gt;
&lt;br /&gt;
Libnss-ldapd en libpam-ldapd hebben een gezamelijke daemon &#039;&#039;&#039;nslcd&#039;&#039;&#039; die z&#039;n configuratie uit &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039; haalt. Hierin is ook een voorziening voor het helper account. Aan het eind vande &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; staat de voorziening voor host-based login. Als het attribute &#039;&#039;&#039;host&#039;&#039;&#039; de fqdn of alleen de host naam bevat, bepaald dat of inloggen op die host mogelijk is. &#039;&#039;&#039;*&#039;&#039;&#039; staat inloggen op alle hosts toe.&lt;br /&gt;
&lt;br /&gt;
Eventueel kan het daemon proces voor debugging doeleinden ook als command (&#039;&#039;&#039;nslcd -d&#039;&#039;&#039;) gestart worden. Om de bevragingen van de LDAP server wat te verminderen, kan &#039;&#039;&#039;nscd&#039;&#039;&#039; voor caching zorgen. Deze cache daemon heeft zijn eigen configuratie bestand: &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039;. De default instellingen zijn goed; eventueel kan de logging naar een bestand gestuurd worden.&lt;br /&gt;
&lt;br /&gt;
Verbinding met de LDAP server kan met StartTLS beveiligd worden. Hier de inhoud van nslcd.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nslcd.conf&lt;br /&gt;
# nslcd configuration file. See nslcd.conf(5)&lt;br /&gt;
# for details.&lt;br /&gt;
&lt;br /&gt;
# The user and group nslcd should run as.&lt;br /&gt;
uid nslcd&lt;br /&gt;
gid nslcd&lt;br /&gt;
&lt;br /&gt;
# log location and level&lt;br /&gt;
#log /var/log/nslcd.log debug&lt;br /&gt;
&lt;br /&gt;
# The location at which the LDAP server(s) should be reachable.&lt;br /&gt;
uri ldap://ldap2-int.hobby.nl/&lt;br /&gt;
&lt;br /&gt;
# The search base that will be used for all queries.&lt;br /&gt;
base dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# Other base mappings&lt;br /&gt;
base   group  ou=groups,dc=hcc,dc=nl&lt;br /&gt;
base   passwd ou=users,dc=hcc,dc=nl&lt;br /&gt;
base   shadow ou=users,dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# The search scope.&lt;br /&gt;
#scope sub&lt;br /&gt;
&lt;br /&gt;
# The LDAP protocol version to use.&lt;br /&gt;
ldap_version 3&lt;br /&gt;
&lt;br /&gt;
# The DN to bind with for normal lookups.&lt;br /&gt;
#binddn cn=annonymous,dc=example,dc=net&lt;br /&gt;
#bindpw secret&lt;br /&gt;
binddn cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&lt;br /&gt;
bindpw xxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
# The DN used for password modifications by root.&lt;br /&gt;
#rootpwmoddn cn=admin,dc=example,dc=com&lt;br /&gt;
&lt;br /&gt;
# SSL options&lt;br /&gt;
ssl off&lt;br /&gt;
ssl start_tls&lt;br /&gt;
#tls_reqcert never&lt;br /&gt;
tls_cacertfile /etc/ssl/certs/cacert.org.pem&lt;br /&gt;
#tls_cert /etc/ssl/private/server.crt&lt;br /&gt;
#tls_key /etc/ssl/private/server.key&lt;br /&gt;
&lt;br /&gt;
# The minimum uid&lt;br /&gt;
nss_min_uid 300&lt;br /&gt;
&lt;br /&gt;
pam_authz_search (&amp;amp;(objectClass=posixAccount)(uid=$username)(|(host=$hostname)(host=$fqdn)(host=\\*)))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===users en groepen toevoegen===&lt;br /&gt;
Hiervoor moet &#039;&#039;&#039;ldapscripts&#039;&#039;&#039; zijn geïnstalleerd. Dit is het geval op de ldap-lb1 server. Dat levert de volgende extra commando&#039;s op:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldaprenamemachine&lt;br /&gt;
ldapadduser&lt;br /&gt;
ldapdeleteuserfromgroup&lt;br /&gt;
ldapfinger&lt;br /&gt;
ldapid&lt;br /&gt;
ldapgid&lt;br /&gt;
ldapmodifyuser&lt;br /&gt;
ldaprenameuser&lt;br /&gt;
lsldap&lt;br /&gt;
ldapaddusertogroup&lt;br /&gt;
ldapsetpasswd&lt;br /&gt;
ldapinit&lt;br /&gt;
ldapaddgroup&lt;br /&gt;
ldapdeletegroup&lt;br /&gt;
ldapmodifygroup&lt;br /&gt;
ldapdeletemachine&lt;br /&gt;
ldaprenamegroup&lt;br /&gt;
ldapaddmachine&lt;br /&gt;
ldapmodifymachine&lt;br /&gt;
ldapsetprimarygroup&lt;br /&gt;
ldapdeleteuser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Meest gebruikt zijn &#039;&#039;&#039;ldapaddgroup, ldapadduser, ldapsetpasswd&#039;&#039;&#039;.  &lt;br /&gt;
Er zijn manpages maar er is ook uitgebreide uitleg in de [https://help.ubuntu.com/14.04/serverguide/openldap-server.html Ubuntu server guide]. Omdat wij het automatisch maken van de home dir uit hebben staan, moet die met de hand aangemaakt worden en moet de owner goed gezet worden.&lt;br /&gt;
&lt;br /&gt;
===host-based login===&lt;br /&gt;
Met een kleine uitbreiding in het schema van de LDAP server, kan host-based login gerealiseerd worden. Ook in de &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; is een uitbreiding nodig.&lt;br /&gt;
&lt;br /&gt;
In de LDAP server dient de objectClass &#039;&#039;&#039;hostObject&#039;&#039;&#039; aan de entries in de ou=users toegevoegd te worden. Deze (auxilary) objectClass brengt slechts één attribute met zich mee: &#039;&#039;&#039;host&#039;&#039;&#039;. De regel in nslcd.conf checkt of één van de waarden van &#039;&#039;&#039;host&#039;&#039;&#039; gelijk is aan de naam van de server waarop ingelogd wordt. De waarde &#039;&#039;&#039;*&#039;&#039;&#039; geldt als wildcard. Zie de regel &#039;&#039;&lt;br /&gt;
&#039;pam_authz_search&#039;&#039;&#039;&#039; in &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Password aanpassen===&lt;br /&gt;
Via LDAP ingelogde gebruikers kunnen net als lokale gebruikers hun wachtwoord met &#039;&#039;&#039;passwd&#039;&#039;&#039; wijzigen. Wel moet aan de eisen in de LDAP ppolicy module voldaan worden.&lt;br /&gt;
&lt;br /&gt;
==PHP scripting==&lt;br /&gt;
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 &#039;&#039;&#039;/usr/local/hobbynet/bin&#039;&#039;&#039; directory.&lt;br /&gt;
Voor de php-scripting zijn enkele php7.x pakketten nodig. Installeer deze met apt-get. Het gaat om:&lt;br /&gt;
* php-cli&lt;br /&gt;
* php-ldap&lt;br /&gt;
&lt;br /&gt;
== Apache authenticatie via LDAP ==&lt;br /&gt;
In plaats van .htpassword authenticatie, kan ook LDAP gebruikt worden. Activeer daartoe de Apache module&lt;br /&gt;
&#039;authnz_ldap&#039;.&lt;br /&gt;
 a2enmod authnz_ldap&lt;br /&gt;
Denk er om dat dit in een loadbalanced situatie op beide servers gedaan dient te worden!&lt;br /&gt;
&lt;br /&gt;
=== Voorbeeld van een LDAP configuratie in de Apache config ===&lt;br /&gt;
(alleen als voorbeeld, niet zo gebruiken!)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# // 1) Hobbynet webmaster&lt;br /&gt;
# // 2) Vraagbaak medewerker van een willekeurige groepering&lt;br /&gt;
# (|(hccRol=*#VRBK)(hccRol=HN#WM))&lt;br /&gt;
  &amp;lt;Location &amp;quot;/apps/vraagbaak&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;RequireAll&amp;gt;&lt;br /&gt;
      Authname &amp;quot;HCC!vraagbaak (gebruik uw hcc.nl gebruikersnaam/wachtwoord)&amp;quot;&lt;br /&gt;
      AuthType Basic&lt;br /&gt;
      AuthBasicProvider ldap&lt;br /&gt;
      AuthLDAPUrl ldap://hcc-ldap-int.hobby.nl/ou=leden,dc=hcc,dc=nl?hccLogin??(|(hccRol=*#VRBK)(hccRol=HN#WM))(hccProfiel=TRUE) TLS&lt;br /&gt;
      require valid-user&lt;br /&gt;
    &amp;lt;/RequireAll&amp;gt;&lt;br /&gt;
  &amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hoe kan LDAP veilig gebruikt worden vanuit Apache===&lt;br /&gt;
Zet een script neer in de gebruikersomgeving, en gebruik mod_authz_external. Doe de controle vervolgens via de XML-RPC server.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zie [[Kadernet]] voor een voorbeeld.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== TODO lijst ==&lt;br /&gt;
&#039;&#039;Dit is een lijst in wording, graag aanvullen&#039;&#039; &lt;br /&gt;
* &#039;dun&#039; loadbalancer script maken om te controleren dat LDAP echt luistert&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79053</id>
		<title>LDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79053"/>
		<updated>2020-12-10T20:58:51Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* Locatie bestanden */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introductie==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==LDAP server keuze==&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Loadbalanced==&lt;br /&gt;
Er zijn twee servers (ldap-lb1 en ldap-lb2) die achter een loadbalancer in preferred server mode staan 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.&lt;br /&gt;
&lt;br /&gt;
Tevens zijn er een test en een development server: ldap-test en ldap-dev.&lt;br /&gt;
&lt;br /&gt;
==Installatie==&lt;br /&gt;
Installatie van OpenLDAP is simpel:&lt;br /&gt;
 aptitude install slapd ldap-utils&lt;br /&gt;
Omdat er gebruikgemaakt wordt van php scripts, is het ook nodig &#039;&#039;&#039;php-cli&#039;&#039;&#039; en &#039;&#039;&#039;php-ldap&#039;&#039;&#039; te installeren. De configuratie van OpenLDAP is sinds Karmic Koala iets gecompliceerder geworden. &#039;cn=config&#039; 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 &amp;quot;dpkg-reconfigure slapd&amp;quot; zet alleen de skeleton configuratie terug. Je moet zelf de database, root dn en acl&#039;s opzetten (als root of met sudo). Run  &#039;&#039;&#039;dpkg-reconfigure slapd&#039;&#039;&#039; om terug te gaan naar een lege directory. &lt;br /&gt;
&lt;br /&gt;
De volgende pakketten dienen geïnstalleerd te zijn (&#039;php -m&#039; toont de geactiveerde modules):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontbrekende pakketten volgens hjv:&lt;br /&gt;
&lt;br /&gt;
apt-get install aptitude &lt;br /&gt;
apt-get install phpmyadmin&lt;br /&gt;
apt-get install php-mbstring&lt;br /&gt;
apt-get install php-gettext&lt;br /&gt;
apt-get install php-xmlrpc&lt;br /&gt;
apt-get install php-ldap&lt;br /&gt;
apt-get install mysql-server&lt;br /&gt;
apt-get install ldapscripts&lt;br /&gt;
apt-get install php-xml&lt;br /&gt;
apt-get install slapd&lt;br /&gt;
apt-get install ldap-utils&lt;br /&gt;
a2enmod ssl&lt;br /&gt;
&lt;br /&gt;
- apache2ctl restart&lt;br /&gt;
&lt;br /&gt;
- openldap moet lid zijn van de groep ssl-cert!&lt;br /&gt;
apt-get install ssl-cert&lt;br /&gt;
adduser openldap ssl-cert&lt;br /&gt;
(of vi /etc/group&lt;br /&gt;
    ssl-cert:x:116:openldap)&lt;br /&gt;
&lt;br /&gt;
- Zorg dat de LDAP daemon bij de certificaten kan komen. &lt;br /&gt;
LET OP: op alle hobbynet servers staan de certificaten in /disk/site/etc/ssl/hobby.nl/&lt;br /&gt;
 chgrp ssl-cert /disk/site/etc/ssl/hobby.nl/hobby.nl.*&lt;br /&gt;
 chmod 440      /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
- mysql laat het bestand ibdata1 ongelimiteerd groeien (InnoDB bestanden)&lt;br /&gt;
 /etc/mysql/mysql.conf.d/innodb_file_per_table.cnf&lt;br /&gt;
 [mysql]&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
&lt;br /&gt;
=============&lt;br /&gt;
Nog meer Hobbynet aanpassingen&lt;br /&gt;
/etc/bash.bashrc&lt;br /&gt;
export http_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export https_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export ftp_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Locatie bestanden===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Alle ldif em tmpl bestanden gaan naar /usr/local/hobbynet/lib&lt;br /&gt;
* init_ldap en andere scripts gaan naar /usr/local/hobbynet/bin&lt;br /&gt;
* alle data bestanden (dumps) en update ldifs gaan naar /usr/local/hobbynet/data&lt;br /&gt;
* etc/ldap/schema/hcc_schema.* gaan naar /etc/ldap/schema&lt;br /&gt;
* etc/ldap/schema/ppolicy.ldif gaat naar /etc/ldap/schema&lt;br /&gt;
&lt;br /&gt;
hcc_schema.ldif wordt middels een script gemaakt. Dit script plaatst de ldif bestand(en) in /etc/ldap/schema&lt;br /&gt;
&lt;br /&gt;
==Initiële database==&lt;br /&gt;
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&#039;s) erin. Alleen zijn er geen leden geladen in de ou=leden en ou=inactieve_leden.&lt;br /&gt;
===slapd.init.ldif ===&lt;br /&gt;
Bij installatie/reconfiguratie wordt /usr/share/slapd/slapd.init.ldif ingelezen. Zie aldaar indien nodig.&lt;br /&gt;
&lt;br /&gt;
==init_ldap script==&lt;br /&gt;
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 &#039;&#039;&#039;cn=admin,dc=hcc,dc=nl&#039;&#039;&#039; 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 &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; laadt vervolgens de laatste dump terug. Bij wijzigingen aan het schema is het raadzaam altijd een &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; te doen zodat een later een actuele dump kan worden teruggeladen.&lt;br /&gt;
&lt;br /&gt;
Het (plain text) password van cn=admin,dc=hcc,dc=nl moet bij het aanroepen van &#039;&#039;&#039;init_ldap&#039;&#039;&#039; op de commandline worden meegegeven. Tijdens de dpkg-reconfigure moet het password nog 2x gegeven worden. Lees eventueel ook de [http://www.openldap.org/doc/admin/ OpenLDAP Admin Guide].&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* voorbereidingen om &amp;quot;dpkg-reconfigure slapd&amp;quot; te draaien&lt;br /&gt;
* definities van input files&lt;br /&gt;
* check host&lt;br /&gt;
* bouwen van het skelet van de nieuwe directory&lt;br /&gt;
Zie voor details van de scripts &#039;&#039;&#039;init_ldap&#039;&#039;&#039;, &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; en &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; op een van de servers (in /usr/local/hobbynet/bin).&lt;br /&gt;
&lt;br /&gt;
==onderdelen van init_ldap==&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===add-schema.ldif===&lt;br /&gt;
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. &lt;br /&gt;
* Hiertoe wordt het onderstaande schema in /etc/ldap/schema geplaatst als hcc_schema.schema. &lt;br /&gt;
* Vervolgens worden de stappen uitgevoerd zoals beschreven in de [https://help.ubuntu.com/11.10/serverguide/C/openldap-server.html Ubuntu Server guide], onder &#039;&#039;&#039;Modifying the slapd Configuration Database&#039;&#039;&#039;. &lt;br /&gt;
* De resulterende output file &#039;&#039;&#039;cn=hcc_schema.ldif&#039;&#039;&#039; moet dan nog naar /etc/ldap/schema/hcc_schema.ldif gecopieerd worden. &lt;br /&gt;
Als dit proces herhaald moet worden, start dan met een lege output directory en verwijder een eventueel achtergebleven cn=hcc_schema.ldif bestand. &lt;br /&gt;
&lt;br /&gt;
De extra schema&#039;s worden middels een &#039;&#039;&#039;include&#039;&#039;&#039; toegevoegd. &#039;&#039;&#039;Ppolicy&#039;&#039;&#039; is op gelijke wijze als &#039;&#039;&#039;hcc_schema&#039;&#039;&#039; tot .ldif geconverteerd. Alle stappen om een nieuwe &#039;&#039;&#039;hcc-schema.ldif&#039;&#039;&#039; te maken zijn gescript in &#039;&#039;&#039;upd_schema&#039;&#039;&#039;. In &#039;&#039;&#039;init_ldap&#039;&#039;&#039; wordt het eigen schema en de password policy geladen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-schema.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
include: file:///etc/ldap/schema/hcc_schema.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ppolicy.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ldapns.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====schema updates====&lt;br /&gt;
Soms wordt een attribute toegevoegd of gewijzigd. Hiertoe dient het bestand hcc_schema.schema in /usr/local/hobbynet/etc/ldap/schema, gewijzigd te worden. Daarna dient er een ldif versie van gemaakt te worden. Gebruik hiervoor &#039;&#039;&#039;upd_schema.sh&#039;&#039;&#039; in dezelfde directory. De resulterende hcc_schema.ldif wordt in dit script naar /etc/ldap/schema gecopieërd. Bij grote wijzigingen is het aan te bevelen door de hele rebuild cycle te gaan (dump, init, restore). Bij triviale aanpassingen zou hcc_schema.ldif ook &#039;&#039;&#039;direct&#039;&#039;&#039; in de actieve directory geplaatst kunnen worden, gevolgd door slechts een &#039;&#039;&#039;service slapd restart&#039;&#039;&#039;. Gebruik hiervoor (blijf in de lokale schema directory):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp &amp;quot;ldif_output/cn=config/cn=schema/cn={14}hcc_schema.ldif&amp;quot; &amp;quot;/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}hcc_schema.ldif&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
LET OP: De nummers tussen accolades zijn bepaald door de volgorde van andere scripts! Zolang geen andere schema&#039;s worden toegevoegd zullen ze niet veranderen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ook kan met de ldap-tools gewerkt worden. Gebruik ldapsearch en ldapmodify, eventueel met de -f optie om een voorbereide serie opdrachten uit te voeren. Gebruik ldapsearch om eerst de structuur te vinden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier een voorbeeld om een objectClass aan te passen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat pas_aan.ldif&lt;br /&gt;
dn: cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
delete: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description ) )&lt;br /&gt;
-&lt;br /&gt;
add: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description $ hccIg ) )&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
$sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f pas_aan.ldif &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_config.ldif===&lt;br /&gt;
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 &#039;&#039;&#039;STATS&#039;&#039;&#039; gezet. Dit geeft niet teveel logging maar is toch goed bruikbaar. Om extra logging te krijgen op b.v. ACL&#039;s, verander olcLogLevel dan in &amp;quot;stats ACL&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Dit template wordt tijdens het draaien van het init_ldap script gecopieerd naar modify-config.ldif. Eventueel kan met place holders gewerkt worden (@...@), dit om op alle servers (ook test servers) één en hetzelfde script te kunnen gebruiken. Er zijn nog enkele van deze templates. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## modify-config.hobbynet            ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
replace: olcLogLevel&lt;br /&gt;
olcLogLevel: stats&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCACertificateFile&lt;br /&gt;
olcTLSCACertificateFile: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCertificateFile&lt;br /&gt;
olcTLSCertificateFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCertificateKeyFile&lt;br /&gt;
olcTLSCertificateKeyFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Om de logging in een apart bestand te krijgen moet in /etc/rsyslog.d een extra bestand &#039;&#039;&#039;openldap.conf&#039;&#039;&#039; geplaatst worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local4.*   -/var/log/openldap.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Tevens willen we logrotate op dit bestand. Plaats in /etc/logrotate.d het bestand &#039;&#039;&#039;openldap&#039;&#039;&#039; met de volgende inhoud&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/log/openldap.log&lt;br /&gt;
{&lt;br /&gt;
        rotate 4&lt;br /&gt;
        weekly&lt;br /&gt;
        missingok&lt;br /&gt;
        notifempty&lt;br /&gt;
        compress&lt;br /&gt;
        delaycompress&lt;br /&gt;
        sharedscripts&lt;br /&gt;
        postrotate&lt;br /&gt;
                reload rsyslog &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 || true&lt;br /&gt;
        endscript&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify-hdb.ldif===&lt;br /&gt;
Hier worden de wijzigingen op de backend db gemaakt. Er worden een aantal attributes ge-indexeerd en de search SizeLimit wordt op &#039;&#039;&#039;unlimited&#039;&#039;&#039; gezet. De waarden die in DB_CONFIG moeten komen (Berkely DB parameters) staan ook in dit bestand. Deze versie is outdated. De ACL regels zijn drastisch gewijzigd. Raadpleeg altijd de laatste versie op de server zelf.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## modify-hdb.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
replace: olcAccess&lt;br /&gt;
#&lt;br /&gt;
# hobbynetlogin heeft lees rechten op ou=users&lt;br /&gt;
olcAccess: to attrs=@posixAccount,@posixGroup,@shadowAccount,@hostObject&lt;br /&gt;
  by dn=&amp;quot;cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# drupal/test moet hccOptIn kunnen schrijven vanaf de&lt;br /&gt;
# profiel pagina. Overige klanten kunnen hccOptin&lt;br /&gt;
# alleen lezen. self mag schrijven&lt;br /&gt;
olcAccess: to attrs=hccOptIn&lt;br /&gt;
  by self write&lt;br /&gt;
  by dn=&amp;quot;cn=drupal-hcc-nl,ou=klanten,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# anonieme klanten moeten kunnen inloggen&lt;br /&gt;
# en mogen hun eigen password wijzigen&lt;br /&gt;
olcAccess: to attrs=userPassword,shadowLastChange&lt;br /&gt;
  by self write&lt;br /&gt;
  by anonymous auth&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# user mag enkele eigen attr wijzigen&lt;br /&gt;
olcAccess: to attrs=hccLogin,hccPseudoniem,hccKaderPassword&lt;br /&gt;
  by self write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# beheerders hebben schrijfrechten op alles (updateDN)&lt;br /&gt;
# klanten hebben alleen lees rechten op alles (readDN)&lt;br /&gt;
# self mag  lezen&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by self read&lt;br /&gt;
  by dn=&amp;quot;cn=xml-hoge-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn=&amp;quot;cn=xml-lage-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by dn.one=&amp;quot;ou=beheer,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn.one=&amp;quot;ou=klanten,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# helpdesk heeft leesrechten op ou=leden&lt;br /&gt;
olcAccess: to attrs=@hccOrgPerson,@hccKaderFunctie&lt;br /&gt;
  by dn.one=&amp;quot;ou=helpdesk,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# partners mogen een paar attrs lezen&lt;br /&gt;
olcAccess: to attrs=hccLidNummer,hccPostcode,hccPostcodeZoekveld&lt;br /&gt;
  by dn.one=&amp;quot;ou=partners,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
#&lt;br /&gt;
# iedereen moet (pseudo attr) entry en objectClass kunnen lezen&lt;br /&gt;
olcAccess: to attrs=entry,objectClass&lt;br /&gt;
  by * read&lt;br /&gt;
#&lt;br /&gt;
# vangnet: blokkeer alle toegang tot de overige attrs.&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by * none&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbDirectory&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
-&lt;br /&gt;
replace: olcSizeLimit&lt;br /&gt;
olcSizeLimit: 100000&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbCachesize&lt;br /&gt;
olcDbCachesize: 200000&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbCheckpoint&lt;br /&gt;
olcDbCheckpoint: 1024 5&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbConfig&lt;br /&gt;
olcDbConfig: set_cachesize 0 536870912 0&lt;br /&gt;
olcDbConfig: set_lk_max_objects 1000&lt;br /&gt;
olcDbConfig: set_lk_max_locks 1000&lt;br /&gt;
olcDbConfig: set_lk_max_lockers 1000&lt;br /&gt;
olcDbConfig: set_flags DB_LOG_AUTOREMOVE&lt;br /&gt;
olcDbConfig: set_flags DB_TXN_NOSYNC&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbIDLcacheSize&lt;br /&gt;
olcDbIDLcacheSize: 600000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_index.ldif===&lt;br /&gt;
Een kale configuratie is heel snel voor wat betreft het opnieuw vullen met gegevens. Bij het aanmaken van een verse LDAP database worden er dan ook zo min mogelijk indexen aangemaakt.&amp;lt;br&amp;gt;&lt;br /&gt;
Zodra de inhoud is ingelezen kunnen de &#039;echte&#039; indexen aangemaakt worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## modify-index.ldif                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
replace: olcDbIndex&lt;br /&gt;
olcDbIndex: default pres,eq&lt;br /&gt;
olcDbIndex: objectClass,entryUUID,entryCSN eq&lt;br /&gt;
olcDbIndex: hccLidNummer,hccLogin,hccForumLogin eq&lt;br /&gt;
olcDbIndex: uid,uidNumber,gidNumber,memberUid,member eq&lt;br /&gt;
olcDbIndex: cn,host,hccPseudoniem,hccOptin,hccLocatie eq&lt;br /&gt;
olcDbIndex: sn,hccPostcodeZoekveld,hccIg,hccRegio eq,subfinal&lt;br /&gt;
olcDbIndex: hccRol,hccBezoek eq,pres,subfinal&lt;br /&gt;
olcDbIndex: hccBulletins pres&lt;br /&gt;
olcDbIndex: aboNummer eq&lt;br /&gt;
olcDbIndex: aboPostcodeZoekveld eq,subfinal&lt;br /&gt;
olcDbIndex: mail,mailHccnet,hccKaderMail pres,eq&lt;br /&gt;
olcDbIndex: hccProfiel pres&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ppolicy overlay===&lt;br /&gt;
* vanuit LDAP de minimale lengte van een wachtwoord afdwingen&lt;br /&gt;
* in LDAP SSHA versleuteling activeren&amp;lt;br&amp;gt;&lt;br /&gt;
(olcPPolicyHashCleartext: TRUE)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-ppolicy.ldif                  ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module, cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectClass: olcModuleList&lt;br /&gt;
objectClass: top&lt;br /&gt;
olcModuleLoad: ppolicy&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=ppolicy,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcPPolicyConfig&lt;br /&gt;
olcOverlay: ppolicy&lt;br /&gt;
olcPPolicyDefault: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
olcPPolicyUseLockout: TRUE&lt;br /&gt;
olcPPolicyHashCleartext: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The default ppolicy looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dn: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
objectClass: pwdPolicy&lt;br /&gt;
objectClass: device&lt;br /&gt;
cn: default&lt;br /&gt;
pwdCheckQuality: 1&lt;br /&gt;
pwdMinLength: 8&lt;br /&gt;
pwdAttribute: 2.5.4.35&lt;br /&gt;
pwdAllowUserChange: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Syncrepl overlay===&lt;br /&gt;
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 [http://www.openldap.org/doc/admin/ LDAP Admin Guide]. &#039;&#039;&#039;Mirror configuratie is specifiek per server!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-syncrepl.tmpl                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
replace: olcServerID&lt;br /&gt;
olcServerID: @SID@&lt;br /&gt;
&lt;br /&gt;
dn: cn=module{0},cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcModuleLoad&lt;br /&gt;
olcModuleLoad: syncprov&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcSyncProvConfig&lt;br /&gt;
olcOverlay: syncprov&lt;br /&gt;
olcSpCheckpoint: 100 5&lt;br /&gt;
olcSpSessionlog: 100&lt;br /&gt;
&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcSyncRepl&lt;br /&gt;
olcSyncRepl: rid=@RID@&lt;br /&gt;
  provider=ldap://@PROVIDER@&lt;br /&gt;
  binddn=&amp;quot;cn=admin,dc=hcc,dc=nl&amp;quot; bindmethod=simple credentials=&amp;quot;@PASSWORD@&amp;quot;&lt;br /&gt;
  searchbase=&amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
  type=refreshAndPersist&lt;br /&gt;
  interval=00:00:00:10&lt;br /&gt;
  retry=&amp;quot;5 5 300 5&amp;quot;&lt;br /&gt;
  timeout=1&lt;br /&gt;
  starttls=yes&lt;br /&gt;
-&lt;br /&gt;
add: olcMirrorMode&lt;br /&gt;
olcMirrorMode: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
De andere server krijgt ServerID 2 en de provider is het IP adres van de andere server.&lt;br /&gt;
&lt;br /&gt;
===Unique overlay===&lt;br /&gt;
Deze overlay dient er voor te zorgen dat o.a het attribuut hccLogin een unieke waarde bevat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-unique.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module,cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectclass: olcModuleList&lt;br /&gt;
objectclass: top&lt;br /&gt;
olcmoduleload: unique&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=unique,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcUniqueConfig&lt;br /&gt;
olcOverlay: unique&lt;br /&gt;
olcUniqueAttribute: uid uidNumber hccLogin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SSL/TLS beveiliging==&lt;br /&gt;
Gebruik de juiste .pem bestanden in /etc/ssl/certs en /etc/ssl/private.&lt;br /&gt;
&lt;br /&gt;
We maken gebruik van een RapidSSL certificaat. Als dit niet standaard in Ubuntu bekend is, zet dan eerst GeoTrust_RapidSSL_-_ca-bundle.pem in de map /etc/ssl/certs neer. Voer nu een &#039;&#039;&#039;c_rehash .&#039;&#039;&#039; uit in /etc/ssl/certs om de cache te updaten (omdat GeoTrust_RapidSSL_-_ca-bundle.pem nieuw werd toegevoegd). &lt;br /&gt;
&lt;br /&gt;
De ownership is belangrijk. Hiertoe wordt de groep &amp;quot;openldap&amp;quot; toegevoegd aan de groep ssl-cert.&lt;br /&gt;
 adduser openldap ssl-cert&lt;br /&gt;
&lt;br /&gt;
Als dit fout gaat, doe dan eerst:&lt;br /&gt;
 apt-get install ssl-cert&lt;br /&gt;
&lt;br /&gt;
Zet het certificaat en de private key in de juiste groep:&lt;br /&gt;
 chgrp ssl-cert /etc/ssl/private/hobby.nl.*&lt;br /&gt;
 chmod 440      /etc/ssl/private/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
Het resultaat is dan als volgt:&lt;br /&gt;
 root@hcc-ldap-lb1:~# ls -l /etc/ssl/private/hcc* &lt;br /&gt;
 -rw-r--r-- 1 root     ssl-cert 1724 Nov 22 20:47 hobby.nl.crt&lt;br /&gt;
 -r--r----- 1 root     ssl-cert 1679 Nov 22 20:25 hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
 root@hcc-ldap-lb1:~# grep openldap /etc/group&lt;br /&gt;
 ssl-cert:x:114:openldap&lt;br /&gt;
 openldap:x:118:&lt;br /&gt;
&lt;br /&gt;
2020.12.09: Op een nieuwe Ubuntu installatie staat apparmor standaard aan. Weg ermee!&lt;br /&gt;
 apt remove --assume-yes --purge apparmor&lt;br /&gt;
&amp;lt;strike&amp;gt;Per september 2017 staan de certificaten in /disk/site/etc/ssl/hobby.nl, net als op alle andere servers. Omdat apparmor actief is moet deze directory worden toegevoegd aan /etc/apparmor.d/local/usr.sbin.slapd. Die file ziet er dan als volgt uit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Site-specific additions and overrides for usr.sbin.slapd.&lt;br /&gt;
# For more details, please see /etc/apparmor.d/local/README.&lt;br /&gt;
#include &amp;lt;abstractions/ssl_certs&amp;gt;&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/ r,&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/* r,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Openldap ook op poort 636 benaderd wordt (naast TLS op 389), moet in /etc/default/slapd ldaps:/// opgenomen worden bij de SLAPD_SERVICES.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;netstat -an&#039; dient dan 636 te laten zien voor zowel IPv4 als IPv6.&lt;br /&gt;
&lt;br /&gt;
Om de cn=config te zien kan je het volgende commando gebruiken:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config&lt;br /&gt;
&lt;br /&gt;
of, wat botter maar korter:&lt;br /&gt;
cat /etc/ldap/slapd.d/cn\=config.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Backup, initialize, restore==&lt;br /&gt;
Om het hele skelet van ldap in één keer te herstellen dient &#039;&#039;&#039;init_ldap&#039;&#039;&#039; gebruikt te worden. Als argument &#039;&#039;&#039;moet&#039;&#039;&#039; het admin beheer wachtwoord mee gegeven worden.&lt;br /&gt;
&lt;br /&gt;
===lokaal===&lt;br /&gt;
Backups kunnen gemaakt worden terwijl slapd draait maar geadviseerd wordt slapd te stoppen. Voor dumpen moet &#039;&#039;&#039;slapcat&#039;&#039;&#039; gebruikt worden. Backups kunnen gemaakt worden per database of een filter daarop, naar een ldif bestand.&lt;br /&gt;
 slapcat -l hcc-dump.ldif -b &amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
Dit maakt een dump van alles onder &#039;&#039;&#039;dc=hcc,dc=nl&#039;&#039;&#039; naar het bestand hcc-dump.ldif. Ook is het mogelijk het database nummer te gebruiken, config is altijd nummer 0, hdb is gewoonlijk 1.&lt;br /&gt;
&lt;br /&gt;
Het &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; script dumpt alle ou&#039;s in aparte .ldif bestanden; het omgekeerde doet &#039;&#039;&#039;restore_ldap&#039;&#039;&#039;.  &lt;br /&gt;
Terug inlezen kan alleen in een lege directory, dus direct nadat &#039;&#039;&#039;init_ldap&#039;&#039;&#039; is gedaan. Gebruik voor het terugplaatsen &#039;&#039;&#039;slapadd&#039;&#039;&#039;. Aan te bevelen is &#039;&#039;&#039;-c&#039;&#039;&#039; mee te geven zodat ondanks fouten doorgegaan wordt. &lt;br /&gt;
&lt;br /&gt;
Voor slapadd &#039;&#039;&#039;moet&#039;&#039;&#039; 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)&lt;br /&gt;
 /etc/init.d/slapd stop&lt;br /&gt;
 slapadd -l hcc-dump.ldif -w -c &amp;gt;errors.txt&lt;br /&gt;
 chown openldap:openldap /var/lib/ldap/*&lt;br /&gt;
 /etc/init.d/slapd start&lt;br /&gt;
&lt;br /&gt;
===remote===&lt;br /&gt;
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 &#039;&#039;&#039;backup-encrypted&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Recente lokale backups zijn te vinden in &#039;&#039;&#039;/usr/local/hobbynet/tmp&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Verse ldap maken===&lt;br /&gt;
Transactie log bij het toevoegen van b.v. een nieuwe ou:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Op beide servers:&lt;br /&gt;
schema van test server gecopieerd en geactiveerd&lt;br /&gt;
dump-ldap gedraaid&lt;br /&gt;
systemctl stop slapd.service &lt;br /&gt;
&lt;br /&gt;
Er is nu géén ldap service! Werk dus snel...&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb1&lt;br /&gt;
systemctl stop slapd.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
op ldap-lb2:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb2&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
systemctl start slapd.service&lt;br /&gt;
Beide slapd servers zijn in de lucht en moeten synchroniseren.&lt;br /&gt;
&lt;br /&gt;
op beide servers:&lt;br /&gt;
check replicatie (netstat en functioneel)&lt;br /&gt;
&lt;br /&gt;
root@ldap-lb1:/usr/local/hobbynet/bin# netstat -n | grep 389&lt;br /&gt;
tcp        0      0 172.31.8.4:36838        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:36836        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58112        ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58114        ESTABLISHED&lt;br /&gt;
&lt;br /&gt;
Functioneel door met ADS op beide servers in te loggen en een willekeurig veld in je eigen entry te wijzigen op lb1. Kijk of het gebeurd is op lb2 en wijzig het daar terug. Check op de andere server of het gebeurd is. Er kan een zekere vertraging in optreden.&lt;br /&gt;
&lt;br /&gt;
Stel er is een nieuwe ou gemaakt: denk aan het bij werken van de dump en restore scripts.&lt;br /&gt;
&lt;br /&gt;
update dump-ldap.sh en restore-ldap.sh met de nieuwe ou&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
export tarieven.ldif op test server en import op ldap-lb1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==crontab==&lt;br /&gt;
 # script dat updates ophaalt (maar niet installeert), zodat nagios ze ook detecteert&lt;br /&gt;
 0 9 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
==LDAP Clients==&lt;br /&gt;
Er zijn meerdere LDAP clients. De meest populaire zijn Apache Directory Studio (&amp;quot;ADS&amp;quot;) en phpLdapAdmin (&amp;quot;PLA&amp;quot;).&amp;lt;br&amp;gt;&lt;br /&gt;
De eerste is veel uitgbreider maar vereist een Java Runtime Environment (&amp;quot;JRE&amp;quot;). Onder Windows is dat JRE(13) of (open)JDK-(13).&amp;lt;br&amp;gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Binnen Hobbynet wordt uitsluitend gebruik gemaakt van ADS.&lt;br /&gt;
&lt;br /&gt;
===StartTLS===&lt;br /&gt;
Aanbevolen wordt StartTLS op poort 389 te gebruiken. Alternatief is LDAPS op poort 636 maar dat is deprecated. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Windows===&lt;br /&gt;
&amp;lt;i&amp;gt;2019-10-31 HJV: Oude info, als referentie leuk, maar niet meer relevant&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Onder Windows moet met &#039;&#039;&#039;keytool.exe&#039;&#039;&#039; gewerkt worden. De uitleg heb ik van  [http://www.talkingtree.com/blog/index.cfm?mode=entry&amp;amp;entry=25AA75A4-45A6-2844-7CA3EECD842DB576 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:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Haal de benodigde bestanden op (op een Linux systeem):&lt;br /&gt;
wget http://www.cacert.org/certs/root.der -O root.der&lt;br /&gt;
wget http://www.cacert.org/certs/class3.der -O class3.der&lt;br /&gt;
copieer de bestanden naar de Windows omgeving in C:\Program Files (x86)\Java\jre6\lib\security.&lt;br /&gt;
&lt;br /&gt;
Open een commandwindow:&lt;br /&gt;
cd C:\Program Files (x86)\Java\jre6\lib\security&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass1 -file root.der&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass3 -file class3.der&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Linux===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS gebruik===&lt;br /&gt;
ADS kan erg handig zijn voor het snel dumpen van hele ou&#039;s in .ldif formaat. Zo&#039;n dump kan direct op een andere server worden ingelezen.&lt;br /&gt;
&lt;br /&gt;
===PhpLdapAdmin onder Linux===&lt;br /&gt;
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 [http://phpldapadmin.sourceforge.net/wiki/index.php/Server:server:tls phpldapadmin wiki].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# LDAP Defaults&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# See ldap.conf(5) for details&lt;br /&gt;
# This file should be world readable but not world writable.&lt;br /&gt;
&lt;br /&gt;
#BASE   dc=example,dc=com&lt;br /&gt;
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666&lt;br /&gt;
&lt;br /&gt;
#SIZELIMIT      12&lt;br /&gt;
#TIMELIMIT      15&lt;br /&gt;
#DEREF          never&lt;br /&gt;
TLS_CACERT      /etc/ssl/certs/CAcert_org.pem&lt;br /&gt;
TLS_CERT        /etc/ssl/private/hobby.nl.crt&lt;br /&gt;
TLS_KEY         /etc/ssl/private/hobby.nl.key&lt;br /&gt;
TLS_REQCERT     allow&lt;br /&gt;
#TLS_REQCERT never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Denk er wel aan na wijzigingen Apache te herstarten.&lt;br /&gt;
===PAM en NSS via LDAP===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Installeer &#039;&#039;&#039;libnss-ldapd&#039;&#039;&#039; om de benodigde libraries te verkrijgen. Apt-get zal tevens &#039;&#039;&#039;libpam-ldapd&#039;&#039;&#039;, &#039;&#039;&#039;nslcd&#039;&#039;&#039; en &#039;&#039;&#039;nscd&#039;&#039;&#039; binnen brengen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install libnss-ldapd auth-client-config ldap-utils&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
    libpam-ldapd nscd nslcd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Libnss-ldapd is een doorontwikkeling van libnss-ldap en bevat meerdere verbeteringen. Zie: [http://arthurdejong.org/nss-pam-ldapd/ deze site] van de ontwikkelaar. Bij de installatie wordt een user &#039;&#039;&#039;nslcd&#039;&#039;&#039; aangemaakt; denk erom die in de .tmpl bestanden te zetten!&lt;br /&gt;
  &lt;br /&gt;
nsswitch.conf laat zich configureren via &#039;&#039;&#039;auth-client-config&#039;&#039;&#039; maar lac_ldap is alleen aanwezig als &#039;&#039;&#039;ldap-auth-config&#039;&#039;&#039; ook is geinstalleerd. Zo niet gebruik dan de tweede regel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auth-client-config -t nss -p lac_ldap&lt;br /&gt;
auth-client-config -t nss -p ldap_example&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het resultaat is dat nsswitch.conf zowel in files (/etc/passwd etc.) zoekt als in ldap.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nsswitch.conf&lt;br /&gt;
#&lt;br /&gt;
# Example configuration of GNU Name Service Switch functionality.&lt;br /&gt;
# If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
# `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # passwd:         compat&lt;br /&gt;
passwd: files ldap&lt;br /&gt;
# pre_auth-client-config # group:          compat&lt;br /&gt;
group: files ldap&lt;br /&gt;
# pre_auth-client-config # shadow:         compat&lt;br /&gt;
shadow: files ldap&lt;br /&gt;
&lt;br /&gt;
hosts:          files dns&lt;br /&gt;
networks:       files&lt;br /&gt;
&lt;br /&gt;
protocols:      db files&lt;br /&gt;
services:       db files&lt;br /&gt;
ethers:         db files&lt;br /&gt;
rpc:            db files&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # netgroup:       nis&lt;br /&gt;
netgroup: nis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het aanpassen van de PAM bestanden gaat sinds enige releases met &#039;&#039;&#039;pam-auth-update&#039;&#039;&#039;. Kies in het menu voor zowel unix als ldap. Default wordt nu ldap authenticatie gebruikt voor uid &amp;gt;= 1000. Bij Hobbynet willen we vanaf 300 ldap gebruiken. Door een licht gemodificeerde versie van /usr/share/pam-configs/ldap te maken (ldap-hobbynet), kan ook voor de hobbynet instelling gekozen worden. Dit is de ldap-hobbynet versie:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Name: LDAP Authentication (uid&amp;gt;300)&lt;br /&gt;
Default: yes&lt;br /&gt;
Priority: 128&lt;br /&gt;
Auth-Type: Primary&lt;br /&gt;
Auth-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Auth:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 use_first_pass&lt;br /&gt;
Account-Type: Additional&lt;br /&gt;
Account:&lt;br /&gt;
        [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad]        pam_ldap.so minimum_uid=300&lt;br /&gt;
Password-Type: Primary&lt;br /&gt;
Password-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Password:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 try_first_pass&lt;br /&gt;
Session-Type: Additional&lt;br /&gt;
Session:&lt;br /&gt;
        [success=ok default=ignore]     pam_ldap.so minimum_uid=300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dit is in een standaard opzet van LDAP voldoende om zowel lokale gebruikers als gebruikers opgeslagen in LDAP, te laten inloggen en hun password te laten wijzigen. In de Hobbynet setup moet er echter nog meer gebeuren in de ACL&#039;s van de LDAP server configuratie. Omdat Hobbynet de laatste ACL regel heeft gewijzigd in een &#039;&#039;&#039;deny-all&#039;&#039;&#039;, is er een helper of proxy account nodig dat read access heeft of een aantal cruciale velden in de posixAccount objectClass. Zie verder de lsiting van nslcd.conf.&lt;br /&gt;
&lt;br /&gt;
Libnss-ldapd en libpam-ldapd hebben een gezamelijke daemon &#039;&#039;&#039;nslcd&#039;&#039;&#039; die z&#039;n configuratie uit &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039; haalt. Hierin is ook een voorziening voor het helper account. Aan het eind vande &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; staat de voorziening voor host-based login. Als het attribute &#039;&#039;&#039;host&#039;&#039;&#039; de fqdn of alleen de host naam bevat, bepaald dat of inloggen op die host mogelijk is. &#039;&#039;&#039;*&#039;&#039;&#039; staat inloggen op alle hosts toe.&lt;br /&gt;
&lt;br /&gt;
Eventueel kan het daemon proces voor debugging doeleinden ook als command (&#039;&#039;&#039;nslcd -d&#039;&#039;&#039;) gestart worden. Om de bevragingen van de LDAP server wat te verminderen, kan &#039;&#039;&#039;nscd&#039;&#039;&#039; voor caching zorgen. Deze cache daemon heeft zijn eigen configuratie bestand: &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039;. De default instellingen zijn goed; eventueel kan de logging naar een bestand gestuurd worden.&lt;br /&gt;
&lt;br /&gt;
Verbinding met de LDAP server kan met StartTLS beveiligd worden. Hier de inhoud van nslcd.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nslcd.conf&lt;br /&gt;
# nslcd configuration file. See nslcd.conf(5)&lt;br /&gt;
# for details.&lt;br /&gt;
&lt;br /&gt;
# The user and group nslcd should run as.&lt;br /&gt;
uid nslcd&lt;br /&gt;
gid nslcd&lt;br /&gt;
&lt;br /&gt;
# log location and level&lt;br /&gt;
#log /var/log/nslcd.log debug&lt;br /&gt;
&lt;br /&gt;
# The location at which the LDAP server(s) should be reachable.&lt;br /&gt;
uri ldap://ldap2-int.hobby.nl/&lt;br /&gt;
&lt;br /&gt;
# The search base that will be used for all queries.&lt;br /&gt;
base dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# Other base mappings&lt;br /&gt;
base   group  ou=groups,dc=hcc,dc=nl&lt;br /&gt;
base   passwd ou=users,dc=hcc,dc=nl&lt;br /&gt;
base   shadow ou=users,dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# The search scope.&lt;br /&gt;
#scope sub&lt;br /&gt;
&lt;br /&gt;
# The LDAP protocol version to use.&lt;br /&gt;
ldap_version 3&lt;br /&gt;
&lt;br /&gt;
# The DN to bind with for normal lookups.&lt;br /&gt;
#binddn cn=annonymous,dc=example,dc=net&lt;br /&gt;
#bindpw secret&lt;br /&gt;
binddn cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&lt;br /&gt;
bindpw xxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
# The DN used for password modifications by root.&lt;br /&gt;
#rootpwmoddn cn=admin,dc=example,dc=com&lt;br /&gt;
&lt;br /&gt;
# SSL options&lt;br /&gt;
ssl off&lt;br /&gt;
ssl start_tls&lt;br /&gt;
#tls_reqcert never&lt;br /&gt;
tls_cacertfile /etc/ssl/certs/cacert.org.pem&lt;br /&gt;
#tls_cert /etc/ssl/private/server.crt&lt;br /&gt;
#tls_key /etc/ssl/private/server.key&lt;br /&gt;
&lt;br /&gt;
# The minimum uid&lt;br /&gt;
nss_min_uid 300&lt;br /&gt;
&lt;br /&gt;
pam_authz_search (&amp;amp;(objectClass=posixAccount)(uid=$username)(|(host=$hostname)(host=$fqdn)(host=\\*)))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===users en groepen toevoegen===&lt;br /&gt;
Hiervoor moet &#039;&#039;&#039;ldapscripts&#039;&#039;&#039; zijn geïnstalleerd. Dit is het geval op de ldap-lb1 server. Dat levert de volgende extra commando&#039;s op:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldaprenamemachine&lt;br /&gt;
ldapadduser&lt;br /&gt;
ldapdeleteuserfromgroup&lt;br /&gt;
ldapfinger&lt;br /&gt;
ldapid&lt;br /&gt;
ldapgid&lt;br /&gt;
ldapmodifyuser&lt;br /&gt;
ldaprenameuser&lt;br /&gt;
lsldap&lt;br /&gt;
ldapaddusertogroup&lt;br /&gt;
ldapsetpasswd&lt;br /&gt;
ldapinit&lt;br /&gt;
ldapaddgroup&lt;br /&gt;
ldapdeletegroup&lt;br /&gt;
ldapmodifygroup&lt;br /&gt;
ldapdeletemachine&lt;br /&gt;
ldaprenamegroup&lt;br /&gt;
ldapaddmachine&lt;br /&gt;
ldapmodifymachine&lt;br /&gt;
ldapsetprimarygroup&lt;br /&gt;
ldapdeleteuser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Meest gebruikt zijn &#039;&#039;&#039;ldapaddgroup, ldapadduser, ldapsetpasswd&#039;&#039;&#039;.  &lt;br /&gt;
Er zijn manpages maar er is ook uitgebreide uitleg in de [https://help.ubuntu.com/14.04/serverguide/openldap-server.html Ubuntu server guide]. Omdat wij het automatisch maken van de home dir uit hebben staan, moet die met de hand aangemaakt worden en moet de owner goed gezet worden.&lt;br /&gt;
&lt;br /&gt;
===host-based login===&lt;br /&gt;
Met een kleine uitbreiding in het schema van de LDAP server, kan host-based login gerealiseerd worden. Ook in de &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; is een uitbreiding nodig.&lt;br /&gt;
&lt;br /&gt;
In de LDAP server dient de objectClass &#039;&#039;&#039;hostObject&#039;&#039;&#039; aan de entries in de ou=users toegevoegd te worden. Deze (auxilary) objectClass brengt slechts één attribute met zich mee: &#039;&#039;&#039;host&#039;&#039;&#039;. De regel in nslcd.conf checkt of één van de waarden van &#039;&#039;&#039;host&#039;&#039;&#039; gelijk is aan de naam van de server waarop ingelogd wordt. De waarde &#039;&#039;&#039;*&#039;&#039;&#039; geldt als wildcard. Zie de regel &#039;&#039;&lt;br /&gt;
&#039;pam_authz_search&#039;&#039;&#039;&#039; in &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Password aanpassen===&lt;br /&gt;
Via LDAP ingelogde gebruikers kunnen net als lokale gebruikers hun wachtwoord met &#039;&#039;&#039;passwd&#039;&#039;&#039; wijzigen. Wel moet aan de eisen in de LDAP ppolicy module voldaan worden.&lt;br /&gt;
&lt;br /&gt;
==PHP scripting==&lt;br /&gt;
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 &#039;&#039;&#039;/usr/local/hobbynet/bin&#039;&#039;&#039; directory.&lt;br /&gt;
Voor de php-scripting zijn enkele php7.x pakketten nodig. Installeer deze met apt-get. Het gaat om:&lt;br /&gt;
* php-cli&lt;br /&gt;
* php-ldap&lt;br /&gt;
&lt;br /&gt;
== Apache authenticatie via LDAP ==&lt;br /&gt;
In plaats van .htpassword authenticatie, kan ook LDAP gebruikt worden. Activeer daartoe de Apache module&lt;br /&gt;
&#039;authnz_ldap&#039;.&lt;br /&gt;
 a2enmod authnz_ldap&lt;br /&gt;
Denk er om dat dit in een loadbalanced situatie op beide servers gedaan dient te worden!&lt;br /&gt;
&lt;br /&gt;
=== Voorbeeld van een LDAP configuratie in de Apache config ===&lt;br /&gt;
(alleen als voorbeeld, niet zo gebruiken!)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# // 1) Hobbynet webmaster&lt;br /&gt;
# // 2) Vraagbaak medewerker van een willekeurige groepering&lt;br /&gt;
# (|(hccRol=*#VRBK)(hccRol=HN#WM))&lt;br /&gt;
  &amp;lt;Location &amp;quot;/apps/vraagbaak&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;RequireAll&amp;gt;&lt;br /&gt;
      Authname &amp;quot;HCC!vraagbaak (gebruik uw hcc.nl gebruikersnaam/wachtwoord)&amp;quot;&lt;br /&gt;
      AuthType Basic&lt;br /&gt;
      AuthBasicProvider ldap&lt;br /&gt;
      AuthLDAPUrl ldap://hcc-ldap-int.hobby.nl/ou=leden,dc=hcc,dc=nl?hccLogin??(|(hccRol=*#VRBK)(hccRol=HN#WM))(hccProfiel=TRUE) TLS&lt;br /&gt;
      require valid-user&lt;br /&gt;
    &amp;lt;/RequireAll&amp;gt;&lt;br /&gt;
  &amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hoe kan LDAP veilig gebruikt worden vanuit Apache===&lt;br /&gt;
Zet een script neer in de gebruikersomgeving, en gebruik mod_authz_external. Doe de controle vervolgens via de XML-RPC server.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zie [[Kadernet]] voor een voorbeeld.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== TODO lijst ==&lt;br /&gt;
&#039;&#039;Dit is een lijst in wording, graag aanvullen&#039;&#039; &lt;br /&gt;
* &#039;dun&#039; loadbalancer script maken om te controleren dat LDAP echt luistert&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79051</id>
		<title>LDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79051"/>
		<updated>2020-12-10T20:53:24Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* Installatie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introductie==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==LDAP server keuze==&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Loadbalanced==&lt;br /&gt;
Er zijn twee servers (ldap-lb1 en ldap-lb2) die achter een loadbalancer in preferred server mode staan 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.&lt;br /&gt;
&lt;br /&gt;
Tevens zijn er een test en een development server: ldap-test en ldap-dev.&lt;br /&gt;
&lt;br /&gt;
==Installatie==&lt;br /&gt;
Installatie van OpenLDAP is simpel:&lt;br /&gt;
 aptitude install slapd ldap-utils&lt;br /&gt;
Omdat er gebruikgemaakt wordt van php scripts, is het ook nodig &#039;&#039;&#039;php-cli&#039;&#039;&#039; en &#039;&#039;&#039;php-ldap&#039;&#039;&#039; te installeren. De configuratie van OpenLDAP is sinds Karmic Koala iets gecompliceerder geworden. &#039;cn=config&#039; 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 &amp;quot;dpkg-reconfigure slapd&amp;quot; zet alleen de skeleton configuratie terug. Je moet zelf de database, root dn en acl&#039;s opzetten (als root of met sudo). Run  &#039;&#039;&#039;dpkg-reconfigure slapd&#039;&#039;&#039; om terug te gaan naar een lege directory. &lt;br /&gt;
&lt;br /&gt;
De volgende pakketten dienen geïnstalleerd te zijn (&#039;php -m&#039; toont de geactiveerde modules):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ontbrekende pakketten volgens hjv:&lt;br /&gt;
&lt;br /&gt;
apt-get install aptitude &lt;br /&gt;
apt-get install phpmyadmin&lt;br /&gt;
apt-get install php-mbstring&lt;br /&gt;
apt-get install php-gettext&lt;br /&gt;
apt-get install php-xmlrpc&lt;br /&gt;
apt-get install php-ldap&lt;br /&gt;
apt-get install mysql-server&lt;br /&gt;
apt-get install ldapscripts&lt;br /&gt;
apt-get install php-xml&lt;br /&gt;
apt-get install slapd&lt;br /&gt;
apt-get install ldap-utils&lt;br /&gt;
a2enmod ssl&lt;br /&gt;
&lt;br /&gt;
- apache2ctl restart&lt;br /&gt;
&lt;br /&gt;
- openldap moet lid zijn van de groep ssl-cert!&lt;br /&gt;
apt-get install ssl-cert&lt;br /&gt;
adduser openldap ssl-cert&lt;br /&gt;
(of vi /etc/group&lt;br /&gt;
    ssl-cert:x:116:openldap)&lt;br /&gt;
&lt;br /&gt;
- Zorg dat de LDAP daemon bij de certificaten kan komen. &lt;br /&gt;
LET OP: op alle hobbynet servers staan de certificaten in /disk/site/etc/ssl/hobby.nl/&lt;br /&gt;
 chgrp ssl-cert /disk/site/etc/ssl/hobby.nl/hobby.nl.*&lt;br /&gt;
 chmod 440      /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
- mysql laat het bestand ibdata1 ongelimiteerd groeien (InnoDB bestanden)&lt;br /&gt;
 /etc/mysql/mysql.conf.d/innodb_file_per_table.cnf&lt;br /&gt;
 [mysql]&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
&lt;br /&gt;
=============&lt;br /&gt;
Nog meer Hobbynet aanpassingen&lt;br /&gt;
/etc/bash.bashrc&lt;br /&gt;
export http_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export https_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export ftp_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Locatie bestanden===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Alle ldif em tmpl bestanden gaan naar /usr/local/hobbynet/lib&lt;br /&gt;
* init_ldap en andere scripts gaan naar /usr/local/hobbynet/bin&lt;br /&gt;
* alle data bestanden (dumps) en update ldifs gaan naar /usr/local/hobbynet/data&lt;br /&gt;
* etc/ldap/schema/hcc_schema.* gaan naar /etc/ldap/schema&lt;br /&gt;
* etc/ldap/schema/ppolicy.ldif gaat naar /etc/ldap/schema&lt;br /&gt;
&lt;br /&gt;
==Initiële database==&lt;br /&gt;
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&#039;s) erin. Alleen zijn er geen leden geladen in de ou=leden en ou=inactieve_leden.&lt;br /&gt;
===slapd.init.ldif ===&lt;br /&gt;
Bij installatie/reconfiguratie wordt /usr/share/slapd/slapd.init.ldif ingelezen. Zie aldaar indien nodig.&lt;br /&gt;
&lt;br /&gt;
==init_ldap script==&lt;br /&gt;
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 &#039;&#039;&#039;cn=admin,dc=hcc,dc=nl&#039;&#039;&#039; 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 &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; laadt vervolgens de laatste dump terug. Bij wijzigingen aan het schema is het raadzaam altijd een &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; te doen zodat een later een actuele dump kan worden teruggeladen.&lt;br /&gt;
&lt;br /&gt;
Het (plain text) password van cn=admin,dc=hcc,dc=nl moet bij het aanroepen van &#039;&#039;&#039;init_ldap&#039;&#039;&#039; op de commandline worden meegegeven. Tijdens de dpkg-reconfigure moet het password nog 2x gegeven worden. Lees eventueel ook de [http://www.openldap.org/doc/admin/ OpenLDAP Admin Guide].&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* voorbereidingen om &amp;quot;dpkg-reconfigure slapd&amp;quot; te draaien&lt;br /&gt;
* definities van input files&lt;br /&gt;
* check host&lt;br /&gt;
* bouwen van het skelet van de nieuwe directory&lt;br /&gt;
Zie voor details van de scripts &#039;&#039;&#039;init_ldap&#039;&#039;&#039;, &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; en &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; op een van de servers (in /usr/local/hobbynet/bin).&lt;br /&gt;
&lt;br /&gt;
==onderdelen van init_ldap==&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===add-schema.ldif===&lt;br /&gt;
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. &lt;br /&gt;
* Hiertoe wordt het onderstaande schema in /etc/ldap/schema geplaatst als hcc_schema.schema. &lt;br /&gt;
* Vervolgens worden de stappen uitgevoerd zoals beschreven in de [https://help.ubuntu.com/11.10/serverguide/C/openldap-server.html Ubuntu Server guide], onder &#039;&#039;&#039;Modifying the slapd Configuration Database&#039;&#039;&#039;. &lt;br /&gt;
* De resulterende output file &#039;&#039;&#039;cn=hcc_schema.ldif&#039;&#039;&#039; moet dan nog naar /etc/ldap/schema/hcc_schema.ldif gecopieerd worden. &lt;br /&gt;
Als dit proces herhaald moet worden, start dan met een lege output directory en verwijder een eventueel achtergebleven cn=hcc_schema.ldif bestand. &lt;br /&gt;
&lt;br /&gt;
De extra schema&#039;s worden middels een &#039;&#039;&#039;include&#039;&#039;&#039; toegevoegd. &#039;&#039;&#039;Ppolicy&#039;&#039;&#039; is op gelijke wijze als &#039;&#039;&#039;hcc_schema&#039;&#039;&#039; tot .ldif geconverteerd. Alle stappen om een nieuwe &#039;&#039;&#039;hcc-schema.ldif&#039;&#039;&#039; te maken zijn gescript in &#039;&#039;&#039;upd_schema&#039;&#039;&#039;. In &#039;&#039;&#039;init_ldap&#039;&#039;&#039; wordt het eigen schema en de password policy geladen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-schema.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
include: file:///etc/ldap/schema/hcc_schema.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ppolicy.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ldapns.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====schema updates====&lt;br /&gt;
Soms wordt een attribute toegevoegd of gewijzigd. Hiertoe dient het bestand hcc_schema.schema in /usr/local/hobbynet/etc/ldap/schema, gewijzigd te worden. Daarna dient er een ldif versie van gemaakt te worden. Gebruik hiervoor &#039;&#039;&#039;upd_schema.sh&#039;&#039;&#039; in dezelfde directory. De resulterende hcc_schema.ldif wordt in dit script naar /etc/ldap/schema gecopieërd. Bij grote wijzigingen is het aan te bevelen door de hele rebuild cycle te gaan (dump, init, restore). Bij triviale aanpassingen zou hcc_schema.ldif ook &#039;&#039;&#039;direct&#039;&#039;&#039; in de actieve directory geplaatst kunnen worden, gevolgd door slechts een &#039;&#039;&#039;service slapd restart&#039;&#039;&#039;. Gebruik hiervoor (blijf in de lokale schema directory):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp &amp;quot;ldif_output/cn=config/cn=schema/cn={14}hcc_schema.ldif&amp;quot; &amp;quot;/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}hcc_schema.ldif&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
LET OP: De nummers tussen accolades zijn bepaald door de volgorde van andere scripts! Zolang geen andere schema&#039;s worden toegevoegd zullen ze niet veranderen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ook kan met de ldap-tools gewerkt worden. Gebruik ldapsearch en ldapmodify, eventueel met de -f optie om een voorbereide serie opdrachten uit te voeren. Gebruik ldapsearch om eerst de structuur te vinden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier een voorbeeld om een objectClass aan te passen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat pas_aan.ldif&lt;br /&gt;
dn: cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
delete: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description ) )&lt;br /&gt;
-&lt;br /&gt;
add: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description $ hccIg ) )&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
$sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f pas_aan.ldif &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_config.ldif===&lt;br /&gt;
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 &#039;&#039;&#039;STATS&#039;&#039;&#039; gezet. Dit geeft niet teveel logging maar is toch goed bruikbaar. Om extra logging te krijgen op b.v. ACL&#039;s, verander olcLogLevel dan in &amp;quot;stats ACL&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Dit template wordt tijdens het draaien van het init_ldap script gecopieerd naar modify-config.ldif. Eventueel kan met place holders gewerkt worden (@...@), dit om op alle servers (ook test servers) één en hetzelfde script te kunnen gebruiken. Er zijn nog enkele van deze templates. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## modify-config.hobbynet            ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
replace: olcLogLevel&lt;br /&gt;
olcLogLevel: stats&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCACertificateFile&lt;br /&gt;
olcTLSCACertificateFile: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCertificateFile&lt;br /&gt;
olcTLSCertificateFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCertificateKeyFile&lt;br /&gt;
olcTLSCertificateKeyFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Om de logging in een apart bestand te krijgen moet in /etc/rsyslog.d een extra bestand &#039;&#039;&#039;openldap.conf&#039;&#039;&#039; geplaatst worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local4.*   -/var/log/openldap.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Tevens willen we logrotate op dit bestand. Plaats in /etc/logrotate.d het bestand &#039;&#039;&#039;openldap&#039;&#039;&#039; met de volgende inhoud&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/log/openldap.log&lt;br /&gt;
{&lt;br /&gt;
        rotate 4&lt;br /&gt;
        weekly&lt;br /&gt;
        missingok&lt;br /&gt;
        notifempty&lt;br /&gt;
        compress&lt;br /&gt;
        delaycompress&lt;br /&gt;
        sharedscripts&lt;br /&gt;
        postrotate&lt;br /&gt;
                reload rsyslog &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 || true&lt;br /&gt;
        endscript&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify-hdb.ldif===&lt;br /&gt;
Hier worden de wijzigingen op de backend db gemaakt. Er worden een aantal attributes ge-indexeerd en de search SizeLimit wordt op &#039;&#039;&#039;unlimited&#039;&#039;&#039; gezet. De waarden die in DB_CONFIG moeten komen (Berkely DB parameters) staan ook in dit bestand. Deze versie is outdated. De ACL regels zijn drastisch gewijzigd. Raadpleeg altijd de laatste versie op de server zelf.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## modify-hdb.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
replace: olcAccess&lt;br /&gt;
#&lt;br /&gt;
# hobbynetlogin heeft lees rechten op ou=users&lt;br /&gt;
olcAccess: to attrs=@posixAccount,@posixGroup,@shadowAccount,@hostObject&lt;br /&gt;
  by dn=&amp;quot;cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# drupal/test moet hccOptIn kunnen schrijven vanaf de&lt;br /&gt;
# profiel pagina. Overige klanten kunnen hccOptin&lt;br /&gt;
# alleen lezen. self mag schrijven&lt;br /&gt;
olcAccess: to attrs=hccOptIn&lt;br /&gt;
  by self write&lt;br /&gt;
  by dn=&amp;quot;cn=drupal-hcc-nl,ou=klanten,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# anonieme klanten moeten kunnen inloggen&lt;br /&gt;
# en mogen hun eigen password wijzigen&lt;br /&gt;
olcAccess: to attrs=userPassword,shadowLastChange&lt;br /&gt;
  by self write&lt;br /&gt;
  by anonymous auth&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# user mag enkele eigen attr wijzigen&lt;br /&gt;
olcAccess: to attrs=hccLogin,hccPseudoniem,hccKaderPassword&lt;br /&gt;
  by self write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# beheerders hebben schrijfrechten op alles (updateDN)&lt;br /&gt;
# klanten hebben alleen lees rechten op alles (readDN)&lt;br /&gt;
# self mag  lezen&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by self read&lt;br /&gt;
  by dn=&amp;quot;cn=xml-hoge-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn=&amp;quot;cn=xml-lage-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by dn.one=&amp;quot;ou=beheer,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn.one=&amp;quot;ou=klanten,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# helpdesk heeft leesrechten op ou=leden&lt;br /&gt;
olcAccess: to attrs=@hccOrgPerson,@hccKaderFunctie&lt;br /&gt;
  by dn.one=&amp;quot;ou=helpdesk,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# partners mogen een paar attrs lezen&lt;br /&gt;
olcAccess: to attrs=hccLidNummer,hccPostcode,hccPostcodeZoekveld&lt;br /&gt;
  by dn.one=&amp;quot;ou=partners,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
#&lt;br /&gt;
# iedereen moet (pseudo attr) entry en objectClass kunnen lezen&lt;br /&gt;
olcAccess: to attrs=entry,objectClass&lt;br /&gt;
  by * read&lt;br /&gt;
#&lt;br /&gt;
# vangnet: blokkeer alle toegang tot de overige attrs.&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by * none&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbDirectory&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
-&lt;br /&gt;
replace: olcSizeLimit&lt;br /&gt;
olcSizeLimit: 100000&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbCachesize&lt;br /&gt;
olcDbCachesize: 200000&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbCheckpoint&lt;br /&gt;
olcDbCheckpoint: 1024 5&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbConfig&lt;br /&gt;
olcDbConfig: set_cachesize 0 536870912 0&lt;br /&gt;
olcDbConfig: set_lk_max_objects 1000&lt;br /&gt;
olcDbConfig: set_lk_max_locks 1000&lt;br /&gt;
olcDbConfig: set_lk_max_lockers 1000&lt;br /&gt;
olcDbConfig: set_flags DB_LOG_AUTOREMOVE&lt;br /&gt;
olcDbConfig: set_flags DB_TXN_NOSYNC&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbIDLcacheSize&lt;br /&gt;
olcDbIDLcacheSize: 600000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_index.ldif===&lt;br /&gt;
Een kale configuratie is heel snel voor wat betreft het opnieuw vullen met gegevens. Bij het aanmaken van een verse LDAP database worden er dan ook zo min mogelijk indexen aangemaakt.&amp;lt;br&amp;gt;&lt;br /&gt;
Zodra de inhoud is ingelezen kunnen de &#039;echte&#039; indexen aangemaakt worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## modify-index.ldif                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
replace: olcDbIndex&lt;br /&gt;
olcDbIndex: default pres,eq&lt;br /&gt;
olcDbIndex: objectClass,entryUUID,entryCSN eq&lt;br /&gt;
olcDbIndex: hccLidNummer,hccLogin,hccForumLogin eq&lt;br /&gt;
olcDbIndex: uid,uidNumber,gidNumber,memberUid,member eq&lt;br /&gt;
olcDbIndex: cn,host,hccPseudoniem,hccOptin,hccLocatie eq&lt;br /&gt;
olcDbIndex: sn,hccPostcodeZoekveld,hccIg,hccRegio eq,subfinal&lt;br /&gt;
olcDbIndex: hccRol,hccBezoek eq,pres,subfinal&lt;br /&gt;
olcDbIndex: hccBulletins pres&lt;br /&gt;
olcDbIndex: aboNummer eq&lt;br /&gt;
olcDbIndex: aboPostcodeZoekveld eq,subfinal&lt;br /&gt;
olcDbIndex: mail,mailHccnet,hccKaderMail pres,eq&lt;br /&gt;
olcDbIndex: hccProfiel pres&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ppolicy overlay===&lt;br /&gt;
* vanuit LDAP de minimale lengte van een wachtwoord afdwingen&lt;br /&gt;
* in LDAP SSHA versleuteling activeren&amp;lt;br&amp;gt;&lt;br /&gt;
(olcPPolicyHashCleartext: TRUE)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-ppolicy.ldif                  ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module, cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectClass: olcModuleList&lt;br /&gt;
objectClass: top&lt;br /&gt;
olcModuleLoad: ppolicy&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=ppolicy,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcPPolicyConfig&lt;br /&gt;
olcOverlay: ppolicy&lt;br /&gt;
olcPPolicyDefault: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
olcPPolicyUseLockout: TRUE&lt;br /&gt;
olcPPolicyHashCleartext: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The default ppolicy looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dn: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
objectClass: pwdPolicy&lt;br /&gt;
objectClass: device&lt;br /&gt;
cn: default&lt;br /&gt;
pwdCheckQuality: 1&lt;br /&gt;
pwdMinLength: 8&lt;br /&gt;
pwdAttribute: 2.5.4.35&lt;br /&gt;
pwdAllowUserChange: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Syncrepl overlay===&lt;br /&gt;
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 [http://www.openldap.org/doc/admin/ LDAP Admin Guide]. &#039;&#039;&#039;Mirror configuratie is specifiek per server!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-syncrepl.tmpl                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
replace: olcServerID&lt;br /&gt;
olcServerID: @SID@&lt;br /&gt;
&lt;br /&gt;
dn: cn=module{0},cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcModuleLoad&lt;br /&gt;
olcModuleLoad: syncprov&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcSyncProvConfig&lt;br /&gt;
olcOverlay: syncprov&lt;br /&gt;
olcSpCheckpoint: 100 5&lt;br /&gt;
olcSpSessionlog: 100&lt;br /&gt;
&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcSyncRepl&lt;br /&gt;
olcSyncRepl: rid=@RID@&lt;br /&gt;
  provider=ldap://@PROVIDER@&lt;br /&gt;
  binddn=&amp;quot;cn=admin,dc=hcc,dc=nl&amp;quot; bindmethod=simple credentials=&amp;quot;@PASSWORD@&amp;quot;&lt;br /&gt;
  searchbase=&amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
  type=refreshAndPersist&lt;br /&gt;
  interval=00:00:00:10&lt;br /&gt;
  retry=&amp;quot;5 5 300 5&amp;quot;&lt;br /&gt;
  timeout=1&lt;br /&gt;
  starttls=yes&lt;br /&gt;
-&lt;br /&gt;
add: olcMirrorMode&lt;br /&gt;
olcMirrorMode: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
De andere server krijgt ServerID 2 en de provider is het IP adres van de andere server.&lt;br /&gt;
&lt;br /&gt;
===Unique overlay===&lt;br /&gt;
Deze overlay dient er voor te zorgen dat o.a het attribuut hccLogin een unieke waarde bevat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-unique.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module,cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectclass: olcModuleList&lt;br /&gt;
objectclass: top&lt;br /&gt;
olcmoduleload: unique&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=unique,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcUniqueConfig&lt;br /&gt;
olcOverlay: unique&lt;br /&gt;
olcUniqueAttribute: uid uidNumber hccLogin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SSL/TLS beveiliging==&lt;br /&gt;
Gebruik de juiste .pem bestanden in /etc/ssl/certs en /etc/ssl/private.&lt;br /&gt;
&lt;br /&gt;
We maken gebruik van een RapidSSL certificaat. Als dit niet standaard in Ubuntu bekend is, zet dan eerst GeoTrust_RapidSSL_-_ca-bundle.pem in de map /etc/ssl/certs neer. Voer nu een &#039;&#039;&#039;c_rehash .&#039;&#039;&#039; uit in /etc/ssl/certs om de cache te updaten (omdat GeoTrust_RapidSSL_-_ca-bundle.pem nieuw werd toegevoegd). &lt;br /&gt;
&lt;br /&gt;
De ownership is belangrijk. Hiertoe wordt de groep &amp;quot;openldap&amp;quot; toegevoegd aan de groep ssl-cert.&lt;br /&gt;
 adduser openldap ssl-cert&lt;br /&gt;
&lt;br /&gt;
Als dit fout gaat, doe dan eerst:&lt;br /&gt;
 apt-get install ssl-cert&lt;br /&gt;
&lt;br /&gt;
Zet het certificaat en de private key in de juiste groep:&lt;br /&gt;
 chgrp ssl-cert /etc/ssl/private/hobby.nl.*&lt;br /&gt;
 chmod 440      /etc/ssl/private/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
Het resultaat is dan als volgt:&lt;br /&gt;
 root@hcc-ldap-lb1:~# ls -l /etc/ssl/private/hcc* &lt;br /&gt;
 -rw-r--r-- 1 root     ssl-cert 1724 Nov 22 20:47 hobby.nl.crt&lt;br /&gt;
 -r--r----- 1 root     ssl-cert 1679 Nov 22 20:25 hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
 root@hcc-ldap-lb1:~# grep openldap /etc/group&lt;br /&gt;
 ssl-cert:x:114:openldap&lt;br /&gt;
 openldap:x:118:&lt;br /&gt;
&lt;br /&gt;
2020.12.09: Op een nieuwe Ubuntu installatie staat apparmor standaard aan. Weg ermee!&lt;br /&gt;
 apt remove --assume-yes --purge apparmor&lt;br /&gt;
&amp;lt;strike&amp;gt;Per september 2017 staan de certificaten in /disk/site/etc/ssl/hobby.nl, net als op alle andere servers. Omdat apparmor actief is moet deze directory worden toegevoegd aan /etc/apparmor.d/local/usr.sbin.slapd. Die file ziet er dan als volgt uit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Site-specific additions and overrides for usr.sbin.slapd.&lt;br /&gt;
# For more details, please see /etc/apparmor.d/local/README.&lt;br /&gt;
#include &amp;lt;abstractions/ssl_certs&amp;gt;&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/ r,&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/* r,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Openldap ook op poort 636 benaderd wordt (naast TLS op 389), moet in /etc/default/slapd ldaps:/// opgenomen worden bij de SLAPD_SERVICES.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;netstat -an&#039; dient dan 636 te laten zien voor zowel IPv4 als IPv6.&lt;br /&gt;
&lt;br /&gt;
Om de cn=config te zien kan je het volgende commando gebruiken:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config&lt;br /&gt;
&lt;br /&gt;
of, wat botter maar korter:&lt;br /&gt;
cat /etc/ldap/slapd.d/cn\=config.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Backup, initialize, restore==&lt;br /&gt;
Om het hele skelet van ldap in één keer te herstellen dient &#039;&#039;&#039;init_ldap&#039;&#039;&#039; gebruikt te worden. Als argument &#039;&#039;&#039;moet&#039;&#039;&#039; het admin beheer wachtwoord mee gegeven worden.&lt;br /&gt;
&lt;br /&gt;
===lokaal===&lt;br /&gt;
Backups kunnen gemaakt worden terwijl slapd draait maar geadviseerd wordt slapd te stoppen. Voor dumpen moet &#039;&#039;&#039;slapcat&#039;&#039;&#039; gebruikt worden. Backups kunnen gemaakt worden per database of een filter daarop, naar een ldif bestand.&lt;br /&gt;
 slapcat -l hcc-dump.ldif -b &amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
Dit maakt een dump van alles onder &#039;&#039;&#039;dc=hcc,dc=nl&#039;&#039;&#039; naar het bestand hcc-dump.ldif. Ook is het mogelijk het database nummer te gebruiken, config is altijd nummer 0, hdb is gewoonlijk 1.&lt;br /&gt;
&lt;br /&gt;
Het &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; script dumpt alle ou&#039;s in aparte .ldif bestanden; het omgekeerde doet &#039;&#039;&#039;restore_ldap&#039;&#039;&#039;.  &lt;br /&gt;
Terug inlezen kan alleen in een lege directory, dus direct nadat &#039;&#039;&#039;init_ldap&#039;&#039;&#039; is gedaan. Gebruik voor het terugplaatsen &#039;&#039;&#039;slapadd&#039;&#039;&#039;. Aan te bevelen is &#039;&#039;&#039;-c&#039;&#039;&#039; mee te geven zodat ondanks fouten doorgegaan wordt. &lt;br /&gt;
&lt;br /&gt;
Voor slapadd &#039;&#039;&#039;moet&#039;&#039;&#039; 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)&lt;br /&gt;
 /etc/init.d/slapd stop&lt;br /&gt;
 slapadd -l hcc-dump.ldif -w -c &amp;gt;errors.txt&lt;br /&gt;
 chown openldap:openldap /var/lib/ldap/*&lt;br /&gt;
 /etc/init.d/slapd start&lt;br /&gt;
&lt;br /&gt;
===remote===&lt;br /&gt;
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 &#039;&#039;&#039;backup-encrypted&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Recente lokale backups zijn te vinden in &#039;&#039;&#039;/usr/local/hobbynet/tmp&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Verse ldap maken===&lt;br /&gt;
Transactie log bij het toevoegen van b.v. een nieuwe ou:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Op beide servers:&lt;br /&gt;
schema van test server gecopieerd en geactiveerd&lt;br /&gt;
dump-ldap gedraaid&lt;br /&gt;
systemctl stop slapd.service &lt;br /&gt;
&lt;br /&gt;
Er is nu géén ldap service! Werk dus snel...&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb1&lt;br /&gt;
systemctl stop slapd.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
op ldap-lb2:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb2&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
systemctl start slapd.service&lt;br /&gt;
Beide slapd servers zijn in de lucht en moeten synchroniseren.&lt;br /&gt;
&lt;br /&gt;
op beide servers:&lt;br /&gt;
check replicatie (netstat en functioneel)&lt;br /&gt;
&lt;br /&gt;
root@ldap-lb1:/usr/local/hobbynet/bin# netstat -n | grep 389&lt;br /&gt;
tcp        0      0 172.31.8.4:36838        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:36836        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58112        ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58114        ESTABLISHED&lt;br /&gt;
&lt;br /&gt;
Functioneel door met ADS op beide servers in te loggen en een willekeurig veld in je eigen entry te wijzigen op lb1. Kijk of het gebeurd is op lb2 en wijzig het daar terug. Check op de andere server of het gebeurd is. Er kan een zekere vertraging in optreden.&lt;br /&gt;
&lt;br /&gt;
Stel er is een nieuwe ou gemaakt: denk aan het bij werken van de dump en restore scripts.&lt;br /&gt;
&lt;br /&gt;
update dump-ldap.sh en restore-ldap.sh met de nieuwe ou&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
export tarieven.ldif op test server en import op ldap-lb1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==crontab==&lt;br /&gt;
 # script dat updates ophaalt (maar niet installeert), zodat nagios ze ook detecteert&lt;br /&gt;
 0 9 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
==LDAP Clients==&lt;br /&gt;
Er zijn meerdere LDAP clients. De meest populaire zijn Apache Directory Studio (&amp;quot;ADS&amp;quot;) en phpLdapAdmin (&amp;quot;PLA&amp;quot;).&amp;lt;br&amp;gt;&lt;br /&gt;
De eerste is veel uitgbreider maar vereist een Java Runtime Environment (&amp;quot;JRE&amp;quot;). Onder Windows is dat JRE(13) of (open)JDK-(13).&amp;lt;br&amp;gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Binnen Hobbynet wordt uitsluitend gebruik gemaakt van ADS.&lt;br /&gt;
&lt;br /&gt;
===StartTLS===&lt;br /&gt;
Aanbevolen wordt StartTLS op poort 389 te gebruiken. Alternatief is LDAPS op poort 636 maar dat is deprecated. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Windows===&lt;br /&gt;
&amp;lt;i&amp;gt;2019-10-31 HJV: Oude info, als referentie leuk, maar niet meer relevant&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Onder Windows moet met &#039;&#039;&#039;keytool.exe&#039;&#039;&#039; gewerkt worden. De uitleg heb ik van  [http://www.talkingtree.com/blog/index.cfm?mode=entry&amp;amp;entry=25AA75A4-45A6-2844-7CA3EECD842DB576 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:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Haal de benodigde bestanden op (op een Linux systeem):&lt;br /&gt;
wget http://www.cacert.org/certs/root.der -O root.der&lt;br /&gt;
wget http://www.cacert.org/certs/class3.der -O class3.der&lt;br /&gt;
copieer de bestanden naar de Windows omgeving in C:\Program Files (x86)\Java\jre6\lib\security.&lt;br /&gt;
&lt;br /&gt;
Open een commandwindow:&lt;br /&gt;
cd C:\Program Files (x86)\Java\jre6\lib\security&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass1 -file root.der&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass3 -file class3.der&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Linux===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS gebruik===&lt;br /&gt;
ADS kan erg handig zijn voor het snel dumpen van hele ou&#039;s in .ldif formaat. Zo&#039;n dump kan direct op een andere server worden ingelezen.&lt;br /&gt;
&lt;br /&gt;
===PhpLdapAdmin onder Linux===&lt;br /&gt;
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 [http://phpldapadmin.sourceforge.net/wiki/index.php/Server:server:tls phpldapadmin wiki].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# LDAP Defaults&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# See ldap.conf(5) for details&lt;br /&gt;
# This file should be world readable but not world writable.&lt;br /&gt;
&lt;br /&gt;
#BASE   dc=example,dc=com&lt;br /&gt;
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666&lt;br /&gt;
&lt;br /&gt;
#SIZELIMIT      12&lt;br /&gt;
#TIMELIMIT      15&lt;br /&gt;
#DEREF          never&lt;br /&gt;
TLS_CACERT      /etc/ssl/certs/CAcert_org.pem&lt;br /&gt;
TLS_CERT        /etc/ssl/private/hobby.nl.crt&lt;br /&gt;
TLS_KEY         /etc/ssl/private/hobby.nl.key&lt;br /&gt;
TLS_REQCERT     allow&lt;br /&gt;
#TLS_REQCERT never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Denk er wel aan na wijzigingen Apache te herstarten.&lt;br /&gt;
===PAM en NSS via LDAP===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Installeer &#039;&#039;&#039;libnss-ldapd&#039;&#039;&#039; om de benodigde libraries te verkrijgen. Apt-get zal tevens &#039;&#039;&#039;libpam-ldapd&#039;&#039;&#039;, &#039;&#039;&#039;nslcd&#039;&#039;&#039; en &#039;&#039;&#039;nscd&#039;&#039;&#039; binnen brengen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install libnss-ldapd auth-client-config ldap-utils&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
    libpam-ldapd nscd nslcd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Libnss-ldapd is een doorontwikkeling van libnss-ldap en bevat meerdere verbeteringen. Zie: [http://arthurdejong.org/nss-pam-ldapd/ deze site] van de ontwikkelaar. Bij de installatie wordt een user &#039;&#039;&#039;nslcd&#039;&#039;&#039; aangemaakt; denk erom die in de .tmpl bestanden te zetten!&lt;br /&gt;
  &lt;br /&gt;
nsswitch.conf laat zich configureren via &#039;&#039;&#039;auth-client-config&#039;&#039;&#039; maar lac_ldap is alleen aanwezig als &#039;&#039;&#039;ldap-auth-config&#039;&#039;&#039; ook is geinstalleerd. Zo niet gebruik dan de tweede regel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auth-client-config -t nss -p lac_ldap&lt;br /&gt;
auth-client-config -t nss -p ldap_example&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het resultaat is dat nsswitch.conf zowel in files (/etc/passwd etc.) zoekt als in ldap.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nsswitch.conf&lt;br /&gt;
#&lt;br /&gt;
# Example configuration of GNU Name Service Switch functionality.&lt;br /&gt;
# If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
# `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # passwd:         compat&lt;br /&gt;
passwd: files ldap&lt;br /&gt;
# pre_auth-client-config # group:          compat&lt;br /&gt;
group: files ldap&lt;br /&gt;
# pre_auth-client-config # shadow:         compat&lt;br /&gt;
shadow: files ldap&lt;br /&gt;
&lt;br /&gt;
hosts:          files dns&lt;br /&gt;
networks:       files&lt;br /&gt;
&lt;br /&gt;
protocols:      db files&lt;br /&gt;
services:       db files&lt;br /&gt;
ethers:         db files&lt;br /&gt;
rpc:            db files&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # netgroup:       nis&lt;br /&gt;
netgroup: nis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het aanpassen van de PAM bestanden gaat sinds enige releases met &#039;&#039;&#039;pam-auth-update&#039;&#039;&#039;. Kies in het menu voor zowel unix als ldap. Default wordt nu ldap authenticatie gebruikt voor uid &amp;gt;= 1000. Bij Hobbynet willen we vanaf 300 ldap gebruiken. Door een licht gemodificeerde versie van /usr/share/pam-configs/ldap te maken (ldap-hobbynet), kan ook voor de hobbynet instelling gekozen worden. Dit is de ldap-hobbynet versie:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Name: LDAP Authentication (uid&amp;gt;300)&lt;br /&gt;
Default: yes&lt;br /&gt;
Priority: 128&lt;br /&gt;
Auth-Type: Primary&lt;br /&gt;
Auth-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Auth:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 use_first_pass&lt;br /&gt;
Account-Type: Additional&lt;br /&gt;
Account:&lt;br /&gt;
        [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad]        pam_ldap.so minimum_uid=300&lt;br /&gt;
Password-Type: Primary&lt;br /&gt;
Password-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Password:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 try_first_pass&lt;br /&gt;
Session-Type: Additional&lt;br /&gt;
Session:&lt;br /&gt;
        [success=ok default=ignore]     pam_ldap.so minimum_uid=300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dit is in een standaard opzet van LDAP voldoende om zowel lokale gebruikers als gebruikers opgeslagen in LDAP, te laten inloggen en hun password te laten wijzigen. In de Hobbynet setup moet er echter nog meer gebeuren in de ACL&#039;s van de LDAP server configuratie. Omdat Hobbynet de laatste ACL regel heeft gewijzigd in een &#039;&#039;&#039;deny-all&#039;&#039;&#039;, is er een helper of proxy account nodig dat read access heeft of een aantal cruciale velden in de posixAccount objectClass. Zie verder de lsiting van nslcd.conf.&lt;br /&gt;
&lt;br /&gt;
Libnss-ldapd en libpam-ldapd hebben een gezamelijke daemon &#039;&#039;&#039;nslcd&#039;&#039;&#039; die z&#039;n configuratie uit &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039; haalt. Hierin is ook een voorziening voor het helper account. Aan het eind vande &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; staat de voorziening voor host-based login. Als het attribute &#039;&#039;&#039;host&#039;&#039;&#039; de fqdn of alleen de host naam bevat, bepaald dat of inloggen op die host mogelijk is. &#039;&#039;&#039;*&#039;&#039;&#039; staat inloggen op alle hosts toe.&lt;br /&gt;
&lt;br /&gt;
Eventueel kan het daemon proces voor debugging doeleinden ook als command (&#039;&#039;&#039;nslcd -d&#039;&#039;&#039;) gestart worden. Om de bevragingen van de LDAP server wat te verminderen, kan &#039;&#039;&#039;nscd&#039;&#039;&#039; voor caching zorgen. Deze cache daemon heeft zijn eigen configuratie bestand: &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039;. De default instellingen zijn goed; eventueel kan de logging naar een bestand gestuurd worden.&lt;br /&gt;
&lt;br /&gt;
Verbinding met de LDAP server kan met StartTLS beveiligd worden. Hier de inhoud van nslcd.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nslcd.conf&lt;br /&gt;
# nslcd configuration file. See nslcd.conf(5)&lt;br /&gt;
# for details.&lt;br /&gt;
&lt;br /&gt;
# The user and group nslcd should run as.&lt;br /&gt;
uid nslcd&lt;br /&gt;
gid nslcd&lt;br /&gt;
&lt;br /&gt;
# log location and level&lt;br /&gt;
#log /var/log/nslcd.log debug&lt;br /&gt;
&lt;br /&gt;
# The location at which the LDAP server(s) should be reachable.&lt;br /&gt;
uri ldap://ldap2-int.hobby.nl/&lt;br /&gt;
&lt;br /&gt;
# The search base that will be used for all queries.&lt;br /&gt;
base dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# Other base mappings&lt;br /&gt;
base   group  ou=groups,dc=hcc,dc=nl&lt;br /&gt;
base   passwd ou=users,dc=hcc,dc=nl&lt;br /&gt;
base   shadow ou=users,dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# The search scope.&lt;br /&gt;
#scope sub&lt;br /&gt;
&lt;br /&gt;
# The LDAP protocol version to use.&lt;br /&gt;
ldap_version 3&lt;br /&gt;
&lt;br /&gt;
# The DN to bind with for normal lookups.&lt;br /&gt;
#binddn cn=annonymous,dc=example,dc=net&lt;br /&gt;
#bindpw secret&lt;br /&gt;
binddn cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&lt;br /&gt;
bindpw xxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
# The DN used for password modifications by root.&lt;br /&gt;
#rootpwmoddn cn=admin,dc=example,dc=com&lt;br /&gt;
&lt;br /&gt;
# SSL options&lt;br /&gt;
ssl off&lt;br /&gt;
ssl start_tls&lt;br /&gt;
#tls_reqcert never&lt;br /&gt;
tls_cacertfile /etc/ssl/certs/cacert.org.pem&lt;br /&gt;
#tls_cert /etc/ssl/private/server.crt&lt;br /&gt;
#tls_key /etc/ssl/private/server.key&lt;br /&gt;
&lt;br /&gt;
# The minimum uid&lt;br /&gt;
nss_min_uid 300&lt;br /&gt;
&lt;br /&gt;
pam_authz_search (&amp;amp;(objectClass=posixAccount)(uid=$username)(|(host=$hostname)(host=$fqdn)(host=\\*)))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===users en groepen toevoegen===&lt;br /&gt;
Hiervoor moet &#039;&#039;&#039;ldapscripts&#039;&#039;&#039; zijn geïnstalleerd. Dit is het geval op de ldap-lb1 server. Dat levert de volgende extra commando&#039;s op:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldaprenamemachine&lt;br /&gt;
ldapadduser&lt;br /&gt;
ldapdeleteuserfromgroup&lt;br /&gt;
ldapfinger&lt;br /&gt;
ldapid&lt;br /&gt;
ldapgid&lt;br /&gt;
ldapmodifyuser&lt;br /&gt;
ldaprenameuser&lt;br /&gt;
lsldap&lt;br /&gt;
ldapaddusertogroup&lt;br /&gt;
ldapsetpasswd&lt;br /&gt;
ldapinit&lt;br /&gt;
ldapaddgroup&lt;br /&gt;
ldapdeletegroup&lt;br /&gt;
ldapmodifygroup&lt;br /&gt;
ldapdeletemachine&lt;br /&gt;
ldaprenamegroup&lt;br /&gt;
ldapaddmachine&lt;br /&gt;
ldapmodifymachine&lt;br /&gt;
ldapsetprimarygroup&lt;br /&gt;
ldapdeleteuser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Meest gebruikt zijn &#039;&#039;&#039;ldapaddgroup, ldapadduser, ldapsetpasswd&#039;&#039;&#039;.  &lt;br /&gt;
Er zijn manpages maar er is ook uitgebreide uitleg in de [https://help.ubuntu.com/14.04/serverguide/openldap-server.html Ubuntu server guide]. Omdat wij het automatisch maken van de home dir uit hebben staan, moet die met de hand aangemaakt worden en moet de owner goed gezet worden.&lt;br /&gt;
&lt;br /&gt;
===host-based login===&lt;br /&gt;
Met een kleine uitbreiding in het schema van de LDAP server, kan host-based login gerealiseerd worden. Ook in de &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; is een uitbreiding nodig.&lt;br /&gt;
&lt;br /&gt;
In de LDAP server dient de objectClass &#039;&#039;&#039;hostObject&#039;&#039;&#039; aan de entries in de ou=users toegevoegd te worden. Deze (auxilary) objectClass brengt slechts één attribute met zich mee: &#039;&#039;&#039;host&#039;&#039;&#039;. De regel in nslcd.conf checkt of één van de waarden van &#039;&#039;&#039;host&#039;&#039;&#039; gelijk is aan de naam van de server waarop ingelogd wordt. De waarde &#039;&#039;&#039;*&#039;&#039;&#039; geldt als wildcard. Zie de regel &#039;&#039;&lt;br /&gt;
&#039;pam_authz_search&#039;&#039;&#039;&#039; in &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Password aanpassen===&lt;br /&gt;
Via LDAP ingelogde gebruikers kunnen net als lokale gebruikers hun wachtwoord met &#039;&#039;&#039;passwd&#039;&#039;&#039; wijzigen. Wel moet aan de eisen in de LDAP ppolicy module voldaan worden.&lt;br /&gt;
&lt;br /&gt;
==PHP scripting==&lt;br /&gt;
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 &#039;&#039;&#039;/usr/local/hobbynet/bin&#039;&#039;&#039; directory.&lt;br /&gt;
Voor de php-scripting zijn enkele php7.x pakketten nodig. Installeer deze met apt-get. Het gaat om:&lt;br /&gt;
* php-cli&lt;br /&gt;
* php-ldap&lt;br /&gt;
&lt;br /&gt;
== Apache authenticatie via LDAP ==&lt;br /&gt;
In plaats van .htpassword authenticatie, kan ook LDAP gebruikt worden. Activeer daartoe de Apache module&lt;br /&gt;
&#039;authnz_ldap&#039;.&lt;br /&gt;
 a2enmod authnz_ldap&lt;br /&gt;
Denk er om dat dit in een loadbalanced situatie op beide servers gedaan dient te worden!&lt;br /&gt;
&lt;br /&gt;
=== Voorbeeld van een LDAP configuratie in de Apache config ===&lt;br /&gt;
(alleen als voorbeeld, niet zo gebruiken!)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# // 1) Hobbynet webmaster&lt;br /&gt;
# // 2) Vraagbaak medewerker van een willekeurige groepering&lt;br /&gt;
# (|(hccRol=*#VRBK)(hccRol=HN#WM))&lt;br /&gt;
  &amp;lt;Location &amp;quot;/apps/vraagbaak&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;RequireAll&amp;gt;&lt;br /&gt;
      Authname &amp;quot;HCC!vraagbaak (gebruik uw hcc.nl gebruikersnaam/wachtwoord)&amp;quot;&lt;br /&gt;
      AuthType Basic&lt;br /&gt;
      AuthBasicProvider ldap&lt;br /&gt;
      AuthLDAPUrl ldap://hcc-ldap-int.hobby.nl/ou=leden,dc=hcc,dc=nl?hccLogin??(|(hccRol=*#VRBK)(hccRol=HN#WM))(hccProfiel=TRUE) TLS&lt;br /&gt;
      require valid-user&lt;br /&gt;
    &amp;lt;/RequireAll&amp;gt;&lt;br /&gt;
  &amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hoe kan LDAP veilig gebruikt worden vanuit Apache===&lt;br /&gt;
Zet een script neer in de gebruikersomgeving, en gebruik mod_authz_external. Doe de controle vervolgens via de XML-RPC server.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zie [[Kadernet]] voor een voorbeeld.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== TODO lijst ==&lt;br /&gt;
&#039;&#039;Dit is een lijst in wording, graag aanvullen&#039;&#039; &lt;br /&gt;
* &#039;dun&#039; loadbalancer script maken om te controleren dat LDAP echt luistert&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79049</id>
		<title>LDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79049"/>
		<updated>2020-12-10T20:44:40Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* Loadbalanced */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introductie==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==LDAP server keuze==&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Loadbalanced==&lt;br /&gt;
Er zijn twee servers (ldap-lb1 en ldap-lb2) die achter een loadbalancer in preferred server mode staan 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.&lt;br /&gt;
&lt;br /&gt;
Tevens zijn er een test en een development server: ldap-test en ldap-dev.&lt;br /&gt;
&lt;br /&gt;
==Installatie==&lt;br /&gt;
Installatie van OpenLDAP is simpel:&lt;br /&gt;
 aptitude install slapd ldap-utils&lt;br /&gt;
Omdat er gebruikgemaakt wordt van php scripts, is het ook nodig &#039;&#039;&#039;php-cli&#039;&#039;&#039; en &#039;&#039;&#039;php-ldap&#039;&#039;&#039; te installeren. De configuratie van OpenLDAP is sinds Karmic Koala iets gecompliceerder geworden. &#039;cn=config&#039; 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 &amp;quot;dpkg-reconfigure slapd&amp;quot; zet alleen de skeleton configuratie terug. Je moet zelf de database, root dn en acl&#039;s opzetten (als root of met sudo). Run  &#039;&#039;&#039;dpkg-reconfigure slapd&#039;&#039;&#039; om terug te gaan naar een lege directory. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
UPDATE: bij de upgrade naar 16.04.1 zijn proefondervindelijk nog wat extra handelingen nodig gebleken.&amp;lt;br&amp;gt;&lt;br /&gt;
XML-RPC server updaten naar Ubuntu 16.04. WIP!&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- apt-get install phpmyadmin&lt;br /&gt;
- apt-get install aptitude &lt;br /&gt;
- apt-get install php-xmlrpc&lt;br /&gt;
- apt-get install php-ldap&lt;br /&gt;
- phpenmod xml&lt;br /&gt;
- phpenmod mysqli&lt;br /&gt;
  (&#039;php -m&#039; toont de geactiveerde modules)&lt;br /&gt;
- apache2ctl restart&lt;br /&gt;
&lt;br /&gt;
phpmyadmin werkt niet:&lt;br /&gt;
- apt-get install php-mbstring&lt;br /&gt;
- apt-get install php-gettext&lt;br /&gt;
&lt;br /&gt;
ontbrekende pakketten volgens hjv:&lt;br /&gt;
&lt;br /&gt;
apt-get install aptitude &lt;br /&gt;
apt-get install phpmyadmin&lt;br /&gt;
apt-get install php-mbstring&lt;br /&gt;
apt-get install php-gettext&lt;br /&gt;
apt-get install php-xmlrpc&lt;br /&gt;
apt-get install php-ldap&lt;br /&gt;
apt-get install mysql-server&lt;br /&gt;
apt-get install ldapscripts&lt;br /&gt;
apt-get install php-xml&lt;br /&gt;
apt-get install slapd&lt;br /&gt;
apt-get install ldap-utils&lt;br /&gt;
a2enmod ssl&lt;br /&gt;
&lt;br /&gt;
* Voer de laatste stappen uit, zoals beschreven in de Hobbynet wiki: *&lt;br /&gt;
&lt;br /&gt;
- openldap moet lid zijn van de groep ssl-cert!&lt;br /&gt;
apt-get install ssl-cert&lt;br /&gt;
adduser openldap ssl-cert&lt;br /&gt;
(of vi /etc/group&lt;br /&gt;
    ssl-cert:x:116:openldap)&lt;br /&gt;
&lt;br /&gt;
- Zorg dat de LDAP daemon bij de certificaten kan komen. &lt;br /&gt;
LET OP: op alle hobbynet servers staan de certificaten in /disk/site/etc/ssl/hobby.nl/&lt;br /&gt;
 chgrp ssl-cert /disk/site/etc/ssl/hobby.nl/hobby.nl.*&lt;br /&gt;
 chmod 440      /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
en dus niet langer&lt;br /&gt;
 chgrp ssl-cert /etc/ssl/private/hobby.nl.*&lt;br /&gt;
 chmod 440      /etc/ssl/private/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
- Vertel LDAP (en PHP) clients welke certificaten toegestaan zijn&lt;br /&gt;
(2017-09-23: verouderde info, niet langer in gebruik)&lt;br /&gt;
 vi /etc/ldap/ldap.conf&lt;br /&gt;
 TLS_CERT        /etc/ssl/private/hobby.nl.crt&lt;br /&gt;
 TLS_KEY         /etc/ssl/private/hobby.nl.key&lt;br /&gt;
 TLS_REQCERT     allow&lt;br /&gt;
&lt;br /&gt;
- mysql laat het bestand ibdata1 ongelimiteerd groeien (InnoDB bestanden)&lt;br /&gt;
 /etc/mysql/mysql.conf.d/innodb_file_per_table.cnf&lt;br /&gt;
 [mysql]&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
&lt;br /&gt;
=============&lt;br /&gt;
Hobbynet aanpassingen&lt;br /&gt;
/etc/bash.bashrc&lt;br /&gt;
export http_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export https_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export ftp_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Locatie bestanden===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Alle ldif em tmpl bestanden gaan naar /usr/local/hobbynet/lib&lt;br /&gt;
* init_ldap en andere scripts gaan naar /usr/local/hobbynet/bin&lt;br /&gt;
* alle data bestanden (dumps) en update ldifs gaan naar /usr/local/hobbynet/data&lt;br /&gt;
* etc/ldap/schema/hcc_schema.* gaan naar /etc/ldap/schema&lt;br /&gt;
* etc/ldap/schema/ppolicy.ldif gaat naar /etc/ldap/schema&lt;br /&gt;
&lt;br /&gt;
==Initiële database==&lt;br /&gt;
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&#039;s) erin. Alleen zijn er geen leden geladen in de ou=leden en ou=inactieve_leden.&lt;br /&gt;
===slapd.init.ldif ===&lt;br /&gt;
Bij installatie/reconfiguratie wordt /usr/share/slapd/slapd.init.ldif ingelezen. Zie aldaar indien nodig.&lt;br /&gt;
&lt;br /&gt;
==init_ldap script==&lt;br /&gt;
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 &#039;&#039;&#039;cn=admin,dc=hcc,dc=nl&#039;&#039;&#039; 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 &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; laadt vervolgens de laatste dump terug. Bij wijzigingen aan het schema is het raadzaam altijd een &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; te doen zodat een later een actuele dump kan worden teruggeladen.&lt;br /&gt;
&lt;br /&gt;
Het (plain text) password van cn=admin,dc=hcc,dc=nl moet bij het aanroepen van &#039;&#039;&#039;init_ldap&#039;&#039;&#039; op de commandline worden meegegeven. Tijdens de dpkg-reconfigure moet het password nog 2x gegeven worden. Lees eventueel ook de [http://www.openldap.org/doc/admin/ OpenLDAP Admin Guide].&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* voorbereidingen om &amp;quot;dpkg-reconfigure slapd&amp;quot; te draaien&lt;br /&gt;
* definities van input files&lt;br /&gt;
* check host&lt;br /&gt;
* bouwen van het skelet van de nieuwe directory&lt;br /&gt;
Zie voor details van de scripts &#039;&#039;&#039;init_ldap&#039;&#039;&#039;, &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; en &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; op een van de servers (in /usr/local/hobbynet/bin).&lt;br /&gt;
&lt;br /&gt;
==onderdelen van init_ldap==&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===add-schema.ldif===&lt;br /&gt;
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. &lt;br /&gt;
* Hiertoe wordt het onderstaande schema in /etc/ldap/schema geplaatst als hcc_schema.schema. &lt;br /&gt;
* Vervolgens worden de stappen uitgevoerd zoals beschreven in de [https://help.ubuntu.com/11.10/serverguide/C/openldap-server.html Ubuntu Server guide], onder &#039;&#039;&#039;Modifying the slapd Configuration Database&#039;&#039;&#039;. &lt;br /&gt;
* De resulterende output file &#039;&#039;&#039;cn=hcc_schema.ldif&#039;&#039;&#039; moet dan nog naar /etc/ldap/schema/hcc_schema.ldif gecopieerd worden. &lt;br /&gt;
Als dit proces herhaald moet worden, start dan met een lege output directory en verwijder een eventueel achtergebleven cn=hcc_schema.ldif bestand. &lt;br /&gt;
&lt;br /&gt;
De extra schema&#039;s worden middels een &#039;&#039;&#039;include&#039;&#039;&#039; toegevoegd. &#039;&#039;&#039;Ppolicy&#039;&#039;&#039; is op gelijke wijze als &#039;&#039;&#039;hcc_schema&#039;&#039;&#039; tot .ldif geconverteerd. Alle stappen om een nieuwe &#039;&#039;&#039;hcc-schema.ldif&#039;&#039;&#039; te maken zijn gescript in &#039;&#039;&#039;upd_schema&#039;&#039;&#039;. In &#039;&#039;&#039;init_ldap&#039;&#039;&#039; wordt het eigen schema en de password policy geladen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-schema.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
include: file:///etc/ldap/schema/hcc_schema.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ppolicy.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ldapns.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====schema updates====&lt;br /&gt;
Soms wordt een attribute toegevoegd of gewijzigd. Hiertoe dient het bestand hcc_schema.schema in /usr/local/hobbynet/etc/ldap/schema, gewijzigd te worden. Daarna dient er een ldif versie van gemaakt te worden. Gebruik hiervoor &#039;&#039;&#039;upd_schema.sh&#039;&#039;&#039; in dezelfde directory. De resulterende hcc_schema.ldif wordt in dit script naar /etc/ldap/schema gecopieërd. Bij grote wijzigingen is het aan te bevelen door de hele rebuild cycle te gaan (dump, init, restore). Bij triviale aanpassingen zou hcc_schema.ldif ook &#039;&#039;&#039;direct&#039;&#039;&#039; in de actieve directory geplaatst kunnen worden, gevolgd door slechts een &#039;&#039;&#039;service slapd restart&#039;&#039;&#039;. Gebruik hiervoor (blijf in de lokale schema directory):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp &amp;quot;ldif_output/cn=config/cn=schema/cn={14}hcc_schema.ldif&amp;quot; &amp;quot;/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}hcc_schema.ldif&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
LET OP: De nummers tussen accolades zijn bepaald door de volgorde van andere scripts! Zolang geen andere schema&#039;s worden toegevoegd zullen ze niet veranderen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ook kan met de ldap-tools gewerkt worden. Gebruik ldapsearch en ldapmodify, eventueel met de -f optie om een voorbereide serie opdrachten uit te voeren. Gebruik ldapsearch om eerst de structuur te vinden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier een voorbeeld om een objectClass aan te passen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat pas_aan.ldif&lt;br /&gt;
dn: cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
delete: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description ) )&lt;br /&gt;
-&lt;br /&gt;
add: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description $ hccIg ) )&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
$sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f pas_aan.ldif &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_config.ldif===&lt;br /&gt;
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 &#039;&#039;&#039;STATS&#039;&#039;&#039; gezet. Dit geeft niet teveel logging maar is toch goed bruikbaar. Om extra logging te krijgen op b.v. ACL&#039;s, verander olcLogLevel dan in &amp;quot;stats ACL&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Dit template wordt tijdens het draaien van het init_ldap script gecopieerd naar modify-config.ldif. Eventueel kan met place holders gewerkt worden (@...@), dit om op alle servers (ook test servers) één en hetzelfde script te kunnen gebruiken. Er zijn nog enkele van deze templates. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## modify-config.hobbynet            ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
replace: olcLogLevel&lt;br /&gt;
olcLogLevel: stats&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCACertificateFile&lt;br /&gt;
olcTLSCACertificateFile: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCertificateFile&lt;br /&gt;
olcTLSCertificateFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCertificateKeyFile&lt;br /&gt;
olcTLSCertificateKeyFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Om de logging in een apart bestand te krijgen moet in /etc/rsyslog.d een extra bestand &#039;&#039;&#039;openldap.conf&#039;&#039;&#039; geplaatst worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local4.*   -/var/log/openldap.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Tevens willen we logrotate op dit bestand. Plaats in /etc/logrotate.d het bestand &#039;&#039;&#039;openldap&#039;&#039;&#039; met de volgende inhoud&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/log/openldap.log&lt;br /&gt;
{&lt;br /&gt;
        rotate 4&lt;br /&gt;
        weekly&lt;br /&gt;
        missingok&lt;br /&gt;
        notifempty&lt;br /&gt;
        compress&lt;br /&gt;
        delaycompress&lt;br /&gt;
        sharedscripts&lt;br /&gt;
        postrotate&lt;br /&gt;
                reload rsyslog &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 || true&lt;br /&gt;
        endscript&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify-hdb.ldif===&lt;br /&gt;
Hier worden de wijzigingen op de backend db gemaakt. Er worden een aantal attributes ge-indexeerd en de search SizeLimit wordt op &#039;&#039;&#039;unlimited&#039;&#039;&#039; gezet. De waarden die in DB_CONFIG moeten komen (Berkely DB parameters) staan ook in dit bestand. Deze versie is outdated. De ACL regels zijn drastisch gewijzigd. Raadpleeg altijd de laatste versie op de server zelf.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## modify-hdb.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
replace: olcAccess&lt;br /&gt;
#&lt;br /&gt;
# hobbynetlogin heeft lees rechten op ou=users&lt;br /&gt;
olcAccess: to attrs=@posixAccount,@posixGroup,@shadowAccount,@hostObject&lt;br /&gt;
  by dn=&amp;quot;cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# drupal/test moet hccOptIn kunnen schrijven vanaf de&lt;br /&gt;
# profiel pagina. Overige klanten kunnen hccOptin&lt;br /&gt;
# alleen lezen. self mag schrijven&lt;br /&gt;
olcAccess: to attrs=hccOptIn&lt;br /&gt;
  by self write&lt;br /&gt;
  by dn=&amp;quot;cn=drupal-hcc-nl,ou=klanten,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# anonieme klanten moeten kunnen inloggen&lt;br /&gt;
# en mogen hun eigen password wijzigen&lt;br /&gt;
olcAccess: to attrs=userPassword,shadowLastChange&lt;br /&gt;
  by self write&lt;br /&gt;
  by anonymous auth&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# user mag enkele eigen attr wijzigen&lt;br /&gt;
olcAccess: to attrs=hccLogin,hccPseudoniem,hccKaderPassword&lt;br /&gt;
  by self write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# beheerders hebben schrijfrechten op alles (updateDN)&lt;br /&gt;
# klanten hebben alleen lees rechten op alles (readDN)&lt;br /&gt;
# self mag  lezen&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by self read&lt;br /&gt;
  by dn=&amp;quot;cn=xml-hoge-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn=&amp;quot;cn=xml-lage-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by dn.one=&amp;quot;ou=beheer,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn.one=&amp;quot;ou=klanten,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# helpdesk heeft leesrechten op ou=leden&lt;br /&gt;
olcAccess: to attrs=@hccOrgPerson,@hccKaderFunctie&lt;br /&gt;
  by dn.one=&amp;quot;ou=helpdesk,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# partners mogen een paar attrs lezen&lt;br /&gt;
olcAccess: to attrs=hccLidNummer,hccPostcode,hccPostcodeZoekveld&lt;br /&gt;
  by dn.one=&amp;quot;ou=partners,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
#&lt;br /&gt;
# iedereen moet (pseudo attr) entry en objectClass kunnen lezen&lt;br /&gt;
olcAccess: to attrs=entry,objectClass&lt;br /&gt;
  by * read&lt;br /&gt;
#&lt;br /&gt;
# vangnet: blokkeer alle toegang tot de overige attrs.&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by * none&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbDirectory&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
-&lt;br /&gt;
replace: olcSizeLimit&lt;br /&gt;
olcSizeLimit: 100000&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbCachesize&lt;br /&gt;
olcDbCachesize: 200000&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbCheckpoint&lt;br /&gt;
olcDbCheckpoint: 1024 5&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbConfig&lt;br /&gt;
olcDbConfig: set_cachesize 0 536870912 0&lt;br /&gt;
olcDbConfig: set_lk_max_objects 1000&lt;br /&gt;
olcDbConfig: set_lk_max_locks 1000&lt;br /&gt;
olcDbConfig: set_lk_max_lockers 1000&lt;br /&gt;
olcDbConfig: set_flags DB_LOG_AUTOREMOVE&lt;br /&gt;
olcDbConfig: set_flags DB_TXN_NOSYNC&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbIDLcacheSize&lt;br /&gt;
olcDbIDLcacheSize: 600000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_index.ldif===&lt;br /&gt;
Een kale configuratie is heel snel voor wat betreft het opnieuw vullen met gegevens. Bij het aanmaken van een verse LDAP database worden er dan ook zo min mogelijk indexen aangemaakt.&amp;lt;br&amp;gt;&lt;br /&gt;
Zodra de inhoud is ingelezen kunnen de &#039;echte&#039; indexen aangemaakt worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## modify-index.ldif                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
replace: olcDbIndex&lt;br /&gt;
olcDbIndex: default pres,eq&lt;br /&gt;
olcDbIndex: objectClass,entryUUID,entryCSN eq&lt;br /&gt;
olcDbIndex: hccLidNummer,hccLogin,hccForumLogin eq&lt;br /&gt;
olcDbIndex: uid,uidNumber,gidNumber,memberUid,member eq&lt;br /&gt;
olcDbIndex: cn,host,hccPseudoniem,hccOptin,hccLocatie eq&lt;br /&gt;
olcDbIndex: sn,hccPostcodeZoekveld,hccIg,hccRegio eq,subfinal&lt;br /&gt;
olcDbIndex: hccRol,hccBezoek eq,pres,subfinal&lt;br /&gt;
olcDbIndex: hccBulletins pres&lt;br /&gt;
olcDbIndex: aboNummer eq&lt;br /&gt;
olcDbIndex: aboPostcodeZoekveld eq,subfinal&lt;br /&gt;
olcDbIndex: mail,mailHccnet,hccKaderMail pres,eq&lt;br /&gt;
olcDbIndex: hccProfiel pres&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ppolicy overlay===&lt;br /&gt;
* vanuit LDAP de minimale lengte van een wachtwoord afdwingen&lt;br /&gt;
* in LDAP SSHA versleuteling activeren&amp;lt;br&amp;gt;&lt;br /&gt;
(olcPPolicyHashCleartext: TRUE)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-ppolicy.ldif                  ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module, cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectClass: olcModuleList&lt;br /&gt;
objectClass: top&lt;br /&gt;
olcModuleLoad: ppolicy&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=ppolicy,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcPPolicyConfig&lt;br /&gt;
olcOverlay: ppolicy&lt;br /&gt;
olcPPolicyDefault: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
olcPPolicyUseLockout: TRUE&lt;br /&gt;
olcPPolicyHashCleartext: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The default ppolicy looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dn: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
objectClass: pwdPolicy&lt;br /&gt;
objectClass: device&lt;br /&gt;
cn: default&lt;br /&gt;
pwdCheckQuality: 1&lt;br /&gt;
pwdMinLength: 8&lt;br /&gt;
pwdAttribute: 2.5.4.35&lt;br /&gt;
pwdAllowUserChange: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Syncrepl overlay===&lt;br /&gt;
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 [http://www.openldap.org/doc/admin/ LDAP Admin Guide]. &#039;&#039;&#039;Mirror configuratie is specifiek per server!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-syncrepl.tmpl                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
replace: olcServerID&lt;br /&gt;
olcServerID: @SID@&lt;br /&gt;
&lt;br /&gt;
dn: cn=module{0},cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcModuleLoad&lt;br /&gt;
olcModuleLoad: syncprov&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcSyncProvConfig&lt;br /&gt;
olcOverlay: syncprov&lt;br /&gt;
olcSpCheckpoint: 100 5&lt;br /&gt;
olcSpSessionlog: 100&lt;br /&gt;
&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcSyncRepl&lt;br /&gt;
olcSyncRepl: rid=@RID@&lt;br /&gt;
  provider=ldap://@PROVIDER@&lt;br /&gt;
  binddn=&amp;quot;cn=admin,dc=hcc,dc=nl&amp;quot; bindmethod=simple credentials=&amp;quot;@PASSWORD@&amp;quot;&lt;br /&gt;
  searchbase=&amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
  type=refreshAndPersist&lt;br /&gt;
  interval=00:00:00:10&lt;br /&gt;
  retry=&amp;quot;5 5 300 5&amp;quot;&lt;br /&gt;
  timeout=1&lt;br /&gt;
  starttls=yes&lt;br /&gt;
-&lt;br /&gt;
add: olcMirrorMode&lt;br /&gt;
olcMirrorMode: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
De andere server krijgt ServerID 2 en de provider is het IP adres van de andere server.&lt;br /&gt;
&lt;br /&gt;
===Unique overlay===&lt;br /&gt;
Deze overlay dient er voor te zorgen dat o.a het attribuut hccLogin een unieke waarde bevat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-unique.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module,cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectclass: olcModuleList&lt;br /&gt;
objectclass: top&lt;br /&gt;
olcmoduleload: unique&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=unique,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcUniqueConfig&lt;br /&gt;
olcOverlay: unique&lt;br /&gt;
olcUniqueAttribute: uid uidNumber hccLogin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SSL/TLS beveiliging==&lt;br /&gt;
Gebruik de juiste .pem bestanden in /etc/ssl/certs en /etc/ssl/private.&lt;br /&gt;
&lt;br /&gt;
We maken gebruik van een RapidSSL certificaat. Als dit niet standaard in Ubuntu bekend is, zet dan eerst GeoTrust_RapidSSL_-_ca-bundle.pem in de map /etc/ssl/certs neer. Voer nu een &#039;&#039;&#039;c_rehash .&#039;&#039;&#039; uit in /etc/ssl/certs om de cache te updaten (omdat GeoTrust_RapidSSL_-_ca-bundle.pem nieuw werd toegevoegd). &lt;br /&gt;
&lt;br /&gt;
De ownership is belangrijk. Hiertoe wordt de groep &amp;quot;openldap&amp;quot; toegevoegd aan de groep ssl-cert.&lt;br /&gt;
 adduser openldap ssl-cert&lt;br /&gt;
&lt;br /&gt;
Als dit fout gaat, doe dan eerst:&lt;br /&gt;
 apt-get install ssl-cert&lt;br /&gt;
&lt;br /&gt;
Zet het certificaat en de private key in de juiste groep:&lt;br /&gt;
 chgrp ssl-cert /etc/ssl/private/hobby.nl.*&lt;br /&gt;
 chmod 440      /etc/ssl/private/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
Het resultaat is dan als volgt:&lt;br /&gt;
 root@hcc-ldap-lb1:~# ls -l /etc/ssl/private/hcc* &lt;br /&gt;
 -rw-r--r-- 1 root     ssl-cert 1724 Nov 22 20:47 hobby.nl.crt&lt;br /&gt;
 -r--r----- 1 root     ssl-cert 1679 Nov 22 20:25 hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
 root@hcc-ldap-lb1:~# grep openldap /etc/group&lt;br /&gt;
 ssl-cert:x:114:openldap&lt;br /&gt;
 openldap:x:118:&lt;br /&gt;
&lt;br /&gt;
2020.12.09: Op een nieuwe Ubuntu installatie staat apparmor standaard aan. Weg ermee!&lt;br /&gt;
 apt remove --assume-yes --purge apparmor&lt;br /&gt;
&amp;lt;strike&amp;gt;Per september 2017 staan de certificaten in /disk/site/etc/ssl/hobby.nl, net als op alle andere servers. Omdat apparmor actief is moet deze directory worden toegevoegd aan /etc/apparmor.d/local/usr.sbin.slapd. Die file ziet er dan als volgt uit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Site-specific additions and overrides for usr.sbin.slapd.&lt;br /&gt;
# For more details, please see /etc/apparmor.d/local/README.&lt;br /&gt;
#include &amp;lt;abstractions/ssl_certs&amp;gt;&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/ r,&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/* r,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Openldap ook op poort 636 benaderd wordt (naast TLS op 389), moet in /etc/default/slapd ldaps:/// opgenomen worden bij de SLAPD_SERVICES.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;netstat -an&#039; dient dan 636 te laten zien voor zowel IPv4 als IPv6.&lt;br /&gt;
&lt;br /&gt;
Om de cn=config te zien kan je het volgende commando gebruiken:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config&lt;br /&gt;
&lt;br /&gt;
of, wat botter maar korter:&lt;br /&gt;
cat /etc/ldap/slapd.d/cn\=config.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Backup, initialize, restore==&lt;br /&gt;
Om het hele skelet van ldap in één keer te herstellen dient &#039;&#039;&#039;init_ldap&#039;&#039;&#039; gebruikt te worden. Als argument &#039;&#039;&#039;moet&#039;&#039;&#039; het admin beheer wachtwoord mee gegeven worden.&lt;br /&gt;
&lt;br /&gt;
===lokaal===&lt;br /&gt;
Backups kunnen gemaakt worden terwijl slapd draait maar geadviseerd wordt slapd te stoppen. Voor dumpen moet &#039;&#039;&#039;slapcat&#039;&#039;&#039; gebruikt worden. Backups kunnen gemaakt worden per database of een filter daarop, naar een ldif bestand.&lt;br /&gt;
 slapcat -l hcc-dump.ldif -b &amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
Dit maakt een dump van alles onder &#039;&#039;&#039;dc=hcc,dc=nl&#039;&#039;&#039; naar het bestand hcc-dump.ldif. Ook is het mogelijk het database nummer te gebruiken, config is altijd nummer 0, hdb is gewoonlijk 1.&lt;br /&gt;
&lt;br /&gt;
Het &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; script dumpt alle ou&#039;s in aparte .ldif bestanden; het omgekeerde doet &#039;&#039;&#039;restore_ldap&#039;&#039;&#039;.  &lt;br /&gt;
Terug inlezen kan alleen in een lege directory, dus direct nadat &#039;&#039;&#039;init_ldap&#039;&#039;&#039; is gedaan. Gebruik voor het terugplaatsen &#039;&#039;&#039;slapadd&#039;&#039;&#039;. Aan te bevelen is &#039;&#039;&#039;-c&#039;&#039;&#039; mee te geven zodat ondanks fouten doorgegaan wordt. &lt;br /&gt;
&lt;br /&gt;
Voor slapadd &#039;&#039;&#039;moet&#039;&#039;&#039; 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)&lt;br /&gt;
 /etc/init.d/slapd stop&lt;br /&gt;
 slapadd -l hcc-dump.ldif -w -c &amp;gt;errors.txt&lt;br /&gt;
 chown openldap:openldap /var/lib/ldap/*&lt;br /&gt;
 /etc/init.d/slapd start&lt;br /&gt;
&lt;br /&gt;
===remote===&lt;br /&gt;
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 &#039;&#039;&#039;backup-encrypted&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Recente lokale backups zijn te vinden in &#039;&#039;&#039;/usr/local/hobbynet/tmp&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Verse ldap maken===&lt;br /&gt;
Transactie log bij het toevoegen van b.v. een nieuwe ou:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Op beide servers:&lt;br /&gt;
schema van test server gecopieerd en geactiveerd&lt;br /&gt;
dump-ldap gedraaid&lt;br /&gt;
systemctl stop slapd.service &lt;br /&gt;
&lt;br /&gt;
Er is nu géén ldap service! Werk dus snel...&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb1&lt;br /&gt;
systemctl stop slapd.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
op ldap-lb2:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb2&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
systemctl start slapd.service&lt;br /&gt;
Beide slapd servers zijn in de lucht en moeten synchroniseren.&lt;br /&gt;
&lt;br /&gt;
op beide servers:&lt;br /&gt;
check replicatie (netstat en functioneel)&lt;br /&gt;
&lt;br /&gt;
root@ldap-lb1:/usr/local/hobbynet/bin# netstat -n | grep 389&lt;br /&gt;
tcp        0      0 172.31.8.4:36838        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:36836        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58112        ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58114        ESTABLISHED&lt;br /&gt;
&lt;br /&gt;
Functioneel door met ADS op beide servers in te loggen en een willekeurig veld in je eigen entry te wijzigen op lb1. Kijk of het gebeurd is op lb2 en wijzig het daar terug. Check op de andere server of het gebeurd is. Er kan een zekere vertraging in optreden.&lt;br /&gt;
&lt;br /&gt;
Stel er is een nieuwe ou gemaakt: denk aan het bij werken van de dump en restore scripts.&lt;br /&gt;
&lt;br /&gt;
update dump-ldap.sh en restore-ldap.sh met de nieuwe ou&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
export tarieven.ldif op test server en import op ldap-lb1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==crontab==&lt;br /&gt;
 # script dat updates ophaalt (maar niet installeert), zodat nagios ze ook detecteert&lt;br /&gt;
 0 9 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
==LDAP Clients==&lt;br /&gt;
Er zijn meerdere LDAP clients. De meest populaire zijn Apache Directory Studio (&amp;quot;ADS&amp;quot;) en phpLdapAdmin (&amp;quot;PLA&amp;quot;).&amp;lt;br&amp;gt;&lt;br /&gt;
De eerste is veel uitgbreider maar vereist een Java Runtime Environment (&amp;quot;JRE&amp;quot;). Onder Windows is dat JRE(13) of (open)JDK-(13).&amp;lt;br&amp;gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Binnen Hobbynet wordt uitsluitend gebruik gemaakt van ADS.&lt;br /&gt;
&lt;br /&gt;
===StartTLS===&lt;br /&gt;
Aanbevolen wordt StartTLS op poort 389 te gebruiken. Alternatief is LDAPS op poort 636 maar dat is deprecated. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Windows===&lt;br /&gt;
&amp;lt;i&amp;gt;2019-10-31 HJV: Oude info, als referentie leuk, maar niet meer relevant&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Onder Windows moet met &#039;&#039;&#039;keytool.exe&#039;&#039;&#039; gewerkt worden. De uitleg heb ik van  [http://www.talkingtree.com/blog/index.cfm?mode=entry&amp;amp;entry=25AA75A4-45A6-2844-7CA3EECD842DB576 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:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Haal de benodigde bestanden op (op een Linux systeem):&lt;br /&gt;
wget http://www.cacert.org/certs/root.der -O root.der&lt;br /&gt;
wget http://www.cacert.org/certs/class3.der -O class3.der&lt;br /&gt;
copieer de bestanden naar de Windows omgeving in C:\Program Files (x86)\Java\jre6\lib\security.&lt;br /&gt;
&lt;br /&gt;
Open een commandwindow:&lt;br /&gt;
cd C:\Program Files (x86)\Java\jre6\lib\security&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass1 -file root.der&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass3 -file class3.der&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Linux===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS gebruik===&lt;br /&gt;
ADS kan erg handig zijn voor het snel dumpen van hele ou&#039;s in .ldif formaat. Zo&#039;n dump kan direct op een andere server worden ingelezen.&lt;br /&gt;
&lt;br /&gt;
===PhpLdapAdmin onder Linux===&lt;br /&gt;
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 [http://phpldapadmin.sourceforge.net/wiki/index.php/Server:server:tls phpldapadmin wiki].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# LDAP Defaults&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# See ldap.conf(5) for details&lt;br /&gt;
# This file should be world readable but not world writable.&lt;br /&gt;
&lt;br /&gt;
#BASE   dc=example,dc=com&lt;br /&gt;
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666&lt;br /&gt;
&lt;br /&gt;
#SIZELIMIT      12&lt;br /&gt;
#TIMELIMIT      15&lt;br /&gt;
#DEREF          never&lt;br /&gt;
TLS_CACERT      /etc/ssl/certs/CAcert_org.pem&lt;br /&gt;
TLS_CERT        /etc/ssl/private/hobby.nl.crt&lt;br /&gt;
TLS_KEY         /etc/ssl/private/hobby.nl.key&lt;br /&gt;
TLS_REQCERT     allow&lt;br /&gt;
#TLS_REQCERT never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Denk er wel aan na wijzigingen Apache te herstarten.&lt;br /&gt;
===PAM en NSS via LDAP===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Installeer &#039;&#039;&#039;libnss-ldapd&#039;&#039;&#039; om de benodigde libraries te verkrijgen. Apt-get zal tevens &#039;&#039;&#039;libpam-ldapd&#039;&#039;&#039;, &#039;&#039;&#039;nslcd&#039;&#039;&#039; en &#039;&#039;&#039;nscd&#039;&#039;&#039; binnen brengen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install libnss-ldapd auth-client-config ldap-utils&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
    libpam-ldapd nscd nslcd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Libnss-ldapd is een doorontwikkeling van libnss-ldap en bevat meerdere verbeteringen. Zie: [http://arthurdejong.org/nss-pam-ldapd/ deze site] van de ontwikkelaar. Bij de installatie wordt een user &#039;&#039;&#039;nslcd&#039;&#039;&#039; aangemaakt; denk erom die in de .tmpl bestanden te zetten!&lt;br /&gt;
  &lt;br /&gt;
nsswitch.conf laat zich configureren via &#039;&#039;&#039;auth-client-config&#039;&#039;&#039; maar lac_ldap is alleen aanwezig als &#039;&#039;&#039;ldap-auth-config&#039;&#039;&#039; ook is geinstalleerd. Zo niet gebruik dan de tweede regel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auth-client-config -t nss -p lac_ldap&lt;br /&gt;
auth-client-config -t nss -p ldap_example&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het resultaat is dat nsswitch.conf zowel in files (/etc/passwd etc.) zoekt als in ldap.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nsswitch.conf&lt;br /&gt;
#&lt;br /&gt;
# Example configuration of GNU Name Service Switch functionality.&lt;br /&gt;
# If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
# `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # passwd:         compat&lt;br /&gt;
passwd: files ldap&lt;br /&gt;
# pre_auth-client-config # group:          compat&lt;br /&gt;
group: files ldap&lt;br /&gt;
# pre_auth-client-config # shadow:         compat&lt;br /&gt;
shadow: files ldap&lt;br /&gt;
&lt;br /&gt;
hosts:          files dns&lt;br /&gt;
networks:       files&lt;br /&gt;
&lt;br /&gt;
protocols:      db files&lt;br /&gt;
services:       db files&lt;br /&gt;
ethers:         db files&lt;br /&gt;
rpc:            db files&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # netgroup:       nis&lt;br /&gt;
netgroup: nis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het aanpassen van de PAM bestanden gaat sinds enige releases met &#039;&#039;&#039;pam-auth-update&#039;&#039;&#039;. Kies in het menu voor zowel unix als ldap. Default wordt nu ldap authenticatie gebruikt voor uid &amp;gt;= 1000. Bij Hobbynet willen we vanaf 300 ldap gebruiken. Door een licht gemodificeerde versie van /usr/share/pam-configs/ldap te maken (ldap-hobbynet), kan ook voor de hobbynet instelling gekozen worden. Dit is de ldap-hobbynet versie:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Name: LDAP Authentication (uid&amp;gt;300)&lt;br /&gt;
Default: yes&lt;br /&gt;
Priority: 128&lt;br /&gt;
Auth-Type: Primary&lt;br /&gt;
Auth-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Auth:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 use_first_pass&lt;br /&gt;
Account-Type: Additional&lt;br /&gt;
Account:&lt;br /&gt;
        [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad]        pam_ldap.so minimum_uid=300&lt;br /&gt;
Password-Type: Primary&lt;br /&gt;
Password-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Password:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 try_first_pass&lt;br /&gt;
Session-Type: Additional&lt;br /&gt;
Session:&lt;br /&gt;
        [success=ok default=ignore]     pam_ldap.so minimum_uid=300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dit is in een standaard opzet van LDAP voldoende om zowel lokale gebruikers als gebruikers opgeslagen in LDAP, te laten inloggen en hun password te laten wijzigen. In de Hobbynet setup moet er echter nog meer gebeuren in de ACL&#039;s van de LDAP server configuratie. Omdat Hobbynet de laatste ACL regel heeft gewijzigd in een &#039;&#039;&#039;deny-all&#039;&#039;&#039;, is er een helper of proxy account nodig dat read access heeft of een aantal cruciale velden in de posixAccount objectClass. Zie verder de lsiting van nslcd.conf.&lt;br /&gt;
&lt;br /&gt;
Libnss-ldapd en libpam-ldapd hebben een gezamelijke daemon &#039;&#039;&#039;nslcd&#039;&#039;&#039; die z&#039;n configuratie uit &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039; haalt. Hierin is ook een voorziening voor het helper account. Aan het eind vande &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; staat de voorziening voor host-based login. Als het attribute &#039;&#039;&#039;host&#039;&#039;&#039; de fqdn of alleen de host naam bevat, bepaald dat of inloggen op die host mogelijk is. &#039;&#039;&#039;*&#039;&#039;&#039; staat inloggen op alle hosts toe.&lt;br /&gt;
&lt;br /&gt;
Eventueel kan het daemon proces voor debugging doeleinden ook als command (&#039;&#039;&#039;nslcd -d&#039;&#039;&#039;) gestart worden. Om de bevragingen van de LDAP server wat te verminderen, kan &#039;&#039;&#039;nscd&#039;&#039;&#039; voor caching zorgen. Deze cache daemon heeft zijn eigen configuratie bestand: &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039;. De default instellingen zijn goed; eventueel kan de logging naar een bestand gestuurd worden.&lt;br /&gt;
&lt;br /&gt;
Verbinding met de LDAP server kan met StartTLS beveiligd worden. Hier de inhoud van nslcd.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nslcd.conf&lt;br /&gt;
# nslcd configuration file. See nslcd.conf(5)&lt;br /&gt;
# for details.&lt;br /&gt;
&lt;br /&gt;
# The user and group nslcd should run as.&lt;br /&gt;
uid nslcd&lt;br /&gt;
gid nslcd&lt;br /&gt;
&lt;br /&gt;
# log location and level&lt;br /&gt;
#log /var/log/nslcd.log debug&lt;br /&gt;
&lt;br /&gt;
# The location at which the LDAP server(s) should be reachable.&lt;br /&gt;
uri ldap://ldap2-int.hobby.nl/&lt;br /&gt;
&lt;br /&gt;
# The search base that will be used for all queries.&lt;br /&gt;
base dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# Other base mappings&lt;br /&gt;
base   group  ou=groups,dc=hcc,dc=nl&lt;br /&gt;
base   passwd ou=users,dc=hcc,dc=nl&lt;br /&gt;
base   shadow ou=users,dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# The search scope.&lt;br /&gt;
#scope sub&lt;br /&gt;
&lt;br /&gt;
# The LDAP protocol version to use.&lt;br /&gt;
ldap_version 3&lt;br /&gt;
&lt;br /&gt;
# The DN to bind with for normal lookups.&lt;br /&gt;
#binddn cn=annonymous,dc=example,dc=net&lt;br /&gt;
#bindpw secret&lt;br /&gt;
binddn cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&lt;br /&gt;
bindpw xxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
# The DN used for password modifications by root.&lt;br /&gt;
#rootpwmoddn cn=admin,dc=example,dc=com&lt;br /&gt;
&lt;br /&gt;
# SSL options&lt;br /&gt;
ssl off&lt;br /&gt;
ssl start_tls&lt;br /&gt;
#tls_reqcert never&lt;br /&gt;
tls_cacertfile /etc/ssl/certs/cacert.org.pem&lt;br /&gt;
#tls_cert /etc/ssl/private/server.crt&lt;br /&gt;
#tls_key /etc/ssl/private/server.key&lt;br /&gt;
&lt;br /&gt;
# The minimum uid&lt;br /&gt;
nss_min_uid 300&lt;br /&gt;
&lt;br /&gt;
pam_authz_search (&amp;amp;(objectClass=posixAccount)(uid=$username)(|(host=$hostname)(host=$fqdn)(host=\\*)))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===users en groepen toevoegen===&lt;br /&gt;
Hiervoor moet &#039;&#039;&#039;ldapscripts&#039;&#039;&#039; zijn geïnstalleerd. Dit is het geval op de ldap-lb1 server. Dat levert de volgende extra commando&#039;s op:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldaprenamemachine&lt;br /&gt;
ldapadduser&lt;br /&gt;
ldapdeleteuserfromgroup&lt;br /&gt;
ldapfinger&lt;br /&gt;
ldapid&lt;br /&gt;
ldapgid&lt;br /&gt;
ldapmodifyuser&lt;br /&gt;
ldaprenameuser&lt;br /&gt;
lsldap&lt;br /&gt;
ldapaddusertogroup&lt;br /&gt;
ldapsetpasswd&lt;br /&gt;
ldapinit&lt;br /&gt;
ldapaddgroup&lt;br /&gt;
ldapdeletegroup&lt;br /&gt;
ldapmodifygroup&lt;br /&gt;
ldapdeletemachine&lt;br /&gt;
ldaprenamegroup&lt;br /&gt;
ldapaddmachine&lt;br /&gt;
ldapmodifymachine&lt;br /&gt;
ldapsetprimarygroup&lt;br /&gt;
ldapdeleteuser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Meest gebruikt zijn &#039;&#039;&#039;ldapaddgroup, ldapadduser, ldapsetpasswd&#039;&#039;&#039;.  &lt;br /&gt;
Er zijn manpages maar er is ook uitgebreide uitleg in de [https://help.ubuntu.com/14.04/serverguide/openldap-server.html Ubuntu server guide]. Omdat wij het automatisch maken van de home dir uit hebben staan, moet die met de hand aangemaakt worden en moet de owner goed gezet worden.&lt;br /&gt;
&lt;br /&gt;
===host-based login===&lt;br /&gt;
Met een kleine uitbreiding in het schema van de LDAP server, kan host-based login gerealiseerd worden. Ook in de &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; is een uitbreiding nodig.&lt;br /&gt;
&lt;br /&gt;
In de LDAP server dient de objectClass &#039;&#039;&#039;hostObject&#039;&#039;&#039; aan de entries in de ou=users toegevoegd te worden. Deze (auxilary) objectClass brengt slechts één attribute met zich mee: &#039;&#039;&#039;host&#039;&#039;&#039;. De regel in nslcd.conf checkt of één van de waarden van &#039;&#039;&#039;host&#039;&#039;&#039; gelijk is aan de naam van de server waarop ingelogd wordt. De waarde &#039;&#039;&#039;*&#039;&#039;&#039; geldt als wildcard. Zie de regel &#039;&#039;&lt;br /&gt;
&#039;pam_authz_search&#039;&#039;&#039;&#039; in &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Password aanpassen===&lt;br /&gt;
Via LDAP ingelogde gebruikers kunnen net als lokale gebruikers hun wachtwoord met &#039;&#039;&#039;passwd&#039;&#039;&#039; wijzigen. Wel moet aan de eisen in de LDAP ppolicy module voldaan worden.&lt;br /&gt;
&lt;br /&gt;
==PHP scripting==&lt;br /&gt;
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 &#039;&#039;&#039;/usr/local/hobbynet/bin&#039;&#039;&#039; directory.&lt;br /&gt;
Voor de php-scripting zijn enkele php7.x pakketten nodig. Installeer deze met apt-get. Het gaat om:&lt;br /&gt;
* php-cli&lt;br /&gt;
* php-ldap&lt;br /&gt;
&lt;br /&gt;
== Apache authenticatie via LDAP ==&lt;br /&gt;
In plaats van .htpassword authenticatie, kan ook LDAP gebruikt worden. Activeer daartoe de Apache module&lt;br /&gt;
&#039;authnz_ldap&#039;.&lt;br /&gt;
 a2enmod authnz_ldap&lt;br /&gt;
Denk er om dat dit in een loadbalanced situatie op beide servers gedaan dient te worden!&lt;br /&gt;
&lt;br /&gt;
=== Voorbeeld van een LDAP configuratie in de Apache config ===&lt;br /&gt;
(alleen als voorbeeld, niet zo gebruiken!)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# // 1) Hobbynet webmaster&lt;br /&gt;
# // 2) Vraagbaak medewerker van een willekeurige groepering&lt;br /&gt;
# (|(hccRol=*#VRBK)(hccRol=HN#WM))&lt;br /&gt;
  &amp;lt;Location &amp;quot;/apps/vraagbaak&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;RequireAll&amp;gt;&lt;br /&gt;
      Authname &amp;quot;HCC!vraagbaak (gebruik uw hcc.nl gebruikersnaam/wachtwoord)&amp;quot;&lt;br /&gt;
      AuthType Basic&lt;br /&gt;
      AuthBasicProvider ldap&lt;br /&gt;
      AuthLDAPUrl ldap://hcc-ldap-int.hobby.nl/ou=leden,dc=hcc,dc=nl?hccLogin??(|(hccRol=*#VRBK)(hccRol=HN#WM))(hccProfiel=TRUE) TLS&lt;br /&gt;
      require valid-user&lt;br /&gt;
    &amp;lt;/RequireAll&amp;gt;&lt;br /&gt;
  &amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hoe kan LDAP veilig gebruikt worden vanuit Apache===&lt;br /&gt;
Zet een script neer in de gebruikersomgeving, en gebruik mod_authz_external. Doe de controle vervolgens via de XML-RPC server.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zie [[Kadernet]] voor een voorbeeld.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== TODO lijst ==&lt;br /&gt;
&#039;&#039;Dit is een lijst in wording, graag aanvullen&#039;&#039; &lt;br /&gt;
* &#039;dun&#039; loadbalancer script maken om te controleren dat LDAP echt luistert&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79048</id>
		<title>LDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=LDAP&amp;diff=79048"/>
		<updated>2020-12-10T20:43:01Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* Introductie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introductie==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==LDAP server keuze==&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
==Loadbalanced==&lt;br /&gt;
Er zijn twee servers (ldap-lb1 en ldap-lb2) die achter een loadbalancer in preferred server mode staan 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.&lt;br /&gt;
&lt;br /&gt;
==Installatie==&lt;br /&gt;
Installatie van OpenLDAP is simpel:&lt;br /&gt;
 aptitude install slapd ldap-utils&lt;br /&gt;
Omdat er gebruikgemaakt wordt van php scripts, is het ook nodig &#039;&#039;&#039;php-cli&#039;&#039;&#039; en &#039;&#039;&#039;php-ldap&#039;&#039;&#039; te installeren. De configuratie van OpenLDAP is sinds Karmic Koala iets gecompliceerder geworden. &#039;cn=config&#039; 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 &amp;quot;dpkg-reconfigure slapd&amp;quot; zet alleen de skeleton configuratie terug. Je moet zelf de database, root dn en acl&#039;s opzetten (als root of met sudo). Run  &#039;&#039;&#039;dpkg-reconfigure slapd&#039;&#039;&#039; om terug te gaan naar een lege directory. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
UPDATE: bij de upgrade naar 16.04.1 zijn proefondervindelijk nog wat extra handelingen nodig gebleken.&amp;lt;br&amp;gt;&lt;br /&gt;
XML-RPC server updaten naar Ubuntu 16.04. WIP!&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- apt-get install phpmyadmin&lt;br /&gt;
- apt-get install aptitude &lt;br /&gt;
- apt-get install php-xmlrpc&lt;br /&gt;
- apt-get install php-ldap&lt;br /&gt;
- phpenmod xml&lt;br /&gt;
- phpenmod mysqli&lt;br /&gt;
  (&#039;php -m&#039; toont de geactiveerde modules)&lt;br /&gt;
- apache2ctl restart&lt;br /&gt;
&lt;br /&gt;
phpmyadmin werkt niet:&lt;br /&gt;
- apt-get install php-mbstring&lt;br /&gt;
- apt-get install php-gettext&lt;br /&gt;
&lt;br /&gt;
ontbrekende pakketten volgens hjv:&lt;br /&gt;
&lt;br /&gt;
apt-get install aptitude &lt;br /&gt;
apt-get install phpmyadmin&lt;br /&gt;
apt-get install php-mbstring&lt;br /&gt;
apt-get install php-gettext&lt;br /&gt;
apt-get install php-xmlrpc&lt;br /&gt;
apt-get install php-ldap&lt;br /&gt;
apt-get install mysql-server&lt;br /&gt;
apt-get install ldapscripts&lt;br /&gt;
apt-get install php-xml&lt;br /&gt;
apt-get install slapd&lt;br /&gt;
apt-get install ldap-utils&lt;br /&gt;
a2enmod ssl&lt;br /&gt;
&lt;br /&gt;
* Voer de laatste stappen uit, zoals beschreven in de Hobbynet wiki: *&lt;br /&gt;
&lt;br /&gt;
- openldap moet lid zijn van de groep ssl-cert!&lt;br /&gt;
apt-get install ssl-cert&lt;br /&gt;
adduser openldap ssl-cert&lt;br /&gt;
(of vi /etc/group&lt;br /&gt;
    ssl-cert:x:116:openldap)&lt;br /&gt;
&lt;br /&gt;
- Zorg dat de LDAP daemon bij de certificaten kan komen. &lt;br /&gt;
LET OP: op alle hobbynet servers staan de certificaten in /disk/site/etc/ssl/hobby.nl/&lt;br /&gt;
 chgrp ssl-cert /disk/site/etc/ssl/hobby.nl/hobby.nl.*&lt;br /&gt;
 chmod 440      /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
en dus niet langer&lt;br /&gt;
 chgrp ssl-cert /etc/ssl/private/hobby.nl.*&lt;br /&gt;
 chmod 440      /etc/ssl/private/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
- Vertel LDAP (en PHP) clients welke certificaten toegestaan zijn&lt;br /&gt;
(2017-09-23: verouderde info, niet langer in gebruik)&lt;br /&gt;
 vi /etc/ldap/ldap.conf&lt;br /&gt;
 TLS_CERT        /etc/ssl/private/hobby.nl.crt&lt;br /&gt;
 TLS_KEY         /etc/ssl/private/hobby.nl.key&lt;br /&gt;
 TLS_REQCERT     allow&lt;br /&gt;
&lt;br /&gt;
- mysql laat het bestand ibdata1 ongelimiteerd groeien (InnoDB bestanden)&lt;br /&gt;
 /etc/mysql/mysql.conf.d/innodb_file_per_table.cnf&lt;br /&gt;
 [mysql]&lt;br /&gt;
 innodb_file_per_table&lt;br /&gt;
&lt;br /&gt;
=============&lt;br /&gt;
Hobbynet aanpassingen&lt;br /&gt;
/etc/bash.bashrc&lt;br /&gt;
export http_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export https_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
export ftp_proxy=http://squid-int.hobby.nl:3128&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Locatie bestanden===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Alle ldif em tmpl bestanden gaan naar /usr/local/hobbynet/lib&lt;br /&gt;
* init_ldap en andere scripts gaan naar /usr/local/hobbynet/bin&lt;br /&gt;
* alle data bestanden (dumps) en update ldifs gaan naar /usr/local/hobbynet/data&lt;br /&gt;
* etc/ldap/schema/hcc_schema.* gaan naar /etc/ldap/schema&lt;br /&gt;
* etc/ldap/schema/ppolicy.ldif gaat naar /etc/ldap/schema&lt;br /&gt;
&lt;br /&gt;
==Initiële database==&lt;br /&gt;
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&#039;s) erin. Alleen zijn er geen leden geladen in de ou=leden en ou=inactieve_leden.&lt;br /&gt;
===slapd.init.ldif ===&lt;br /&gt;
Bij installatie/reconfiguratie wordt /usr/share/slapd/slapd.init.ldif ingelezen. Zie aldaar indien nodig.&lt;br /&gt;
&lt;br /&gt;
==init_ldap script==&lt;br /&gt;
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 &#039;&#039;&#039;cn=admin,dc=hcc,dc=nl&#039;&#039;&#039; 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 &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; laadt vervolgens de laatste dump terug. Bij wijzigingen aan het schema is het raadzaam altijd een &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; te doen zodat een later een actuele dump kan worden teruggeladen.&lt;br /&gt;
&lt;br /&gt;
Het (plain text) password van cn=admin,dc=hcc,dc=nl moet bij het aanroepen van &#039;&#039;&#039;init_ldap&#039;&#039;&#039; op de commandline worden meegegeven. Tijdens de dpkg-reconfigure moet het password nog 2x gegeven worden. Lees eventueel ook de [http://www.openldap.org/doc/admin/ OpenLDAP Admin Guide].&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* voorbereidingen om &amp;quot;dpkg-reconfigure slapd&amp;quot; te draaien&lt;br /&gt;
* definities van input files&lt;br /&gt;
* check host&lt;br /&gt;
* bouwen van het skelet van de nieuwe directory&lt;br /&gt;
Zie voor details van de scripts &#039;&#039;&#039;init_ldap&#039;&#039;&#039;, &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; en &#039;&#039;&#039;restore_ldap&#039;&#039;&#039; op een van de servers (in /usr/local/hobbynet/bin).&lt;br /&gt;
&lt;br /&gt;
==onderdelen van init_ldap==&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===add-schema.ldif===&lt;br /&gt;
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. &lt;br /&gt;
* Hiertoe wordt het onderstaande schema in /etc/ldap/schema geplaatst als hcc_schema.schema. &lt;br /&gt;
* Vervolgens worden de stappen uitgevoerd zoals beschreven in de [https://help.ubuntu.com/11.10/serverguide/C/openldap-server.html Ubuntu Server guide], onder &#039;&#039;&#039;Modifying the slapd Configuration Database&#039;&#039;&#039;. &lt;br /&gt;
* De resulterende output file &#039;&#039;&#039;cn=hcc_schema.ldif&#039;&#039;&#039; moet dan nog naar /etc/ldap/schema/hcc_schema.ldif gecopieerd worden. &lt;br /&gt;
Als dit proces herhaald moet worden, start dan met een lege output directory en verwijder een eventueel achtergebleven cn=hcc_schema.ldif bestand. &lt;br /&gt;
&lt;br /&gt;
De extra schema&#039;s worden middels een &#039;&#039;&#039;include&#039;&#039;&#039; toegevoegd. &#039;&#039;&#039;Ppolicy&#039;&#039;&#039; is op gelijke wijze als &#039;&#039;&#039;hcc_schema&#039;&#039;&#039; tot .ldif geconverteerd. Alle stappen om een nieuwe &#039;&#039;&#039;hcc-schema.ldif&#039;&#039;&#039; te maken zijn gescript in &#039;&#039;&#039;upd_schema&#039;&#039;&#039;. In &#039;&#039;&#039;init_ldap&#039;&#039;&#039; wordt het eigen schema en de password policy geladen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-schema.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
include: file:///etc/ldap/schema/hcc_schema.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ppolicy.ldif&lt;br /&gt;
include: file:///etc/ldap/schema/ldapns.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====schema updates====&lt;br /&gt;
Soms wordt een attribute toegevoegd of gewijzigd. Hiertoe dient het bestand hcc_schema.schema in /usr/local/hobbynet/etc/ldap/schema, gewijzigd te worden. Daarna dient er een ldif versie van gemaakt te worden. Gebruik hiervoor &#039;&#039;&#039;upd_schema.sh&#039;&#039;&#039; in dezelfde directory. De resulterende hcc_schema.ldif wordt in dit script naar /etc/ldap/schema gecopieërd. Bij grote wijzigingen is het aan te bevelen door de hele rebuild cycle te gaan (dump, init, restore). Bij triviale aanpassingen zou hcc_schema.ldif ook &#039;&#039;&#039;direct&#039;&#039;&#039; in de actieve directory geplaatst kunnen worden, gevolgd door slechts een &#039;&#039;&#039;service slapd restart&#039;&#039;&#039;. Gebruik hiervoor (blijf in de lokale schema directory):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp &amp;quot;ldif_output/cn=config/cn=schema/cn={14}hcc_schema.ldif&amp;quot; &amp;quot;/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}hcc_schema.ldif&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
LET OP: De nummers tussen accolades zijn bepaald door de volgorde van andere scripts! Zolang geen andere schema&#039;s worden toegevoegd zullen ze niet veranderen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ook kan met de ldap-tools gewerkt worden. Gebruik ldapsearch en ldapmodify, eventueel met de -f optie om een voorbereide serie opdrachten uit te voeren. Gebruik ldapsearch om eerst de structuur te vinden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier een voorbeeld om een objectClass aan te passen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat pas_aan.ldif&lt;br /&gt;
dn: cn={4}hcc_schema,cn=schema,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
delete: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description ) )&lt;br /&gt;
-&lt;br /&gt;
add: olcObjectClasses&lt;br /&gt;
olcObjectClasses: {7}( 1.3.6.1.4.1.12795.2.8 NAME &#039;hccRelatieNaam&#039; \&lt;br /&gt;
   DESC &#039;Naam van een klant of partner&#039; SUP top STRUCTURAL MUST ( cn $userPassword )&lt;br /&gt;
MAY ( hccXmlIp4 $ hccXmlIp6 $ hccXmlAllow $ description $ hccIg ) )&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
$sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f pas_aan.ldif &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_config.ldif===&lt;br /&gt;
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 &#039;&#039;&#039;STATS&#039;&#039;&#039; gezet. Dit geeft niet teveel logging maar is toch goed bruikbaar. Om extra logging te krijgen op b.v. ACL&#039;s, verander olcLogLevel dan in &amp;quot;stats ACL&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Dit template wordt tijdens het draaien van het init_ldap script gecopieerd naar modify-config.ldif. Eventueel kan met place holders gewerkt worden (@...@), dit om op alle servers (ook test servers) één en hetzelfde script te kunnen gebruiken. Er zijn nog enkele van deze templates. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## modify-config.hobbynet            ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
replace: olcLogLevel&lt;br /&gt;
olcLogLevel: stats&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCACertificateFile&lt;br /&gt;
olcTLSCACertificateFile: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCertificateFile&lt;br /&gt;
olcTLSCertificateFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
-&lt;br /&gt;
replace: olcTLSCertificateKeyFile&lt;br /&gt;
olcTLSCertificateKeyFile: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Om de logging in een apart bestand te krijgen moet in /etc/rsyslog.d een extra bestand &#039;&#039;&#039;openldap.conf&#039;&#039;&#039; geplaatst worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local4.*   -/var/log/openldap.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Tevens willen we logrotate op dit bestand. Plaats in /etc/logrotate.d het bestand &#039;&#039;&#039;openldap&#039;&#039;&#039; met de volgende inhoud&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/log/openldap.log&lt;br /&gt;
{&lt;br /&gt;
        rotate 4&lt;br /&gt;
        weekly&lt;br /&gt;
        missingok&lt;br /&gt;
        notifempty&lt;br /&gt;
        compress&lt;br /&gt;
        delaycompress&lt;br /&gt;
        sharedscripts&lt;br /&gt;
        postrotate&lt;br /&gt;
                reload rsyslog &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 || true&lt;br /&gt;
        endscript&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify-hdb.ldif===&lt;br /&gt;
Hier worden de wijzigingen op de backend db gemaakt. Er worden een aantal attributes ge-indexeerd en de search SizeLimit wordt op &#039;&#039;&#039;unlimited&#039;&#039;&#039; gezet. De waarden die in DB_CONFIG moeten komen (Berkely DB parameters) staan ook in dit bestand. Deze versie is outdated. De ACL regels zijn drastisch gewijzigd. Raadpleeg altijd de laatste versie op de server zelf.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## modify-hdb.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
replace: olcAccess&lt;br /&gt;
#&lt;br /&gt;
# hobbynetlogin heeft lees rechten op ou=users&lt;br /&gt;
olcAccess: to attrs=@posixAccount,@posixGroup,@shadowAccount,@hostObject&lt;br /&gt;
  by dn=&amp;quot;cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# drupal/test moet hccOptIn kunnen schrijven vanaf de&lt;br /&gt;
# profiel pagina. Overige klanten kunnen hccOptin&lt;br /&gt;
# alleen lezen. self mag schrijven&lt;br /&gt;
olcAccess: to attrs=hccOptIn&lt;br /&gt;
  by self write&lt;br /&gt;
  by dn=&amp;quot;cn=drupal-hcc-nl,ou=klanten,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# anonieme klanten moeten kunnen inloggen&lt;br /&gt;
# en mogen hun eigen password wijzigen&lt;br /&gt;
olcAccess: to attrs=userPassword,shadowLastChange&lt;br /&gt;
  by self write&lt;br /&gt;
  by anonymous auth&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# user mag enkele eigen attr wijzigen&lt;br /&gt;
olcAccess: to attrs=hccLogin,hccPseudoniem,hccKaderPassword&lt;br /&gt;
  by self write&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# beheerders hebben schrijfrechten op alles (updateDN)&lt;br /&gt;
# klanten hebben alleen lees rechten op alles (readDN)&lt;br /&gt;
# self mag  lezen&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by self read&lt;br /&gt;
  by dn=&amp;quot;cn=xml-hoge-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn=&amp;quot;cn=xml-lage-rechten,ou=applicaties,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by dn.one=&amp;quot;ou=beheer,dc=hcc,dc=nl&amp;quot; write&lt;br /&gt;
  by dn.one=&amp;quot;ou=klanten,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# helpdesk heeft leesrechten op ou=leden&lt;br /&gt;
olcAccess: to attrs=@hccOrgPerson,@hccKaderFunctie&lt;br /&gt;
  by dn.one=&amp;quot;ou=helpdesk,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
  by * break&lt;br /&gt;
#&lt;br /&gt;
# partners mogen een paar attrs lezen&lt;br /&gt;
olcAccess: to attrs=hccLidNummer,hccPostcode,hccPostcodeZoekveld&lt;br /&gt;
  by dn.one=&amp;quot;ou=partners,dc=hcc,dc=nl&amp;quot; read&lt;br /&gt;
#&lt;br /&gt;
# iedereen moet (pseudo attr) entry en objectClass kunnen lezen&lt;br /&gt;
olcAccess: to attrs=entry,objectClass&lt;br /&gt;
  by * read&lt;br /&gt;
#&lt;br /&gt;
# vangnet: blokkeer alle toegang tot de overige attrs.&lt;br /&gt;
olcAccess: to *&lt;br /&gt;
  by * none&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbDirectory&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
-&lt;br /&gt;
replace: olcSizeLimit&lt;br /&gt;
olcSizeLimit: 100000&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbCachesize&lt;br /&gt;
olcDbCachesize: 200000&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbCheckpoint&lt;br /&gt;
olcDbCheckpoint: 1024 5&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbConfig&lt;br /&gt;
olcDbConfig: set_cachesize 0 536870912 0&lt;br /&gt;
olcDbConfig: set_lk_max_objects 1000&lt;br /&gt;
olcDbConfig: set_lk_max_locks 1000&lt;br /&gt;
olcDbConfig: set_lk_max_lockers 1000&lt;br /&gt;
olcDbConfig: set_flags DB_LOG_AUTOREMOVE&lt;br /&gt;
olcDbConfig: set_flags DB_TXN_NOSYNC&lt;br /&gt;
-&lt;br /&gt;
replace: olcDbIDLcacheSize&lt;br /&gt;
olcDbIDLcacheSize: 600000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===modify_index.ldif===&lt;br /&gt;
Een kale configuratie is heel snel voor wat betreft het opnieuw vullen met gegevens. Bij het aanmaken van een verse LDAP database worden er dan ook zo min mogelijk indexen aangemaakt.&amp;lt;br&amp;gt;&lt;br /&gt;
Zodra de inhoud is ingelezen kunnen de &#039;echte&#039; indexen aangemaakt worden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## modify-index.ldif                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
replace: olcDbIndex&lt;br /&gt;
olcDbIndex: default pres,eq&lt;br /&gt;
olcDbIndex: objectClass,entryUUID,entryCSN eq&lt;br /&gt;
olcDbIndex: hccLidNummer,hccLogin,hccForumLogin eq&lt;br /&gt;
olcDbIndex: uid,uidNumber,gidNumber,memberUid,member eq&lt;br /&gt;
olcDbIndex: cn,host,hccPseudoniem,hccOptin,hccLocatie eq&lt;br /&gt;
olcDbIndex: sn,hccPostcodeZoekveld,hccIg,hccRegio eq,subfinal&lt;br /&gt;
olcDbIndex: hccRol,hccBezoek eq,pres,subfinal&lt;br /&gt;
olcDbIndex: hccBulletins pres&lt;br /&gt;
olcDbIndex: aboNummer eq&lt;br /&gt;
olcDbIndex: aboPostcodeZoekveld eq,subfinal&lt;br /&gt;
olcDbIndex: mail,mailHccnet,hccKaderMail pres,eq&lt;br /&gt;
olcDbIndex: hccProfiel pres&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ppolicy overlay===&lt;br /&gt;
* vanuit LDAP de minimale lengte van een wachtwoord afdwingen&lt;br /&gt;
* in LDAP SSHA versleuteling activeren&amp;lt;br&amp;gt;&lt;br /&gt;
(olcPPolicyHashCleartext: TRUE)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-ppolicy.ldif                  ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module, cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectClass: olcModuleList&lt;br /&gt;
objectClass: top&lt;br /&gt;
olcModuleLoad: ppolicy&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=ppolicy,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcPPolicyConfig&lt;br /&gt;
olcOverlay: ppolicy&lt;br /&gt;
olcPPolicyDefault: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
olcPPolicyUseLockout: TRUE&lt;br /&gt;
olcPPolicyHashCleartext: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The default ppolicy looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dn: cn=default,ou=policies,dc=hcc,dc=nl&lt;br /&gt;
objectClass: pwdPolicy&lt;br /&gt;
objectClass: device&lt;br /&gt;
cn: default&lt;br /&gt;
pwdCheckQuality: 1&lt;br /&gt;
pwdMinLength: 8&lt;br /&gt;
pwdAttribute: 2.5.4.35&lt;br /&gt;
pwdAllowUserChange: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Syncrepl overlay===&lt;br /&gt;
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 [http://www.openldap.org/doc/admin/ LDAP Admin Guide]. &#039;&#039;&#039;Mirror configuratie is specifiek per server!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-syncrepl.tmpl                 ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
replace: olcServerID&lt;br /&gt;
olcServerID: @SID@&lt;br /&gt;
&lt;br /&gt;
dn: cn=module{0},cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcModuleLoad&lt;br /&gt;
olcModuleLoad: syncprov&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcSyncProvConfig&lt;br /&gt;
olcOverlay: syncprov&lt;br /&gt;
olcSpCheckpoint: 100 5&lt;br /&gt;
olcSpSessionlog: 100&lt;br /&gt;
&lt;br /&gt;
dn: olcDatabase={1}hdb,cn=config&lt;br /&gt;
changetype: modify&lt;br /&gt;
add: olcSyncRepl&lt;br /&gt;
olcSyncRepl: rid=@RID@&lt;br /&gt;
  provider=ldap://@PROVIDER@&lt;br /&gt;
  binddn=&amp;quot;cn=admin,dc=hcc,dc=nl&amp;quot; bindmethod=simple credentials=&amp;quot;@PASSWORD@&amp;quot;&lt;br /&gt;
  searchbase=&amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
  type=refreshAndPersist&lt;br /&gt;
  interval=00:00:00:10&lt;br /&gt;
  retry=&amp;quot;5 5 300 5&amp;quot;&lt;br /&gt;
  timeout=1&lt;br /&gt;
  starttls=yes&lt;br /&gt;
-&lt;br /&gt;
add: olcMirrorMode&lt;br /&gt;
olcMirrorMode: TRUE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
De andere server krijgt ServerID 2 en de provider is het IP adres van de andere server.&lt;br /&gt;
&lt;br /&gt;
===Unique overlay===&lt;br /&gt;
Deze overlay dient er voor te zorgen dat o.a het attribuut hccLogin een unieke waarde bevat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#######################################&lt;br /&gt;
## add-unique.ldif                   ##&lt;br /&gt;
#######################################&lt;br /&gt;
dn: cn=module,cn=config&lt;br /&gt;
cn: module&lt;br /&gt;
objectclass: olcModuleList&lt;br /&gt;
objectclass: top&lt;br /&gt;
olcmoduleload: unique&lt;br /&gt;
olcmodulepath: /usr/lib/ldap&lt;br /&gt;
&lt;br /&gt;
dn: olcOverlay=unique,olcDatabase={1}hdb,cn=config&lt;br /&gt;
objectClass: olcOverlayConfig&lt;br /&gt;
objectClass: olcUniqueConfig&lt;br /&gt;
olcOverlay: unique&lt;br /&gt;
olcUniqueAttribute: uid uidNumber hccLogin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SSL/TLS beveiliging==&lt;br /&gt;
Gebruik de juiste .pem bestanden in /etc/ssl/certs en /etc/ssl/private.&lt;br /&gt;
&lt;br /&gt;
We maken gebruik van een RapidSSL certificaat. Als dit niet standaard in Ubuntu bekend is, zet dan eerst GeoTrust_RapidSSL_-_ca-bundle.pem in de map /etc/ssl/certs neer. Voer nu een &#039;&#039;&#039;c_rehash .&#039;&#039;&#039; uit in /etc/ssl/certs om de cache te updaten (omdat GeoTrust_RapidSSL_-_ca-bundle.pem nieuw werd toegevoegd). &lt;br /&gt;
&lt;br /&gt;
De ownership is belangrijk. Hiertoe wordt de groep &amp;quot;openldap&amp;quot; toegevoegd aan de groep ssl-cert.&lt;br /&gt;
 adduser openldap ssl-cert&lt;br /&gt;
&lt;br /&gt;
Als dit fout gaat, doe dan eerst:&lt;br /&gt;
 apt-get install ssl-cert&lt;br /&gt;
&lt;br /&gt;
Zet het certificaat en de private key in de juiste groep:&lt;br /&gt;
 chgrp ssl-cert /etc/ssl/private/hobby.nl.*&lt;br /&gt;
 chmod 440      /etc/ssl/private/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
Het resultaat is dan als volgt:&lt;br /&gt;
 root@hcc-ldap-lb1:~# ls -l /etc/ssl/private/hcc* &lt;br /&gt;
 -rw-r--r-- 1 root     ssl-cert 1724 Nov 22 20:47 hobby.nl.crt&lt;br /&gt;
 -r--r----- 1 root     ssl-cert 1679 Nov 22 20:25 hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
 root@hcc-ldap-lb1:~# grep openldap /etc/group&lt;br /&gt;
 ssl-cert:x:114:openldap&lt;br /&gt;
 openldap:x:118:&lt;br /&gt;
&lt;br /&gt;
2020.12.09: Op een nieuwe Ubuntu installatie staat apparmor standaard aan. Weg ermee!&lt;br /&gt;
 apt remove --assume-yes --purge apparmor&lt;br /&gt;
&amp;lt;strike&amp;gt;Per september 2017 staan de certificaten in /disk/site/etc/ssl/hobby.nl, net als op alle andere servers. Omdat apparmor actief is moet deze directory worden toegevoegd aan /etc/apparmor.d/local/usr.sbin.slapd. Die file ziet er dan als volgt uit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Site-specific additions and overrides for usr.sbin.slapd.&lt;br /&gt;
# For more details, please see /etc/apparmor.d/local/README.&lt;br /&gt;
#include &amp;lt;abstractions/ssl_certs&amp;gt;&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/ r,&lt;br /&gt;
/disk/site/etc/ssl/hobby.nl/* r,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Openldap ook op poort 636 benaderd wordt (naast TLS op 389), moet in /etc/default/slapd ldaps:/// opgenomen worden bij de SLAPD_SERVICES.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;netstat -an&#039; dient dan 636 te laten zien voor zowel IPv4 als IPv6.&lt;br /&gt;
&lt;br /&gt;
Om de cn=config te zien kan je het volgende commando gebruiken:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config&lt;br /&gt;
&lt;br /&gt;
of, wat botter maar korter:&lt;br /&gt;
cat /etc/ldap/slapd.d/cn\=config.ldif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Backup, initialize, restore==&lt;br /&gt;
Om het hele skelet van ldap in één keer te herstellen dient &#039;&#039;&#039;init_ldap&#039;&#039;&#039; gebruikt te worden. Als argument &#039;&#039;&#039;moet&#039;&#039;&#039; het admin beheer wachtwoord mee gegeven worden.&lt;br /&gt;
&lt;br /&gt;
===lokaal===&lt;br /&gt;
Backups kunnen gemaakt worden terwijl slapd draait maar geadviseerd wordt slapd te stoppen. Voor dumpen moet &#039;&#039;&#039;slapcat&#039;&#039;&#039; gebruikt worden. Backups kunnen gemaakt worden per database of een filter daarop, naar een ldif bestand.&lt;br /&gt;
 slapcat -l hcc-dump.ldif -b &amp;quot;dc=hcc,dc=nl&amp;quot;&lt;br /&gt;
Dit maakt een dump van alles onder &#039;&#039;&#039;dc=hcc,dc=nl&#039;&#039;&#039; naar het bestand hcc-dump.ldif. Ook is het mogelijk het database nummer te gebruiken, config is altijd nummer 0, hdb is gewoonlijk 1.&lt;br /&gt;
&lt;br /&gt;
Het &#039;&#039;&#039;dump_ldap&#039;&#039;&#039; script dumpt alle ou&#039;s in aparte .ldif bestanden; het omgekeerde doet &#039;&#039;&#039;restore_ldap&#039;&#039;&#039;.  &lt;br /&gt;
Terug inlezen kan alleen in een lege directory, dus direct nadat &#039;&#039;&#039;init_ldap&#039;&#039;&#039; is gedaan. Gebruik voor het terugplaatsen &#039;&#039;&#039;slapadd&#039;&#039;&#039;. Aan te bevelen is &#039;&#039;&#039;-c&#039;&#039;&#039; mee te geven zodat ondanks fouten doorgegaan wordt. &lt;br /&gt;
&lt;br /&gt;
Voor slapadd &#039;&#039;&#039;moet&#039;&#039;&#039; 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)&lt;br /&gt;
 /etc/init.d/slapd stop&lt;br /&gt;
 slapadd -l hcc-dump.ldif -w -c &amp;gt;errors.txt&lt;br /&gt;
 chown openldap:openldap /var/lib/ldap/*&lt;br /&gt;
 /etc/init.d/slapd start&lt;br /&gt;
&lt;br /&gt;
===remote===&lt;br /&gt;
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 &#039;&#039;&#039;backup-encrypted&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Recente lokale backups zijn te vinden in &#039;&#039;&#039;/usr/local/hobbynet/tmp&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Verse ldap maken===&lt;br /&gt;
Transactie log bij het toevoegen van b.v. een nieuwe ou:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Op beide servers:&lt;br /&gt;
schema van test server gecopieerd en geactiveerd&lt;br /&gt;
dump-ldap gedraaid&lt;br /&gt;
systemctl stop slapd.service &lt;br /&gt;
&lt;br /&gt;
Er is nu géén ldap service! Werk dus snel...&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb1&lt;br /&gt;
systemctl stop slapd.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
op ldap-lb2:&lt;br /&gt;
init-ldap.sh &amp;lt;adminpw&amp;gt;&lt;br /&gt;
restore-ldap.sh&lt;br /&gt;
wacht op indexering (tot slapd uit top verdwijnt)&lt;br /&gt;
Slapd service is nu in de lucht op ldap-lb2&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
systemctl start slapd.service&lt;br /&gt;
Beide slapd servers zijn in de lucht en moeten synchroniseren.&lt;br /&gt;
&lt;br /&gt;
op beide servers:&lt;br /&gt;
check replicatie (netstat en functioneel)&lt;br /&gt;
&lt;br /&gt;
root@ldap-lb1:/usr/local/hobbynet/bin# netstat -n | grep 389&lt;br /&gt;
tcp        0      0 172.31.8.4:36838        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:36836        172.31.8.5:389          ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58112        ESTABLISHED&lt;br /&gt;
tcp        0      0 172.31.8.4:389          172.31.8.5:58114        ESTABLISHED&lt;br /&gt;
&lt;br /&gt;
Functioneel door met ADS op beide servers in te loggen en een willekeurig veld in je eigen entry te wijzigen op lb1. Kijk of het gebeurd is op lb2 en wijzig het daar terug. Check op de andere server of het gebeurd is. Er kan een zekere vertraging in optreden.&lt;br /&gt;
&lt;br /&gt;
Stel er is een nieuwe ou gemaakt: denk aan het bij werken van de dump en restore scripts.&lt;br /&gt;
&lt;br /&gt;
update dump-ldap.sh en restore-ldap.sh met de nieuwe ou&lt;br /&gt;
&lt;br /&gt;
op ldap-lb1:&lt;br /&gt;
export tarieven.ldif op test server en import op ldap-lb1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==crontab==&lt;br /&gt;
 # script dat updates ophaalt (maar niet installeert), zodat nagios ze ook detecteert&lt;br /&gt;
 0 9 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
 0 18 * * * /usr/local/hobbynet/bin/upd_srv &amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
==LDAP Clients==&lt;br /&gt;
Er zijn meerdere LDAP clients. De meest populaire zijn Apache Directory Studio (&amp;quot;ADS&amp;quot;) en phpLdapAdmin (&amp;quot;PLA&amp;quot;).&amp;lt;br&amp;gt;&lt;br /&gt;
De eerste is veel uitgbreider maar vereist een Java Runtime Environment (&amp;quot;JRE&amp;quot;). Onder Windows is dat JRE(13) of (open)JDK-(13).&amp;lt;br&amp;gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Binnen Hobbynet wordt uitsluitend gebruik gemaakt van ADS.&lt;br /&gt;
&lt;br /&gt;
===StartTLS===&lt;br /&gt;
Aanbevolen wordt StartTLS op poort 389 te gebruiken. Alternatief is LDAPS op poort 636 maar dat is deprecated. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Windows===&lt;br /&gt;
&amp;lt;i&amp;gt;2019-10-31 HJV: Oude info, als referentie leuk, maar niet meer relevant&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Onder Windows moet met &#039;&#039;&#039;keytool.exe&#039;&#039;&#039; gewerkt worden. De uitleg heb ik van  [http://www.talkingtree.com/blog/index.cfm?mode=entry&amp;amp;entry=25AA75A4-45A6-2844-7CA3EECD842DB576 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:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Haal de benodigde bestanden op (op een Linux systeem):&lt;br /&gt;
wget http://www.cacert.org/certs/root.der -O root.der&lt;br /&gt;
wget http://www.cacert.org/certs/class3.der -O class3.der&lt;br /&gt;
copieer de bestanden naar de Windows omgeving in C:\Program Files (x86)\Java\jre6\lib\security.&lt;br /&gt;
&lt;br /&gt;
Open een commandwindow:&lt;br /&gt;
cd C:\Program Files (x86)\Java\jre6\lib\security&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass1 -file root.der&lt;br /&gt;
..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias cacertclass3 -file class3.der&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS onder Linux===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===ADS gebruik===&lt;br /&gt;
ADS kan erg handig zijn voor het snel dumpen van hele ou&#039;s in .ldif formaat. Zo&#039;n dump kan direct op een andere server worden ingelezen.&lt;br /&gt;
&lt;br /&gt;
===PhpLdapAdmin onder Linux===&lt;br /&gt;
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 [http://phpldapadmin.sourceforge.net/wiki/index.php/Server:server:tls phpldapadmin wiki].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# LDAP Defaults&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# See ldap.conf(5) for details&lt;br /&gt;
# This file should be world readable but not world writable.&lt;br /&gt;
&lt;br /&gt;
#BASE   dc=example,dc=com&lt;br /&gt;
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666&lt;br /&gt;
&lt;br /&gt;
#SIZELIMIT      12&lt;br /&gt;
#TIMELIMIT      15&lt;br /&gt;
#DEREF          never&lt;br /&gt;
TLS_CACERT      /etc/ssl/certs/CAcert_org.pem&lt;br /&gt;
TLS_CERT        /etc/ssl/private/hobby.nl.crt&lt;br /&gt;
TLS_KEY         /etc/ssl/private/hobby.nl.key&lt;br /&gt;
TLS_REQCERT     allow&lt;br /&gt;
#TLS_REQCERT never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Denk er wel aan na wijzigingen Apache te herstarten.&lt;br /&gt;
===PAM en NSS via LDAP===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Installeer &#039;&#039;&#039;libnss-ldapd&#039;&#039;&#039; om de benodigde libraries te verkrijgen. Apt-get zal tevens &#039;&#039;&#039;libpam-ldapd&#039;&#039;&#039;, &#039;&#039;&#039;nslcd&#039;&#039;&#039; en &#039;&#039;&#039;nscd&#039;&#039;&#039; binnen brengen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install libnss-ldapd auth-client-config ldap-utils&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
    libpam-ldapd nscd nslcd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Libnss-ldapd is een doorontwikkeling van libnss-ldap en bevat meerdere verbeteringen. Zie: [http://arthurdejong.org/nss-pam-ldapd/ deze site] van de ontwikkelaar. Bij de installatie wordt een user &#039;&#039;&#039;nslcd&#039;&#039;&#039; aangemaakt; denk erom die in de .tmpl bestanden te zetten!&lt;br /&gt;
  &lt;br /&gt;
nsswitch.conf laat zich configureren via &#039;&#039;&#039;auth-client-config&#039;&#039;&#039; maar lac_ldap is alleen aanwezig als &#039;&#039;&#039;ldap-auth-config&#039;&#039;&#039; ook is geinstalleerd. Zo niet gebruik dan de tweede regel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auth-client-config -t nss -p lac_ldap&lt;br /&gt;
auth-client-config -t nss -p ldap_example&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het resultaat is dat nsswitch.conf zowel in files (/etc/passwd etc.) zoekt als in ldap.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nsswitch.conf&lt;br /&gt;
#&lt;br /&gt;
# Example configuration of GNU Name Service Switch functionality.&lt;br /&gt;
# If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
# `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # passwd:         compat&lt;br /&gt;
passwd: files ldap&lt;br /&gt;
# pre_auth-client-config # group:          compat&lt;br /&gt;
group: files ldap&lt;br /&gt;
# pre_auth-client-config # shadow:         compat&lt;br /&gt;
shadow: files ldap&lt;br /&gt;
&lt;br /&gt;
hosts:          files dns&lt;br /&gt;
networks:       files&lt;br /&gt;
&lt;br /&gt;
protocols:      db files&lt;br /&gt;
services:       db files&lt;br /&gt;
ethers:         db files&lt;br /&gt;
rpc:            db files&lt;br /&gt;
&lt;br /&gt;
# pre_auth-client-config # netgroup:       nis&lt;br /&gt;
netgroup: nis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Het aanpassen van de PAM bestanden gaat sinds enige releases met &#039;&#039;&#039;pam-auth-update&#039;&#039;&#039;. Kies in het menu voor zowel unix als ldap. Default wordt nu ldap authenticatie gebruikt voor uid &amp;gt;= 1000. Bij Hobbynet willen we vanaf 300 ldap gebruiken. Door een licht gemodificeerde versie van /usr/share/pam-configs/ldap te maken (ldap-hobbynet), kan ook voor de hobbynet instelling gekozen worden. Dit is de ldap-hobbynet versie:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Name: LDAP Authentication (uid&amp;gt;300)&lt;br /&gt;
Default: yes&lt;br /&gt;
Priority: 128&lt;br /&gt;
Auth-Type: Primary&lt;br /&gt;
Auth-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Auth:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 use_first_pass&lt;br /&gt;
Account-Type: Additional&lt;br /&gt;
Account:&lt;br /&gt;
        [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad]        pam_ldap.so minimum_uid=300&lt;br /&gt;
Password-Type: Primary&lt;br /&gt;
Password-Initial:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300&lt;br /&gt;
Password:&lt;br /&gt;
        [success=end default=ignore]    pam_ldap.so minimum_uid=300 try_first_pass&lt;br /&gt;
Session-Type: Additional&lt;br /&gt;
Session:&lt;br /&gt;
        [success=ok default=ignore]     pam_ldap.so minimum_uid=300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dit is in een standaard opzet van LDAP voldoende om zowel lokale gebruikers als gebruikers opgeslagen in LDAP, te laten inloggen en hun password te laten wijzigen. In de Hobbynet setup moet er echter nog meer gebeuren in de ACL&#039;s van de LDAP server configuratie. Omdat Hobbynet de laatste ACL regel heeft gewijzigd in een &#039;&#039;&#039;deny-all&#039;&#039;&#039;, is er een helper of proxy account nodig dat read access heeft of een aantal cruciale velden in de posixAccount objectClass. Zie verder de lsiting van nslcd.conf.&lt;br /&gt;
&lt;br /&gt;
Libnss-ldapd en libpam-ldapd hebben een gezamelijke daemon &#039;&#039;&#039;nslcd&#039;&#039;&#039; die z&#039;n configuratie uit &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039; haalt. Hierin is ook een voorziening voor het helper account. Aan het eind vande &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; staat de voorziening voor host-based login. Als het attribute &#039;&#039;&#039;host&#039;&#039;&#039; de fqdn of alleen de host naam bevat, bepaald dat of inloggen op die host mogelijk is. &#039;&#039;&#039;*&#039;&#039;&#039; staat inloggen op alle hosts toe.&lt;br /&gt;
&lt;br /&gt;
Eventueel kan het daemon proces voor debugging doeleinden ook als command (&#039;&#039;&#039;nslcd -d&#039;&#039;&#039;) gestart worden. Om de bevragingen van de LDAP server wat te verminderen, kan &#039;&#039;&#039;nscd&#039;&#039;&#039; voor caching zorgen. Deze cache daemon heeft zijn eigen configuratie bestand: &#039;&#039;&#039;/etc/nslcd.conf&#039;&#039;&#039;. De default instellingen zijn goed; eventueel kan de logging naar een bestand gestuurd worden.&lt;br /&gt;
&lt;br /&gt;
Verbinding met de LDAP server kan met StartTLS beveiligd worden. Hier de inhoud van nslcd.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/nslcd.conf&lt;br /&gt;
# nslcd configuration file. See nslcd.conf(5)&lt;br /&gt;
# for details.&lt;br /&gt;
&lt;br /&gt;
# The user and group nslcd should run as.&lt;br /&gt;
uid nslcd&lt;br /&gt;
gid nslcd&lt;br /&gt;
&lt;br /&gt;
# log location and level&lt;br /&gt;
#log /var/log/nslcd.log debug&lt;br /&gt;
&lt;br /&gt;
# The location at which the LDAP server(s) should be reachable.&lt;br /&gt;
uri ldap://ldap2-int.hobby.nl/&lt;br /&gt;
&lt;br /&gt;
# The search base that will be used for all queries.&lt;br /&gt;
base dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# Other base mappings&lt;br /&gt;
base   group  ou=groups,dc=hcc,dc=nl&lt;br /&gt;
base   passwd ou=users,dc=hcc,dc=nl&lt;br /&gt;
base   shadow ou=users,dc=hcc,dc=nl&lt;br /&gt;
&lt;br /&gt;
# The search scope.&lt;br /&gt;
#scope sub&lt;br /&gt;
&lt;br /&gt;
# The LDAP protocol version to use.&lt;br /&gt;
ldap_version 3&lt;br /&gt;
&lt;br /&gt;
# The DN to bind with for normal lookups.&lt;br /&gt;
#binddn cn=annonymous,dc=example,dc=net&lt;br /&gt;
#bindpw secret&lt;br /&gt;
binddn cn=hobbynetlogin,ou=applicaties,dc=hcc,dc=nl&lt;br /&gt;
bindpw xxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
# The DN used for password modifications by root.&lt;br /&gt;
#rootpwmoddn cn=admin,dc=example,dc=com&lt;br /&gt;
&lt;br /&gt;
# SSL options&lt;br /&gt;
ssl off&lt;br /&gt;
ssl start_tls&lt;br /&gt;
#tls_reqcert never&lt;br /&gt;
tls_cacertfile /etc/ssl/certs/cacert.org.pem&lt;br /&gt;
#tls_cert /etc/ssl/private/server.crt&lt;br /&gt;
#tls_key /etc/ssl/private/server.key&lt;br /&gt;
&lt;br /&gt;
# The minimum uid&lt;br /&gt;
nss_min_uid 300&lt;br /&gt;
&lt;br /&gt;
pam_authz_search (&amp;amp;(objectClass=posixAccount)(uid=$username)(|(host=$hostname)(host=$fqdn)(host=\\*)))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===users en groepen toevoegen===&lt;br /&gt;
Hiervoor moet &#039;&#039;&#039;ldapscripts&#039;&#039;&#039; zijn geïnstalleerd. Dit is het geval op de ldap-lb1 server. Dat levert de volgende extra commando&#039;s op:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ldaprenamemachine&lt;br /&gt;
ldapadduser&lt;br /&gt;
ldapdeleteuserfromgroup&lt;br /&gt;
ldapfinger&lt;br /&gt;
ldapid&lt;br /&gt;
ldapgid&lt;br /&gt;
ldapmodifyuser&lt;br /&gt;
ldaprenameuser&lt;br /&gt;
lsldap&lt;br /&gt;
ldapaddusertogroup&lt;br /&gt;
ldapsetpasswd&lt;br /&gt;
ldapinit&lt;br /&gt;
ldapaddgroup&lt;br /&gt;
ldapdeletegroup&lt;br /&gt;
ldapmodifygroup&lt;br /&gt;
ldapdeletemachine&lt;br /&gt;
ldaprenamegroup&lt;br /&gt;
ldapaddmachine&lt;br /&gt;
ldapmodifymachine&lt;br /&gt;
ldapsetprimarygroup&lt;br /&gt;
ldapdeleteuser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Meest gebruikt zijn &#039;&#039;&#039;ldapaddgroup, ldapadduser, ldapsetpasswd&#039;&#039;&#039;.  &lt;br /&gt;
Er zijn manpages maar er is ook uitgebreide uitleg in de [https://help.ubuntu.com/14.04/serverguide/openldap-server.html Ubuntu server guide]. Omdat wij het automatisch maken van de home dir uit hebben staan, moet die met de hand aangemaakt worden en moet de owner goed gezet worden.&lt;br /&gt;
&lt;br /&gt;
===host-based login===&lt;br /&gt;
Met een kleine uitbreiding in het schema van de LDAP server, kan host-based login gerealiseerd worden. Ook in de &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039; is een uitbreiding nodig.&lt;br /&gt;
&lt;br /&gt;
In de LDAP server dient de objectClass &#039;&#039;&#039;hostObject&#039;&#039;&#039; aan de entries in de ou=users toegevoegd te worden. Deze (auxilary) objectClass brengt slechts één attribute met zich mee: &#039;&#039;&#039;host&#039;&#039;&#039;. De regel in nslcd.conf checkt of één van de waarden van &#039;&#039;&#039;host&#039;&#039;&#039; gelijk is aan de naam van de server waarop ingelogd wordt. De waarde &#039;&#039;&#039;*&#039;&#039;&#039; geldt als wildcard. Zie de regel &#039;&#039;&lt;br /&gt;
&#039;pam_authz_search&#039;&#039;&#039;&#039; in &#039;&#039;&#039;nslcd.conf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Password aanpassen===&lt;br /&gt;
Via LDAP ingelogde gebruikers kunnen net als lokale gebruikers hun wachtwoord met &#039;&#039;&#039;passwd&#039;&#039;&#039; wijzigen. Wel moet aan de eisen in de LDAP ppolicy module voldaan worden.&lt;br /&gt;
&lt;br /&gt;
==PHP scripting==&lt;br /&gt;
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 &#039;&#039;&#039;/usr/local/hobbynet/bin&#039;&#039;&#039; directory.&lt;br /&gt;
Voor de php-scripting zijn enkele php7.x pakketten nodig. Installeer deze met apt-get. Het gaat om:&lt;br /&gt;
* php-cli&lt;br /&gt;
* php-ldap&lt;br /&gt;
&lt;br /&gt;
== Apache authenticatie via LDAP ==&lt;br /&gt;
In plaats van .htpassword authenticatie, kan ook LDAP gebruikt worden. Activeer daartoe de Apache module&lt;br /&gt;
&#039;authnz_ldap&#039;.&lt;br /&gt;
 a2enmod authnz_ldap&lt;br /&gt;
Denk er om dat dit in een loadbalanced situatie op beide servers gedaan dient te worden!&lt;br /&gt;
&lt;br /&gt;
=== Voorbeeld van een LDAP configuratie in de Apache config ===&lt;br /&gt;
(alleen als voorbeeld, niet zo gebruiken!)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# // 1) Hobbynet webmaster&lt;br /&gt;
# // 2) Vraagbaak medewerker van een willekeurige groepering&lt;br /&gt;
# (|(hccRol=*#VRBK)(hccRol=HN#WM))&lt;br /&gt;
  &amp;lt;Location &amp;quot;/apps/vraagbaak&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;RequireAll&amp;gt;&lt;br /&gt;
      Authname &amp;quot;HCC!vraagbaak (gebruik uw hcc.nl gebruikersnaam/wachtwoord)&amp;quot;&lt;br /&gt;
      AuthType Basic&lt;br /&gt;
      AuthBasicProvider ldap&lt;br /&gt;
      AuthLDAPUrl ldap://hcc-ldap-int.hobby.nl/ou=leden,dc=hcc,dc=nl?hccLogin??(|(hccRol=*#VRBK)(hccRol=HN#WM))(hccProfiel=TRUE) TLS&lt;br /&gt;
      require valid-user&lt;br /&gt;
    &amp;lt;/RequireAll&amp;gt;&lt;br /&gt;
  &amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hoe kan LDAP veilig gebruikt worden vanuit Apache===&lt;br /&gt;
Zet een script neer in de gebruikersomgeving, en gebruik mod_authz_external. Doe de controle vervolgens via de XML-RPC server.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zie [[Kadernet]] voor een voorbeeld.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== TODO lijst ==&lt;br /&gt;
&#039;&#039;Dit is een lijst in wording, graag aanvullen&#039;&#039; &lt;br /&gt;
* &#039;dun&#039; loadbalancer script maken om te controleren dat LDAP echt luistert&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=MySQL_cluster&amp;diff=79032</id>
		<title>MySQL cluster</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=MySQL_cluster&amp;diff=79032"/>
		<updated>2020-11-22T14:44:02Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* credentials.cnf */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=doel=&lt;br /&gt;
Om te zorgen dat onze database server ook volledig redundant is hebben we hier een cluster gemaakt, onze loadbalancer zorgt er voor dat verkeer of op db01 of op db02 terecht komt.&lt;br /&gt;
=opzet=&lt;br /&gt;
&lt;br /&gt;
= loadbalancing =&lt;br /&gt;
Onze servers zijn opgezet in een master-master setup, dus er kan op beide gemuteerd worden, de loadbalancer verspreid de mutatie naar de andere server.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;belangrijk&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Op alle clusters moet database lbtest aanwezig zijn met tabel lbtest. Deze tabel moet minimaal 1 record hebben, hier test de loadbalancer namelijk op. De usernaam voor loadbalancer en nagios is lbtest met ww Testing123! deze gebruiker heeft alleen select rechten op deze database&lt;br /&gt;
&lt;br /&gt;
= database clusters =&lt;br /&gt;
== dbclus01-int ==&lt;br /&gt;
Dit cluster bestaat uit mysql01 en mysql02&lt;br /&gt;
&lt;br /&gt;
== hcc-dbclus02-int ==&lt;br /&gt;
Dit cluster bestaat uit mysql03 en mysql04&lt;br /&gt;
== dbclus04-int ==&lt;br /&gt;
Dit cluster bestaat uit mysql05 en mysql06&lt;br /&gt;
&lt;br /&gt;
=configuratie = &lt;br /&gt;
== configuratie files == &lt;br /&gt;
al deze bestanden bevinden zich in /etc/mysql/mysql.conf.d&lt;br /&gt;
=== mysqld.cnf ===&lt;br /&gt;
In deze file hebben we 1 aanpassing gedaan we hebben&lt;br /&gt;
 bind-address           = 127.0.0.1&lt;br /&gt;
voorzien van commentaar&lt;br /&gt;
=== ssl.cnf ===&lt;br /&gt;
Mysql beschikt over ssl daarom is dit ook geconfigureerd, onder andere de replicatie gebruikt het. De ssl.cnf file ziet er zo uit:&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 ssl-ca=/disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
 ssl-cert=/disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
 ssl-key=/disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
=== replicatie.cnf ===&lt;br /&gt;
Bij de replicatie is het belangrijk dat de oneven servers het server id 1 hebben en de even server id 2. Er mogen nooit 2 de zelfde id&#039;s zijn. Ook is de waarde van auto-increment-offset belangrijk; bij de oneven server is dat 1 en bij even 2. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voor oneven server ziet hij er zo uit:&lt;br /&gt;
 #sql mode uit voor toestaan lege velden&lt;br /&gt;
 sql-mode                        =       &amp;quot;&amp;quot;&lt;br /&gt;
 server-id                       =       1&lt;br /&gt;
 replicate-same-server-id        =       0&lt;br /&gt;
 auto-increment-increment        =       2&lt;br /&gt;
 auto-increment-offset           =       1&lt;br /&gt;
 relay-log                       =       mysql01-relay-bin&lt;br /&gt;
 binlog_format                   =       &amp;quot;STATEMENT&amp;quot;&lt;br /&gt;
 replicate-ignore-db             =       information_schema&lt;br /&gt;
 replicate-ignore-db             =       mysql&lt;br /&gt;
 binlog-ignore-db                =       information_schema&lt;br /&gt;
 binlog-ignore-db                =       mysql&lt;br /&gt;
 log_bin                         =       /var/log/mysql/mysql-bin.log&lt;br /&gt;
 slave-skip-errors = 1062&lt;br /&gt;
&lt;br /&gt;
=== credentials.cnf ===&lt;br /&gt;
Op de server is root voor localhost voorzien van een wachtwoord om toch mysqldump en het mysql commando te kunnen gebruiken. De eigenaar van deze file is root:mysql met permissies 640.&lt;br /&gt;
&lt;br /&gt;
=== tunning.cnf ===&lt;br /&gt;
Deze file bevat preformance tunning. Dit is server specifiek maar er moet in ieder geval deze regel in staan :&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 skip-name-resolve    =       1&lt;br /&gt;
&lt;br /&gt;
= starten/herstellen replicatie =&lt;br /&gt;
== herstel ==&lt;br /&gt;
Bij herstellen moet je op beide servers de volgende sql commando&#039;s uitvoeren:&lt;br /&gt;
 stop slave;&lt;br /&gt;
 reset slave;&lt;br /&gt;
Doe op de &#039;&#039;&#039;defecte&#039;&#039;&#039; server verwijder je alle databases nadat je eerst een backup hebt gemaakt&lt;br /&gt;
=== start replicatie === &lt;br /&gt;
Zorg er voor database niet meer benaderd/gemuteerd wordt. Zet hem uit in de loadbalancer zowel ipv4/ipv6&lt;br /&gt;
Hhaal bij de &#039;&#039;&#039;goede&#039;&#039;&#039; server de log positie op &lt;br /&gt;
 mysql&amp;gt; show master status\G&lt;br /&gt;
 *************************** 1. row ***************************&lt;br /&gt;
              File: mysql-bin.000057&lt;br /&gt;
          Position: 71061044&lt;br /&gt;
      Binlog_Do_DB:&lt;br /&gt;
  Binlog_Ignore_DB: information_schema,mysql&lt;br /&gt;
 Executed_Gtid_Set:&lt;br /&gt;
 1 row in set (0.00 sec)&lt;br /&gt;
Noteer de file en position&amp;lt;br&amp;gt;&lt;br /&gt;
maak mysqldump en pipe die naar de gefaalde server&lt;br /&gt;
  mysqldump --all-databases |mysql -h mysql0*-int -u jegebruikersnaam -p&lt;br /&gt;
vul je wachtwoord in en de database wordt gedump naar de ander server dit kan effe duren.&lt;br /&gt;
Op de andere server log je nu in en geef je het volgende commando&#039;s in mysql, vul dan het password in van repl urser en postion bij master_log_pos en de file bi master_log_file&lt;br /&gt;
 CHANGE MASTER TO MASTER_HOST=&#039;mysql0*-int.hobby.nl&#039;, MASTER_USER=&#039;repl&#039;, &#039;&#039;&#039;MASTER_PASSWORD=&#039;******&#039;,&#039;&#039;&#039; &#039;&#039;&#039;MASTER_LOG_FILE=&#039;mysql-bin.000057&#039;,&#039;&#039;&#039; &#039;&#039;&#039;MASTER_LOG_POS=71061044,&#039;&#039;&#039; MASTER_SSL = 1   , MASTER_SSL_CA = &#039;/disk/site/etc/ssl/hobby.nl/CA-bundel.crt&#039;, MASTER_SSL_CERT = &#039;/disk/site/etc/ssl/hobby.nl/hobby.nl.crt&#039;, MASTER_SSL_KEY = &#039;/disk/site/etc/ssl/hobby.nl/hobby.nl.key&#039;;&lt;br /&gt;
start slave;&lt;br /&gt;
Nu moeten we controleren of de replicatie deze kant op loopt, dit doe met commando &lt;br /&gt;
 mysql&amp;gt; show slave status\G&lt;br /&gt;
 *************************** 1. row ***************************&lt;br /&gt;
                Slave_IO_State: Waiting for master to send event&lt;br /&gt;
                   Master_Host: mysql02-int.hobby.nl&lt;br /&gt;
                   Master_User: repl&lt;br /&gt;
                   Master_Port: 3306&lt;br /&gt;
                 Connect_Retry: 60&lt;br /&gt;
               Master_Log_File: mysql-bin.000026&lt;br /&gt;
           Read_Master_Log_Pos: 72292974&lt;br /&gt;
                Relay_Log_File: mysql01-relay-bin.000056&lt;br /&gt;
                 Relay_Log_Pos: 72293189&lt;br /&gt;
         Relay_Master_Log_File: mysql-bin.000026&lt;br /&gt;
              &#039;&#039;&#039;Slave_IO_Running: Yes&#039;&#039;&#039;&lt;br /&gt;
             &#039;&#039;&#039;Slave_SQL_Running: Yes&#039;&#039;&#039;&lt;br /&gt;
               Replicate_Do_DB:&lt;br /&gt;
           Replicate_Ignore_DB: information_schema,mysql&lt;br /&gt;
            Replicate_Do_Table:&lt;br /&gt;
        Replicate_Ignore_Table:&lt;br /&gt;
       Replicate_Wild_Do_Table:&lt;br /&gt;
   Replicate_Wild_Ignore_Table:&lt;br /&gt;
                    Last_Errno: 0&lt;br /&gt;
                    Last_Error:&lt;br /&gt;
                  Skip_Counter: 0&lt;br /&gt;
           Exec_Master_Log_Pos: 72292974&lt;br /&gt;
               Relay_Log_Space: 72293447&lt;br /&gt;
               Until_Condition: None&lt;br /&gt;
                Until_Log_File:&lt;br /&gt;
                 Until_Log_Pos: 0&lt;br /&gt;
            Master_SSL_Allowed: Yes&lt;br /&gt;
            Master_SSL_CA_File: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
            Master_SSL_CA_Path:&lt;br /&gt;
               Master_SSL_Cert: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
             Master_SSL_Cipher:&lt;br /&gt;
                Master_SSL_Key: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
         Seconds_Behind_Master: 0&lt;br /&gt;
 Master_SSL_Verify_Server_Cert: No&lt;br /&gt;
                 Last_IO_Errno: 0&lt;br /&gt;
                 Last_IO_Error:&lt;br /&gt;
                Last_SQL_Errno: 0&lt;br /&gt;
                Last_SQL_Error:&lt;br /&gt;
   Replicate_Ignore_Server_Ids:&lt;br /&gt;
              Master_Server_Id: 2&lt;br /&gt;
                   Master_UUID: f0de239e-2c10-11eb-b1d1-005056a982be&lt;br /&gt;
              Master_Info_File: mysql.slave_master_info&lt;br /&gt;
                     SQL_Delay: 0&lt;br /&gt;
           SQL_Remaining_Delay: NULL&lt;br /&gt;
       Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates&lt;br /&gt;
            Master_Retry_Count: 86400&lt;br /&gt;
                   Master_Bind:&lt;br /&gt;
       Last_IO_Error_Timestamp:&lt;br /&gt;
      Last_SQL_Error_Timestamp:&lt;br /&gt;
                Master_SSL_Crl:&lt;br /&gt;
            Master_SSL_Crlpath:&lt;br /&gt;
            Retrieved_Gtid_Set:&lt;br /&gt;
             Executed_Gtid_Set:&lt;br /&gt;
                 Auto_Position: 0&lt;br /&gt;
          Replicate_Rewrite_DB:&lt;br /&gt;
                  Channel_Name:&lt;br /&gt;
            Master_TLS_Version:&lt;br /&gt;
        Master_public_key_path:&lt;br /&gt;
         Get_master_public_key: 0&lt;br /&gt;
             Network_Namespace:&lt;br /&gt;
 1 row in set, 1 warning (0.00 sec)&lt;br /&gt;
controleer of Slave_IO_Running en Slave_SQL_Running op yes staan.&lt;br /&gt;
Als dit is het geval moeten replicatie naar de 1e server ook herstelen dit doe je de zelfde stappen te herhalen van af show master status&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=MySQL_cluster&amp;diff=79030</id>
		<title>MySQL cluster</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=MySQL_cluster&amp;diff=79030"/>
		<updated>2020-11-22T14:40:28Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* herstel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=doel=&lt;br /&gt;
Om te zorgen dat onze database server ook volledig redundant is hebben we hier een cluster gemaakt, onze loadbalancer zorgt er voor dat verkeer of op db01 of op db02 terecht komt.&lt;br /&gt;
=opzet=&lt;br /&gt;
&lt;br /&gt;
= loadbalancing =&lt;br /&gt;
Onze servers zijn opgezet in een master-master setup, dus er kan op beide gemuteerd worden, de loadbalancer verspreid de mutatie naar de andere server.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;belangrijk&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Op alle clusters moet database lbtest aanwezig zijn met tabel lbtest. Deze tabel moet minimaal 1 record hebben, hier test de loadbalancer namelijk op. De usernaam voor loadbalancer en nagios is lbtest met ww Testing123! deze gebruiker heeft alleen select rechten op deze database&lt;br /&gt;
&lt;br /&gt;
= database clusters =&lt;br /&gt;
== dbclus01-int ==&lt;br /&gt;
Dit cluster bestaat uit mysql01 en mysql02&lt;br /&gt;
&lt;br /&gt;
== hcc-dbclus02-int ==&lt;br /&gt;
Dit cluster bestaat uit mysql03 en mysql04&lt;br /&gt;
== dbclus04-int ==&lt;br /&gt;
Dit cluster bestaat uit mysql05 en mysql06&lt;br /&gt;
&lt;br /&gt;
=configuratie = &lt;br /&gt;
== configuratie files == &lt;br /&gt;
al deze bestanden bevinden zich in /etc/mysql/mysql.conf.d&lt;br /&gt;
=== mysqld.cnf ===&lt;br /&gt;
In deze file hebben we 1 aanpassing gedaan we hebben&lt;br /&gt;
 bind-address           = 127.0.0.1&lt;br /&gt;
voorzien van commentaar&lt;br /&gt;
=== ssl.cnf ===&lt;br /&gt;
Mysql beschikt over ssl daarom is dit ook geconfigureerd, onder andere de replicatie gebruikt het. De ssl.cnf file ziet er zo uit:&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 ssl-ca=/disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
 ssl-cert=/disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
 ssl-key=/disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
=== replicatie.cnf ===&lt;br /&gt;
Bij de replicatie is het belangrijk dat de oneven servers het server id 1 hebben en de even server id 2. Er mogen nooit 2 de zelfde id&#039;s zijn. Ook is de waarde van auto-increment-offset belangrijk; bij de oneven server is dat 1 en bij even 2. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voor oneven server ziet hij er zo uit:&lt;br /&gt;
 #sql mode uit voor toestaan lege velden&lt;br /&gt;
 sql-mode                        =       &amp;quot;&amp;quot;&lt;br /&gt;
 server-id                       =       1&lt;br /&gt;
 replicate-same-server-id        =       0&lt;br /&gt;
 auto-increment-increment        =       2&lt;br /&gt;
 auto-increment-offset           =       1&lt;br /&gt;
 relay-log                       =       mysql01-relay-bin&lt;br /&gt;
 binlog_format                   =       &amp;quot;STATEMENT&amp;quot;&lt;br /&gt;
 replicate-ignore-db             =       information_schema&lt;br /&gt;
 replicate-ignore-db             =       mysql&lt;br /&gt;
 binlog-ignore-db                =       information_schema&lt;br /&gt;
 binlog-ignore-db                =       mysql&lt;br /&gt;
 log_bin                         =       /var/log/mysql/mysql-bin.log&lt;br /&gt;
 slave-skip-errors = 1062&lt;br /&gt;
&lt;br /&gt;
=== credentials.cnf ===&lt;br /&gt;
Op de server is root voor localhost voorzien van wachtwoord om toch mysqldump en het mysql account gebruiken deze file is eigenaar van root en groep mysql met permissies 640. HIER KOM IK NIET UIT.&lt;br /&gt;
&lt;br /&gt;
=== tunning.cnf ===&lt;br /&gt;
Deze file bevat preformance tunning. Dit is server specifiek maar er moet in ieder geval deze regel in staan :&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 skip-name-resolve    =       1&lt;br /&gt;
&lt;br /&gt;
= starten/herstellen replicatie =&lt;br /&gt;
== herstel ==&lt;br /&gt;
Bij herstellen moet je op beide servers de volgende sql commando&#039;s uitvoeren:&lt;br /&gt;
 stop slave;&lt;br /&gt;
 reset slave;&lt;br /&gt;
Doe op de &#039;&#039;&#039;defecte&#039;&#039;&#039; server verwijder je alle databases nadat je eerst een backup hebt gemaakt&lt;br /&gt;
=== start replicatie === &lt;br /&gt;
Zorg er voor database niet meer benaderd/gemuteerd wordt. Zet hem uit in de loadbalancer zowel ipv4/ipv6&lt;br /&gt;
Hhaal bij de &#039;&#039;&#039;goede&#039;&#039;&#039; server de log positie op &lt;br /&gt;
 mysql&amp;gt; show master status\G&lt;br /&gt;
 *************************** 1. row ***************************&lt;br /&gt;
              File: mysql-bin.000057&lt;br /&gt;
          Position: 71061044&lt;br /&gt;
      Binlog_Do_DB:&lt;br /&gt;
  Binlog_Ignore_DB: information_schema,mysql&lt;br /&gt;
 Executed_Gtid_Set:&lt;br /&gt;
 1 row in set (0.00 sec)&lt;br /&gt;
Noteer de file en position&amp;lt;br&amp;gt;&lt;br /&gt;
maak mysqldump en pipe die naar de gefaalde server&lt;br /&gt;
  mysqldump --all-databases |mysql -h mysql0*-int -u jegebruikersnaam -p&lt;br /&gt;
vul je wachtwoord in en de database wordt gedump naar de ander server dit kan effe duren.&lt;br /&gt;
Op de andere server log je nu in en geef je het volgende commando&#039;s in mysql, vul dan het password in van repl urser en postion bij master_log_pos en de file bi master_log_file&lt;br /&gt;
 CHANGE MASTER TO MASTER_HOST=&#039;mysql0*-int.hobby.nl&#039;, MASTER_USER=&#039;repl&#039;, &#039;&#039;&#039;MASTER_PASSWORD=&#039;******&#039;,&#039;&#039;&#039; &#039;&#039;&#039;MASTER_LOG_FILE=&#039;mysql-bin.000057&#039;,&#039;&#039;&#039; &#039;&#039;&#039;MASTER_LOG_POS=71061044,&#039;&#039;&#039; MASTER_SSL = 1   , MASTER_SSL_CA = &#039;/disk/site/etc/ssl/hobby.nl/CA-bundel.crt&#039;, MASTER_SSL_CERT = &#039;/disk/site/etc/ssl/hobby.nl/hobby.nl.crt&#039;, MASTER_SSL_KEY = &#039;/disk/site/etc/ssl/hobby.nl/hobby.nl.key&#039;;&lt;br /&gt;
start slave;&lt;br /&gt;
Nu moeten we controleren of de replicatie deze kant op loopt, dit doe met commando &lt;br /&gt;
 mysql&amp;gt; show slave status\G&lt;br /&gt;
 *************************** 1. row ***************************&lt;br /&gt;
                Slave_IO_State: Waiting for master to send event&lt;br /&gt;
                   Master_Host: mysql02-int.hobby.nl&lt;br /&gt;
                   Master_User: repl&lt;br /&gt;
                   Master_Port: 3306&lt;br /&gt;
                 Connect_Retry: 60&lt;br /&gt;
               Master_Log_File: mysql-bin.000026&lt;br /&gt;
           Read_Master_Log_Pos: 72292974&lt;br /&gt;
                Relay_Log_File: mysql01-relay-bin.000056&lt;br /&gt;
                 Relay_Log_Pos: 72293189&lt;br /&gt;
         Relay_Master_Log_File: mysql-bin.000026&lt;br /&gt;
              &#039;&#039;&#039;Slave_IO_Running: Yes&#039;&#039;&#039;&lt;br /&gt;
             &#039;&#039;&#039;Slave_SQL_Running: Yes&#039;&#039;&#039;&lt;br /&gt;
               Replicate_Do_DB:&lt;br /&gt;
           Replicate_Ignore_DB: information_schema,mysql&lt;br /&gt;
            Replicate_Do_Table:&lt;br /&gt;
        Replicate_Ignore_Table:&lt;br /&gt;
       Replicate_Wild_Do_Table:&lt;br /&gt;
   Replicate_Wild_Ignore_Table:&lt;br /&gt;
                    Last_Errno: 0&lt;br /&gt;
                    Last_Error:&lt;br /&gt;
                  Skip_Counter: 0&lt;br /&gt;
           Exec_Master_Log_Pos: 72292974&lt;br /&gt;
               Relay_Log_Space: 72293447&lt;br /&gt;
               Until_Condition: None&lt;br /&gt;
                Until_Log_File:&lt;br /&gt;
                 Until_Log_Pos: 0&lt;br /&gt;
            Master_SSL_Allowed: Yes&lt;br /&gt;
            Master_SSL_CA_File: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
            Master_SSL_CA_Path:&lt;br /&gt;
               Master_SSL_Cert: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
             Master_SSL_Cipher:&lt;br /&gt;
                Master_SSL_Key: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
         Seconds_Behind_Master: 0&lt;br /&gt;
 Master_SSL_Verify_Server_Cert: No&lt;br /&gt;
                 Last_IO_Errno: 0&lt;br /&gt;
                 Last_IO_Error:&lt;br /&gt;
                Last_SQL_Errno: 0&lt;br /&gt;
                Last_SQL_Error:&lt;br /&gt;
   Replicate_Ignore_Server_Ids:&lt;br /&gt;
              Master_Server_Id: 2&lt;br /&gt;
                   Master_UUID: f0de239e-2c10-11eb-b1d1-005056a982be&lt;br /&gt;
              Master_Info_File: mysql.slave_master_info&lt;br /&gt;
                     SQL_Delay: 0&lt;br /&gt;
           SQL_Remaining_Delay: NULL&lt;br /&gt;
       Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates&lt;br /&gt;
            Master_Retry_Count: 86400&lt;br /&gt;
                   Master_Bind:&lt;br /&gt;
       Last_IO_Error_Timestamp:&lt;br /&gt;
      Last_SQL_Error_Timestamp:&lt;br /&gt;
                Master_SSL_Crl:&lt;br /&gt;
            Master_SSL_Crlpath:&lt;br /&gt;
            Retrieved_Gtid_Set:&lt;br /&gt;
             Executed_Gtid_Set:&lt;br /&gt;
                 Auto_Position: 0&lt;br /&gt;
          Replicate_Rewrite_DB:&lt;br /&gt;
                  Channel_Name:&lt;br /&gt;
            Master_TLS_Version:&lt;br /&gt;
        Master_public_key_path:&lt;br /&gt;
         Get_master_public_key: 0&lt;br /&gt;
             Network_Namespace:&lt;br /&gt;
 1 row in set, 1 warning (0.00 sec)&lt;br /&gt;
controleer of Slave_IO_Running en Slave_SQL_Running op yes staan.&lt;br /&gt;
Als dit is het geval moeten replicatie naar de 1e server ook herstelen dit doe je de zelfde stappen te herhalen van af show master status&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=MySQL_cluster&amp;diff=79028</id>
		<title>MySQL cluster</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=MySQL_cluster&amp;diff=79028"/>
		<updated>2020-11-22T14:37:33Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* tunning.cnf */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=doel=&lt;br /&gt;
Om te zorgen dat onze database server ook volledig redundant is hebben we hier een cluster gemaakt, onze loadbalancer zorgt er voor dat verkeer of op db01 of op db02 terecht komt.&lt;br /&gt;
=opzet=&lt;br /&gt;
&lt;br /&gt;
= loadbalancing =&lt;br /&gt;
Onze servers zijn opgezet in een master-master setup, dus er kan op beide gemuteerd worden, de loadbalancer verspreid de mutatie naar de andere server.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;belangrijk&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Op alle clusters moet database lbtest aanwezig zijn met tabel lbtest. Deze tabel moet minimaal 1 record hebben, hier test de loadbalancer namelijk op. De usernaam voor loadbalancer en nagios is lbtest met ww Testing123! deze gebruiker heeft alleen select rechten op deze database&lt;br /&gt;
&lt;br /&gt;
= database clusters =&lt;br /&gt;
== dbclus01-int ==&lt;br /&gt;
Dit cluster bestaat uit mysql01 en mysql02&lt;br /&gt;
&lt;br /&gt;
== hcc-dbclus02-int ==&lt;br /&gt;
Dit cluster bestaat uit mysql03 en mysql04&lt;br /&gt;
== dbclus04-int ==&lt;br /&gt;
Dit cluster bestaat uit mysql05 en mysql06&lt;br /&gt;
&lt;br /&gt;
=configuratie = &lt;br /&gt;
== configuratie files == &lt;br /&gt;
al deze bestanden bevinden zich in /etc/mysql/mysql.conf.d&lt;br /&gt;
=== mysqld.cnf ===&lt;br /&gt;
In deze file hebben we 1 aanpassing gedaan we hebben&lt;br /&gt;
 bind-address           = 127.0.0.1&lt;br /&gt;
voorzien van commentaar&lt;br /&gt;
=== ssl.cnf ===&lt;br /&gt;
Mysql beschikt over ssl daarom is dit ook geconfigureerd, onder andere de replicatie gebruikt het. De ssl.cnf file ziet er zo uit:&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 ssl-ca=/disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
 ssl-cert=/disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
 ssl-key=/disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
=== replicatie.cnf ===&lt;br /&gt;
Bij de replicatie is het belangrijk dat de oneven servers het server id 1 hebben en de even server id 2. Er mogen nooit 2 de zelfde id&#039;s zijn. Ook is de waarde van auto-increment-offset belangrijk; bij de oneven server is dat 1 en bij even 2. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voor oneven server ziet hij er zo uit:&lt;br /&gt;
 #sql mode uit voor toestaan lege velden&lt;br /&gt;
 sql-mode                        =       &amp;quot;&amp;quot;&lt;br /&gt;
 server-id                       =       1&lt;br /&gt;
 replicate-same-server-id        =       0&lt;br /&gt;
 auto-increment-increment        =       2&lt;br /&gt;
 auto-increment-offset           =       1&lt;br /&gt;
 relay-log                       =       mysql01-relay-bin&lt;br /&gt;
 binlog_format                   =       &amp;quot;STATEMENT&amp;quot;&lt;br /&gt;
 replicate-ignore-db             =       information_schema&lt;br /&gt;
 replicate-ignore-db             =       mysql&lt;br /&gt;
 binlog-ignore-db                =       information_schema&lt;br /&gt;
 binlog-ignore-db                =       mysql&lt;br /&gt;
 log_bin                         =       /var/log/mysql/mysql-bin.log&lt;br /&gt;
 slave-skip-errors = 1062&lt;br /&gt;
&lt;br /&gt;
=== credentials.cnf ===&lt;br /&gt;
Op de server is root voor localhost voorzien van wachtwoord om toch mysqldump en het mysql account gebruiken deze file is eigenaar van root en groep mysql met permissies 640. HIER KOM IK NIET UIT.&lt;br /&gt;
&lt;br /&gt;
=== tunning.cnf ===&lt;br /&gt;
Deze file bevat preformance tunning. Dit is server specifiek maar er moet in ieder geval deze regel in staan :&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 skip-name-resolve    =       1&lt;br /&gt;
&lt;br /&gt;
= starten/herstellen replicatie =&lt;br /&gt;
== herstel ==&lt;br /&gt;
Bij herstellen doe je op beide servers de volgende sql commando&#039;s uivoeren&lt;br /&gt;
 stop slave;&lt;br /&gt;
 reset slave;&lt;br /&gt;
Doe op de &#039;&#039;&#039;defecte&#039;&#039;&#039; server verwijder alle databases maak wel eerst een backup voor zekerheid&lt;br /&gt;
=== start replactie === &lt;br /&gt;
Zorg er voor database niet meer benaderd/gemuteerd wordt zet hem uit in de loadbalancer zowel ipv4/ipv6&lt;br /&gt;
Doe haal bij &#039;&#039;&#039;goede&#039;&#039;&#039; server de log postie op &lt;br /&gt;
 mysql&amp;gt; show master status\G&lt;br /&gt;
 *************************** 1. row ***************************&lt;br /&gt;
              File: mysql-bin.000057&lt;br /&gt;
          Position: 71061044&lt;br /&gt;
      Binlog_Do_DB:&lt;br /&gt;
  Binlog_Ignore_DB: information_schema,mysql&lt;br /&gt;
 Executed_Gtid_Set:&lt;br /&gt;
 1 row in set (0.00 sec)&lt;br /&gt;
Noteer de file en position&amp;lt;br&amp;gt;&lt;br /&gt;
maak mysqldump en pipe die naar de gefaalde server&lt;br /&gt;
  mysqldump --all-databases |mysql -h mysql0*-int -u jegebruikersnaam -p&lt;br /&gt;
vul je wachtwoord in en de database wordt gedump naar de ander server dit kan effe duren.&lt;br /&gt;
Op de andere server log je nu in en geef je het volgende commando&#039;s in mysql, vul dan het password in van repl urser en postion bij master_log_pos en de file bi master_log_file&lt;br /&gt;
 CHANGE MASTER TO MASTER_HOST=&#039;mysql0*-int.hobby.nl&#039;, MASTER_USER=&#039;repl&#039;, &#039;&#039;&#039;MASTER_PASSWORD=&#039;******&#039;,&#039;&#039;&#039; &#039;&#039;&#039;MASTER_LOG_FILE=&#039;mysql-bin.000057&#039;,&#039;&#039;&#039; &#039;&#039;&#039;MASTER_LOG_POS=71061044,&#039;&#039;&#039; MASTER_SSL = 1   , MASTER_SSL_CA = &#039;/disk/site/etc/ssl/hobby.nl/CA-bundel.crt&#039;, MASTER_SSL_CERT = &#039;/disk/site/etc/ssl/hobby.nl/hobby.nl.crt&#039;, MASTER_SSL_KEY = &#039;/disk/site/etc/ssl/hobby.nl/hobby.nl.key&#039;;&lt;br /&gt;
start slave;&lt;br /&gt;
Nu moeten we controleren of de replicatie deze kant op loopt, dit doe met commando &lt;br /&gt;
 mysql&amp;gt; show slave status\G&lt;br /&gt;
 *************************** 1. row ***************************&lt;br /&gt;
                Slave_IO_State: Waiting for master to send event&lt;br /&gt;
                   Master_Host: mysql02-int.hobby.nl&lt;br /&gt;
                   Master_User: repl&lt;br /&gt;
                   Master_Port: 3306&lt;br /&gt;
                 Connect_Retry: 60&lt;br /&gt;
               Master_Log_File: mysql-bin.000026&lt;br /&gt;
           Read_Master_Log_Pos: 72292974&lt;br /&gt;
                Relay_Log_File: mysql01-relay-bin.000056&lt;br /&gt;
                 Relay_Log_Pos: 72293189&lt;br /&gt;
         Relay_Master_Log_File: mysql-bin.000026&lt;br /&gt;
              &#039;&#039;&#039;Slave_IO_Running: Yes&#039;&#039;&#039;&lt;br /&gt;
             &#039;&#039;&#039;Slave_SQL_Running: Yes&#039;&#039;&#039;&lt;br /&gt;
               Replicate_Do_DB:&lt;br /&gt;
           Replicate_Ignore_DB: information_schema,mysql&lt;br /&gt;
            Replicate_Do_Table:&lt;br /&gt;
        Replicate_Ignore_Table:&lt;br /&gt;
       Replicate_Wild_Do_Table:&lt;br /&gt;
   Replicate_Wild_Ignore_Table:&lt;br /&gt;
                    Last_Errno: 0&lt;br /&gt;
                    Last_Error:&lt;br /&gt;
                  Skip_Counter: 0&lt;br /&gt;
           Exec_Master_Log_Pos: 72292974&lt;br /&gt;
               Relay_Log_Space: 72293447&lt;br /&gt;
               Until_Condition: None&lt;br /&gt;
                Until_Log_File:&lt;br /&gt;
                 Until_Log_Pos: 0&lt;br /&gt;
            Master_SSL_Allowed: Yes&lt;br /&gt;
            Master_SSL_CA_File: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
            Master_SSL_CA_Path:&lt;br /&gt;
               Master_SSL_Cert: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
             Master_SSL_Cipher:&lt;br /&gt;
                Master_SSL_Key: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
         Seconds_Behind_Master: 0&lt;br /&gt;
 Master_SSL_Verify_Server_Cert: No&lt;br /&gt;
                 Last_IO_Errno: 0&lt;br /&gt;
                 Last_IO_Error:&lt;br /&gt;
                Last_SQL_Errno: 0&lt;br /&gt;
                Last_SQL_Error:&lt;br /&gt;
   Replicate_Ignore_Server_Ids:&lt;br /&gt;
              Master_Server_Id: 2&lt;br /&gt;
                   Master_UUID: f0de239e-2c10-11eb-b1d1-005056a982be&lt;br /&gt;
              Master_Info_File: mysql.slave_master_info&lt;br /&gt;
                     SQL_Delay: 0&lt;br /&gt;
           SQL_Remaining_Delay: NULL&lt;br /&gt;
       Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates&lt;br /&gt;
            Master_Retry_Count: 86400&lt;br /&gt;
                   Master_Bind:&lt;br /&gt;
       Last_IO_Error_Timestamp:&lt;br /&gt;
      Last_SQL_Error_Timestamp:&lt;br /&gt;
                Master_SSL_Crl:&lt;br /&gt;
            Master_SSL_Crlpath:&lt;br /&gt;
            Retrieved_Gtid_Set:&lt;br /&gt;
             Executed_Gtid_Set:&lt;br /&gt;
                 Auto_Position: 0&lt;br /&gt;
          Replicate_Rewrite_DB:&lt;br /&gt;
                  Channel_Name:&lt;br /&gt;
            Master_TLS_Version:&lt;br /&gt;
        Master_public_key_path:&lt;br /&gt;
         Get_master_public_key: 0&lt;br /&gt;
             Network_Namespace:&lt;br /&gt;
 1 row in set, 1 warning (0.00 sec)&lt;br /&gt;
controleer of Slave_IO_Running en Slave_SQL_Running op yes staan.&lt;br /&gt;
Als dit is het geval moeten replicatie naar de 1e server ook herstelen dit doe je de zelfde stappen te herhalen van af show master status&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=MySQL_cluster&amp;diff=79026</id>
		<title>MySQL cluster</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=MySQL_cluster&amp;diff=79026"/>
		<updated>2020-11-22T14:36:16Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* credentials.cnf */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=doel=&lt;br /&gt;
Om te zorgen dat onze database server ook volledig redundant is hebben we hier een cluster gemaakt, onze loadbalancer zorgt er voor dat verkeer of op db01 of op db02 terecht komt.&lt;br /&gt;
=opzet=&lt;br /&gt;
&lt;br /&gt;
= loadbalancing =&lt;br /&gt;
Onze servers zijn opgezet in een master-master setup, dus er kan op beide gemuteerd worden, de loadbalancer verspreid de mutatie naar de andere server.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;belangrijk&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Op alle clusters moet database lbtest aanwezig zijn met tabel lbtest. Deze tabel moet minimaal 1 record hebben, hier test de loadbalancer namelijk op. De usernaam voor loadbalancer en nagios is lbtest met ww Testing123! deze gebruiker heeft alleen select rechten op deze database&lt;br /&gt;
&lt;br /&gt;
= database clusters =&lt;br /&gt;
== dbclus01-int ==&lt;br /&gt;
Dit cluster bestaat uit mysql01 en mysql02&lt;br /&gt;
&lt;br /&gt;
== hcc-dbclus02-int ==&lt;br /&gt;
Dit cluster bestaat uit mysql03 en mysql04&lt;br /&gt;
== dbclus04-int ==&lt;br /&gt;
Dit cluster bestaat uit mysql05 en mysql06&lt;br /&gt;
&lt;br /&gt;
=configuratie = &lt;br /&gt;
== configuratie files == &lt;br /&gt;
al deze bestanden bevinden zich in /etc/mysql/mysql.conf.d&lt;br /&gt;
=== mysqld.cnf ===&lt;br /&gt;
In deze file hebben we 1 aanpassing gedaan we hebben&lt;br /&gt;
 bind-address           = 127.0.0.1&lt;br /&gt;
voorzien van commentaar&lt;br /&gt;
=== ssl.cnf ===&lt;br /&gt;
Mysql beschikt over ssl daarom is dit ook geconfigureerd, onder andere de replicatie gebruikt het. De ssl.cnf file ziet er zo uit:&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 ssl-ca=/disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
 ssl-cert=/disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
 ssl-key=/disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
=== replicatie.cnf ===&lt;br /&gt;
Bij de replicatie is het belangrijk dat de oneven servers het server id 1 hebben en de even server id 2. Er mogen nooit 2 de zelfde id&#039;s zijn. Ook is de waarde van auto-increment-offset belangrijk; bij de oneven server is dat 1 en bij even 2. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voor oneven server ziet hij er zo uit:&lt;br /&gt;
 #sql mode uit voor toestaan lege velden&lt;br /&gt;
 sql-mode                        =       &amp;quot;&amp;quot;&lt;br /&gt;
 server-id                       =       1&lt;br /&gt;
 replicate-same-server-id        =       0&lt;br /&gt;
 auto-increment-increment        =       2&lt;br /&gt;
 auto-increment-offset           =       1&lt;br /&gt;
 relay-log                       =       mysql01-relay-bin&lt;br /&gt;
 binlog_format                   =       &amp;quot;STATEMENT&amp;quot;&lt;br /&gt;
 replicate-ignore-db             =       information_schema&lt;br /&gt;
 replicate-ignore-db             =       mysql&lt;br /&gt;
 binlog-ignore-db                =       information_schema&lt;br /&gt;
 binlog-ignore-db                =       mysql&lt;br /&gt;
 log_bin                         =       /var/log/mysql/mysql-bin.log&lt;br /&gt;
 slave-skip-errors = 1062&lt;br /&gt;
&lt;br /&gt;
=== credentials.cnf ===&lt;br /&gt;
Op de server is root voor localhost voorzien van wachtwoord om toch mysqldump en het mysql account gebruiken deze file is eigenaar van root en groep mysql met permissies 640. HIER KOM IK NIET UIT.&lt;br /&gt;
&lt;br /&gt;
=== tunning.cnf ===&lt;br /&gt;
In deze file bevat preformance tunning dit server specifiek maar er moet iedergeval deze regels in staan :&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 skip-name-resolve    =       1&lt;br /&gt;
&lt;br /&gt;
= starten/herstellen replicatie =&lt;br /&gt;
== herstel ==&lt;br /&gt;
Bij herstellen doe je op beide servers de volgende sql commando&#039;s uivoeren&lt;br /&gt;
 stop slave;&lt;br /&gt;
 reset slave;&lt;br /&gt;
Doe op de &#039;&#039;&#039;defecte&#039;&#039;&#039; server verwijder alle databases maak wel eerst een backup voor zekerheid&lt;br /&gt;
=== start replactie === &lt;br /&gt;
Zorg er voor database niet meer benaderd/gemuteerd wordt zet hem uit in de loadbalancer zowel ipv4/ipv6&lt;br /&gt;
Doe haal bij &#039;&#039;&#039;goede&#039;&#039;&#039; server de log postie op &lt;br /&gt;
 mysql&amp;gt; show master status\G&lt;br /&gt;
 *************************** 1. row ***************************&lt;br /&gt;
              File: mysql-bin.000057&lt;br /&gt;
          Position: 71061044&lt;br /&gt;
      Binlog_Do_DB:&lt;br /&gt;
  Binlog_Ignore_DB: information_schema,mysql&lt;br /&gt;
 Executed_Gtid_Set:&lt;br /&gt;
 1 row in set (0.00 sec)&lt;br /&gt;
Noteer de file en position&amp;lt;br&amp;gt;&lt;br /&gt;
maak mysqldump en pipe die naar de gefaalde server&lt;br /&gt;
  mysqldump --all-databases |mysql -h mysql0*-int -u jegebruikersnaam -p&lt;br /&gt;
vul je wachtwoord in en de database wordt gedump naar de ander server dit kan effe duren.&lt;br /&gt;
Op de andere server log je nu in en geef je het volgende commando&#039;s in mysql, vul dan het password in van repl urser en postion bij master_log_pos en de file bi master_log_file&lt;br /&gt;
 CHANGE MASTER TO MASTER_HOST=&#039;mysql0*-int.hobby.nl&#039;, MASTER_USER=&#039;repl&#039;, &#039;&#039;&#039;MASTER_PASSWORD=&#039;******&#039;,&#039;&#039;&#039; &#039;&#039;&#039;MASTER_LOG_FILE=&#039;mysql-bin.000057&#039;,&#039;&#039;&#039; &#039;&#039;&#039;MASTER_LOG_POS=71061044,&#039;&#039;&#039; MASTER_SSL = 1   , MASTER_SSL_CA = &#039;/disk/site/etc/ssl/hobby.nl/CA-bundel.crt&#039;, MASTER_SSL_CERT = &#039;/disk/site/etc/ssl/hobby.nl/hobby.nl.crt&#039;, MASTER_SSL_KEY = &#039;/disk/site/etc/ssl/hobby.nl/hobby.nl.key&#039;;&lt;br /&gt;
start slave;&lt;br /&gt;
Nu moeten we controleren of de replicatie deze kant op loopt, dit doe met commando &lt;br /&gt;
 mysql&amp;gt; show slave status\G&lt;br /&gt;
 *************************** 1. row ***************************&lt;br /&gt;
                Slave_IO_State: Waiting for master to send event&lt;br /&gt;
                   Master_Host: mysql02-int.hobby.nl&lt;br /&gt;
                   Master_User: repl&lt;br /&gt;
                   Master_Port: 3306&lt;br /&gt;
                 Connect_Retry: 60&lt;br /&gt;
               Master_Log_File: mysql-bin.000026&lt;br /&gt;
           Read_Master_Log_Pos: 72292974&lt;br /&gt;
                Relay_Log_File: mysql01-relay-bin.000056&lt;br /&gt;
                 Relay_Log_Pos: 72293189&lt;br /&gt;
         Relay_Master_Log_File: mysql-bin.000026&lt;br /&gt;
              &#039;&#039;&#039;Slave_IO_Running: Yes&#039;&#039;&#039;&lt;br /&gt;
             &#039;&#039;&#039;Slave_SQL_Running: Yes&#039;&#039;&#039;&lt;br /&gt;
               Replicate_Do_DB:&lt;br /&gt;
           Replicate_Ignore_DB: information_schema,mysql&lt;br /&gt;
            Replicate_Do_Table:&lt;br /&gt;
        Replicate_Ignore_Table:&lt;br /&gt;
       Replicate_Wild_Do_Table:&lt;br /&gt;
   Replicate_Wild_Ignore_Table:&lt;br /&gt;
                    Last_Errno: 0&lt;br /&gt;
                    Last_Error:&lt;br /&gt;
                  Skip_Counter: 0&lt;br /&gt;
           Exec_Master_Log_Pos: 72292974&lt;br /&gt;
               Relay_Log_Space: 72293447&lt;br /&gt;
               Until_Condition: None&lt;br /&gt;
                Until_Log_File:&lt;br /&gt;
                 Until_Log_Pos: 0&lt;br /&gt;
            Master_SSL_Allowed: Yes&lt;br /&gt;
            Master_SSL_CA_File: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
            Master_SSL_CA_Path:&lt;br /&gt;
               Master_SSL_Cert: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
             Master_SSL_Cipher:&lt;br /&gt;
                Master_SSL_Key: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
         Seconds_Behind_Master: 0&lt;br /&gt;
 Master_SSL_Verify_Server_Cert: No&lt;br /&gt;
                 Last_IO_Errno: 0&lt;br /&gt;
                 Last_IO_Error:&lt;br /&gt;
                Last_SQL_Errno: 0&lt;br /&gt;
                Last_SQL_Error:&lt;br /&gt;
   Replicate_Ignore_Server_Ids:&lt;br /&gt;
              Master_Server_Id: 2&lt;br /&gt;
                   Master_UUID: f0de239e-2c10-11eb-b1d1-005056a982be&lt;br /&gt;
              Master_Info_File: mysql.slave_master_info&lt;br /&gt;
                     SQL_Delay: 0&lt;br /&gt;
           SQL_Remaining_Delay: NULL&lt;br /&gt;
       Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates&lt;br /&gt;
            Master_Retry_Count: 86400&lt;br /&gt;
                   Master_Bind:&lt;br /&gt;
       Last_IO_Error_Timestamp:&lt;br /&gt;
      Last_SQL_Error_Timestamp:&lt;br /&gt;
                Master_SSL_Crl:&lt;br /&gt;
            Master_SSL_Crlpath:&lt;br /&gt;
            Retrieved_Gtid_Set:&lt;br /&gt;
             Executed_Gtid_Set:&lt;br /&gt;
                 Auto_Position: 0&lt;br /&gt;
          Replicate_Rewrite_DB:&lt;br /&gt;
                  Channel_Name:&lt;br /&gt;
            Master_TLS_Version:&lt;br /&gt;
        Master_public_key_path:&lt;br /&gt;
         Get_master_public_key: 0&lt;br /&gt;
             Network_Namespace:&lt;br /&gt;
 1 row in set, 1 warning (0.00 sec)&lt;br /&gt;
controleer of Slave_IO_Running en Slave_SQL_Running op yes staan.&lt;br /&gt;
Als dit is het geval moeten replicatie naar de 1e server ook herstelen dit doe je de zelfde stappen te herhalen van af show master status&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=MySQL_cluster&amp;diff=79024</id>
		<title>MySQL cluster</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=MySQL_cluster&amp;diff=79024"/>
		<updated>2020-11-22T14:35:02Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* replicatie.cnf */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=doel=&lt;br /&gt;
Om te zorgen dat onze database server ook volledig redundant is hebben we hier een cluster gemaakt, onze loadbalancer zorgt er voor dat verkeer of op db01 of op db02 terecht komt.&lt;br /&gt;
=opzet=&lt;br /&gt;
&lt;br /&gt;
= loadbalancing =&lt;br /&gt;
Onze servers zijn opgezet in een master-master setup, dus er kan op beide gemuteerd worden, de loadbalancer verspreid de mutatie naar de andere server.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;belangrijk&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Op alle clusters moet database lbtest aanwezig zijn met tabel lbtest. Deze tabel moet minimaal 1 record hebben, hier test de loadbalancer namelijk op. De usernaam voor loadbalancer en nagios is lbtest met ww Testing123! deze gebruiker heeft alleen select rechten op deze database&lt;br /&gt;
&lt;br /&gt;
= database clusters =&lt;br /&gt;
== dbclus01-int ==&lt;br /&gt;
Dit cluster bestaat uit mysql01 en mysql02&lt;br /&gt;
&lt;br /&gt;
== hcc-dbclus02-int ==&lt;br /&gt;
Dit cluster bestaat uit mysql03 en mysql04&lt;br /&gt;
== dbclus04-int ==&lt;br /&gt;
Dit cluster bestaat uit mysql05 en mysql06&lt;br /&gt;
&lt;br /&gt;
=configuratie = &lt;br /&gt;
== configuratie files == &lt;br /&gt;
al deze bestanden bevinden zich in /etc/mysql/mysql.conf.d&lt;br /&gt;
=== mysqld.cnf ===&lt;br /&gt;
In deze file hebben we 1 aanpassing gedaan we hebben&lt;br /&gt;
 bind-address           = 127.0.0.1&lt;br /&gt;
voorzien van commentaar&lt;br /&gt;
=== ssl.cnf ===&lt;br /&gt;
Mysql beschikt over ssl daarom is dit ook geconfigureerd, onder andere de replicatie gebruikt het. De ssl.cnf file ziet er zo uit:&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 ssl-ca=/disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
 ssl-cert=/disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
 ssl-key=/disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
=== replicatie.cnf ===&lt;br /&gt;
Bij de replicatie is het belangrijk dat de oneven servers het server id 1 hebben en de even server id 2. Er mogen nooit 2 de zelfde id&#039;s zijn. Ook is de waarde van auto-increment-offset belangrijk; bij de oneven server is dat 1 en bij even 2. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voor oneven server ziet hij er zo uit:&lt;br /&gt;
 #sql mode uit voor toestaan lege velden&lt;br /&gt;
 sql-mode                        =       &amp;quot;&amp;quot;&lt;br /&gt;
 server-id                       =       1&lt;br /&gt;
 replicate-same-server-id        =       0&lt;br /&gt;
 auto-increment-increment        =       2&lt;br /&gt;
 auto-increment-offset           =       1&lt;br /&gt;
 relay-log                       =       mysql01-relay-bin&lt;br /&gt;
 binlog_format                   =       &amp;quot;STATEMENT&amp;quot;&lt;br /&gt;
 replicate-ignore-db             =       information_schema&lt;br /&gt;
 replicate-ignore-db             =       mysql&lt;br /&gt;
 binlog-ignore-db                =       information_schema&lt;br /&gt;
 binlog-ignore-db                =       mysql&lt;br /&gt;
 log_bin                         =       /var/log/mysql/mysql-bin.log&lt;br /&gt;
 slave-skip-errors = 1062&lt;br /&gt;
&lt;br /&gt;
=== credentials.cnf ===&lt;br /&gt;
Op de server is root voor localhost voor zien van wachtwoord om toch mysqldump en het mysql account gebruiken deze file is eigenaar van root en groep mysql met permissies 640. &lt;br /&gt;
=== tunning.cnf ===&lt;br /&gt;
In deze file bevat preformance tunning dit server specifiek maar er moet iedergeval deze regels in staan :&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 skip-name-resolve    =       1&lt;br /&gt;
&lt;br /&gt;
= starten/herstellen replicatie =&lt;br /&gt;
== herstel ==&lt;br /&gt;
Bij herstellen doe je op beide servers de volgende sql commando&#039;s uivoeren&lt;br /&gt;
 stop slave;&lt;br /&gt;
 reset slave;&lt;br /&gt;
Doe op de &#039;&#039;&#039;defecte&#039;&#039;&#039; server verwijder alle databases maak wel eerst een backup voor zekerheid&lt;br /&gt;
=== start replactie === &lt;br /&gt;
Zorg er voor database niet meer benaderd/gemuteerd wordt zet hem uit in de loadbalancer zowel ipv4/ipv6&lt;br /&gt;
Doe haal bij &#039;&#039;&#039;goede&#039;&#039;&#039; server de log postie op &lt;br /&gt;
 mysql&amp;gt; show master status\G&lt;br /&gt;
 *************************** 1. row ***************************&lt;br /&gt;
              File: mysql-bin.000057&lt;br /&gt;
          Position: 71061044&lt;br /&gt;
      Binlog_Do_DB:&lt;br /&gt;
  Binlog_Ignore_DB: information_schema,mysql&lt;br /&gt;
 Executed_Gtid_Set:&lt;br /&gt;
 1 row in set (0.00 sec)&lt;br /&gt;
Noteer de file en position&amp;lt;br&amp;gt;&lt;br /&gt;
maak mysqldump en pipe die naar de gefaalde server&lt;br /&gt;
  mysqldump --all-databases |mysql -h mysql0*-int -u jegebruikersnaam -p&lt;br /&gt;
vul je wachtwoord in en de database wordt gedump naar de ander server dit kan effe duren.&lt;br /&gt;
Op de andere server log je nu in en geef je het volgende commando&#039;s in mysql, vul dan het password in van repl urser en postion bij master_log_pos en de file bi master_log_file&lt;br /&gt;
 CHANGE MASTER TO MASTER_HOST=&#039;mysql0*-int.hobby.nl&#039;, MASTER_USER=&#039;repl&#039;, &#039;&#039;&#039;MASTER_PASSWORD=&#039;******&#039;,&#039;&#039;&#039; &#039;&#039;&#039;MASTER_LOG_FILE=&#039;mysql-bin.000057&#039;,&#039;&#039;&#039; &#039;&#039;&#039;MASTER_LOG_POS=71061044,&#039;&#039;&#039; MASTER_SSL = 1   , MASTER_SSL_CA = &#039;/disk/site/etc/ssl/hobby.nl/CA-bundel.crt&#039;, MASTER_SSL_CERT = &#039;/disk/site/etc/ssl/hobby.nl/hobby.nl.crt&#039;, MASTER_SSL_KEY = &#039;/disk/site/etc/ssl/hobby.nl/hobby.nl.key&#039;;&lt;br /&gt;
start slave;&lt;br /&gt;
Nu moeten we controleren of de replicatie deze kant op loopt, dit doe met commando &lt;br /&gt;
 mysql&amp;gt; show slave status\G&lt;br /&gt;
 *************************** 1. row ***************************&lt;br /&gt;
                Slave_IO_State: Waiting for master to send event&lt;br /&gt;
                   Master_Host: mysql02-int.hobby.nl&lt;br /&gt;
                   Master_User: repl&lt;br /&gt;
                   Master_Port: 3306&lt;br /&gt;
                 Connect_Retry: 60&lt;br /&gt;
               Master_Log_File: mysql-bin.000026&lt;br /&gt;
           Read_Master_Log_Pos: 72292974&lt;br /&gt;
                Relay_Log_File: mysql01-relay-bin.000056&lt;br /&gt;
                 Relay_Log_Pos: 72293189&lt;br /&gt;
         Relay_Master_Log_File: mysql-bin.000026&lt;br /&gt;
              &#039;&#039;&#039;Slave_IO_Running: Yes&#039;&#039;&#039;&lt;br /&gt;
             &#039;&#039;&#039;Slave_SQL_Running: Yes&#039;&#039;&#039;&lt;br /&gt;
               Replicate_Do_DB:&lt;br /&gt;
           Replicate_Ignore_DB: information_schema,mysql&lt;br /&gt;
            Replicate_Do_Table:&lt;br /&gt;
        Replicate_Ignore_Table:&lt;br /&gt;
       Replicate_Wild_Do_Table:&lt;br /&gt;
   Replicate_Wild_Ignore_Table:&lt;br /&gt;
                    Last_Errno: 0&lt;br /&gt;
                    Last_Error:&lt;br /&gt;
                  Skip_Counter: 0&lt;br /&gt;
           Exec_Master_Log_Pos: 72292974&lt;br /&gt;
               Relay_Log_Space: 72293447&lt;br /&gt;
               Until_Condition: None&lt;br /&gt;
                Until_Log_File:&lt;br /&gt;
                 Until_Log_Pos: 0&lt;br /&gt;
            Master_SSL_Allowed: Yes&lt;br /&gt;
            Master_SSL_CA_File: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
            Master_SSL_CA_Path:&lt;br /&gt;
               Master_SSL_Cert: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
             Master_SSL_Cipher:&lt;br /&gt;
                Master_SSL_Key: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
         Seconds_Behind_Master: 0&lt;br /&gt;
 Master_SSL_Verify_Server_Cert: No&lt;br /&gt;
                 Last_IO_Errno: 0&lt;br /&gt;
                 Last_IO_Error:&lt;br /&gt;
                Last_SQL_Errno: 0&lt;br /&gt;
                Last_SQL_Error:&lt;br /&gt;
   Replicate_Ignore_Server_Ids:&lt;br /&gt;
              Master_Server_Id: 2&lt;br /&gt;
                   Master_UUID: f0de239e-2c10-11eb-b1d1-005056a982be&lt;br /&gt;
              Master_Info_File: mysql.slave_master_info&lt;br /&gt;
                     SQL_Delay: 0&lt;br /&gt;
           SQL_Remaining_Delay: NULL&lt;br /&gt;
       Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates&lt;br /&gt;
            Master_Retry_Count: 86400&lt;br /&gt;
                   Master_Bind:&lt;br /&gt;
       Last_IO_Error_Timestamp:&lt;br /&gt;
      Last_SQL_Error_Timestamp:&lt;br /&gt;
                Master_SSL_Crl:&lt;br /&gt;
            Master_SSL_Crlpath:&lt;br /&gt;
            Retrieved_Gtid_Set:&lt;br /&gt;
             Executed_Gtid_Set:&lt;br /&gt;
                 Auto_Position: 0&lt;br /&gt;
          Replicate_Rewrite_DB:&lt;br /&gt;
                  Channel_Name:&lt;br /&gt;
            Master_TLS_Version:&lt;br /&gt;
        Master_public_key_path:&lt;br /&gt;
         Get_master_public_key: 0&lt;br /&gt;
             Network_Namespace:&lt;br /&gt;
 1 row in set, 1 warning (0.00 sec)&lt;br /&gt;
controleer of Slave_IO_Running en Slave_SQL_Running op yes staan.&lt;br /&gt;
Als dit is het geval moeten replicatie naar de 1e server ook herstelen dit doe je de zelfde stappen te herhalen van af show master status&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=MySQL_cluster&amp;diff=79022</id>
		<title>MySQL cluster</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=MySQL_cluster&amp;diff=79022"/>
		<updated>2020-11-22T14:32:01Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* ssl.cnf */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=doel=&lt;br /&gt;
Om te zorgen dat onze database server ook volledig redundant is hebben we hier een cluster gemaakt, onze loadbalancer zorgt er voor dat verkeer of op db01 of op db02 terecht komt.&lt;br /&gt;
=opzet=&lt;br /&gt;
&lt;br /&gt;
= loadbalancing =&lt;br /&gt;
Onze servers zijn opgezet in een master-master setup, dus er kan op beide gemuteerd worden, de loadbalancer verspreid de mutatie naar de andere server.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;belangrijk&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Op alle clusters moet database lbtest aanwezig zijn met tabel lbtest. Deze tabel moet minimaal 1 record hebben, hier test de loadbalancer namelijk op. De usernaam voor loadbalancer en nagios is lbtest met ww Testing123! deze gebruiker heeft alleen select rechten op deze database&lt;br /&gt;
&lt;br /&gt;
= database clusters =&lt;br /&gt;
== dbclus01-int ==&lt;br /&gt;
Dit cluster bestaat uit mysql01 en mysql02&lt;br /&gt;
&lt;br /&gt;
== hcc-dbclus02-int ==&lt;br /&gt;
Dit cluster bestaat uit mysql03 en mysql04&lt;br /&gt;
== dbclus04-int ==&lt;br /&gt;
Dit cluster bestaat uit mysql05 en mysql06&lt;br /&gt;
&lt;br /&gt;
=configuratie = &lt;br /&gt;
== configuratie files == &lt;br /&gt;
al deze bestanden bevinden zich in /etc/mysql/mysql.conf.d&lt;br /&gt;
=== mysqld.cnf ===&lt;br /&gt;
In deze file hebben we 1 aanpassing gedaan we hebben&lt;br /&gt;
 bind-address           = 127.0.0.1&lt;br /&gt;
voorzien van commentaar&lt;br /&gt;
=== ssl.cnf ===&lt;br /&gt;
Mysql beschikt over ssl daarom is dit ook geconfigureerd, onder andere de replicatie gebruikt het. De ssl.cnf file ziet er zo uit:&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 ssl-ca=/disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
 ssl-cert=/disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
 ssl-key=/disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
&lt;br /&gt;
=== replicatie.cnf ===&lt;br /&gt;
Bij de replicatie is het belangrijk dat de oneven servers het server id 1 hebben en de even server id 2 er mogen nooit 2 de zelfde id&#039;s zijn. ook is het van auto-increment-offset belangrijk bij oneven is dat 1 en bij even2. &amp;lt;br&amp;gt;&lt;br /&gt;
voor oneven server ziet hij er zo uit:&lt;br /&gt;
 #sql mode uit voor toestaan lege velden&lt;br /&gt;
 sql-mode                        =       &amp;quot;&amp;quot;&lt;br /&gt;
 server-id                       =       1&lt;br /&gt;
 replicate-same-server-id        =       0&lt;br /&gt;
 auto-increment-increment        =       2&lt;br /&gt;
 auto-increment-offset           =       1&lt;br /&gt;
 relay-log                       =       mysql01-relay-bin&lt;br /&gt;
 binlog_format                   =       &amp;quot;STATEMENT&amp;quot;&lt;br /&gt;
 replicate-ignore-db             =       information_schema&lt;br /&gt;
 replicate-ignore-db             =       mysql&lt;br /&gt;
 binlog-ignore-db                =       information_schema&lt;br /&gt;
 binlog-ignore-db                =       mysql&lt;br /&gt;
 log_bin                         =       /var/log/mysql/mysql-bin.log&lt;br /&gt;
 slave-skip-errors = 1062&lt;br /&gt;
=== credentials.cnf ===&lt;br /&gt;
Op de server is root voor localhost voor zien van wachtwoord om toch mysqldump en het mysql account gebruiken deze file is eigenaar van root en groep mysql met permissies 640. &lt;br /&gt;
=== tunning.cnf ===&lt;br /&gt;
In deze file bevat preformance tunning dit server specifiek maar er moet iedergeval deze regels in staan :&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 skip-name-resolve    =       1&lt;br /&gt;
&lt;br /&gt;
= starten/herstellen replicatie =&lt;br /&gt;
== herstel ==&lt;br /&gt;
Bij herstellen doe je op beide servers de volgende sql commando&#039;s uivoeren&lt;br /&gt;
 stop slave;&lt;br /&gt;
 reset slave;&lt;br /&gt;
Doe op de &#039;&#039;&#039;defecte&#039;&#039;&#039; server verwijder alle databases maak wel eerst een backup voor zekerheid&lt;br /&gt;
=== start replactie === &lt;br /&gt;
Zorg er voor database niet meer benaderd/gemuteerd wordt zet hem uit in de loadbalancer zowel ipv4/ipv6&lt;br /&gt;
Doe haal bij &#039;&#039;&#039;goede&#039;&#039;&#039; server de log postie op &lt;br /&gt;
 mysql&amp;gt; show master status\G&lt;br /&gt;
 *************************** 1. row ***************************&lt;br /&gt;
              File: mysql-bin.000057&lt;br /&gt;
          Position: 71061044&lt;br /&gt;
      Binlog_Do_DB:&lt;br /&gt;
  Binlog_Ignore_DB: information_schema,mysql&lt;br /&gt;
 Executed_Gtid_Set:&lt;br /&gt;
 1 row in set (0.00 sec)&lt;br /&gt;
Noteer de file en position&amp;lt;br&amp;gt;&lt;br /&gt;
maak mysqldump en pipe die naar de gefaalde server&lt;br /&gt;
  mysqldump --all-databases |mysql -h mysql0*-int -u jegebruikersnaam -p&lt;br /&gt;
vul je wachtwoord in en de database wordt gedump naar de ander server dit kan effe duren.&lt;br /&gt;
Op de andere server log je nu in en geef je het volgende commando&#039;s in mysql, vul dan het password in van repl urser en postion bij master_log_pos en de file bi master_log_file&lt;br /&gt;
 CHANGE MASTER TO MASTER_HOST=&#039;mysql0*-int.hobby.nl&#039;, MASTER_USER=&#039;repl&#039;, &#039;&#039;&#039;MASTER_PASSWORD=&#039;******&#039;,&#039;&#039;&#039; &#039;&#039;&#039;MASTER_LOG_FILE=&#039;mysql-bin.000057&#039;,&#039;&#039;&#039; &#039;&#039;&#039;MASTER_LOG_POS=71061044,&#039;&#039;&#039; MASTER_SSL = 1   , MASTER_SSL_CA = &#039;/disk/site/etc/ssl/hobby.nl/CA-bundel.crt&#039;, MASTER_SSL_CERT = &#039;/disk/site/etc/ssl/hobby.nl/hobby.nl.crt&#039;, MASTER_SSL_KEY = &#039;/disk/site/etc/ssl/hobby.nl/hobby.nl.key&#039;;&lt;br /&gt;
start slave;&lt;br /&gt;
Nu moeten we controleren of de replicatie deze kant op loopt, dit doe met commando &lt;br /&gt;
 mysql&amp;gt; show slave status\G&lt;br /&gt;
 *************************** 1. row ***************************&lt;br /&gt;
                Slave_IO_State: Waiting for master to send event&lt;br /&gt;
                   Master_Host: mysql02-int.hobby.nl&lt;br /&gt;
                   Master_User: repl&lt;br /&gt;
                   Master_Port: 3306&lt;br /&gt;
                 Connect_Retry: 60&lt;br /&gt;
               Master_Log_File: mysql-bin.000026&lt;br /&gt;
           Read_Master_Log_Pos: 72292974&lt;br /&gt;
                Relay_Log_File: mysql01-relay-bin.000056&lt;br /&gt;
                 Relay_Log_Pos: 72293189&lt;br /&gt;
         Relay_Master_Log_File: mysql-bin.000026&lt;br /&gt;
              &#039;&#039;&#039;Slave_IO_Running: Yes&#039;&#039;&#039;&lt;br /&gt;
             &#039;&#039;&#039;Slave_SQL_Running: Yes&#039;&#039;&#039;&lt;br /&gt;
               Replicate_Do_DB:&lt;br /&gt;
           Replicate_Ignore_DB: information_schema,mysql&lt;br /&gt;
            Replicate_Do_Table:&lt;br /&gt;
        Replicate_Ignore_Table:&lt;br /&gt;
       Replicate_Wild_Do_Table:&lt;br /&gt;
   Replicate_Wild_Ignore_Table:&lt;br /&gt;
                    Last_Errno: 0&lt;br /&gt;
                    Last_Error:&lt;br /&gt;
                  Skip_Counter: 0&lt;br /&gt;
           Exec_Master_Log_Pos: 72292974&lt;br /&gt;
               Relay_Log_Space: 72293447&lt;br /&gt;
               Until_Condition: None&lt;br /&gt;
                Until_Log_File:&lt;br /&gt;
                 Until_Log_Pos: 0&lt;br /&gt;
            Master_SSL_Allowed: Yes&lt;br /&gt;
            Master_SSL_CA_File: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
            Master_SSL_CA_Path:&lt;br /&gt;
               Master_SSL_Cert: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
             Master_SSL_Cipher:&lt;br /&gt;
                Master_SSL_Key: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
         Seconds_Behind_Master: 0&lt;br /&gt;
 Master_SSL_Verify_Server_Cert: No&lt;br /&gt;
                 Last_IO_Errno: 0&lt;br /&gt;
                 Last_IO_Error:&lt;br /&gt;
                Last_SQL_Errno: 0&lt;br /&gt;
                Last_SQL_Error:&lt;br /&gt;
   Replicate_Ignore_Server_Ids:&lt;br /&gt;
              Master_Server_Id: 2&lt;br /&gt;
                   Master_UUID: f0de239e-2c10-11eb-b1d1-005056a982be&lt;br /&gt;
              Master_Info_File: mysql.slave_master_info&lt;br /&gt;
                     SQL_Delay: 0&lt;br /&gt;
           SQL_Remaining_Delay: NULL&lt;br /&gt;
       Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates&lt;br /&gt;
            Master_Retry_Count: 86400&lt;br /&gt;
                   Master_Bind:&lt;br /&gt;
       Last_IO_Error_Timestamp:&lt;br /&gt;
      Last_SQL_Error_Timestamp:&lt;br /&gt;
                Master_SSL_Crl:&lt;br /&gt;
            Master_SSL_Crlpath:&lt;br /&gt;
            Retrieved_Gtid_Set:&lt;br /&gt;
             Executed_Gtid_Set:&lt;br /&gt;
                 Auto_Position: 0&lt;br /&gt;
          Replicate_Rewrite_DB:&lt;br /&gt;
                  Channel_Name:&lt;br /&gt;
            Master_TLS_Version:&lt;br /&gt;
        Master_public_key_path:&lt;br /&gt;
         Get_master_public_key: 0&lt;br /&gt;
             Network_Namespace:&lt;br /&gt;
 1 row in set, 1 warning (0.00 sec)&lt;br /&gt;
controleer of Slave_IO_Running en Slave_SQL_Running op yes staan.&lt;br /&gt;
Als dit is het geval moeten replicatie naar de 1e server ook herstelen dit doe je de zelfde stappen te herhalen van af show master status&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=MySQL_cluster&amp;diff=79020</id>
		<title>MySQL cluster</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=MySQL_cluster&amp;diff=79020"/>
		<updated>2020-11-22T14:30:13Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* loadbalancing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=doel=&lt;br /&gt;
Om te zorgen dat onze database server ook volledig redundant is hebben we hier een cluster gemaakt, onze loadbalancer zorgt er voor dat verkeer of op db01 of op db02 terecht komt.&lt;br /&gt;
=opzet=&lt;br /&gt;
&lt;br /&gt;
= loadbalancing =&lt;br /&gt;
Onze servers zijn opgezet in een master-master setup, dus er kan op beide gemuteerd worden, de loadbalancer verspreid de mutatie naar de andere server.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;belangrijk&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Op alle clusters moet database lbtest aanwezig zijn met tabel lbtest. Deze tabel moet minimaal 1 record hebben, hier test de loadbalancer namelijk op. De usernaam voor loadbalancer en nagios is lbtest met ww Testing123! deze gebruiker heeft alleen select rechten op deze database&lt;br /&gt;
&lt;br /&gt;
= database clusters =&lt;br /&gt;
== dbclus01-int ==&lt;br /&gt;
Dit cluster bestaat uit mysql01 en mysql02&lt;br /&gt;
&lt;br /&gt;
== hcc-dbclus02-int ==&lt;br /&gt;
Dit cluster bestaat uit mysql03 en mysql04&lt;br /&gt;
== dbclus04-int ==&lt;br /&gt;
Dit cluster bestaat uit mysql05 en mysql06&lt;br /&gt;
&lt;br /&gt;
=configuratie = &lt;br /&gt;
== configuratie files == &lt;br /&gt;
al deze bestanden bevinden zich in /etc/mysql/mysql.conf.d&lt;br /&gt;
=== mysqld.cnf ===&lt;br /&gt;
In deze file hebben we 1 aanpassing gedaan we hebben&lt;br /&gt;
 bind-address           = 127.0.0.1&lt;br /&gt;
voorzien van commentaar&lt;br /&gt;
=== ssl.cnf ===&lt;br /&gt;
mysql beschikt over ssl daarom hebben dit geconfigureerd, onder andere de replicatie loopt over ssl file ziet er zo uit:&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 ssl-ca=/disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
 ssl-cert=/disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
 ssl-key=/disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
=== replicatie.cnf ===&lt;br /&gt;
Bij de replicatie is het belangrijk dat de oneven servers het server id 1 hebben en de even server id 2 er mogen nooit 2 de zelfde id&#039;s zijn. ook is het van auto-increment-offset belangrijk bij oneven is dat 1 en bij even2. &amp;lt;br&amp;gt;&lt;br /&gt;
voor oneven server ziet hij er zo uit:&lt;br /&gt;
 #sql mode uit voor toestaan lege velden&lt;br /&gt;
 sql-mode                        =       &amp;quot;&amp;quot;&lt;br /&gt;
 server-id                       =       1&lt;br /&gt;
 replicate-same-server-id        =       0&lt;br /&gt;
 auto-increment-increment        =       2&lt;br /&gt;
 auto-increment-offset           =       1&lt;br /&gt;
 relay-log                       =       mysql01-relay-bin&lt;br /&gt;
 binlog_format                   =       &amp;quot;STATEMENT&amp;quot;&lt;br /&gt;
 replicate-ignore-db             =       information_schema&lt;br /&gt;
 replicate-ignore-db             =       mysql&lt;br /&gt;
 binlog-ignore-db                =       information_schema&lt;br /&gt;
 binlog-ignore-db                =       mysql&lt;br /&gt;
 log_bin                         =       /var/log/mysql/mysql-bin.log&lt;br /&gt;
 slave-skip-errors = 1062&lt;br /&gt;
=== credentials.cnf ===&lt;br /&gt;
Op de server is root voor localhost voor zien van wachtwoord om toch mysqldump en het mysql account gebruiken deze file is eigenaar van root en groep mysql met permissies 640. &lt;br /&gt;
=== tunning.cnf ===&lt;br /&gt;
In deze file bevat preformance tunning dit server specifiek maar er moet iedergeval deze regels in staan :&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 skip-name-resolve    =       1&lt;br /&gt;
&lt;br /&gt;
= starten/herstellen replicatie =&lt;br /&gt;
== herstel ==&lt;br /&gt;
Bij herstellen doe je op beide servers de volgende sql commando&#039;s uivoeren&lt;br /&gt;
 stop slave;&lt;br /&gt;
 reset slave;&lt;br /&gt;
Doe op de &#039;&#039;&#039;defecte&#039;&#039;&#039; server verwijder alle databases maak wel eerst een backup voor zekerheid&lt;br /&gt;
=== start replactie === &lt;br /&gt;
Zorg er voor database niet meer benaderd/gemuteerd wordt zet hem uit in de loadbalancer zowel ipv4/ipv6&lt;br /&gt;
Doe haal bij &#039;&#039;&#039;goede&#039;&#039;&#039; server de log postie op &lt;br /&gt;
 mysql&amp;gt; show master status\G&lt;br /&gt;
 *************************** 1. row ***************************&lt;br /&gt;
              File: mysql-bin.000057&lt;br /&gt;
          Position: 71061044&lt;br /&gt;
      Binlog_Do_DB:&lt;br /&gt;
  Binlog_Ignore_DB: information_schema,mysql&lt;br /&gt;
 Executed_Gtid_Set:&lt;br /&gt;
 1 row in set (0.00 sec)&lt;br /&gt;
Noteer de file en position&amp;lt;br&amp;gt;&lt;br /&gt;
maak mysqldump en pipe die naar de gefaalde server&lt;br /&gt;
  mysqldump --all-databases |mysql -h mysql0*-int -u jegebruikersnaam -p&lt;br /&gt;
vul je wachtwoord in en de database wordt gedump naar de ander server dit kan effe duren.&lt;br /&gt;
Op de andere server log je nu in en geef je het volgende commando&#039;s in mysql, vul dan het password in van repl urser en postion bij master_log_pos en de file bi master_log_file&lt;br /&gt;
 CHANGE MASTER TO MASTER_HOST=&#039;mysql0*-int.hobby.nl&#039;, MASTER_USER=&#039;repl&#039;, &#039;&#039;&#039;MASTER_PASSWORD=&#039;******&#039;,&#039;&#039;&#039; &#039;&#039;&#039;MASTER_LOG_FILE=&#039;mysql-bin.000057&#039;,&#039;&#039;&#039; &#039;&#039;&#039;MASTER_LOG_POS=71061044,&#039;&#039;&#039; MASTER_SSL = 1   , MASTER_SSL_CA = &#039;/disk/site/etc/ssl/hobby.nl/CA-bundel.crt&#039;, MASTER_SSL_CERT = &#039;/disk/site/etc/ssl/hobby.nl/hobby.nl.crt&#039;, MASTER_SSL_KEY = &#039;/disk/site/etc/ssl/hobby.nl/hobby.nl.key&#039;;&lt;br /&gt;
start slave;&lt;br /&gt;
Nu moeten we controleren of de replicatie deze kant op loopt, dit doe met commando &lt;br /&gt;
 mysql&amp;gt; show slave status\G&lt;br /&gt;
 *************************** 1. row ***************************&lt;br /&gt;
                Slave_IO_State: Waiting for master to send event&lt;br /&gt;
                   Master_Host: mysql02-int.hobby.nl&lt;br /&gt;
                   Master_User: repl&lt;br /&gt;
                   Master_Port: 3306&lt;br /&gt;
                 Connect_Retry: 60&lt;br /&gt;
               Master_Log_File: mysql-bin.000026&lt;br /&gt;
           Read_Master_Log_Pos: 72292974&lt;br /&gt;
                Relay_Log_File: mysql01-relay-bin.000056&lt;br /&gt;
                 Relay_Log_Pos: 72293189&lt;br /&gt;
         Relay_Master_Log_File: mysql-bin.000026&lt;br /&gt;
              &#039;&#039;&#039;Slave_IO_Running: Yes&#039;&#039;&#039;&lt;br /&gt;
             &#039;&#039;&#039;Slave_SQL_Running: Yes&#039;&#039;&#039;&lt;br /&gt;
               Replicate_Do_DB:&lt;br /&gt;
           Replicate_Ignore_DB: information_schema,mysql&lt;br /&gt;
            Replicate_Do_Table:&lt;br /&gt;
        Replicate_Ignore_Table:&lt;br /&gt;
       Replicate_Wild_Do_Table:&lt;br /&gt;
   Replicate_Wild_Ignore_Table:&lt;br /&gt;
                    Last_Errno: 0&lt;br /&gt;
                    Last_Error:&lt;br /&gt;
                  Skip_Counter: 0&lt;br /&gt;
           Exec_Master_Log_Pos: 72292974&lt;br /&gt;
               Relay_Log_Space: 72293447&lt;br /&gt;
               Until_Condition: None&lt;br /&gt;
                Until_Log_File:&lt;br /&gt;
                 Until_Log_Pos: 0&lt;br /&gt;
            Master_SSL_Allowed: Yes&lt;br /&gt;
            Master_SSL_CA_File: /disk/site/etc/ssl/hobby.nl/CA-bundel.crt&lt;br /&gt;
            Master_SSL_CA_Path:&lt;br /&gt;
               Master_SSL_Cert: /disk/site/etc/ssl/hobby.nl/hobby.nl.crt&lt;br /&gt;
             Master_SSL_Cipher:&lt;br /&gt;
                Master_SSL_Key: /disk/site/etc/ssl/hobby.nl/hobby.nl.key&lt;br /&gt;
         Seconds_Behind_Master: 0&lt;br /&gt;
 Master_SSL_Verify_Server_Cert: No&lt;br /&gt;
                 Last_IO_Errno: 0&lt;br /&gt;
                 Last_IO_Error:&lt;br /&gt;
                Last_SQL_Errno: 0&lt;br /&gt;
                Last_SQL_Error:&lt;br /&gt;
   Replicate_Ignore_Server_Ids:&lt;br /&gt;
              Master_Server_Id: 2&lt;br /&gt;
                   Master_UUID: f0de239e-2c10-11eb-b1d1-005056a982be&lt;br /&gt;
              Master_Info_File: mysql.slave_master_info&lt;br /&gt;
                     SQL_Delay: 0&lt;br /&gt;
           SQL_Remaining_Delay: NULL&lt;br /&gt;
       Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates&lt;br /&gt;
            Master_Retry_Count: 86400&lt;br /&gt;
                   Master_Bind:&lt;br /&gt;
       Last_IO_Error_Timestamp:&lt;br /&gt;
      Last_SQL_Error_Timestamp:&lt;br /&gt;
                Master_SSL_Crl:&lt;br /&gt;
            Master_SSL_Crlpath:&lt;br /&gt;
            Retrieved_Gtid_Set:&lt;br /&gt;
             Executed_Gtid_Set:&lt;br /&gt;
                 Auto_Position: 0&lt;br /&gt;
          Replicate_Rewrite_DB:&lt;br /&gt;
                  Channel_Name:&lt;br /&gt;
            Master_TLS_Version:&lt;br /&gt;
        Master_public_key_path:&lt;br /&gt;
         Get_master_public_key: 0&lt;br /&gt;
             Network_Namespace:&lt;br /&gt;
 1 row in set, 1 warning (0.00 sec)&lt;br /&gt;
controleer of Slave_IO_Running en Slave_SQL_Running op yes staan.&lt;br /&gt;
Als dit is het geval moeten replicatie naar de 1e server ook herstelen dit doe je de zelfde stappen te herhalen van af show master status&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=Roundcube_Webmail&amp;diff=78830</id>
		<title>Roundcube Webmail</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=Roundcube_Webmail&amp;diff=78830"/>
		<updated>2020-10-29T14:17:48Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* Upgrading Roundcube webmail */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Upgrading Roundcube webmail==&lt;br /&gt;
Roundcube wordt niet via de standaard repo&#039;s geupdate maar via een tar.gz distributie. Deze kan worden gedownload van [http://roundcube.net/ de Roundcube site]. Makkelijkste is een wget van de url in je eigen home dir te doen op de mail servers. &lt;br /&gt;
&lt;br /&gt;
* Maak een backup van de webtree met cp -Rp /disk/site/mail/roundcube /disk/site/mail/roundcube.old. &lt;br /&gt;
* Maak een backup van de database: mysqldump -h 127.0.0.1 roundcube &amp;gt;roundcube.sql (aangenomen dat je root bent...)&lt;br /&gt;
* wget https://github.com/roundcube/roundcubemail/releases/download/1.4.9/roundcubemail-1.4.9-complete.tar.gz (of nieuwer)&lt;br /&gt;
* Pak de tarball uit: tar zxf ...&lt;br /&gt;
* cd in de net ontstane directory.&lt;br /&gt;
* Lees UPGRADING en INSTALL. &lt;br /&gt;
* run het script &#039;&#039;&#039;./bin/installto.sh /disk/site/mail/roundcube&#039;&#039;&#039;.&lt;br /&gt;
* controleer owner /disk/site/mail/roundcube. Zet de hele tree op www-data:www-data, indien nodig. Gebruik daarvoor&#039;&#039;&#039;chown -R www-data:www-data /disk/site/mail/roundcube&#039;&#039;&#039; &lt;br /&gt;
* werk de adresboek indexen bij door &#039;&#039;&#039;./bin/indexcontacts.sh&#039;&#039;&#039; uit  te voeren &#039;&#039;&#039;in de life webtree&#039;&#039;&#039;.&lt;br /&gt;
* ruim voorlaatste versie op nadat de nieuwe release getest is.&lt;br /&gt;
&lt;br /&gt;
Dat is alles.&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=Roundcube_Webmail&amp;diff=78533</id>
		<title>Roundcube Webmail</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=Roundcube_Webmail&amp;diff=78533"/>
		<updated>2020-08-11T16:22:47Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* Upgrading Roundcube webmail */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Upgrading Roundcube webmail==&lt;br /&gt;
Roundcube wordt niet via de standaard repo&#039;s geupdate maar via een tar.gz distributie. Deze kan worden gedownload van [http://roundcube.net/ de Roundcube site]. Makkelijkste is een wget van de url in je eigen home dir te doen op de mail servers. &lt;br /&gt;
&lt;br /&gt;
* Maak een backup van de webtree met cp -Rp /disk/site/mail/roundcube /disk/site/mail/roundcube.old. &lt;br /&gt;
* Maak een backup van de database: mysqldump -h 127.0.0.1 roundcube &amp;gt;roundcube.sql (aangenomen dat je root bent...)&lt;br /&gt;
* wget https://github.com/roundcube/roundcubemail/releases/download/1.4.8/roundcubemail-1.4.8-complete.tar.gz (of nieuwer)&lt;br /&gt;
* Pak de tarball uit: tar zxf ...&lt;br /&gt;
* cd in de net ontstane directory.&lt;br /&gt;
* Lees UPGRADING en INSTALL. &lt;br /&gt;
* run het script &#039;&#039;&#039;./bin/installto.sh /disk/site/mail/roundcube&#039;&#039;&#039;.&lt;br /&gt;
* controleer owner /disk/site/mail/roundcube. Zet de hele tree op www-data:www-data, indien nodig. Gebruik daarvoor&#039;&#039;&#039;chown -R www-data:www-data /disk/site/mail/roundcube&#039;&#039;&#039; &lt;br /&gt;
* werk de adresboek indexen bij door &#039;&#039;&#039;./bin/indexcontacts.sh&#039;&#039;&#039; uit  te voeren &#039;&#039;&#039;in de life webtree&#039;&#039;&#039;.&lt;br /&gt;
* ruim voorlaatste versie op nadat de nieuwe release getest is.&lt;br /&gt;
&lt;br /&gt;
Dat is alles.&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=Roundcube_Webmail&amp;diff=78531</id>
		<title>Roundcube Webmail</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=Roundcube_Webmail&amp;diff=78531"/>
		<updated>2020-08-11T16:22:25Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* Upgrading Roundcube webmail */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Upgrading Roundcube webmail==&lt;br /&gt;
Roundcube wordt niet via de standaard repo&#039;s geupdate maar via een tar.gz distributie. Deze kan worden gedownload van [http://roundcube.net/ de Roundcube site]. Makkelijkste is een wget van de url in je eigen home dir te doen op de mail servers. &lt;br /&gt;
&lt;br /&gt;
* Maak een backup van de webtree met cp -Rp /disk/site/mail/roundcube /disk/site/mail/roundcube.old. &lt;br /&gt;
* Maak een backup van de database: mysqldump -h 127.0.0.1 roundcube &amp;gt;roundcube.sql (aangenomen dat je root bent...)&lt;br /&gt;
* wget https://github.com/roundcube/roundcubemail/releases/download/1.4.8/roundcubemail-1.4.8-complete.tar.gz (of nieuwer)&lt;br /&gt;
* Pak de tarball uit: tar zxf ...&lt;br /&gt;
* cd in de net ontstane directory.&lt;br /&gt;
* Lees UPGRADING en INSTALL. &lt;br /&gt;
* run het script &#039;&#039;&#039;./bin/installto.sh /disk/site/mail/roundcube&#039;&#039;&#039;.&lt;br /&gt;
* controleer owner /disk/site/mail/roundcube. Zet de hele tree op www-data:www-data, indien nodig. &lt;br /&gt;
Gebruik daarvoor&#039;&#039;&#039;chown -R www-data:www-data /disk/site/mail/roundcube&#039;&#039;&#039; &lt;br /&gt;
* werk de adresboek indexen bij door &#039;&#039;&#039;./bin/indexcontacts.sh&#039;&#039;&#039; uit  te voeren &#039;&#039;&#039;in de life webtree&#039;&#039;&#039;.&lt;br /&gt;
* ruim voorlaatste versie op nadat de nieuwe release getest is.&lt;br /&gt;
&lt;br /&gt;
Dat is alles.&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=Roundcube_Webmail&amp;diff=78529</id>
		<title>Roundcube Webmail</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=Roundcube_Webmail&amp;diff=78529"/>
		<updated>2020-08-11T15:54:00Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* Upgrading Roundcube webmail */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Upgrading Roundcube webmail==&lt;br /&gt;
Roundcube wordt niet via de standaard repo&#039;s geupdate maar via een tar.gz distributie. Deze kan worden gedownload van [http://roundcube.net/ de Roundcube site]. Makkelijkste is een wget van de url in je eigen home dir te doen op de mail servers. &lt;br /&gt;
&lt;br /&gt;
* Maak een backup van de webtree met cp -Rp /disk/site/mail/roundcube /disk/site/mail/roundcube.old. &lt;br /&gt;
* Maak een backup van de database: mysqldump -u roundcube-db -h 127.0.0.1 -p roundcube &amp;gt;roundcube.sql (misschien is user root nodig vbs20200811)&lt;br /&gt;
* wget https://github.com/roundcube/roundcubemail/releases/download/1.4.8/roundcubemail-1.4.8-complete.tar.gz (of nieuwer)&lt;br /&gt;
* Pak de tarball uit: tar zxf ...&lt;br /&gt;
* cd in de net ontstane directory.&lt;br /&gt;
* Lees UPGRADING en INSTALL. &lt;br /&gt;
* ---Niet meer van toepassing. Het in de instructies genomede command: ./bin/installto.sh /disk/site/mail/roundcube werkt niet door de blokkering van sommige PHP calls.&lt;br /&gt;
* ---Niet meer van toepassing. Schakel de disable regel even uit om de update te doen, door er een &amp;quot;;&amp;quot; voor te plaatsen op of nabij regel 385 met &#039;&#039;&#039;vi /etc/php/7.0/cli/php.ini&#039;&#039;&#039;.  &lt;br /&gt;
* run het script &#039;&#039;&#039;./bin/installto.sh /disk/site/mail/roundcube&#039;&#039;&#039;.&lt;br /&gt;
* ---Niet meer van toepassing. activeer de zojuist uigeschakelde disable regel weer.&lt;br /&gt;
* controleer owner /disk/site/mail/roundcube. Zet de hele tree op www-data:www-data, indien nodig. &#039;&#039;&#039;chown -R www-data:www-data /disk/site/mail/roundcube&#039;&#039;&#039; &lt;br /&gt;
* werk de adresboek indexen bij door &#039;&#039;&#039;./bin/indexcontacts.sh&#039;&#039;&#039; uit  te voeren &#039;&#039;&#039;in de life webtree&#039;&#039;&#039;.&lt;br /&gt;
* ruim voorlaatste versie op nadat de nieuwe release getest is.&lt;br /&gt;
&lt;br /&gt;
Dat is alles.&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=Uitleg_scripts&amp;diff=78370</id>
		<title>Uitleg scripts</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=Uitleg_scripts&amp;diff=78370"/>
		<updated>2020-04-18T09:49:02Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* gen_alias */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introductie==&lt;br /&gt;
De scripting is er op gericht een aantal tabellen te vullen in de postfixadmin database. De tabellen zijn in eerste instantie helemaal standaard gehouden zoals postfixadmin ze aanmaakt bij de installatie. Postfixadmin kan worden gebruikt om veranderingen in de data aan te brengen. Later zijn enkele velden toegevoegd voor het specifieke gebruik binnen Hobbynet. Voornamelijk om het creëren van tekst bestanden als bron bestanden aan te maken.&lt;br /&gt;
&lt;br /&gt;
===Proces===&lt;br /&gt;
Het hele proces is gericht op het behoud van (mogelijk gewijzigde) data. In de aanloop fase werden de platte tekst bestanden met de hand bijgehouden waarna de database tabellen gegenereerd werden. In de test fase werden de uit de database gemaakte tekst bestanden vergeleken met de originele bestanden. In de productie fase zijn er geen originele tekst bestanden meer; de vorige versie wordt veilig gesteld en daarna vervangen door de verse dump uit de database. Op die wijze worden nieuwe records meegenomen die met PostfixAdmin in de database zijn gemaakt. De laatst bekende data in de database wordt namelijk eerst gedumpt naar tekst bestanden, die vervolgens weer worden gebruikt om de database te laden. De externe bestanden hobbyabon.txt (was husers) en kaderfunc.txt (was b3a.txt) zijn hier een uitzondering op; die worden nooit overschreven maar door het script &#039;&#039;&#039;upd_mailserver&#039;&#039;&#039; op de LDAP server geplaatst. &#039;&#039;&#039;upd_smail&#039;&#039;&#039; op de mailserver doet de rest.&amp;lt;br&amp;gt;&lt;br /&gt;
Zie ook de pagina [[bronbestanden]].&lt;br /&gt;
&lt;br /&gt;
===Locatie van de bestanden===&lt;br /&gt;
De bron bestanden: &#039;&#039;&#039;kaderfunc.txt&#039;&#039;&#039;, &#039;&#039;&#039;hobbyabon.txt&#039;&#039;&#039; staan in de data directory (via scp van hcc-ldap-lb1 afkomstig), &#039;&#039;&#039;extra_alias_domains.txt&#039;&#039;&#039;, &#039;&#039;&#039;extra_aliases.txt&#039;&#039;&#039;, &#039;&#039;&#039;scouthout_aliases.txt&#039;&#039;&#039; en de &#039;&#039;&#039;_header/_footer&#039;&#039;&#039; bestanden (.tmpl) staan ook in &#039;&#039;&#039;/usr/local/hobbynet/data&#039;&#039;&#039; directory.&lt;br /&gt;
&lt;br /&gt;
De scripts staan in &#039;&#039;&#039;/usr/local/hobbynet/local&#039;&#039;&#039;. De backups van de database en tekst bestanden komen in &#039;&#039;&#039;/usr/local/hobbynet/data/backup&#039;&#039;&#039; terecht. De door de scripts gegenereerde MySQL bestanden komen in &#039;&#039;&#039;/usr/local/hobbynet/data/loader&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
De bestanden in de backup directory moeten geregeld opgeruimd worden; er zit geen limiet op het aantal versies. In de backup directory staat ook een script om een versie van een bepaalde datum/tijd snel terug te zetten waarna &#039;&#039;&#039;upd_smail&#039;&#039;&#039; de database herlaadt.&lt;br /&gt;
&lt;br /&gt;
===Scripts===&lt;br /&gt;
De (perl) scripts zijn bewust kort en simpel gehouden om ze zo modulair mogelijk te maken. De tactiek is telkens hetzelfde: bij elk te maken SQL loader bestand is er een header, tussenliggende gelijksoortige data regels en een footer te onderscheiden.&lt;br /&gt;
* De header is alle tekst die door een MySQL dump gemaakt wordt (met een delete-if-exists erin), tot en met de eerste SQL regel: INSERT INTO...VALUES.&lt;br /&gt;
* De diverse scripts voegen de tussenliggende data regels toe.&lt;br /&gt;
* De footer is gewoonlijk een laatste data regel maar dan eindigend op &#039;&#039;&#039;;&#039;&#039;&#039; in plaats van &#039;&#039;&#039;,&#039;&#039;&#039; en de afsluitende regels van de dump.&lt;br /&gt;
Een dergelijk SQL loader bestand is zonder meer terug te laden in MySQL. De tabel wordt eerst weggegooid en wordt daarna opnieuw aangemaakt.&lt;br /&gt;
&lt;br /&gt;
==upd_smail==&lt;br /&gt;
Dit script is het overkoepelende script dat alle &#039;&#039;&#039;dump_*&#039;&#039;&#039; en &#039;&#039;&#039;gen_*&#039;&#039;&#039; scripts uitvoert en mysql aanroept om de database te laden. &#039;&#039;&#039;upd_smail&#039;&#039;&#039; op zijn beurt wordt weer door &#039;&#039;&#039;upd_all&#039;&#039;&#039; aangeroepen. In dit &#039;&#039;&#039;upd_smail&#039;&#039;&#039; script worden vóórdat de tabellen vanaf scratch worden opgebouwd, de 4 tabellen veilig gesteld in een backup directory. Tevens worden tekst bestanden aangemaakt van die delen van de database die met de hand veranderd kunnen zijn. Het uitgangspunt is hier dat de database de echte waarheid is en de bronbestanden achter kunnen lopen. &lt;br /&gt;
&lt;br /&gt;
Het &#039;&#039;&#039;all_domains.txt&#039;&#039;&#039; bestand bevat de domeinen waar HCC voor betaalt aan SIDN. Ook de benodigde speciale subdomeinen staan in het all_domains.txt bestand. &lt;br /&gt;
&lt;br /&gt;
Per tabel worden de SQL header files samengevoegd met de output van de verschillende gen_* scripts. Tenslotte wordt een SQL footer toegevoegd, vaak alleen om de SQL te beëindigen met een &#039;&#039;&#039;;&#039;&#039;&#039;. Daarna wordt de tabel in MySQL aangemaakt en de data geladen. De &lt;br /&gt;
tabellen worden dus in z&#039;n geheel vervangen. Als laatste wordt een soort van &#039;&#039;&#039;virtalias&#039;&#039;&#039; bestand voor Roundcube gemaakt. Hieronder de complete &#039;&#039;&#039;upd_smail&#039;&#039;&#039; (slechts als referentie, kijk altijd naar het script op de server zelf):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
# $Id: /usr/local/hobbynet/bin/upd_smail $&lt;br /&gt;
#&lt;br /&gt;
# Driver voor alle subtaken dump... en gen....&lt;br /&gt;
#&lt;br /&gt;
# usage: ./upd_smail&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
CHOWN=/bin/chown&lt;br /&gt;
CHMOD=/bin/chmod&lt;br /&gt;
&lt;br /&gt;
HNET=/usr/local/hobbynet&lt;br /&gt;
HNET_BIN=$HNET/bin&lt;br /&gt;
HNET_LIB=$HNET/lib&lt;br /&gt;
HNET_BCK=$HNET/lib/backup&lt;br /&gt;
HNET_LDR=$HNET/lib/loader&lt;br /&gt;
&lt;br /&gt;
ID=$(date +&amp;quot;%Y%m%d-%H%M%S&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cd $HNET_LIB&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# save all 4 tables with unique name&lt;br /&gt;
#&lt;br /&gt;
mysqldump -u postfixadmin -ppassword -c postfixadmin mailbox &amp;gt;$HNET_BCK/mailbox_$ID.sql&lt;br /&gt;
mysqldump -u postfixadmin -ppassword -c postfixadmin alias &amp;gt;$HNET_BCK/alias_$ID.sql&lt;br /&gt;
mysqldump -u postfixadmin -ppassword -c postfixadmin domain &amp;gt;$HNET_BCK/domain_$ID.sql&lt;br /&gt;
mysqldump -u postfixadmin -ppassword -c postfixadmin alias_domain &amp;gt;$HNET_BCK/alias_domain_$ID.sql&lt;br /&gt;
#&lt;br /&gt;
# save extra mailboxes&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Saving extra mailboxess...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/extra_mailboxes.txt $HNET_BCK/extra_mailboxes_$ID.txt&lt;br /&gt;
$HNET_BIN/dump_extra_mailboxes | sort &amp;gt;$HNET_LIB/extra_mailboxes.txt&lt;br /&gt;
#&lt;br /&gt;
# save scouthout aliases&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Saving scouthout aliases...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/scouthout_aliases.txt $HNET_BCK/scouthout_aliases_$ID.txt&lt;br /&gt;
$HNET_BIN/dump_scouthout_aliases | sort &amp;gt;$HNET_LIB/scouthout_aliases.txt&lt;br /&gt;
#&lt;br /&gt;
# save new and extra aliases&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Saving new and extra aliases...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/extra_aliases.txt $HNET_BCK/extra_aliases_$ID.txt&lt;br /&gt;
$HNET_BIN/dump_extra_aliases | sort &amp;gt;$HNET_LIB/extra_aliases.txt&lt;br /&gt;
#&lt;br /&gt;
# save hcc and other domains&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Saving hcc and other domains...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/all_domains.txt $HNET_BCK/all_domains_$ID.txt&lt;br /&gt;
$HNET_BIN/dump_all_domains | sort &amp;gt;$HNET_LIB/all_domains.txt&lt;br /&gt;
#&lt;br /&gt;
# save new and extra domain_aliases&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Saving new and extra domain_aliases...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/extra_alias_domains.txt $HNET_BCK/extra_alias_domains_$ID.txt&lt;br /&gt;
$HNET_BIN/dump_extra_alias_domains | sort &amp;gt;$HNET_LIB/extra_alias_domains.txt&lt;br /&gt;
#&lt;br /&gt;
# prepare emergency backup procedure (here-doecument)&lt;br /&gt;
#&lt;br /&gt;
cat &amp;gt; $HNET_BCK/restore_$ID &amp;lt;&amp;lt;END&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
mysql -u postfixadmin -ppassword -c postfixadmin &amp;lt;$HNET_BCK/mailbox_$ID.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword -c postfixadmin &amp;lt;$HNET_BCK/alias_$ID.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword -c postfixadmin &amp;lt;$HNET_BCK/domain_$ID.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword -c postfixadmin &amp;lt;$HNET_BCK/alias_domain_$ID.sql&lt;br /&gt;
cp $HNET_BCK/extra_mailboxes_$ID.txt $HNET_LIB/extra_mailboxes.txt&lt;br /&gt;
cp $HNET_BCK/scouthout_aliases_$ID.txt $HNET_LIB/scouthout_aliases.txt&lt;br /&gt;
cp $HNET_BCK/extra_aliases_$ID.txt $HNET_LIB/extra_aliases.txt&lt;br /&gt;
cp $HNET_BCK/all_domains_$ID.txt $HNET_LIB/all_domains.txt&lt;br /&gt;
cp $HNET_BCK/extra_alias_domains_$ID.txt $HNET_LIB/extra_alias_domains.txt&lt;br /&gt;
END&lt;br /&gt;
chmod 755 $HNET_BCK/restore_$ID&lt;br /&gt;
#&lt;br /&gt;
# build all 4 tables from input files&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Building mailbox table for Hobbynet/Kadernet...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/mailbox_header.tmpl $HNET_LDR/mailbox.sql&lt;br /&gt;
$HNET_BIN/gen_mailbox &amp;gt;&amp;gt; $HNET_LDR/mailbox.sql&lt;br /&gt;
$HNET_BIN/gen_mailbox2 | sort | uniq &amp;gt;&amp;gt; $HNET_LDR/mailbox.sql&lt;br /&gt;
$HNET_BIN/gen_extra_mailbox &amp;gt;&amp;gt; $HNET_LDR/mailbox.sql&lt;br /&gt;
cat $HNET_LIB/mailbox_footer.tmpl &amp;gt;&amp;gt; $HNET_LDR/mailbox.sql&lt;br /&gt;
$CHMOD 644 $HNET_LDR/mailbox.sql&lt;br /&gt;
$CHOWN root:root $HNET_LDR/mailbox.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword postfixadmin &amp;lt;$HNET_LDR/mailbox.sql&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Building alias table for Hobbynet/Kadernet...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/alias_header.tmpl $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_fff_hobbynet_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_fff_www_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_extra_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_scouthout_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_alias2 | sort | uniq &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_func_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_best_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_webm_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_kernl_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_group_alias | sort | uniq &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_voorz_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_kernl_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_secr_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_penm_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_webm_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_bestl_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_voorz_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_kernl_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_secr_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_penm_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_webm_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_bestl_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ledenraad_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
# use temporary file with unique mail addresses&lt;br /&gt;
cut --delimiter=&amp;quot;,&amp;quot; --field=4 $HNET_LIB/kaderfunc.txt | sort | uniq &amp;gt; $HNET_LIB/kaderfunc-sorted.txt&lt;br /&gt;
$HNET_BIN/gen_fff_kadernet_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
rm $HNET_LIB/kaderfunc-sorted.txt&lt;br /&gt;
#&lt;br /&gt;
cat $HNET_LIB/alias_footer.tmpl &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$CHMOD 644 $HNET_LDR/alias.sql&lt;br /&gt;
$CHOWN root:root $HNET_LDR/alias.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword -c postfixadmin &amp;lt;$HNET_LDR/alias.sql&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Building domain table for Hobbynet/Kadernet...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/domain_header.tmpl $HNET_LDR/domain.sql&lt;br /&gt;
$HNET_BIN/gen_domain &amp;gt;&amp;gt; $HNET_LDR/domain.sql&lt;br /&gt;
$HNET_BIN/gen_all_domain &amp;gt;&amp;gt; $HNET_LDR/domain.sql&lt;br /&gt;
$HNET_BIN/gen_domain2 &amp;gt;&amp;gt; $HNET_LDR/domain.sql&lt;br /&gt;
cat $HNET_LIB/domain_footer.tmpl &amp;gt;&amp;gt; $HNET_LDR/domain.sql&lt;br /&gt;
$CHMOD 644 $HNET_LDR/domain.sql&lt;br /&gt;
$CHOWN root:root $HNET_LDR/domain.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword postfixadmin &amp;lt;$HNET_LDR/domain.sql&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Building alias_domain table for Hobbynet/Kadernet...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/alias_domain_header.tmpl $HNET_LDR/alias_domain.sql&lt;br /&gt;
$HNET_BIN/gen_extra_alias_domain &amp;gt;&amp;gt; $HNET_LDR/alias_domain.sql&lt;br /&gt;
$HNET_BIN/gen_alias_domain2 &amp;gt;&amp;gt; $HNET_LDR/alias_domain.sql&lt;br /&gt;
cat $HNET_LIB/alias_domain_footer.tmpl &amp;gt;&amp;gt; $HNET_LDR/alias_domain.sql&lt;br /&gt;
$CHMOD 644 $HNET_LDR/alias_domain.sql&lt;br /&gt;
$CHOWN root:root $HNET_LDR/alias_domain.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword postfixadmin &amp;lt;$HNET_LDR/alias_domain.sql&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;&amp;quot;&lt;br /&gt;
echo &amp;quot;Building systemusers for Roundcube...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/systemusers.tmpl $HNET_LIB/systemusers&lt;br /&gt;
$HNET_BIN/gen_systemusers &amp;gt;&amp;gt; $HNET_LIB/systemusers&lt;br /&gt;
$CHMOD 644 $HNET_LIB/systemusers&lt;br /&gt;
$CHOWN root:root $HNET_LIB/systemusers&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;&amp;quot;&lt;br /&gt;
echo &amp;quot;Dumping transport for mail-dev...&amp;quot;&lt;br /&gt;
$HNET_BIN/dump_transport &amp;gt;$HNET_LIB/transport&lt;br /&gt;
cp /etc/postfix/transport /etc/postfix/transport.old&lt;br /&gt;
cp $HNET_LIB/transport /etc/postfix/transport&lt;br /&gt;
postmap /etc/postfix/transport&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Dumping relay_recipients for mail-dev...&amp;quot;&lt;br /&gt;
$HNET_BIN/dump_relay_recipients &amp;gt;$HNET_LIB/relay_recipients&lt;br /&gt;
cp /etc/postfix/relay_recipients /etc/postfix/relay_recipients.old&lt;br /&gt;
cp $HNET_LIB/relay_recipients /etc/postfix/relay_recipients&lt;br /&gt;
postmap /etc/postfix/relay_recipients&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Dumping relay_domains for mail2...&amp;quot;&lt;br /&gt;
$HNET_BIN/dump_mail2_domains &amp;gt;$HNET_LIB/relay_domains&lt;br /&gt;
#&lt;br /&gt;
# EOF&lt;br /&gt;
#&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversie van data naar tekst bestanden==&lt;br /&gt;
Wat ooit gestart is al met de hand beheerde tekst bestanden, is vervangen door bestanden gemaakt uit de PFA database. Omdat alle updates m.b.v. PFA gemaakt worden, zijn die gegevens nieuwer. Door die eerst te dumpen en daarna weer te gebruiken als bron bestand blijven wijzigingen bewaard.&lt;br /&gt;
===dump_all_domains===&lt;br /&gt;
Maakt een tekst bestand in &#039;&#039;&#039;all_domains.txt&#039;&#039;&#039; van de alle domeinen in de domain tabel.&lt;br /&gt;
===dump_extra_alias_domains===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;extra_alias_domains.txt&#039;&#039;&#039; uit de &#039;&#039;&#039;alias_domain&#039;&#039;&#039; tabel.&lt;br /&gt;
===dump_extra_aliases===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;extra_aliases.txt&#039;&#039;&#039; uit de &#039;&#039;&#039;alias&#039;&#039;&#039; tabel.&lt;br /&gt;
===dump_extra_mailboxes===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;extra_mailboxes.txt&#039;&#039;&#039; uit de &#039;&#039;&#039;mailbox&#039;&#039;&#039; tabel.&lt;br /&gt;
===dump_mail2_domains===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;relay_domains&#039;&#039;&#039; uit de &#039;&#039;&#039;domain&#039;&#039;&#039; tabel voor gebruik op &#039;&#039;&#039;mail2&#039;&#039;&#039;.&lt;br /&gt;
===dump_relay_recipients===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;relay_recipients&#039;&#039;&#039; aan voor Postfix. Dit bestand moet naar /etc/postfix op mail-dev gekopieerd worden en er moet een postmap op uitgevoerd worden.&lt;br /&gt;
===dump_scouthout_aliases===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;scouthout_aliases.txt&#039;&#039;&#039; uit de &#039;&#039;&#039;alias&#039;&#039;&#039; tabel.&lt;br /&gt;
===dump_transport===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;transport&#039;&#039;&#039; aan voor Postfix. Dit bestand moet naar /etc/postfix gekopieerd worden en er moet een postmap op uitgevoerd worden.&lt;br /&gt;
&lt;br /&gt;
==Genereren van de mailboxen==&lt;br /&gt;
Alle (ook virtuele) gebruikers waarvoor mail-dev eindstation is voor email, hebben een home directory en een mailbox in een mail directory op dit systeem. Zowel HCC!Hobbynet als de HCC!Kadernet leden hebben allemaal een mailbox met Maildir structuur in /disk/mail/vmail/&amp;lt;domain&amp;gt;/&amp;lt;user&amp;gt;/Maildir/.&lt;br /&gt;
&lt;br /&gt;
===gen_mailbox===&lt;br /&gt;
Dit script maakt de &#039;&#039;&#039;hobbynet&#039;&#039;&#039; mailbox informatie aan. De passwords zijn afkomstig uit ldap op hcc-ldap-lb1. De mailbox naam was &#039;&#039;&#039;altijd&#039;&#039;&#039; &amp;lt;contact&amp;gt;@&amp;lt;systeem&amp;gt;.hobby.nl voor hobbynetleden. Het domein is altijd &#039;&#039;&#039;&amp;lt;systeem&amp;gt;.hobby.nl&#039;&#039;&#039;. Het &#039;&#039;&#039;type&#039;&#039;&#039; attribute in ldap wordt ook bewaard in de mailbox db tabel.&lt;br /&gt;
&lt;br /&gt;
===gen_mailbox2===&lt;br /&gt;
Dit script maakt de &#039;&#039;&#039;kadernet&#039;&#039;&#039; mailbox informatie aan. De mailbox naam is &#039;&#039;&#039;altijd&#039;&#039;&#039; &amp;lt;lidnummer&amp;gt;@kader.hcc.nl voor kaderleden. Het domein voor kaderleden is dus altijd &#039;&#039;&#039;kader.hcc.nl&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===gen_extra_mailbox===&lt;br /&gt;
Dit script maakt mailboxen aan die niet uit de andere bronnen te herleiden zijn. De mailboxen krijgen type 9.&lt;br /&gt;
&lt;br /&gt;
==Genereren van de aliases==&lt;br /&gt;
Email die op een domein op mail-dev wordt afgeleverd om direct weer verder gestuurd te worden heeft geen mailbox nodig. Voorbeeld hiervan is scouthout.nl. Alle email adressen expanderen via &#039;&#039;&#039;aliases&#039;&#039;&#039; naar een of meer externe adressen. Mail-dev fungeert hiervoor dus als mailrelay. Aliases zijn ook nodig voor functionele email adressen van kadernet functies zoals voorzitter, secretaris, enz. Ook zijn er adressen nodig voor grotere groepen ten bate van het kantoor zodat ze alle penningmeesters tegelijk kunnen mailen. De alias tabel wordt dus vrij groot. Er zijn weer meerdere kleine scripts die de tabellen vullen.&lt;br /&gt;
&lt;br /&gt;
===gen_alias===&lt;br /&gt;
Dit script genereert alle &#039;&#039;&#039;hobbynet&#039;&#039;&#039; aliases die uit hobbyabon.txt gemaakt kunnen worden. Voor de hobbynetleden wordt een alias gemaakt met de naam van de gebruiker in de &#039;&#039;&#039;alias&#039;&#039;&#039; tabel. Er komt dus een &#039;&#039;&#039;&amp;lt;contact&amp;gt;@&amp;lt;systeem&amp;gt;.hobby.nl&#039;&#039;&#039; die naar de mailbox &#039;&#039;&#039;&amp;lt;contact&amp;gt;@&amp;lt;systeem&amp;gt;.hobby.nl&#039;&#039;&#039; wijst. De &#039;&#039;&#039;alias&#039;&#039;&#039; tabel is zichtbaar in PostfixAdmin. De alias tabel kan beheerd worden met PostfixAdmin. Via phpmyadmin op dbadmin.hobby.nl kunnen natuurlijk alle tabellen in de database postfixadmin benaderd worden, mocht dit nodig zijn.&lt;br /&gt;
&lt;br /&gt;
Om het mogelijk te maken voor een hobbynet lid de Hobbynet mail ergens anders af te leveren, is de scripting aangepast (vbs20200416). Het mail veld in ou=users bepaald of er een mailbox wordt gemaakt os dat er forwarding wordt gedaan. Zie [[Hobbynet mail forwarding]] voor meer uitleg.&lt;br /&gt;
&lt;br /&gt;
===gen_fff_hobbynet_alias===&lt;br /&gt;
Dit script genereert de &#039;&#039;&#039;fff_hnet@hobby.nl&#039;&#039;&#039; alias door uit hobbyabon.txt het emailadres van leden met code 0,1,2,3 te halen.&lt;br /&gt;
&lt;br /&gt;
===gen_fff_www_alias===&lt;br /&gt;
Dit script genereert de &#039;&#039;&#039;fff_www@hobby.nl&#039;&#039;&#039; alias door uit hobbyabon.txt het emailadres te halen van dié leden die een website op een van de Hobbynet webservers hebben. Het is dus een subset van &#039;&#039;&#039;fff_hnet&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===gen_extra_alias===&lt;br /&gt;
Dit script leest &#039;&#039;&#039;extra_aliases.txt&#039;&#039;&#039; en genereert regels in de sql-loaderfile. Het betreft aliases die niet eenvoudig af te leiden zijn uit hobbyabon.txt en kaderfunc.txt.&lt;br /&gt;
&lt;br /&gt;
===gen_scouthout_alias===&lt;br /&gt;
Dit script leest &#039;&#039;&#039;scouthout_aliases.txt&#039;&#039;&#039; en genereert regels in de sql-loaderfile. Het betreft aliases die te maken hebben met scouthout.nl. Er is tevens een scriptje &#039;&#039;&#039;dump_scouthout_aliases&#039;&#039;&#039; dat scouthout_aliases.txt kan genereren uit de alias tabel. Dit kan nuttig zijn als er updates via PostfixAdmin zijn gedaan door de scouthout admin. &lt;br /&gt;
&lt;br /&gt;
===gen_alias2===&lt;br /&gt;
Dit script genereert alle &#039;&#039;&#039;kadernet&#039;&#039;&#039; aliases die uit kaderfunc.txt gemaakt kunnen worden. Voor de kaderleden waar het domain nog &#039;&#039;&#039;kader.hobby.nl&#039;&#039;&#039; is, wordt dat vervangen door &#039;&#039;&#039;kader.hcc.nl&#039;&#039;&#039;. Er wordt een alias gemaakt die naar de mailbox wijst (met het lidnummer uit kaderfunc.txt) en één met de HCC naam uit het in kaderfunc.txt opgenomen email adres. Er komt dus een &#039;&#039;&#039;1234567@kader.hcc.nl&#039;&#039;&#039; en een &#039;&#039;&#039;a.b.c.janssen@kader.hcc.nl&#039;&#039;&#039; die weer beide naar de mailbox &#039;&#039;&#039;1234567@kader.hcc.nl&#039;&#039;&#039; verwijzen. De alias tabel kan beheerd worden met PostfixAdmin. Via Phpmyadmin op dbadmin.hobby.nl kunnen natuurlijk ook alle tabellen in de database postfixadmin benaderd worden.&lt;br /&gt;
&lt;br /&gt;
===gen_func_alias===&lt;br /&gt;
Dit script genereert alle functionele aliases voor elke groepering. Het maakt aliases aan voor &#039;&#039;&#039;voorzitter@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039;, &#039;&#039;&#039;secretaris@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039; en &#039;&#039;&#039;penningmeester@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039;. Tevens wordt &#039;&#039;&#039;info@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039; gemaakt die ook naar secretaris@&amp;lt;groepering&amp;gt;.hcc.nl verwijst. De informatie wordt gehaald uit de kaderfunc.txt file.&lt;br /&gt;
&lt;br /&gt;
Om backwards compatible te zijn is ook voorzien in aliases voor &#039;voorz&#039;, &#039;secr&#039; en &#039;penm&#039; die verwijzen naar de lange naam. Uit praktische overweging worden hier ook de rfc mailboxen gemaakt. abuse@.. verwijst naar abuse@hobby.nl.&lt;br /&gt;
&lt;br /&gt;
===gen_best_alias===&lt;br /&gt;
Dit script genereert de &#039;&#039;&#039;bestuur&#039;&#039;&#039; alias voor elke groepering. Dus per groepering de voorzitter, secretaris, penningmeester en bestuursleden met als alias &#039;&#039;&#039;bestuur@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039;. De informatie wordt weer gehaald uit de &#039;&#039;&#039;kaderfunc.txt&#039;&#039;&#039; file. Sommige groeperingen zoals &#039;&#039;&#039;hobby-computer-club&#039;&#039;&#039; wordt overgeslagen. Er is geen &#039;&#039;&#039;bestuur@hobby-computer-club.hcc.nl&#039;&#039;&#039;...&lt;br /&gt;
&lt;br /&gt;
===gen_webm_alias===&lt;br /&gt;
Voor de webmasters is een apart script gemaakt omdat er een variabel aantal webmasters per groepering kan zijn. Bron bestand is weer kaderfunc.txt. Dit script genereert de &#039;&#039;&#039;webmaster@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039; alias die een variabel aantal target mailboxen kent. Ook wordt altijd de secretaris toegevoegd. In het geval dat er helemaal géén webmaster is aangemeld komt de mail dus tenminste in de mailbox van de secretaris &#039;&#039;(is dit nog zo?)&#039;&#039;. Bron bestand is natuurlijk weer kaderfunc.txt.&lt;br /&gt;
&lt;br /&gt;
===gen_kernl_alias===&lt;br /&gt;
Voor de kernleden is een apart script gemaakt omdat er een variabel aantal kernleden per groepering kan zijn. Bron bestand is weer kaderfunc.txt. Dit script genereert de &#039;&#039;&#039;kernleden@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039; alias die een variabel aantal target mailboxen kent.&lt;br /&gt;
&lt;br /&gt;
===gen_kadernet_alias===&lt;br /&gt;
Dit script leest kadernet_aliases.txt en genereert de SQL regels voor speciale kadernet aliases die niet uit kaderfunc.txt gemaakt kunnen worden.&lt;br /&gt;
&lt;br /&gt;
===gen_ig_&amp;lt;func&amp;gt;_alias===&lt;br /&gt;
Deze scripts genereren een alias die alle voorzitters, secretarissen, penningmeesters, webmasters, gewone bestuursleden en kernleden van interessegroepen (vroeger gebruikersgroep) als target hebben. Deze aliasen worden zelden gebruikt, maar voorzien erin om alle penningmeesters uit te nodigen voor een penm. overleg. De script zijn nagenoeg identiek. Zoals altijd zijn de target adressen mailboxen (herkenbaar aan het lidnummer). Bron bestand is kaderfunc.txt.&amp;lt;br&amp;gt;&lt;br /&gt;
Op verzoek van het Kantoor worden enkele key-personen in de alias gezet. Deze personen dienen in de alias &#039;&#039;&#039;kantoor@kader.hcc.nl&#039;&#039;&#039; (in extra_aliases.txt) gezet te worden om in de &#039;&#039;&#039;ig_&#039;&#039;&#039; alias te komen.&lt;br /&gt;
&lt;br /&gt;
===gen_regio_&amp;lt;func&amp;gt;_alias===&lt;br /&gt;
Deze scripts genereren een alias die alle voorzitters, secretarissen, penningmeesters, webmasters, gewone bestuursleden en kernleden van regio&#039;s (vroeger afdeling) als target hebben. Deze aliasen worden zelden gebruikt, maar voorzien erin om alle penningmeesters uit te nodigen voor een penm. overleg. De script zijn nagenoeg identiek. Zoals altijd zijn de target adressen mailboxen (herkenbaar aan het lidnummer). Bron bestand is kaderfunc.txt.&amp;lt;br&amp;gt;&lt;br /&gt;
Op verzoek van het Kantoor worden enkele key-personen in de alias gezet. Deze personen dienen in de alias &#039;&#039;&#039;kantoor@kader.hcc.nl&#039;&#039;&#039; (in extra_aliases.txt) gezet te worden om in de &#039;&#039;&#039;regio_&#039;&#039;&#039; alias te komen. Deze aliases zijn weer gecombineerd tot grotere groepen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Alle voorz, secr, penm, enz van ig&#039;s:&lt;br /&gt;
ig_voorz@kader.hcc.nl &lt;br /&gt;
ig_secr@kader.hcc.nl&lt;br /&gt;
ig_penm@kader.hcc.nl&lt;br /&gt;
ig_bestl@kader.hcc.nl&lt;br /&gt;
ig_kernl@kader.hcc.nl&lt;br /&gt;
ig_webm@kader.hcc.nl&lt;br /&gt;
&lt;br /&gt;
Alle voorz, secr, penm, enz van regio&#039;s&lt;br /&gt;
regio_voorz@kader.hcc.nl&lt;br /&gt;
regio_secr@kader.hcc.nl&lt;br /&gt;
regio_penm@kader.hcc.nl&lt;br /&gt;
regio_bestl@kader.hcc.nl&lt;br /&gt;
regio_kernl@kader.hcc.nl&lt;br /&gt;
regio_webm@kader.hcc.nl&lt;br /&gt;
&lt;br /&gt;
Alle voorzitters, secr, enz:&lt;br /&gt;
fff_voorz@kader.hcc.nl (ig_voorz@kader.hcc.nl en regio_voorz@kader.hcc.nl samen)&lt;br /&gt;
fff_secr@kader.hcc.nl (alle secretarissen)&lt;br /&gt;
fff_penm@kader.hcc.nl&lt;br /&gt;
fff_bestl@kader.hcc.nl&lt;br /&gt;
fff_kernl@kader.hcc.nl&lt;br /&gt;
fff_webm@kader.hcc.nl&lt;br /&gt;
&lt;br /&gt;
Alle bestuursleden van resp. ig&#039;s en regio&#039;s: &lt;br /&gt;
fff_ig_bestuur@kader.hcc.nl (ig_voorz, ig_secr, ig_penm en ig_bestl@kader.hcc.nl samen)&lt;br /&gt;
fff_regio_bestuur@kader.hcc.nl (regio_voorz, regio_secr, regio_penm en regio_bestl@kader.hcc.nl samen)&lt;br /&gt;
&lt;br /&gt;
Alle bestuursleden:&lt;br /&gt;
fff_bestuur@kader.hcc.nl (de 4 ig_&amp;lt;func&amp;gt; en de 4 regio_&amp;lt;func&amp;gt; samen)&lt;br /&gt;
 &lt;br /&gt;
Alle kaderleden:&lt;br /&gt;
fff_kader@kader.hcc.nl (ALLE kaderleden samen, dus besturen maar nu ook met de kernleden en webmasters)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===gen_sr_presentatoren en gen_sr_regio_coordinatoren_alias===&lt;br /&gt;
Deze twee scripts genereren de aliases voor de regio_coordinatoren en presentatoren van de SeniorenAcademie (SR). Voor deze functionarissen is een virtuele IG gemaakt (SR-Ambassadeurs) omdat niet alle functionarissen lid zijn van SR. Indelen bij de regio was een optie maar dan liggen er problemen op de loer met verhuizingen.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;PAS OP&#039;&#039;&#039;: deze scripts bevatten hard gecodeerde waarden!&lt;br /&gt;
&lt;br /&gt;
===gen_fff_kadernet_alias===&lt;br /&gt;
Dit script genereert de &#039;&#039;&#039;fff_kader@kader.hcc.nl&#039;&#039;&#039;. Hiervoor wordt kaderfunc.txt gebruikt (code 5).&amp;lt;br&amp;gt;&lt;br /&gt;
Op verzoek van het Kantoor worden enkele kantoor functies in de alias gezet. Deze personen dienen in de alias &#039;&#039;&#039;kantoor@kader.hcc.nl&#039;&#039;&#039; (in extra_aliases.txt) gezet te worden om in de &#039;&#039;&#039;fff_&#039;&#039;&#039; aliases te komen.&lt;br /&gt;
&lt;br /&gt;
==Genereren van de domains==&lt;br /&gt;
Postfix kan de email voor vele domeinen afhandelen. Om ongewenst relayeren (spam!) te voorkomen moeten de domeinen van de geadresseerden gecheckt kunnen worden. &lt;br /&gt;
&lt;br /&gt;
===gen_domain===&lt;br /&gt;
Dit script genereert de hobbynet domeinen voor de domeinen in hobbyabon.txt voor de tabel &#039;&#039;&#039;domain&#039;&#039;&#039;. Ook hier geldt weer dat de &#039;&#039;&#039;domain&#039;&#039;&#039; tabel beheerbaar is in PostfixAdmin.&lt;br /&gt;
&lt;br /&gt;
===gen_all_domain===&lt;br /&gt;
Het bronbestand voor gen_all_domain is &#039;&#039;&#039;all_domains.txt&#039;&#039;&#039;. Het script &#039;&#039;&#039;gen_all_domain&#039;&#039;&#039; voegt records toe aan de domain tabel die betrekking hebben op alle beheerde domeinen. Dit zijn b.v. hccm.nl en hcc-watersport.nl maar weer NIET modelbaan-gg.hcc.nl. Die laatste wordt door gen_domain2 aangemaakt.&lt;br /&gt;
&lt;br /&gt;
===gen_domain2===&lt;br /&gt;
Dit script genereert de kadernet domeinen. Voor kadernet wordt &#039;&#039;&#039;kader.hobby.nl&#039;&#039;&#039; vervangen door &#039;&#039;&#039;kader.hcc.nl&#039;&#039;&#039;. Ook hier geldt weer dat de &#039;&#039;&#039;domain&#039;&#039;&#039; tabel beheerbaar is in PostfixAdmin. Er worden domeinen gemaakt zonder de &#039;&#039;&#039;afd-&#039;&#039;&#039; of &#039;&#039;&#039;-gg&#039;&#039;&#039; en met &#039;&#039;&#039;regio-&#039;&#039;&#039; i.p.v. &#039;&#039;&#039;afd-&#039;&#039;&#039; en &#039;&#039;&#039;-ig&#039;&#039;&#039; i.p.v. &#039;&#039;&#039;-gg&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Genereren van de alias-domains==&lt;br /&gt;
Postfix kent een z.g. alias_domain. Dit is een domeinnaam die een alias is voor een andere domeinnaam. Alle email adressen in het originele domein komen 1 op 1 voor in het alias domein.&lt;br /&gt;
 &lt;br /&gt;
===gen_extra_alias_domain===&lt;br /&gt;
Dit script leest &#039;&#039;&#039;extra_alias_domains.txt&#039;&#039;&#039; en genereert SQL regels voor de tabel alias_domain&lt;br /&gt;
&lt;br /&gt;
De layout van de tekst file is simpel: alias_domain, target_domain. Voorbeeld:&lt;br /&gt;
 # list of alias_domains&lt;br /&gt;
 # mirror.tld,target.tld&lt;br /&gt;
 #&lt;br /&gt;
 hccm.nl:modelbaan-gg.hcc.nl&lt;br /&gt;
 hcc-modelbaan.nl:modelbaan-gg.hcc.nl&lt;br /&gt;
 hcc-games.nl:games-gg.hcc.nl&lt;br /&gt;
 hcc-clan.nl:games-gg.hcc.nl&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Opm&#039;&#039;&#039;: De automatisch gegenereerde HCC domeinnamen (ontstaan door -gg/afd-/cg- weg te laten) mogen dus NIET in de platte tekst file staan.&lt;br /&gt;
&lt;br /&gt;
===gen_alias_domain2===&lt;br /&gt;
Dit script genereert alle HCC afdeling en ig domeinen maar dan zonder de &#039;&#039;&#039;afd-&#039;&#039;&#039; prefix en &#039;&#039;&#039;-gg&#039;&#039;&#039; suffix. Input is kaderfunc.txt.&lt;br /&gt;
&lt;br /&gt;
==Systemusers==&lt;br /&gt;
Het upd_smail script genereert tevens een soor virtualusers bestand voor Roundcube. Om de kaderleden in staat te stellen met slechts hun lidnummer in te loggen op webmail is er een default domein &#039;&#039;&#039;kader.hcc.nl&#039;&#039;&#039; gedefinieerd. Als iemand zonder domein inlogt, wordt &#039;&#039;&#039;@kader.hcc.nl&#039;&#039;&#039; toegevoegd. Door fake entries op te nemen met &amp;lt;systeemuser&amp;gt;@kader.hcc.nl en een alias &#039;&#039;&#039;zonder &#039;&#039;&#039; domein kunnen die toch inloggen op het webinterface. De laatste groep zijn de hobbynet users die vanouds met S&amp;lt;systeem&amp;gt; konden inloggen. Voor hen wordt ook een fake entry gemaakt met S&amp;lt;systeem&amp;gt;@kader.hcc.nl met als alias het opgegeven email adres. Voor dit email adres is eerder een mailbox aangemaakt.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
De beschreven faciliteit bestaat alleen voor het Roundcube web email interface. Pop3 en imap clients moeten, behalve voor systeemusers, altijd een domein meegeven!&lt;br /&gt;
&lt;br /&gt;
==Extra scripts==&lt;br /&gt;
L8er...&lt;br /&gt;
&lt;br /&gt;
Terug naar [[EMAIL]]&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=Uitleg_scripts&amp;diff=78368</id>
		<title>Uitleg scripts</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=Uitleg_scripts&amp;diff=78368"/>
		<updated>2020-04-18T09:48:31Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* gen_alias */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introductie==&lt;br /&gt;
De scripting is er op gericht een aantal tabellen te vullen in de postfixadmin database. De tabellen zijn in eerste instantie helemaal standaard gehouden zoals postfixadmin ze aanmaakt bij de installatie. Postfixadmin kan worden gebruikt om veranderingen in de data aan te brengen. Later zijn enkele velden toegevoegd voor het specifieke gebruik binnen Hobbynet. Voornamelijk om het creëren van tekst bestanden als bron bestanden aan te maken.&lt;br /&gt;
&lt;br /&gt;
===Proces===&lt;br /&gt;
Het hele proces is gericht op het behoud van (mogelijk gewijzigde) data. In de aanloop fase werden de platte tekst bestanden met de hand bijgehouden waarna de database tabellen gegenereerd werden. In de test fase werden de uit de database gemaakte tekst bestanden vergeleken met de originele bestanden. In de productie fase zijn er geen originele tekst bestanden meer; de vorige versie wordt veilig gesteld en daarna vervangen door de verse dump uit de database. Op die wijze worden nieuwe records meegenomen die met PostfixAdmin in de database zijn gemaakt. De laatst bekende data in de database wordt namelijk eerst gedumpt naar tekst bestanden, die vervolgens weer worden gebruikt om de database te laden. De externe bestanden hobbyabon.txt (was husers) en kaderfunc.txt (was b3a.txt) zijn hier een uitzondering op; die worden nooit overschreven maar door het script &#039;&#039;&#039;upd_mailserver&#039;&#039;&#039; op de LDAP server geplaatst. &#039;&#039;&#039;upd_smail&#039;&#039;&#039; op de mailserver doet de rest.&amp;lt;br&amp;gt;&lt;br /&gt;
Zie ook de pagina [[bronbestanden]].&lt;br /&gt;
&lt;br /&gt;
===Locatie van de bestanden===&lt;br /&gt;
De bron bestanden: &#039;&#039;&#039;kaderfunc.txt&#039;&#039;&#039;, &#039;&#039;&#039;hobbyabon.txt&#039;&#039;&#039; staan in de data directory (via scp van hcc-ldap-lb1 afkomstig), &#039;&#039;&#039;extra_alias_domains.txt&#039;&#039;&#039;, &#039;&#039;&#039;extra_aliases.txt&#039;&#039;&#039;, &#039;&#039;&#039;scouthout_aliases.txt&#039;&#039;&#039; en de &#039;&#039;&#039;_header/_footer&#039;&#039;&#039; bestanden (.tmpl) staan ook in &#039;&#039;&#039;/usr/local/hobbynet/data&#039;&#039;&#039; directory.&lt;br /&gt;
&lt;br /&gt;
De scripts staan in &#039;&#039;&#039;/usr/local/hobbynet/local&#039;&#039;&#039;. De backups van de database en tekst bestanden komen in &#039;&#039;&#039;/usr/local/hobbynet/data/backup&#039;&#039;&#039; terecht. De door de scripts gegenereerde MySQL bestanden komen in &#039;&#039;&#039;/usr/local/hobbynet/data/loader&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
De bestanden in de backup directory moeten geregeld opgeruimd worden; er zit geen limiet op het aantal versies. In de backup directory staat ook een script om een versie van een bepaalde datum/tijd snel terug te zetten waarna &#039;&#039;&#039;upd_smail&#039;&#039;&#039; de database herlaadt.&lt;br /&gt;
&lt;br /&gt;
===Scripts===&lt;br /&gt;
De (perl) scripts zijn bewust kort en simpel gehouden om ze zo modulair mogelijk te maken. De tactiek is telkens hetzelfde: bij elk te maken SQL loader bestand is er een header, tussenliggende gelijksoortige data regels en een footer te onderscheiden.&lt;br /&gt;
* De header is alle tekst die door een MySQL dump gemaakt wordt (met een delete-if-exists erin), tot en met de eerste SQL regel: INSERT INTO...VALUES.&lt;br /&gt;
* De diverse scripts voegen de tussenliggende data regels toe.&lt;br /&gt;
* De footer is gewoonlijk een laatste data regel maar dan eindigend op &#039;&#039;&#039;;&#039;&#039;&#039; in plaats van &#039;&#039;&#039;,&#039;&#039;&#039; en de afsluitende regels van de dump.&lt;br /&gt;
Een dergelijk SQL loader bestand is zonder meer terug te laden in MySQL. De tabel wordt eerst weggegooid en wordt daarna opnieuw aangemaakt.&lt;br /&gt;
&lt;br /&gt;
==upd_smail==&lt;br /&gt;
Dit script is het overkoepelende script dat alle &#039;&#039;&#039;dump_*&#039;&#039;&#039; en &#039;&#039;&#039;gen_*&#039;&#039;&#039; scripts uitvoert en mysql aanroept om de database te laden. &#039;&#039;&#039;upd_smail&#039;&#039;&#039; op zijn beurt wordt weer door &#039;&#039;&#039;upd_all&#039;&#039;&#039; aangeroepen. In dit &#039;&#039;&#039;upd_smail&#039;&#039;&#039; script worden vóórdat de tabellen vanaf scratch worden opgebouwd, de 4 tabellen veilig gesteld in een backup directory. Tevens worden tekst bestanden aangemaakt van die delen van de database die met de hand veranderd kunnen zijn. Het uitgangspunt is hier dat de database de echte waarheid is en de bronbestanden achter kunnen lopen. &lt;br /&gt;
&lt;br /&gt;
Het &#039;&#039;&#039;all_domains.txt&#039;&#039;&#039; bestand bevat de domeinen waar HCC voor betaalt aan SIDN. Ook de benodigde speciale subdomeinen staan in het all_domains.txt bestand. &lt;br /&gt;
&lt;br /&gt;
Per tabel worden de SQL header files samengevoegd met de output van de verschillende gen_* scripts. Tenslotte wordt een SQL footer toegevoegd, vaak alleen om de SQL te beëindigen met een &#039;&#039;&#039;;&#039;&#039;&#039;. Daarna wordt de tabel in MySQL aangemaakt en de data geladen. De &lt;br /&gt;
tabellen worden dus in z&#039;n geheel vervangen. Als laatste wordt een soort van &#039;&#039;&#039;virtalias&#039;&#039;&#039; bestand voor Roundcube gemaakt. Hieronder de complete &#039;&#039;&#039;upd_smail&#039;&#039;&#039; (slechts als referentie, kijk altijd naar het script op de server zelf):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
# $Id: /usr/local/hobbynet/bin/upd_smail $&lt;br /&gt;
#&lt;br /&gt;
# Driver voor alle subtaken dump... en gen....&lt;br /&gt;
#&lt;br /&gt;
# usage: ./upd_smail&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
CHOWN=/bin/chown&lt;br /&gt;
CHMOD=/bin/chmod&lt;br /&gt;
&lt;br /&gt;
HNET=/usr/local/hobbynet&lt;br /&gt;
HNET_BIN=$HNET/bin&lt;br /&gt;
HNET_LIB=$HNET/lib&lt;br /&gt;
HNET_BCK=$HNET/lib/backup&lt;br /&gt;
HNET_LDR=$HNET/lib/loader&lt;br /&gt;
&lt;br /&gt;
ID=$(date +&amp;quot;%Y%m%d-%H%M%S&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cd $HNET_LIB&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# save all 4 tables with unique name&lt;br /&gt;
#&lt;br /&gt;
mysqldump -u postfixadmin -ppassword -c postfixadmin mailbox &amp;gt;$HNET_BCK/mailbox_$ID.sql&lt;br /&gt;
mysqldump -u postfixadmin -ppassword -c postfixadmin alias &amp;gt;$HNET_BCK/alias_$ID.sql&lt;br /&gt;
mysqldump -u postfixadmin -ppassword -c postfixadmin domain &amp;gt;$HNET_BCK/domain_$ID.sql&lt;br /&gt;
mysqldump -u postfixadmin -ppassword -c postfixadmin alias_domain &amp;gt;$HNET_BCK/alias_domain_$ID.sql&lt;br /&gt;
#&lt;br /&gt;
# save extra mailboxes&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Saving extra mailboxess...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/extra_mailboxes.txt $HNET_BCK/extra_mailboxes_$ID.txt&lt;br /&gt;
$HNET_BIN/dump_extra_mailboxes | sort &amp;gt;$HNET_LIB/extra_mailboxes.txt&lt;br /&gt;
#&lt;br /&gt;
# save scouthout aliases&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Saving scouthout aliases...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/scouthout_aliases.txt $HNET_BCK/scouthout_aliases_$ID.txt&lt;br /&gt;
$HNET_BIN/dump_scouthout_aliases | sort &amp;gt;$HNET_LIB/scouthout_aliases.txt&lt;br /&gt;
#&lt;br /&gt;
# save new and extra aliases&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Saving new and extra aliases...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/extra_aliases.txt $HNET_BCK/extra_aliases_$ID.txt&lt;br /&gt;
$HNET_BIN/dump_extra_aliases | sort &amp;gt;$HNET_LIB/extra_aliases.txt&lt;br /&gt;
#&lt;br /&gt;
# save hcc and other domains&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Saving hcc and other domains...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/all_domains.txt $HNET_BCK/all_domains_$ID.txt&lt;br /&gt;
$HNET_BIN/dump_all_domains | sort &amp;gt;$HNET_LIB/all_domains.txt&lt;br /&gt;
#&lt;br /&gt;
# save new and extra domain_aliases&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Saving new and extra domain_aliases...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/extra_alias_domains.txt $HNET_BCK/extra_alias_domains_$ID.txt&lt;br /&gt;
$HNET_BIN/dump_extra_alias_domains | sort &amp;gt;$HNET_LIB/extra_alias_domains.txt&lt;br /&gt;
#&lt;br /&gt;
# prepare emergency backup procedure (here-doecument)&lt;br /&gt;
#&lt;br /&gt;
cat &amp;gt; $HNET_BCK/restore_$ID &amp;lt;&amp;lt;END&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
mysql -u postfixadmin -ppassword -c postfixadmin &amp;lt;$HNET_BCK/mailbox_$ID.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword -c postfixadmin &amp;lt;$HNET_BCK/alias_$ID.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword -c postfixadmin &amp;lt;$HNET_BCK/domain_$ID.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword -c postfixadmin &amp;lt;$HNET_BCK/alias_domain_$ID.sql&lt;br /&gt;
cp $HNET_BCK/extra_mailboxes_$ID.txt $HNET_LIB/extra_mailboxes.txt&lt;br /&gt;
cp $HNET_BCK/scouthout_aliases_$ID.txt $HNET_LIB/scouthout_aliases.txt&lt;br /&gt;
cp $HNET_BCK/extra_aliases_$ID.txt $HNET_LIB/extra_aliases.txt&lt;br /&gt;
cp $HNET_BCK/all_domains_$ID.txt $HNET_LIB/all_domains.txt&lt;br /&gt;
cp $HNET_BCK/extra_alias_domains_$ID.txt $HNET_LIB/extra_alias_domains.txt&lt;br /&gt;
END&lt;br /&gt;
chmod 755 $HNET_BCK/restore_$ID&lt;br /&gt;
#&lt;br /&gt;
# build all 4 tables from input files&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Building mailbox table for Hobbynet/Kadernet...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/mailbox_header.tmpl $HNET_LDR/mailbox.sql&lt;br /&gt;
$HNET_BIN/gen_mailbox &amp;gt;&amp;gt; $HNET_LDR/mailbox.sql&lt;br /&gt;
$HNET_BIN/gen_mailbox2 | sort | uniq &amp;gt;&amp;gt; $HNET_LDR/mailbox.sql&lt;br /&gt;
$HNET_BIN/gen_extra_mailbox &amp;gt;&amp;gt; $HNET_LDR/mailbox.sql&lt;br /&gt;
cat $HNET_LIB/mailbox_footer.tmpl &amp;gt;&amp;gt; $HNET_LDR/mailbox.sql&lt;br /&gt;
$CHMOD 644 $HNET_LDR/mailbox.sql&lt;br /&gt;
$CHOWN root:root $HNET_LDR/mailbox.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword postfixadmin &amp;lt;$HNET_LDR/mailbox.sql&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Building alias table for Hobbynet/Kadernet...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/alias_header.tmpl $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_fff_hobbynet_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_fff_www_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_extra_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_scouthout_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_alias2 | sort | uniq &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_func_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_best_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_webm_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_kernl_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_group_alias | sort | uniq &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_voorz_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_kernl_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_secr_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_penm_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_webm_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_bestl_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_voorz_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_kernl_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_secr_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_penm_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_webm_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_bestl_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ledenraad_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
# use temporary file with unique mail addresses&lt;br /&gt;
cut --delimiter=&amp;quot;,&amp;quot; --field=4 $HNET_LIB/kaderfunc.txt | sort | uniq &amp;gt; $HNET_LIB/kaderfunc-sorted.txt&lt;br /&gt;
$HNET_BIN/gen_fff_kadernet_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
rm $HNET_LIB/kaderfunc-sorted.txt&lt;br /&gt;
#&lt;br /&gt;
cat $HNET_LIB/alias_footer.tmpl &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$CHMOD 644 $HNET_LDR/alias.sql&lt;br /&gt;
$CHOWN root:root $HNET_LDR/alias.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword -c postfixadmin &amp;lt;$HNET_LDR/alias.sql&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Building domain table for Hobbynet/Kadernet...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/domain_header.tmpl $HNET_LDR/domain.sql&lt;br /&gt;
$HNET_BIN/gen_domain &amp;gt;&amp;gt; $HNET_LDR/domain.sql&lt;br /&gt;
$HNET_BIN/gen_all_domain &amp;gt;&amp;gt; $HNET_LDR/domain.sql&lt;br /&gt;
$HNET_BIN/gen_domain2 &amp;gt;&amp;gt; $HNET_LDR/domain.sql&lt;br /&gt;
cat $HNET_LIB/domain_footer.tmpl &amp;gt;&amp;gt; $HNET_LDR/domain.sql&lt;br /&gt;
$CHMOD 644 $HNET_LDR/domain.sql&lt;br /&gt;
$CHOWN root:root $HNET_LDR/domain.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword postfixadmin &amp;lt;$HNET_LDR/domain.sql&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Building alias_domain table for Hobbynet/Kadernet...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/alias_domain_header.tmpl $HNET_LDR/alias_domain.sql&lt;br /&gt;
$HNET_BIN/gen_extra_alias_domain &amp;gt;&amp;gt; $HNET_LDR/alias_domain.sql&lt;br /&gt;
$HNET_BIN/gen_alias_domain2 &amp;gt;&amp;gt; $HNET_LDR/alias_domain.sql&lt;br /&gt;
cat $HNET_LIB/alias_domain_footer.tmpl &amp;gt;&amp;gt; $HNET_LDR/alias_domain.sql&lt;br /&gt;
$CHMOD 644 $HNET_LDR/alias_domain.sql&lt;br /&gt;
$CHOWN root:root $HNET_LDR/alias_domain.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword postfixadmin &amp;lt;$HNET_LDR/alias_domain.sql&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;&amp;quot;&lt;br /&gt;
echo &amp;quot;Building systemusers for Roundcube...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/systemusers.tmpl $HNET_LIB/systemusers&lt;br /&gt;
$HNET_BIN/gen_systemusers &amp;gt;&amp;gt; $HNET_LIB/systemusers&lt;br /&gt;
$CHMOD 644 $HNET_LIB/systemusers&lt;br /&gt;
$CHOWN root:root $HNET_LIB/systemusers&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;&amp;quot;&lt;br /&gt;
echo &amp;quot;Dumping transport for mail-dev...&amp;quot;&lt;br /&gt;
$HNET_BIN/dump_transport &amp;gt;$HNET_LIB/transport&lt;br /&gt;
cp /etc/postfix/transport /etc/postfix/transport.old&lt;br /&gt;
cp $HNET_LIB/transport /etc/postfix/transport&lt;br /&gt;
postmap /etc/postfix/transport&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Dumping relay_recipients for mail-dev...&amp;quot;&lt;br /&gt;
$HNET_BIN/dump_relay_recipients &amp;gt;$HNET_LIB/relay_recipients&lt;br /&gt;
cp /etc/postfix/relay_recipients /etc/postfix/relay_recipients.old&lt;br /&gt;
cp $HNET_LIB/relay_recipients /etc/postfix/relay_recipients&lt;br /&gt;
postmap /etc/postfix/relay_recipients&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Dumping relay_domains for mail2...&amp;quot;&lt;br /&gt;
$HNET_BIN/dump_mail2_domains &amp;gt;$HNET_LIB/relay_domains&lt;br /&gt;
#&lt;br /&gt;
# EOF&lt;br /&gt;
#&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversie van data naar tekst bestanden==&lt;br /&gt;
Wat ooit gestart is al met de hand beheerde tekst bestanden, is vervangen door bestanden gemaakt uit de PFA database. Omdat alle updates m.b.v. PFA gemaakt worden, zijn die gegevens nieuwer. Door die eerst te dumpen en daarna weer te gebruiken als bron bestand blijven wijzigingen bewaard.&lt;br /&gt;
===dump_all_domains===&lt;br /&gt;
Maakt een tekst bestand in &#039;&#039;&#039;all_domains.txt&#039;&#039;&#039; van de alle domeinen in de domain tabel.&lt;br /&gt;
===dump_extra_alias_domains===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;extra_alias_domains.txt&#039;&#039;&#039; uit de &#039;&#039;&#039;alias_domain&#039;&#039;&#039; tabel.&lt;br /&gt;
===dump_extra_aliases===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;extra_aliases.txt&#039;&#039;&#039; uit de &#039;&#039;&#039;alias&#039;&#039;&#039; tabel.&lt;br /&gt;
===dump_extra_mailboxes===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;extra_mailboxes.txt&#039;&#039;&#039; uit de &#039;&#039;&#039;mailbox&#039;&#039;&#039; tabel.&lt;br /&gt;
===dump_mail2_domains===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;relay_domains&#039;&#039;&#039; uit de &#039;&#039;&#039;domain&#039;&#039;&#039; tabel voor gebruik op &#039;&#039;&#039;mail2&#039;&#039;&#039;.&lt;br /&gt;
===dump_relay_recipients===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;relay_recipients&#039;&#039;&#039; aan voor Postfix. Dit bestand moet naar /etc/postfix op mail-dev gekopieerd worden en er moet een postmap op uitgevoerd worden.&lt;br /&gt;
===dump_scouthout_aliases===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;scouthout_aliases.txt&#039;&#039;&#039; uit de &#039;&#039;&#039;alias&#039;&#039;&#039; tabel.&lt;br /&gt;
===dump_transport===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;transport&#039;&#039;&#039; aan voor Postfix. Dit bestand moet naar /etc/postfix gekopieerd worden en er moet een postmap op uitgevoerd worden.&lt;br /&gt;
&lt;br /&gt;
==Genereren van de mailboxen==&lt;br /&gt;
Alle (ook virtuele) gebruikers waarvoor mail-dev eindstation is voor email, hebben een home directory en een mailbox in een mail directory op dit systeem. Zowel HCC!Hobbynet als de HCC!Kadernet leden hebben allemaal een mailbox met Maildir structuur in /disk/mail/vmail/&amp;lt;domain&amp;gt;/&amp;lt;user&amp;gt;/Maildir/.&lt;br /&gt;
&lt;br /&gt;
===gen_mailbox===&lt;br /&gt;
Dit script maakt de &#039;&#039;&#039;hobbynet&#039;&#039;&#039; mailbox informatie aan. De passwords zijn afkomstig uit ldap op hcc-ldap-lb1. De mailbox naam was &#039;&#039;&#039;altijd&#039;&#039;&#039; &amp;lt;contact&amp;gt;@&amp;lt;systeem&amp;gt;.hobby.nl voor hobbynetleden. Het domein is altijd &#039;&#039;&#039;&amp;lt;systeem&amp;gt;.hobby.nl&#039;&#039;&#039;. Het &#039;&#039;&#039;type&#039;&#039;&#039; attribute in ldap wordt ook bewaard in de mailbox db tabel.&lt;br /&gt;
&lt;br /&gt;
===gen_mailbox2===&lt;br /&gt;
Dit script maakt de &#039;&#039;&#039;kadernet&#039;&#039;&#039; mailbox informatie aan. De mailbox naam is &#039;&#039;&#039;altijd&#039;&#039;&#039; &amp;lt;lidnummer&amp;gt;@kader.hcc.nl voor kaderleden. Het domein voor kaderleden is dus altijd &#039;&#039;&#039;kader.hcc.nl&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===gen_extra_mailbox===&lt;br /&gt;
Dit script maakt mailboxen aan die niet uit de andere bronnen te herleiden zijn. De mailboxen krijgen type 9.&lt;br /&gt;
&lt;br /&gt;
==Genereren van de aliases==&lt;br /&gt;
Email die op een domein op mail-dev wordt afgeleverd om direct weer verder gestuurd te worden heeft geen mailbox nodig. Voorbeeld hiervan is scouthout.nl. Alle email adressen expanderen via &#039;&#039;&#039;aliases&#039;&#039;&#039; naar een of meer externe adressen. Mail-dev fungeert hiervoor dus als mailrelay. Aliases zijn ook nodig voor functionele email adressen van kadernet functies zoals voorzitter, secretaris, enz. Ook zijn er adressen nodig voor grotere groepen ten bate van het kantoor zodat ze alle penningmeesters tegelijk kunnen mailen. De alias tabel wordt dus vrij groot. Er zijn weer meerdere kleine scripts die de tabellen vullen.&lt;br /&gt;
&lt;br /&gt;
===gen_alias===&lt;br /&gt;
Dit script genereert alle &#039;&#039;&#039;hobbynet&#039;&#039;&#039; aliases die uit hobbyabon.txt gemaakt kunnen worden. Voor de hobbynetleden wordt een alias gemaakt met de naam van de gebruiker in de &#039;&#039;&#039;alias&#039;&#039;&#039; tabel. Er komt dus een &#039;&#039;&#039;&amp;lt;contact&amp;gt;@&amp;lt;systeem&amp;gt;.hobby.nl&#039;&#039;&#039; die naar de mailbox &#039;&#039;&#039;&amp;lt;contact&amp;gt;@&amp;lt;systeem&amp;gt;.hobby.nl&#039;&#039;&#039; wijst. De &#039;&#039;&#039;alias&#039;&#039;&#039; tabel is zichtbaar in PostfixAdmin. De alias tabel kan beheerd worden met PostfixAdmin. Via phpmyadmin op dbadmin.hobby.nl kunnen natuurlijk alle tabellen in de database postfixadmin benaderd worden, mocht dit nodig zijn.&lt;br /&gt;
&lt;br /&gt;
Om het mogelijk te maken voor een hobbynet lid de Hobbynet mail ergens anders af te leveren, is de scripting aangepast (vbs20200416). Het mail veld in ou=users bepaald of er een mailbox wordt gemaakt os dat er forwarding wordt gedaan. Zie [Hobbynet mail forwarding] voor meer uitleg.&lt;br /&gt;
&lt;br /&gt;
===gen_fff_hobbynet_alias===&lt;br /&gt;
Dit script genereert de &#039;&#039;&#039;fff_hnet@hobby.nl&#039;&#039;&#039; alias door uit hobbyabon.txt het emailadres van leden met code 0,1,2,3 te halen.&lt;br /&gt;
&lt;br /&gt;
===gen_fff_www_alias===&lt;br /&gt;
Dit script genereert de &#039;&#039;&#039;fff_www@hobby.nl&#039;&#039;&#039; alias door uit hobbyabon.txt het emailadres te halen van dié leden die een website op een van de Hobbynet webservers hebben. Het is dus een subset van &#039;&#039;&#039;fff_hnet&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===gen_extra_alias===&lt;br /&gt;
Dit script leest &#039;&#039;&#039;extra_aliases.txt&#039;&#039;&#039; en genereert regels in de sql-loaderfile. Het betreft aliases die niet eenvoudig af te leiden zijn uit hobbyabon.txt en kaderfunc.txt.&lt;br /&gt;
&lt;br /&gt;
===gen_scouthout_alias===&lt;br /&gt;
Dit script leest &#039;&#039;&#039;scouthout_aliases.txt&#039;&#039;&#039; en genereert regels in de sql-loaderfile. Het betreft aliases die te maken hebben met scouthout.nl. Er is tevens een scriptje &#039;&#039;&#039;dump_scouthout_aliases&#039;&#039;&#039; dat scouthout_aliases.txt kan genereren uit de alias tabel. Dit kan nuttig zijn als er updates via PostfixAdmin zijn gedaan door de scouthout admin. &lt;br /&gt;
&lt;br /&gt;
===gen_alias2===&lt;br /&gt;
Dit script genereert alle &#039;&#039;&#039;kadernet&#039;&#039;&#039; aliases die uit kaderfunc.txt gemaakt kunnen worden. Voor de kaderleden waar het domain nog &#039;&#039;&#039;kader.hobby.nl&#039;&#039;&#039; is, wordt dat vervangen door &#039;&#039;&#039;kader.hcc.nl&#039;&#039;&#039;. Er wordt een alias gemaakt die naar de mailbox wijst (met het lidnummer uit kaderfunc.txt) en één met de HCC naam uit het in kaderfunc.txt opgenomen email adres. Er komt dus een &#039;&#039;&#039;1234567@kader.hcc.nl&#039;&#039;&#039; en een &#039;&#039;&#039;a.b.c.janssen@kader.hcc.nl&#039;&#039;&#039; die weer beide naar de mailbox &#039;&#039;&#039;1234567@kader.hcc.nl&#039;&#039;&#039; verwijzen. De alias tabel kan beheerd worden met PostfixAdmin. Via Phpmyadmin op dbadmin.hobby.nl kunnen natuurlijk ook alle tabellen in de database postfixadmin benaderd worden.&lt;br /&gt;
&lt;br /&gt;
===gen_func_alias===&lt;br /&gt;
Dit script genereert alle functionele aliases voor elke groepering. Het maakt aliases aan voor &#039;&#039;&#039;voorzitter@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039;, &#039;&#039;&#039;secretaris@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039; en &#039;&#039;&#039;penningmeester@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039;. Tevens wordt &#039;&#039;&#039;info@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039; gemaakt die ook naar secretaris@&amp;lt;groepering&amp;gt;.hcc.nl verwijst. De informatie wordt gehaald uit de kaderfunc.txt file.&lt;br /&gt;
&lt;br /&gt;
Om backwards compatible te zijn is ook voorzien in aliases voor &#039;voorz&#039;, &#039;secr&#039; en &#039;penm&#039; die verwijzen naar de lange naam. Uit praktische overweging worden hier ook de rfc mailboxen gemaakt. abuse@.. verwijst naar abuse@hobby.nl.&lt;br /&gt;
&lt;br /&gt;
===gen_best_alias===&lt;br /&gt;
Dit script genereert de &#039;&#039;&#039;bestuur&#039;&#039;&#039; alias voor elke groepering. Dus per groepering de voorzitter, secretaris, penningmeester en bestuursleden met als alias &#039;&#039;&#039;bestuur@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039;. De informatie wordt weer gehaald uit de &#039;&#039;&#039;kaderfunc.txt&#039;&#039;&#039; file. Sommige groeperingen zoals &#039;&#039;&#039;hobby-computer-club&#039;&#039;&#039; wordt overgeslagen. Er is geen &#039;&#039;&#039;bestuur@hobby-computer-club.hcc.nl&#039;&#039;&#039;...&lt;br /&gt;
&lt;br /&gt;
===gen_webm_alias===&lt;br /&gt;
Voor de webmasters is een apart script gemaakt omdat er een variabel aantal webmasters per groepering kan zijn. Bron bestand is weer kaderfunc.txt. Dit script genereert de &#039;&#039;&#039;webmaster@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039; alias die een variabel aantal target mailboxen kent. Ook wordt altijd de secretaris toegevoegd. In het geval dat er helemaal géén webmaster is aangemeld komt de mail dus tenminste in de mailbox van de secretaris &#039;&#039;(is dit nog zo?)&#039;&#039;. Bron bestand is natuurlijk weer kaderfunc.txt.&lt;br /&gt;
&lt;br /&gt;
===gen_kernl_alias===&lt;br /&gt;
Voor de kernleden is een apart script gemaakt omdat er een variabel aantal kernleden per groepering kan zijn. Bron bestand is weer kaderfunc.txt. Dit script genereert de &#039;&#039;&#039;kernleden@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039; alias die een variabel aantal target mailboxen kent.&lt;br /&gt;
&lt;br /&gt;
===gen_kadernet_alias===&lt;br /&gt;
Dit script leest kadernet_aliases.txt en genereert de SQL regels voor speciale kadernet aliases die niet uit kaderfunc.txt gemaakt kunnen worden.&lt;br /&gt;
&lt;br /&gt;
===gen_ig_&amp;lt;func&amp;gt;_alias===&lt;br /&gt;
Deze scripts genereren een alias die alle voorzitters, secretarissen, penningmeesters, webmasters, gewone bestuursleden en kernleden van interessegroepen (vroeger gebruikersgroep) als target hebben. Deze aliasen worden zelden gebruikt, maar voorzien erin om alle penningmeesters uit te nodigen voor een penm. overleg. De script zijn nagenoeg identiek. Zoals altijd zijn de target adressen mailboxen (herkenbaar aan het lidnummer). Bron bestand is kaderfunc.txt.&amp;lt;br&amp;gt;&lt;br /&gt;
Op verzoek van het Kantoor worden enkele key-personen in de alias gezet. Deze personen dienen in de alias &#039;&#039;&#039;kantoor@kader.hcc.nl&#039;&#039;&#039; (in extra_aliases.txt) gezet te worden om in de &#039;&#039;&#039;ig_&#039;&#039;&#039; alias te komen.&lt;br /&gt;
&lt;br /&gt;
===gen_regio_&amp;lt;func&amp;gt;_alias===&lt;br /&gt;
Deze scripts genereren een alias die alle voorzitters, secretarissen, penningmeesters, webmasters, gewone bestuursleden en kernleden van regio&#039;s (vroeger afdeling) als target hebben. Deze aliasen worden zelden gebruikt, maar voorzien erin om alle penningmeesters uit te nodigen voor een penm. overleg. De script zijn nagenoeg identiek. Zoals altijd zijn de target adressen mailboxen (herkenbaar aan het lidnummer). Bron bestand is kaderfunc.txt.&amp;lt;br&amp;gt;&lt;br /&gt;
Op verzoek van het Kantoor worden enkele key-personen in de alias gezet. Deze personen dienen in de alias &#039;&#039;&#039;kantoor@kader.hcc.nl&#039;&#039;&#039; (in extra_aliases.txt) gezet te worden om in de &#039;&#039;&#039;regio_&#039;&#039;&#039; alias te komen. Deze aliases zijn weer gecombineerd tot grotere groepen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Alle voorz, secr, penm, enz van ig&#039;s:&lt;br /&gt;
ig_voorz@kader.hcc.nl &lt;br /&gt;
ig_secr@kader.hcc.nl&lt;br /&gt;
ig_penm@kader.hcc.nl&lt;br /&gt;
ig_bestl@kader.hcc.nl&lt;br /&gt;
ig_kernl@kader.hcc.nl&lt;br /&gt;
ig_webm@kader.hcc.nl&lt;br /&gt;
&lt;br /&gt;
Alle voorz, secr, penm, enz van regio&#039;s&lt;br /&gt;
regio_voorz@kader.hcc.nl&lt;br /&gt;
regio_secr@kader.hcc.nl&lt;br /&gt;
regio_penm@kader.hcc.nl&lt;br /&gt;
regio_bestl@kader.hcc.nl&lt;br /&gt;
regio_kernl@kader.hcc.nl&lt;br /&gt;
regio_webm@kader.hcc.nl&lt;br /&gt;
&lt;br /&gt;
Alle voorzitters, secr, enz:&lt;br /&gt;
fff_voorz@kader.hcc.nl (ig_voorz@kader.hcc.nl en regio_voorz@kader.hcc.nl samen)&lt;br /&gt;
fff_secr@kader.hcc.nl (alle secretarissen)&lt;br /&gt;
fff_penm@kader.hcc.nl&lt;br /&gt;
fff_bestl@kader.hcc.nl&lt;br /&gt;
fff_kernl@kader.hcc.nl&lt;br /&gt;
fff_webm@kader.hcc.nl&lt;br /&gt;
&lt;br /&gt;
Alle bestuursleden van resp. ig&#039;s en regio&#039;s: &lt;br /&gt;
fff_ig_bestuur@kader.hcc.nl (ig_voorz, ig_secr, ig_penm en ig_bestl@kader.hcc.nl samen)&lt;br /&gt;
fff_regio_bestuur@kader.hcc.nl (regio_voorz, regio_secr, regio_penm en regio_bestl@kader.hcc.nl samen)&lt;br /&gt;
&lt;br /&gt;
Alle bestuursleden:&lt;br /&gt;
fff_bestuur@kader.hcc.nl (de 4 ig_&amp;lt;func&amp;gt; en de 4 regio_&amp;lt;func&amp;gt; samen)&lt;br /&gt;
 &lt;br /&gt;
Alle kaderleden:&lt;br /&gt;
fff_kader@kader.hcc.nl (ALLE kaderleden samen, dus besturen maar nu ook met de kernleden en webmasters)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===gen_sr_presentatoren en gen_sr_regio_coordinatoren_alias===&lt;br /&gt;
Deze twee scripts genereren de aliases voor de regio_coordinatoren en presentatoren van de SeniorenAcademie (SR). Voor deze functionarissen is een virtuele IG gemaakt (SR-Ambassadeurs) omdat niet alle functionarissen lid zijn van SR. Indelen bij de regio was een optie maar dan liggen er problemen op de loer met verhuizingen.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;PAS OP&#039;&#039;&#039;: deze scripts bevatten hard gecodeerde waarden!&lt;br /&gt;
&lt;br /&gt;
===gen_fff_kadernet_alias===&lt;br /&gt;
Dit script genereert de &#039;&#039;&#039;fff_kader@kader.hcc.nl&#039;&#039;&#039;. Hiervoor wordt kaderfunc.txt gebruikt (code 5).&amp;lt;br&amp;gt;&lt;br /&gt;
Op verzoek van het Kantoor worden enkele kantoor functies in de alias gezet. Deze personen dienen in de alias &#039;&#039;&#039;kantoor@kader.hcc.nl&#039;&#039;&#039; (in extra_aliases.txt) gezet te worden om in de &#039;&#039;&#039;fff_&#039;&#039;&#039; aliases te komen.&lt;br /&gt;
&lt;br /&gt;
==Genereren van de domains==&lt;br /&gt;
Postfix kan de email voor vele domeinen afhandelen. Om ongewenst relayeren (spam!) te voorkomen moeten de domeinen van de geadresseerden gecheckt kunnen worden. &lt;br /&gt;
&lt;br /&gt;
===gen_domain===&lt;br /&gt;
Dit script genereert de hobbynet domeinen voor de domeinen in hobbyabon.txt voor de tabel &#039;&#039;&#039;domain&#039;&#039;&#039;. Ook hier geldt weer dat de &#039;&#039;&#039;domain&#039;&#039;&#039; tabel beheerbaar is in PostfixAdmin.&lt;br /&gt;
&lt;br /&gt;
===gen_all_domain===&lt;br /&gt;
Het bronbestand voor gen_all_domain is &#039;&#039;&#039;all_domains.txt&#039;&#039;&#039;. Het script &#039;&#039;&#039;gen_all_domain&#039;&#039;&#039; voegt records toe aan de domain tabel die betrekking hebben op alle beheerde domeinen. Dit zijn b.v. hccm.nl en hcc-watersport.nl maar weer NIET modelbaan-gg.hcc.nl. Die laatste wordt door gen_domain2 aangemaakt.&lt;br /&gt;
&lt;br /&gt;
===gen_domain2===&lt;br /&gt;
Dit script genereert de kadernet domeinen. Voor kadernet wordt &#039;&#039;&#039;kader.hobby.nl&#039;&#039;&#039; vervangen door &#039;&#039;&#039;kader.hcc.nl&#039;&#039;&#039;. Ook hier geldt weer dat de &#039;&#039;&#039;domain&#039;&#039;&#039; tabel beheerbaar is in PostfixAdmin. Er worden domeinen gemaakt zonder de &#039;&#039;&#039;afd-&#039;&#039;&#039; of &#039;&#039;&#039;-gg&#039;&#039;&#039; en met &#039;&#039;&#039;regio-&#039;&#039;&#039; i.p.v. &#039;&#039;&#039;afd-&#039;&#039;&#039; en &#039;&#039;&#039;-ig&#039;&#039;&#039; i.p.v. &#039;&#039;&#039;-gg&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Genereren van de alias-domains==&lt;br /&gt;
Postfix kent een z.g. alias_domain. Dit is een domeinnaam die een alias is voor een andere domeinnaam. Alle email adressen in het originele domein komen 1 op 1 voor in het alias domein.&lt;br /&gt;
 &lt;br /&gt;
===gen_extra_alias_domain===&lt;br /&gt;
Dit script leest &#039;&#039;&#039;extra_alias_domains.txt&#039;&#039;&#039; en genereert SQL regels voor de tabel alias_domain&lt;br /&gt;
&lt;br /&gt;
De layout van de tekst file is simpel: alias_domain, target_domain. Voorbeeld:&lt;br /&gt;
 # list of alias_domains&lt;br /&gt;
 # mirror.tld,target.tld&lt;br /&gt;
 #&lt;br /&gt;
 hccm.nl:modelbaan-gg.hcc.nl&lt;br /&gt;
 hcc-modelbaan.nl:modelbaan-gg.hcc.nl&lt;br /&gt;
 hcc-games.nl:games-gg.hcc.nl&lt;br /&gt;
 hcc-clan.nl:games-gg.hcc.nl&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Opm&#039;&#039;&#039;: De automatisch gegenereerde HCC domeinnamen (ontstaan door -gg/afd-/cg- weg te laten) mogen dus NIET in de platte tekst file staan.&lt;br /&gt;
&lt;br /&gt;
===gen_alias_domain2===&lt;br /&gt;
Dit script genereert alle HCC afdeling en ig domeinen maar dan zonder de &#039;&#039;&#039;afd-&#039;&#039;&#039; prefix en &#039;&#039;&#039;-gg&#039;&#039;&#039; suffix. Input is kaderfunc.txt.&lt;br /&gt;
&lt;br /&gt;
==Systemusers==&lt;br /&gt;
Het upd_smail script genereert tevens een soor virtualusers bestand voor Roundcube. Om de kaderleden in staat te stellen met slechts hun lidnummer in te loggen op webmail is er een default domein &#039;&#039;&#039;kader.hcc.nl&#039;&#039;&#039; gedefinieerd. Als iemand zonder domein inlogt, wordt &#039;&#039;&#039;@kader.hcc.nl&#039;&#039;&#039; toegevoegd. Door fake entries op te nemen met &amp;lt;systeemuser&amp;gt;@kader.hcc.nl en een alias &#039;&#039;&#039;zonder &#039;&#039;&#039; domein kunnen die toch inloggen op het webinterface. De laatste groep zijn de hobbynet users die vanouds met S&amp;lt;systeem&amp;gt; konden inloggen. Voor hen wordt ook een fake entry gemaakt met S&amp;lt;systeem&amp;gt;@kader.hcc.nl met als alias het opgegeven email adres. Voor dit email adres is eerder een mailbox aangemaakt.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
De beschreven faciliteit bestaat alleen voor het Roundcube web email interface. Pop3 en imap clients moeten, behalve voor systeemusers, altijd een domein meegeven!&lt;br /&gt;
&lt;br /&gt;
==Extra scripts==&lt;br /&gt;
L8er...&lt;br /&gt;
&lt;br /&gt;
Terug naar [[EMAIL]]&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=Uitleg_scripts&amp;diff=78366</id>
		<title>Uitleg scripts</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=Uitleg_scripts&amp;diff=78366"/>
		<updated>2020-04-18T09:44:49Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* gen_alias */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introductie==&lt;br /&gt;
De scripting is er op gericht een aantal tabellen te vullen in de postfixadmin database. De tabellen zijn in eerste instantie helemaal standaard gehouden zoals postfixadmin ze aanmaakt bij de installatie. Postfixadmin kan worden gebruikt om veranderingen in de data aan te brengen. Later zijn enkele velden toegevoegd voor het specifieke gebruik binnen Hobbynet. Voornamelijk om het creëren van tekst bestanden als bron bestanden aan te maken.&lt;br /&gt;
&lt;br /&gt;
===Proces===&lt;br /&gt;
Het hele proces is gericht op het behoud van (mogelijk gewijzigde) data. In de aanloop fase werden de platte tekst bestanden met de hand bijgehouden waarna de database tabellen gegenereerd werden. In de test fase werden de uit de database gemaakte tekst bestanden vergeleken met de originele bestanden. In de productie fase zijn er geen originele tekst bestanden meer; de vorige versie wordt veilig gesteld en daarna vervangen door de verse dump uit de database. Op die wijze worden nieuwe records meegenomen die met PostfixAdmin in de database zijn gemaakt. De laatst bekende data in de database wordt namelijk eerst gedumpt naar tekst bestanden, die vervolgens weer worden gebruikt om de database te laden. De externe bestanden hobbyabon.txt (was husers) en kaderfunc.txt (was b3a.txt) zijn hier een uitzondering op; die worden nooit overschreven maar door het script &#039;&#039;&#039;upd_mailserver&#039;&#039;&#039; op de LDAP server geplaatst. &#039;&#039;&#039;upd_smail&#039;&#039;&#039; op de mailserver doet de rest.&amp;lt;br&amp;gt;&lt;br /&gt;
Zie ook de pagina [[bronbestanden]].&lt;br /&gt;
&lt;br /&gt;
===Locatie van de bestanden===&lt;br /&gt;
De bron bestanden: &#039;&#039;&#039;kaderfunc.txt&#039;&#039;&#039;, &#039;&#039;&#039;hobbyabon.txt&#039;&#039;&#039; staan in de data directory (via scp van hcc-ldap-lb1 afkomstig), &#039;&#039;&#039;extra_alias_domains.txt&#039;&#039;&#039;, &#039;&#039;&#039;extra_aliases.txt&#039;&#039;&#039;, &#039;&#039;&#039;scouthout_aliases.txt&#039;&#039;&#039; en de &#039;&#039;&#039;_header/_footer&#039;&#039;&#039; bestanden (.tmpl) staan ook in &#039;&#039;&#039;/usr/local/hobbynet/data&#039;&#039;&#039; directory.&lt;br /&gt;
&lt;br /&gt;
De scripts staan in &#039;&#039;&#039;/usr/local/hobbynet/local&#039;&#039;&#039;. De backups van de database en tekst bestanden komen in &#039;&#039;&#039;/usr/local/hobbynet/data/backup&#039;&#039;&#039; terecht. De door de scripts gegenereerde MySQL bestanden komen in &#039;&#039;&#039;/usr/local/hobbynet/data/loader&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
De bestanden in de backup directory moeten geregeld opgeruimd worden; er zit geen limiet op het aantal versies. In de backup directory staat ook een script om een versie van een bepaalde datum/tijd snel terug te zetten waarna &#039;&#039;&#039;upd_smail&#039;&#039;&#039; de database herlaadt.&lt;br /&gt;
&lt;br /&gt;
===Scripts===&lt;br /&gt;
De (perl) scripts zijn bewust kort en simpel gehouden om ze zo modulair mogelijk te maken. De tactiek is telkens hetzelfde: bij elk te maken SQL loader bestand is er een header, tussenliggende gelijksoortige data regels en een footer te onderscheiden.&lt;br /&gt;
* De header is alle tekst die door een MySQL dump gemaakt wordt (met een delete-if-exists erin), tot en met de eerste SQL regel: INSERT INTO...VALUES.&lt;br /&gt;
* De diverse scripts voegen de tussenliggende data regels toe.&lt;br /&gt;
* De footer is gewoonlijk een laatste data regel maar dan eindigend op &#039;&#039;&#039;;&#039;&#039;&#039; in plaats van &#039;&#039;&#039;,&#039;&#039;&#039; en de afsluitende regels van de dump.&lt;br /&gt;
Een dergelijk SQL loader bestand is zonder meer terug te laden in MySQL. De tabel wordt eerst weggegooid en wordt daarna opnieuw aangemaakt.&lt;br /&gt;
&lt;br /&gt;
==upd_smail==&lt;br /&gt;
Dit script is het overkoepelende script dat alle &#039;&#039;&#039;dump_*&#039;&#039;&#039; en &#039;&#039;&#039;gen_*&#039;&#039;&#039; scripts uitvoert en mysql aanroept om de database te laden. &#039;&#039;&#039;upd_smail&#039;&#039;&#039; op zijn beurt wordt weer door &#039;&#039;&#039;upd_all&#039;&#039;&#039; aangeroepen. In dit &#039;&#039;&#039;upd_smail&#039;&#039;&#039; script worden vóórdat de tabellen vanaf scratch worden opgebouwd, de 4 tabellen veilig gesteld in een backup directory. Tevens worden tekst bestanden aangemaakt van die delen van de database die met de hand veranderd kunnen zijn. Het uitgangspunt is hier dat de database de echte waarheid is en de bronbestanden achter kunnen lopen. &lt;br /&gt;
&lt;br /&gt;
Het &#039;&#039;&#039;all_domains.txt&#039;&#039;&#039; bestand bevat de domeinen waar HCC voor betaalt aan SIDN. Ook de benodigde speciale subdomeinen staan in het all_domains.txt bestand. &lt;br /&gt;
&lt;br /&gt;
Per tabel worden de SQL header files samengevoegd met de output van de verschillende gen_* scripts. Tenslotte wordt een SQL footer toegevoegd, vaak alleen om de SQL te beëindigen met een &#039;&#039;&#039;;&#039;&#039;&#039;. Daarna wordt de tabel in MySQL aangemaakt en de data geladen. De &lt;br /&gt;
tabellen worden dus in z&#039;n geheel vervangen. Als laatste wordt een soort van &#039;&#039;&#039;virtalias&#039;&#039;&#039; bestand voor Roundcube gemaakt. Hieronder de complete &#039;&#039;&#039;upd_smail&#039;&#039;&#039; (slechts als referentie, kijk altijd naar het script op de server zelf):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
# $Id: /usr/local/hobbynet/bin/upd_smail $&lt;br /&gt;
#&lt;br /&gt;
# Driver voor alle subtaken dump... en gen....&lt;br /&gt;
#&lt;br /&gt;
# usage: ./upd_smail&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
CHOWN=/bin/chown&lt;br /&gt;
CHMOD=/bin/chmod&lt;br /&gt;
&lt;br /&gt;
HNET=/usr/local/hobbynet&lt;br /&gt;
HNET_BIN=$HNET/bin&lt;br /&gt;
HNET_LIB=$HNET/lib&lt;br /&gt;
HNET_BCK=$HNET/lib/backup&lt;br /&gt;
HNET_LDR=$HNET/lib/loader&lt;br /&gt;
&lt;br /&gt;
ID=$(date +&amp;quot;%Y%m%d-%H%M%S&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cd $HNET_LIB&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# save all 4 tables with unique name&lt;br /&gt;
#&lt;br /&gt;
mysqldump -u postfixadmin -ppassword -c postfixadmin mailbox &amp;gt;$HNET_BCK/mailbox_$ID.sql&lt;br /&gt;
mysqldump -u postfixadmin -ppassword -c postfixadmin alias &amp;gt;$HNET_BCK/alias_$ID.sql&lt;br /&gt;
mysqldump -u postfixadmin -ppassword -c postfixadmin domain &amp;gt;$HNET_BCK/domain_$ID.sql&lt;br /&gt;
mysqldump -u postfixadmin -ppassword -c postfixadmin alias_domain &amp;gt;$HNET_BCK/alias_domain_$ID.sql&lt;br /&gt;
#&lt;br /&gt;
# save extra mailboxes&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Saving extra mailboxess...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/extra_mailboxes.txt $HNET_BCK/extra_mailboxes_$ID.txt&lt;br /&gt;
$HNET_BIN/dump_extra_mailboxes | sort &amp;gt;$HNET_LIB/extra_mailboxes.txt&lt;br /&gt;
#&lt;br /&gt;
# save scouthout aliases&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Saving scouthout aliases...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/scouthout_aliases.txt $HNET_BCK/scouthout_aliases_$ID.txt&lt;br /&gt;
$HNET_BIN/dump_scouthout_aliases | sort &amp;gt;$HNET_LIB/scouthout_aliases.txt&lt;br /&gt;
#&lt;br /&gt;
# save new and extra aliases&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Saving new and extra aliases...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/extra_aliases.txt $HNET_BCK/extra_aliases_$ID.txt&lt;br /&gt;
$HNET_BIN/dump_extra_aliases | sort &amp;gt;$HNET_LIB/extra_aliases.txt&lt;br /&gt;
#&lt;br /&gt;
# save hcc and other domains&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Saving hcc and other domains...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/all_domains.txt $HNET_BCK/all_domains_$ID.txt&lt;br /&gt;
$HNET_BIN/dump_all_domains | sort &amp;gt;$HNET_LIB/all_domains.txt&lt;br /&gt;
#&lt;br /&gt;
# save new and extra domain_aliases&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Saving new and extra domain_aliases...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/extra_alias_domains.txt $HNET_BCK/extra_alias_domains_$ID.txt&lt;br /&gt;
$HNET_BIN/dump_extra_alias_domains | sort &amp;gt;$HNET_LIB/extra_alias_domains.txt&lt;br /&gt;
#&lt;br /&gt;
# prepare emergency backup procedure (here-doecument)&lt;br /&gt;
#&lt;br /&gt;
cat &amp;gt; $HNET_BCK/restore_$ID &amp;lt;&amp;lt;END&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
mysql -u postfixadmin -ppassword -c postfixadmin &amp;lt;$HNET_BCK/mailbox_$ID.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword -c postfixadmin &amp;lt;$HNET_BCK/alias_$ID.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword -c postfixadmin &amp;lt;$HNET_BCK/domain_$ID.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword -c postfixadmin &amp;lt;$HNET_BCK/alias_domain_$ID.sql&lt;br /&gt;
cp $HNET_BCK/extra_mailboxes_$ID.txt $HNET_LIB/extra_mailboxes.txt&lt;br /&gt;
cp $HNET_BCK/scouthout_aliases_$ID.txt $HNET_LIB/scouthout_aliases.txt&lt;br /&gt;
cp $HNET_BCK/extra_aliases_$ID.txt $HNET_LIB/extra_aliases.txt&lt;br /&gt;
cp $HNET_BCK/all_domains_$ID.txt $HNET_LIB/all_domains.txt&lt;br /&gt;
cp $HNET_BCK/extra_alias_domains_$ID.txt $HNET_LIB/extra_alias_domains.txt&lt;br /&gt;
END&lt;br /&gt;
chmod 755 $HNET_BCK/restore_$ID&lt;br /&gt;
#&lt;br /&gt;
# build all 4 tables from input files&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Building mailbox table for Hobbynet/Kadernet...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/mailbox_header.tmpl $HNET_LDR/mailbox.sql&lt;br /&gt;
$HNET_BIN/gen_mailbox &amp;gt;&amp;gt; $HNET_LDR/mailbox.sql&lt;br /&gt;
$HNET_BIN/gen_mailbox2 | sort | uniq &amp;gt;&amp;gt; $HNET_LDR/mailbox.sql&lt;br /&gt;
$HNET_BIN/gen_extra_mailbox &amp;gt;&amp;gt; $HNET_LDR/mailbox.sql&lt;br /&gt;
cat $HNET_LIB/mailbox_footer.tmpl &amp;gt;&amp;gt; $HNET_LDR/mailbox.sql&lt;br /&gt;
$CHMOD 644 $HNET_LDR/mailbox.sql&lt;br /&gt;
$CHOWN root:root $HNET_LDR/mailbox.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword postfixadmin &amp;lt;$HNET_LDR/mailbox.sql&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Building alias table for Hobbynet/Kadernet...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/alias_header.tmpl $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_fff_hobbynet_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_fff_www_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_extra_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_scouthout_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_alias2 | sort | uniq &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_func_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_best_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_webm_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_kernl_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_group_alias | sort | uniq &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_voorz_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_kernl_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_secr_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_penm_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_webm_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_bestl_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_voorz_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_kernl_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_secr_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_penm_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_webm_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_bestl_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ledenraad_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
# use temporary file with unique mail addresses&lt;br /&gt;
cut --delimiter=&amp;quot;,&amp;quot; --field=4 $HNET_LIB/kaderfunc.txt | sort | uniq &amp;gt; $HNET_LIB/kaderfunc-sorted.txt&lt;br /&gt;
$HNET_BIN/gen_fff_kadernet_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
rm $HNET_LIB/kaderfunc-sorted.txt&lt;br /&gt;
#&lt;br /&gt;
cat $HNET_LIB/alias_footer.tmpl &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$CHMOD 644 $HNET_LDR/alias.sql&lt;br /&gt;
$CHOWN root:root $HNET_LDR/alias.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword -c postfixadmin &amp;lt;$HNET_LDR/alias.sql&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Building domain table for Hobbynet/Kadernet...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/domain_header.tmpl $HNET_LDR/domain.sql&lt;br /&gt;
$HNET_BIN/gen_domain &amp;gt;&amp;gt; $HNET_LDR/domain.sql&lt;br /&gt;
$HNET_BIN/gen_all_domain &amp;gt;&amp;gt; $HNET_LDR/domain.sql&lt;br /&gt;
$HNET_BIN/gen_domain2 &amp;gt;&amp;gt; $HNET_LDR/domain.sql&lt;br /&gt;
cat $HNET_LIB/domain_footer.tmpl &amp;gt;&amp;gt; $HNET_LDR/domain.sql&lt;br /&gt;
$CHMOD 644 $HNET_LDR/domain.sql&lt;br /&gt;
$CHOWN root:root $HNET_LDR/domain.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword postfixadmin &amp;lt;$HNET_LDR/domain.sql&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Building alias_domain table for Hobbynet/Kadernet...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/alias_domain_header.tmpl $HNET_LDR/alias_domain.sql&lt;br /&gt;
$HNET_BIN/gen_extra_alias_domain &amp;gt;&amp;gt; $HNET_LDR/alias_domain.sql&lt;br /&gt;
$HNET_BIN/gen_alias_domain2 &amp;gt;&amp;gt; $HNET_LDR/alias_domain.sql&lt;br /&gt;
cat $HNET_LIB/alias_domain_footer.tmpl &amp;gt;&amp;gt; $HNET_LDR/alias_domain.sql&lt;br /&gt;
$CHMOD 644 $HNET_LDR/alias_domain.sql&lt;br /&gt;
$CHOWN root:root $HNET_LDR/alias_domain.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword postfixadmin &amp;lt;$HNET_LDR/alias_domain.sql&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;&amp;quot;&lt;br /&gt;
echo &amp;quot;Building systemusers for Roundcube...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/systemusers.tmpl $HNET_LIB/systemusers&lt;br /&gt;
$HNET_BIN/gen_systemusers &amp;gt;&amp;gt; $HNET_LIB/systemusers&lt;br /&gt;
$CHMOD 644 $HNET_LIB/systemusers&lt;br /&gt;
$CHOWN root:root $HNET_LIB/systemusers&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;&amp;quot;&lt;br /&gt;
echo &amp;quot;Dumping transport for mail-dev...&amp;quot;&lt;br /&gt;
$HNET_BIN/dump_transport &amp;gt;$HNET_LIB/transport&lt;br /&gt;
cp /etc/postfix/transport /etc/postfix/transport.old&lt;br /&gt;
cp $HNET_LIB/transport /etc/postfix/transport&lt;br /&gt;
postmap /etc/postfix/transport&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Dumping relay_recipients for mail-dev...&amp;quot;&lt;br /&gt;
$HNET_BIN/dump_relay_recipients &amp;gt;$HNET_LIB/relay_recipients&lt;br /&gt;
cp /etc/postfix/relay_recipients /etc/postfix/relay_recipients.old&lt;br /&gt;
cp $HNET_LIB/relay_recipients /etc/postfix/relay_recipients&lt;br /&gt;
postmap /etc/postfix/relay_recipients&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Dumping relay_domains for mail2...&amp;quot;&lt;br /&gt;
$HNET_BIN/dump_mail2_domains &amp;gt;$HNET_LIB/relay_domains&lt;br /&gt;
#&lt;br /&gt;
# EOF&lt;br /&gt;
#&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversie van data naar tekst bestanden==&lt;br /&gt;
Wat ooit gestart is al met de hand beheerde tekst bestanden, is vervangen door bestanden gemaakt uit de PFA database. Omdat alle updates m.b.v. PFA gemaakt worden, zijn die gegevens nieuwer. Door die eerst te dumpen en daarna weer te gebruiken als bron bestand blijven wijzigingen bewaard.&lt;br /&gt;
===dump_all_domains===&lt;br /&gt;
Maakt een tekst bestand in &#039;&#039;&#039;all_domains.txt&#039;&#039;&#039; van de alle domeinen in de domain tabel.&lt;br /&gt;
===dump_extra_alias_domains===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;extra_alias_domains.txt&#039;&#039;&#039; uit de &#039;&#039;&#039;alias_domain&#039;&#039;&#039; tabel.&lt;br /&gt;
===dump_extra_aliases===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;extra_aliases.txt&#039;&#039;&#039; uit de &#039;&#039;&#039;alias&#039;&#039;&#039; tabel.&lt;br /&gt;
===dump_extra_mailboxes===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;extra_mailboxes.txt&#039;&#039;&#039; uit de &#039;&#039;&#039;mailbox&#039;&#039;&#039; tabel.&lt;br /&gt;
===dump_mail2_domains===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;relay_domains&#039;&#039;&#039; uit de &#039;&#039;&#039;domain&#039;&#039;&#039; tabel voor gebruik op &#039;&#039;&#039;mail2&#039;&#039;&#039;.&lt;br /&gt;
===dump_relay_recipients===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;relay_recipients&#039;&#039;&#039; aan voor Postfix. Dit bestand moet naar /etc/postfix op mail-dev gekopieerd worden en er moet een postmap op uitgevoerd worden.&lt;br /&gt;
===dump_scouthout_aliases===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;scouthout_aliases.txt&#039;&#039;&#039; uit de &#039;&#039;&#039;alias&#039;&#039;&#039; tabel.&lt;br /&gt;
===dump_transport===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;transport&#039;&#039;&#039; aan voor Postfix. Dit bestand moet naar /etc/postfix gekopieerd worden en er moet een postmap op uitgevoerd worden.&lt;br /&gt;
&lt;br /&gt;
==Genereren van de mailboxen==&lt;br /&gt;
Alle (ook virtuele) gebruikers waarvoor mail-dev eindstation is voor email, hebben een home directory en een mailbox in een mail directory op dit systeem. Zowel HCC!Hobbynet als de HCC!Kadernet leden hebben allemaal een mailbox met Maildir structuur in /disk/mail/vmail/&amp;lt;domain&amp;gt;/&amp;lt;user&amp;gt;/Maildir/.&lt;br /&gt;
&lt;br /&gt;
===gen_mailbox===&lt;br /&gt;
Dit script maakt de &#039;&#039;&#039;hobbynet&#039;&#039;&#039; mailbox informatie aan. De passwords zijn afkomstig uit ldap op hcc-ldap-lb1. De mailbox naam was &#039;&#039;&#039;altijd&#039;&#039;&#039; &amp;lt;contact&amp;gt;@&amp;lt;systeem&amp;gt;.hobby.nl voor hobbynetleden. Het domein is altijd &#039;&#039;&#039;&amp;lt;systeem&amp;gt;.hobby.nl&#039;&#039;&#039;. Het &#039;&#039;&#039;type&#039;&#039;&#039; attribute in ldap wordt ook bewaard in de mailbox db tabel.&lt;br /&gt;
&lt;br /&gt;
===gen_mailbox2===&lt;br /&gt;
Dit script maakt de &#039;&#039;&#039;kadernet&#039;&#039;&#039; mailbox informatie aan. De mailbox naam is &#039;&#039;&#039;altijd&#039;&#039;&#039; &amp;lt;lidnummer&amp;gt;@kader.hcc.nl voor kaderleden. Het domein voor kaderleden is dus altijd &#039;&#039;&#039;kader.hcc.nl&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===gen_extra_mailbox===&lt;br /&gt;
Dit script maakt mailboxen aan die niet uit de andere bronnen te herleiden zijn. De mailboxen krijgen type 9.&lt;br /&gt;
&lt;br /&gt;
==Genereren van de aliases==&lt;br /&gt;
Email die op een domein op mail-dev wordt afgeleverd om direct weer verder gestuurd te worden heeft geen mailbox nodig. Voorbeeld hiervan is scouthout.nl. Alle email adressen expanderen via &#039;&#039;&#039;aliases&#039;&#039;&#039; naar een of meer externe adressen. Mail-dev fungeert hiervoor dus als mailrelay. Aliases zijn ook nodig voor functionele email adressen van kadernet functies zoals voorzitter, secretaris, enz. Ook zijn er adressen nodig voor grotere groepen ten bate van het kantoor zodat ze alle penningmeesters tegelijk kunnen mailen. De alias tabel wordt dus vrij groot. Er zijn weer meerdere kleine scripts die de tabellen vullen.&lt;br /&gt;
&lt;br /&gt;
===gen_alias===&lt;br /&gt;
Dit script genereert alle &#039;&#039;&#039;hobbynet&#039;&#039;&#039; aliases die uit hobbyabon.txt gemaakt kunnen worden. Voor de hobbynetleden wordt een alias gemaakt met de naam van de gebruiker in de &#039;&#039;&#039;alias&#039;&#039;&#039; tabel. Er komt dus een &#039;&#039;&#039;&amp;lt;contact&amp;gt;@&amp;lt;systeem&amp;gt;.hobby.nl&#039;&#039;&#039; die naar de mailbox &#039;&#039;&#039;&amp;lt;contact&amp;gt;@&amp;lt;systeem&amp;gt;.hobby.nl&#039;&#039;&#039; wijst. De &#039;&#039;&#039;alias&#039;&#039;&#039; tabel is zichtbaar in PostfixAdmin. De alias tabel kan beheerd worden met PostfixAdmin. Via phpmyadmin op dbadmin.hobby.nl kunnen natuurlijk alle tabellen in de database postfixadmin benaderd worden, mocht dit nodig zijn.&lt;br /&gt;
&lt;br /&gt;
Om het mogelijk te maken voor een hobbynet lid de Hobbynet mail ergens anders af te leveren, is de scripting aangepast (vbs20200416). Het mail veld in ou=users bepaald of er een mailbox wordt gemaakt os dat er forwarding wordt gedaan. Zie [] voor meer uitleg.&lt;br /&gt;
&lt;br /&gt;
===gen_fff_hobbynet_alias===&lt;br /&gt;
Dit script genereert de &#039;&#039;&#039;fff_hnet@hobby.nl&#039;&#039;&#039; alias door uit hobbyabon.txt het emailadres van leden met code 0,1,2,3 te halen.&lt;br /&gt;
&lt;br /&gt;
===gen_fff_www_alias===&lt;br /&gt;
Dit script genereert de &#039;&#039;&#039;fff_www@hobby.nl&#039;&#039;&#039; alias door uit hobbyabon.txt het emailadres te halen van dié leden die een website op een van de Hobbynet webservers hebben. Het is dus een subset van &#039;&#039;&#039;fff_hnet&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===gen_extra_alias===&lt;br /&gt;
Dit script leest &#039;&#039;&#039;extra_aliases.txt&#039;&#039;&#039; en genereert regels in de sql-loaderfile. Het betreft aliases die niet eenvoudig af te leiden zijn uit hobbyabon.txt en kaderfunc.txt.&lt;br /&gt;
&lt;br /&gt;
===gen_scouthout_alias===&lt;br /&gt;
Dit script leest &#039;&#039;&#039;scouthout_aliases.txt&#039;&#039;&#039; en genereert regels in de sql-loaderfile. Het betreft aliases die te maken hebben met scouthout.nl. Er is tevens een scriptje &#039;&#039;&#039;dump_scouthout_aliases&#039;&#039;&#039; dat scouthout_aliases.txt kan genereren uit de alias tabel. Dit kan nuttig zijn als er updates via PostfixAdmin zijn gedaan door de scouthout admin. &lt;br /&gt;
&lt;br /&gt;
===gen_alias2===&lt;br /&gt;
Dit script genereert alle &#039;&#039;&#039;kadernet&#039;&#039;&#039; aliases die uit kaderfunc.txt gemaakt kunnen worden. Voor de kaderleden waar het domain nog &#039;&#039;&#039;kader.hobby.nl&#039;&#039;&#039; is, wordt dat vervangen door &#039;&#039;&#039;kader.hcc.nl&#039;&#039;&#039;. Er wordt een alias gemaakt die naar de mailbox wijst (met het lidnummer uit kaderfunc.txt) en één met de HCC naam uit het in kaderfunc.txt opgenomen email adres. Er komt dus een &#039;&#039;&#039;1234567@kader.hcc.nl&#039;&#039;&#039; en een &#039;&#039;&#039;a.b.c.janssen@kader.hcc.nl&#039;&#039;&#039; die weer beide naar de mailbox &#039;&#039;&#039;1234567@kader.hcc.nl&#039;&#039;&#039; verwijzen. De alias tabel kan beheerd worden met PostfixAdmin. Via Phpmyadmin op dbadmin.hobby.nl kunnen natuurlijk ook alle tabellen in de database postfixadmin benaderd worden.&lt;br /&gt;
&lt;br /&gt;
===gen_func_alias===&lt;br /&gt;
Dit script genereert alle functionele aliases voor elke groepering. Het maakt aliases aan voor &#039;&#039;&#039;voorzitter@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039;, &#039;&#039;&#039;secretaris@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039; en &#039;&#039;&#039;penningmeester@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039;. Tevens wordt &#039;&#039;&#039;info@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039; gemaakt die ook naar secretaris@&amp;lt;groepering&amp;gt;.hcc.nl verwijst. De informatie wordt gehaald uit de kaderfunc.txt file.&lt;br /&gt;
&lt;br /&gt;
Om backwards compatible te zijn is ook voorzien in aliases voor &#039;voorz&#039;, &#039;secr&#039; en &#039;penm&#039; die verwijzen naar de lange naam. Uit praktische overweging worden hier ook de rfc mailboxen gemaakt. abuse@.. verwijst naar abuse@hobby.nl.&lt;br /&gt;
&lt;br /&gt;
===gen_best_alias===&lt;br /&gt;
Dit script genereert de &#039;&#039;&#039;bestuur&#039;&#039;&#039; alias voor elke groepering. Dus per groepering de voorzitter, secretaris, penningmeester en bestuursleden met als alias &#039;&#039;&#039;bestuur@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039;. De informatie wordt weer gehaald uit de &#039;&#039;&#039;kaderfunc.txt&#039;&#039;&#039; file. Sommige groeperingen zoals &#039;&#039;&#039;hobby-computer-club&#039;&#039;&#039; wordt overgeslagen. Er is geen &#039;&#039;&#039;bestuur@hobby-computer-club.hcc.nl&#039;&#039;&#039;...&lt;br /&gt;
&lt;br /&gt;
===gen_webm_alias===&lt;br /&gt;
Voor de webmasters is een apart script gemaakt omdat er een variabel aantal webmasters per groepering kan zijn. Bron bestand is weer kaderfunc.txt. Dit script genereert de &#039;&#039;&#039;webmaster@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039; alias die een variabel aantal target mailboxen kent. Ook wordt altijd de secretaris toegevoegd. In het geval dat er helemaal géén webmaster is aangemeld komt de mail dus tenminste in de mailbox van de secretaris &#039;&#039;(is dit nog zo?)&#039;&#039;. Bron bestand is natuurlijk weer kaderfunc.txt.&lt;br /&gt;
&lt;br /&gt;
===gen_kernl_alias===&lt;br /&gt;
Voor de kernleden is een apart script gemaakt omdat er een variabel aantal kernleden per groepering kan zijn. Bron bestand is weer kaderfunc.txt. Dit script genereert de &#039;&#039;&#039;kernleden@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039; alias die een variabel aantal target mailboxen kent.&lt;br /&gt;
&lt;br /&gt;
===gen_kadernet_alias===&lt;br /&gt;
Dit script leest kadernet_aliases.txt en genereert de SQL regels voor speciale kadernet aliases die niet uit kaderfunc.txt gemaakt kunnen worden.&lt;br /&gt;
&lt;br /&gt;
===gen_ig_&amp;lt;func&amp;gt;_alias===&lt;br /&gt;
Deze scripts genereren een alias die alle voorzitters, secretarissen, penningmeesters, webmasters, gewone bestuursleden en kernleden van interessegroepen (vroeger gebruikersgroep) als target hebben. Deze aliasen worden zelden gebruikt, maar voorzien erin om alle penningmeesters uit te nodigen voor een penm. overleg. De script zijn nagenoeg identiek. Zoals altijd zijn de target adressen mailboxen (herkenbaar aan het lidnummer). Bron bestand is kaderfunc.txt.&amp;lt;br&amp;gt;&lt;br /&gt;
Op verzoek van het Kantoor worden enkele key-personen in de alias gezet. Deze personen dienen in de alias &#039;&#039;&#039;kantoor@kader.hcc.nl&#039;&#039;&#039; (in extra_aliases.txt) gezet te worden om in de &#039;&#039;&#039;ig_&#039;&#039;&#039; alias te komen.&lt;br /&gt;
&lt;br /&gt;
===gen_regio_&amp;lt;func&amp;gt;_alias===&lt;br /&gt;
Deze scripts genereren een alias die alle voorzitters, secretarissen, penningmeesters, webmasters, gewone bestuursleden en kernleden van regio&#039;s (vroeger afdeling) als target hebben. Deze aliasen worden zelden gebruikt, maar voorzien erin om alle penningmeesters uit te nodigen voor een penm. overleg. De script zijn nagenoeg identiek. Zoals altijd zijn de target adressen mailboxen (herkenbaar aan het lidnummer). Bron bestand is kaderfunc.txt.&amp;lt;br&amp;gt;&lt;br /&gt;
Op verzoek van het Kantoor worden enkele key-personen in de alias gezet. Deze personen dienen in de alias &#039;&#039;&#039;kantoor@kader.hcc.nl&#039;&#039;&#039; (in extra_aliases.txt) gezet te worden om in de &#039;&#039;&#039;regio_&#039;&#039;&#039; alias te komen. Deze aliases zijn weer gecombineerd tot grotere groepen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Alle voorz, secr, penm, enz van ig&#039;s:&lt;br /&gt;
ig_voorz@kader.hcc.nl &lt;br /&gt;
ig_secr@kader.hcc.nl&lt;br /&gt;
ig_penm@kader.hcc.nl&lt;br /&gt;
ig_bestl@kader.hcc.nl&lt;br /&gt;
ig_kernl@kader.hcc.nl&lt;br /&gt;
ig_webm@kader.hcc.nl&lt;br /&gt;
&lt;br /&gt;
Alle voorz, secr, penm, enz van regio&#039;s&lt;br /&gt;
regio_voorz@kader.hcc.nl&lt;br /&gt;
regio_secr@kader.hcc.nl&lt;br /&gt;
regio_penm@kader.hcc.nl&lt;br /&gt;
regio_bestl@kader.hcc.nl&lt;br /&gt;
regio_kernl@kader.hcc.nl&lt;br /&gt;
regio_webm@kader.hcc.nl&lt;br /&gt;
&lt;br /&gt;
Alle voorzitters, secr, enz:&lt;br /&gt;
fff_voorz@kader.hcc.nl (ig_voorz@kader.hcc.nl en regio_voorz@kader.hcc.nl samen)&lt;br /&gt;
fff_secr@kader.hcc.nl (alle secretarissen)&lt;br /&gt;
fff_penm@kader.hcc.nl&lt;br /&gt;
fff_bestl@kader.hcc.nl&lt;br /&gt;
fff_kernl@kader.hcc.nl&lt;br /&gt;
fff_webm@kader.hcc.nl&lt;br /&gt;
&lt;br /&gt;
Alle bestuursleden van resp. ig&#039;s en regio&#039;s: &lt;br /&gt;
fff_ig_bestuur@kader.hcc.nl (ig_voorz, ig_secr, ig_penm en ig_bestl@kader.hcc.nl samen)&lt;br /&gt;
fff_regio_bestuur@kader.hcc.nl (regio_voorz, regio_secr, regio_penm en regio_bestl@kader.hcc.nl samen)&lt;br /&gt;
&lt;br /&gt;
Alle bestuursleden:&lt;br /&gt;
fff_bestuur@kader.hcc.nl (de 4 ig_&amp;lt;func&amp;gt; en de 4 regio_&amp;lt;func&amp;gt; samen)&lt;br /&gt;
 &lt;br /&gt;
Alle kaderleden:&lt;br /&gt;
fff_kader@kader.hcc.nl (ALLE kaderleden samen, dus besturen maar nu ook met de kernleden en webmasters)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===gen_sr_presentatoren en gen_sr_regio_coordinatoren_alias===&lt;br /&gt;
Deze twee scripts genereren de aliases voor de regio_coordinatoren en presentatoren van de SeniorenAcademie (SR). Voor deze functionarissen is een virtuele IG gemaakt (SR-Ambassadeurs) omdat niet alle functionarissen lid zijn van SR. Indelen bij de regio was een optie maar dan liggen er problemen op de loer met verhuizingen.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;PAS OP&#039;&#039;&#039;: deze scripts bevatten hard gecodeerde waarden!&lt;br /&gt;
&lt;br /&gt;
===gen_fff_kadernet_alias===&lt;br /&gt;
Dit script genereert de &#039;&#039;&#039;fff_kader@kader.hcc.nl&#039;&#039;&#039;. Hiervoor wordt kaderfunc.txt gebruikt (code 5).&amp;lt;br&amp;gt;&lt;br /&gt;
Op verzoek van het Kantoor worden enkele kantoor functies in de alias gezet. Deze personen dienen in de alias &#039;&#039;&#039;kantoor@kader.hcc.nl&#039;&#039;&#039; (in extra_aliases.txt) gezet te worden om in de &#039;&#039;&#039;fff_&#039;&#039;&#039; aliases te komen.&lt;br /&gt;
&lt;br /&gt;
==Genereren van de domains==&lt;br /&gt;
Postfix kan de email voor vele domeinen afhandelen. Om ongewenst relayeren (spam!) te voorkomen moeten de domeinen van de geadresseerden gecheckt kunnen worden. &lt;br /&gt;
&lt;br /&gt;
===gen_domain===&lt;br /&gt;
Dit script genereert de hobbynet domeinen voor de domeinen in hobbyabon.txt voor de tabel &#039;&#039;&#039;domain&#039;&#039;&#039;. Ook hier geldt weer dat de &#039;&#039;&#039;domain&#039;&#039;&#039; tabel beheerbaar is in PostfixAdmin.&lt;br /&gt;
&lt;br /&gt;
===gen_all_domain===&lt;br /&gt;
Het bronbestand voor gen_all_domain is &#039;&#039;&#039;all_domains.txt&#039;&#039;&#039;. Het script &#039;&#039;&#039;gen_all_domain&#039;&#039;&#039; voegt records toe aan de domain tabel die betrekking hebben op alle beheerde domeinen. Dit zijn b.v. hccm.nl en hcc-watersport.nl maar weer NIET modelbaan-gg.hcc.nl. Die laatste wordt door gen_domain2 aangemaakt.&lt;br /&gt;
&lt;br /&gt;
===gen_domain2===&lt;br /&gt;
Dit script genereert de kadernet domeinen. Voor kadernet wordt &#039;&#039;&#039;kader.hobby.nl&#039;&#039;&#039; vervangen door &#039;&#039;&#039;kader.hcc.nl&#039;&#039;&#039;. Ook hier geldt weer dat de &#039;&#039;&#039;domain&#039;&#039;&#039; tabel beheerbaar is in PostfixAdmin. Er worden domeinen gemaakt zonder de &#039;&#039;&#039;afd-&#039;&#039;&#039; of &#039;&#039;&#039;-gg&#039;&#039;&#039; en met &#039;&#039;&#039;regio-&#039;&#039;&#039; i.p.v. &#039;&#039;&#039;afd-&#039;&#039;&#039; en &#039;&#039;&#039;-ig&#039;&#039;&#039; i.p.v. &#039;&#039;&#039;-gg&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Genereren van de alias-domains==&lt;br /&gt;
Postfix kent een z.g. alias_domain. Dit is een domeinnaam die een alias is voor een andere domeinnaam. Alle email adressen in het originele domein komen 1 op 1 voor in het alias domein.&lt;br /&gt;
 &lt;br /&gt;
===gen_extra_alias_domain===&lt;br /&gt;
Dit script leest &#039;&#039;&#039;extra_alias_domains.txt&#039;&#039;&#039; en genereert SQL regels voor de tabel alias_domain&lt;br /&gt;
&lt;br /&gt;
De layout van de tekst file is simpel: alias_domain, target_domain. Voorbeeld:&lt;br /&gt;
 # list of alias_domains&lt;br /&gt;
 # mirror.tld,target.tld&lt;br /&gt;
 #&lt;br /&gt;
 hccm.nl:modelbaan-gg.hcc.nl&lt;br /&gt;
 hcc-modelbaan.nl:modelbaan-gg.hcc.nl&lt;br /&gt;
 hcc-games.nl:games-gg.hcc.nl&lt;br /&gt;
 hcc-clan.nl:games-gg.hcc.nl&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Opm&#039;&#039;&#039;: De automatisch gegenereerde HCC domeinnamen (ontstaan door -gg/afd-/cg- weg te laten) mogen dus NIET in de platte tekst file staan.&lt;br /&gt;
&lt;br /&gt;
===gen_alias_domain2===&lt;br /&gt;
Dit script genereert alle HCC afdeling en ig domeinen maar dan zonder de &#039;&#039;&#039;afd-&#039;&#039;&#039; prefix en &#039;&#039;&#039;-gg&#039;&#039;&#039; suffix. Input is kaderfunc.txt.&lt;br /&gt;
&lt;br /&gt;
==Systemusers==&lt;br /&gt;
Het upd_smail script genereert tevens een soor virtualusers bestand voor Roundcube. Om de kaderleden in staat te stellen met slechts hun lidnummer in te loggen op webmail is er een default domein &#039;&#039;&#039;kader.hcc.nl&#039;&#039;&#039; gedefinieerd. Als iemand zonder domein inlogt, wordt &#039;&#039;&#039;@kader.hcc.nl&#039;&#039;&#039; toegevoegd. Door fake entries op te nemen met &amp;lt;systeemuser&amp;gt;@kader.hcc.nl en een alias &#039;&#039;&#039;zonder &#039;&#039;&#039; domein kunnen die toch inloggen op het webinterface. De laatste groep zijn de hobbynet users die vanouds met S&amp;lt;systeem&amp;gt; konden inloggen. Voor hen wordt ook een fake entry gemaakt met S&amp;lt;systeem&amp;gt;@kader.hcc.nl met als alias het opgegeven email adres. Voor dit email adres is eerder een mailbox aangemaakt.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
De beschreven faciliteit bestaat alleen voor het Roundcube web email interface. Pop3 en imap clients moeten, behalve voor systeemusers, altijd een domein meegeven!&lt;br /&gt;
&lt;br /&gt;
==Extra scripts==&lt;br /&gt;
L8er...&lt;br /&gt;
&lt;br /&gt;
Terug naar [[EMAIL]]&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=Uitleg_scripts&amp;diff=78364</id>
		<title>Uitleg scripts</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=Uitleg_scripts&amp;diff=78364"/>
		<updated>2020-04-18T09:41:57Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* gen_mailbox */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introductie==&lt;br /&gt;
De scripting is er op gericht een aantal tabellen te vullen in de postfixadmin database. De tabellen zijn in eerste instantie helemaal standaard gehouden zoals postfixadmin ze aanmaakt bij de installatie. Postfixadmin kan worden gebruikt om veranderingen in de data aan te brengen. Later zijn enkele velden toegevoegd voor het specifieke gebruik binnen Hobbynet. Voornamelijk om het creëren van tekst bestanden als bron bestanden aan te maken.&lt;br /&gt;
&lt;br /&gt;
===Proces===&lt;br /&gt;
Het hele proces is gericht op het behoud van (mogelijk gewijzigde) data. In de aanloop fase werden de platte tekst bestanden met de hand bijgehouden waarna de database tabellen gegenereerd werden. In de test fase werden de uit de database gemaakte tekst bestanden vergeleken met de originele bestanden. In de productie fase zijn er geen originele tekst bestanden meer; de vorige versie wordt veilig gesteld en daarna vervangen door de verse dump uit de database. Op die wijze worden nieuwe records meegenomen die met PostfixAdmin in de database zijn gemaakt. De laatst bekende data in de database wordt namelijk eerst gedumpt naar tekst bestanden, die vervolgens weer worden gebruikt om de database te laden. De externe bestanden hobbyabon.txt (was husers) en kaderfunc.txt (was b3a.txt) zijn hier een uitzondering op; die worden nooit overschreven maar door het script &#039;&#039;&#039;upd_mailserver&#039;&#039;&#039; op de LDAP server geplaatst. &#039;&#039;&#039;upd_smail&#039;&#039;&#039; op de mailserver doet de rest.&amp;lt;br&amp;gt;&lt;br /&gt;
Zie ook de pagina [[bronbestanden]].&lt;br /&gt;
&lt;br /&gt;
===Locatie van de bestanden===&lt;br /&gt;
De bron bestanden: &#039;&#039;&#039;kaderfunc.txt&#039;&#039;&#039;, &#039;&#039;&#039;hobbyabon.txt&#039;&#039;&#039; staan in de data directory (via scp van hcc-ldap-lb1 afkomstig), &#039;&#039;&#039;extra_alias_domains.txt&#039;&#039;&#039;, &#039;&#039;&#039;extra_aliases.txt&#039;&#039;&#039;, &#039;&#039;&#039;scouthout_aliases.txt&#039;&#039;&#039; en de &#039;&#039;&#039;_header/_footer&#039;&#039;&#039; bestanden (.tmpl) staan ook in &#039;&#039;&#039;/usr/local/hobbynet/data&#039;&#039;&#039; directory.&lt;br /&gt;
&lt;br /&gt;
De scripts staan in &#039;&#039;&#039;/usr/local/hobbynet/local&#039;&#039;&#039;. De backups van de database en tekst bestanden komen in &#039;&#039;&#039;/usr/local/hobbynet/data/backup&#039;&#039;&#039; terecht. De door de scripts gegenereerde MySQL bestanden komen in &#039;&#039;&#039;/usr/local/hobbynet/data/loader&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
De bestanden in de backup directory moeten geregeld opgeruimd worden; er zit geen limiet op het aantal versies. In de backup directory staat ook een script om een versie van een bepaalde datum/tijd snel terug te zetten waarna &#039;&#039;&#039;upd_smail&#039;&#039;&#039; de database herlaadt.&lt;br /&gt;
&lt;br /&gt;
===Scripts===&lt;br /&gt;
De (perl) scripts zijn bewust kort en simpel gehouden om ze zo modulair mogelijk te maken. De tactiek is telkens hetzelfde: bij elk te maken SQL loader bestand is er een header, tussenliggende gelijksoortige data regels en een footer te onderscheiden.&lt;br /&gt;
* De header is alle tekst die door een MySQL dump gemaakt wordt (met een delete-if-exists erin), tot en met de eerste SQL regel: INSERT INTO...VALUES.&lt;br /&gt;
* De diverse scripts voegen de tussenliggende data regels toe.&lt;br /&gt;
* De footer is gewoonlijk een laatste data regel maar dan eindigend op &#039;&#039;&#039;;&#039;&#039;&#039; in plaats van &#039;&#039;&#039;,&#039;&#039;&#039; en de afsluitende regels van de dump.&lt;br /&gt;
Een dergelijk SQL loader bestand is zonder meer terug te laden in MySQL. De tabel wordt eerst weggegooid en wordt daarna opnieuw aangemaakt.&lt;br /&gt;
&lt;br /&gt;
==upd_smail==&lt;br /&gt;
Dit script is het overkoepelende script dat alle &#039;&#039;&#039;dump_*&#039;&#039;&#039; en &#039;&#039;&#039;gen_*&#039;&#039;&#039; scripts uitvoert en mysql aanroept om de database te laden. &#039;&#039;&#039;upd_smail&#039;&#039;&#039; op zijn beurt wordt weer door &#039;&#039;&#039;upd_all&#039;&#039;&#039; aangeroepen. In dit &#039;&#039;&#039;upd_smail&#039;&#039;&#039; script worden vóórdat de tabellen vanaf scratch worden opgebouwd, de 4 tabellen veilig gesteld in een backup directory. Tevens worden tekst bestanden aangemaakt van die delen van de database die met de hand veranderd kunnen zijn. Het uitgangspunt is hier dat de database de echte waarheid is en de bronbestanden achter kunnen lopen. &lt;br /&gt;
&lt;br /&gt;
Het &#039;&#039;&#039;all_domains.txt&#039;&#039;&#039; bestand bevat de domeinen waar HCC voor betaalt aan SIDN. Ook de benodigde speciale subdomeinen staan in het all_domains.txt bestand. &lt;br /&gt;
&lt;br /&gt;
Per tabel worden de SQL header files samengevoegd met de output van de verschillende gen_* scripts. Tenslotte wordt een SQL footer toegevoegd, vaak alleen om de SQL te beëindigen met een &#039;&#039;&#039;;&#039;&#039;&#039;. Daarna wordt de tabel in MySQL aangemaakt en de data geladen. De &lt;br /&gt;
tabellen worden dus in z&#039;n geheel vervangen. Als laatste wordt een soort van &#039;&#039;&#039;virtalias&#039;&#039;&#039; bestand voor Roundcube gemaakt. Hieronder de complete &#039;&#039;&#039;upd_smail&#039;&#039;&#039; (slechts als referentie, kijk altijd naar het script op de server zelf):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
# $Id: /usr/local/hobbynet/bin/upd_smail $&lt;br /&gt;
#&lt;br /&gt;
# Driver voor alle subtaken dump... en gen....&lt;br /&gt;
#&lt;br /&gt;
# usage: ./upd_smail&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
CHOWN=/bin/chown&lt;br /&gt;
CHMOD=/bin/chmod&lt;br /&gt;
&lt;br /&gt;
HNET=/usr/local/hobbynet&lt;br /&gt;
HNET_BIN=$HNET/bin&lt;br /&gt;
HNET_LIB=$HNET/lib&lt;br /&gt;
HNET_BCK=$HNET/lib/backup&lt;br /&gt;
HNET_LDR=$HNET/lib/loader&lt;br /&gt;
&lt;br /&gt;
ID=$(date +&amp;quot;%Y%m%d-%H%M%S&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cd $HNET_LIB&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# save all 4 tables with unique name&lt;br /&gt;
#&lt;br /&gt;
mysqldump -u postfixadmin -ppassword -c postfixadmin mailbox &amp;gt;$HNET_BCK/mailbox_$ID.sql&lt;br /&gt;
mysqldump -u postfixadmin -ppassword -c postfixadmin alias &amp;gt;$HNET_BCK/alias_$ID.sql&lt;br /&gt;
mysqldump -u postfixadmin -ppassword -c postfixadmin domain &amp;gt;$HNET_BCK/domain_$ID.sql&lt;br /&gt;
mysqldump -u postfixadmin -ppassword -c postfixadmin alias_domain &amp;gt;$HNET_BCK/alias_domain_$ID.sql&lt;br /&gt;
#&lt;br /&gt;
# save extra mailboxes&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Saving extra mailboxess...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/extra_mailboxes.txt $HNET_BCK/extra_mailboxes_$ID.txt&lt;br /&gt;
$HNET_BIN/dump_extra_mailboxes | sort &amp;gt;$HNET_LIB/extra_mailboxes.txt&lt;br /&gt;
#&lt;br /&gt;
# save scouthout aliases&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Saving scouthout aliases...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/scouthout_aliases.txt $HNET_BCK/scouthout_aliases_$ID.txt&lt;br /&gt;
$HNET_BIN/dump_scouthout_aliases | sort &amp;gt;$HNET_LIB/scouthout_aliases.txt&lt;br /&gt;
#&lt;br /&gt;
# save new and extra aliases&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Saving new and extra aliases...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/extra_aliases.txt $HNET_BCK/extra_aliases_$ID.txt&lt;br /&gt;
$HNET_BIN/dump_extra_aliases | sort &amp;gt;$HNET_LIB/extra_aliases.txt&lt;br /&gt;
#&lt;br /&gt;
# save hcc and other domains&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Saving hcc and other domains...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/all_domains.txt $HNET_BCK/all_domains_$ID.txt&lt;br /&gt;
$HNET_BIN/dump_all_domains | sort &amp;gt;$HNET_LIB/all_domains.txt&lt;br /&gt;
#&lt;br /&gt;
# save new and extra domain_aliases&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Saving new and extra domain_aliases...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/extra_alias_domains.txt $HNET_BCK/extra_alias_domains_$ID.txt&lt;br /&gt;
$HNET_BIN/dump_extra_alias_domains | sort &amp;gt;$HNET_LIB/extra_alias_domains.txt&lt;br /&gt;
#&lt;br /&gt;
# prepare emergency backup procedure (here-doecument)&lt;br /&gt;
#&lt;br /&gt;
cat &amp;gt; $HNET_BCK/restore_$ID &amp;lt;&amp;lt;END&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
mysql -u postfixadmin -ppassword -c postfixadmin &amp;lt;$HNET_BCK/mailbox_$ID.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword -c postfixadmin &amp;lt;$HNET_BCK/alias_$ID.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword -c postfixadmin &amp;lt;$HNET_BCK/domain_$ID.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword -c postfixadmin &amp;lt;$HNET_BCK/alias_domain_$ID.sql&lt;br /&gt;
cp $HNET_BCK/extra_mailboxes_$ID.txt $HNET_LIB/extra_mailboxes.txt&lt;br /&gt;
cp $HNET_BCK/scouthout_aliases_$ID.txt $HNET_LIB/scouthout_aliases.txt&lt;br /&gt;
cp $HNET_BCK/extra_aliases_$ID.txt $HNET_LIB/extra_aliases.txt&lt;br /&gt;
cp $HNET_BCK/all_domains_$ID.txt $HNET_LIB/all_domains.txt&lt;br /&gt;
cp $HNET_BCK/extra_alias_domains_$ID.txt $HNET_LIB/extra_alias_domains.txt&lt;br /&gt;
END&lt;br /&gt;
chmod 755 $HNET_BCK/restore_$ID&lt;br /&gt;
#&lt;br /&gt;
# build all 4 tables from input files&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Building mailbox table for Hobbynet/Kadernet...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/mailbox_header.tmpl $HNET_LDR/mailbox.sql&lt;br /&gt;
$HNET_BIN/gen_mailbox &amp;gt;&amp;gt; $HNET_LDR/mailbox.sql&lt;br /&gt;
$HNET_BIN/gen_mailbox2 | sort | uniq &amp;gt;&amp;gt; $HNET_LDR/mailbox.sql&lt;br /&gt;
$HNET_BIN/gen_extra_mailbox &amp;gt;&amp;gt; $HNET_LDR/mailbox.sql&lt;br /&gt;
cat $HNET_LIB/mailbox_footer.tmpl &amp;gt;&amp;gt; $HNET_LDR/mailbox.sql&lt;br /&gt;
$CHMOD 644 $HNET_LDR/mailbox.sql&lt;br /&gt;
$CHOWN root:root $HNET_LDR/mailbox.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword postfixadmin &amp;lt;$HNET_LDR/mailbox.sql&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Building alias table for Hobbynet/Kadernet...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/alias_header.tmpl $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_fff_hobbynet_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_fff_www_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_extra_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_scouthout_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_alias2 | sort | uniq &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_func_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_best_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_webm_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_kernl_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_group_alias | sort | uniq &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_voorz_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_kernl_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_secr_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_penm_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_webm_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_bestl_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_voorz_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_kernl_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_secr_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_penm_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_webm_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_bestl_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ledenraad_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
# use temporary file with unique mail addresses&lt;br /&gt;
cut --delimiter=&amp;quot;,&amp;quot; --field=4 $HNET_LIB/kaderfunc.txt | sort | uniq &amp;gt; $HNET_LIB/kaderfunc-sorted.txt&lt;br /&gt;
$HNET_BIN/gen_fff_kadernet_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
rm $HNET_LIB/kaderfunc-sorted.txt&lt;br /&gt;
#&lt;br /&gt;
cat $HNET_LIB/alias_footer.tmpl &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$CHMOD 644 $HNET_LDR/alias.sql&lt;br /&gt;
$CHOWN root:root $HNET_LDR/alias.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword -c postfixadmin &amp;lt;$HNET_LDR/alias.sql&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Building domain table for Hobbynet/Kadernet...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/domain_header.tmpl $HNET_LDR/domain.sql&lt;br /&gt;
$HNET_BIN/gen_domain &amp;gt;&amp;gt; $HNET_LDR/domain.sql&lt;br /&gt;
$HNET_BIN/gen_all_domain &amp;gt;&amp;gt; $HNET_LDR/domain.sql&lt;br /&gt;
$HNET_BIN/gen_domain2 &amp;gt;&amp;gt; $HNET_LDR/domain.sql&lt;br /&gt;
cat $HNET_LIB/domain_footer.tmpl &amp;gt;&amp;gt; $HNET_LDR/domain.sql&lt;br /&gt;
$CHMOD 644 $HNET_LDR/domain.sql&lt;br /&gt;
$CHOWN root:root $HNET_LDR/domain.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword postfixadmin &amp;lt;$HNET_LDR/domain.sql&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Building alias_domain table for Hobbynet/Kadernet...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/alias_domain_header.tmpl $HNET_LDR/alias_domain.sql&lt;br /&gt;
$HNET_BIN/gen_extra_alias_domain &amp;gt;&amp;gt; $HNET_LDR/alias_domain.sql&lt;br /&gt;
$HNET_BIN/gen_alias_domain2 &amp;gt;&amp;gt; $HNET_LDR/alias_domain.sql&lt;br /&gt;
cat $HNET_LIB/alias_domain_footer.tmpl &amp;gt;&amp;gt; $HNET_LDR/alias_domain.sql&lt;br /&gt;
$CHMOD 644 $HNET_LDR/alias_domain.sql&lt;br /&gt;
$CHOWN root:root $HNET_LDR/alias_domain.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword postfixadmin &amp;lt;$HNET_LDR/alias_domain.sql&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;&amp;quot;&lt;br /&gt;
echo &amp;quot;Building systemusers for Roundcube...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/systemusers.tmpl $HNET_LIB/systemusers&lt;br /&gt;
$HNET_BIN/gen_systemusers &amp;gt;&amp;gt; $HNET_LIB/systemusers&lt;br /&gt;
$CHMOD 644 $HNET_LIB/systemusers&lt;br /&gt;
$CHOWN root:root $HNET_LIB/systemusers&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;&amp;quot;&lt;br /&gt;
echo &amp;quot;Dumping transport for mail-dev...&amp;quot;&lt;br /&gt;
$HNET_BIN/dump_transport &amp;gt;$HNET_LIB/transport&lt;br /&gt;
cp /etc/postfix/transport /etc/postfix/transport.old&lt;br /&gt;
cp $HNET_LIB/transport /etc/postfix/transport&lt;br /&gt;
postmap /etc/postfix/transport&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Dumping relay_recipients for mail-dev...&amp;quot;&lt;br /&gt;
$HNET_BIN/dump_relay_recipients &amp;gt;$HNET_LIB/relay_recipients&lt;br /&gt;
cp /etc/postfix/relay_recipients /etc/postfix/relay_recipients.old&lt;br /&gt;
cp $HNET_LIB/relay_recipients /etc/postfix/relay_recipients&lt;br /&gt;
postmap /etc/postfix/relay_recipients&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Dumping relay_domains for mail2...&amp;quot;&lt;br /&gt;
$HNET_BIN/dump_mail2_domains &amp;gt;$HNET_LIB/relay_domains&lt;br /&gt;
#&lt;br /&gt;
# EOF&lt;br /&gt;
#&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversie van data naar tekst bestanden==&lt;br /&gt;
Wat ooit gestart is al met de hand beheerde tekst bestanden, is vervangen door bestanden gemaakt uit de PFA database. Omdat alle updates m.b.v. PFA gemaakt worden, zijn die gegevens nieuwer. Door die eerst te dumpen en daarna weer te gebruiken als bron bestand blijven wijzigingen bewaard.&lt;br /&gt;
===dump_all_domains===&lt;br /&gt;
Maakt een tekst bestand in &#039;&#039;&#039;all_domains.txt&#039;&#039;&#039; van de alle domeinen in de domain tabel.&lt;br /&gt;
===dump_extra_alias_domains===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;extra_alias_domains.txt&#039;&#039;&#039; uit de &#039;&#039;&#039;alias_domain&#039;&#039;&#039; tabel.&lt;br /&gt;
===dump_extra_aliases===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;extra_aliases.txt&#039;&#039;&#039; uit de &#039;&#039;&#039;alias&#039;&#039;&#039; tabel.&lt;br /&gt;
===dump_extra_mailboxes===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;extra_mailboxes.txt&#039;&#039;&#039; uit de &#039;&#039;&#039;mailbox&#039;&#039;&#039; tabel.&lt;br /&gt;
===dump_mail2_domains===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;relay_domains&#039;&#039;&#039; uit de &#039;&#039;&#039;domain&#039;&#039;&#039; tabel voor gebruik op &#039;&#039;&#039;mail2&#039;&#039;&#039;.&lt;br /&gt;
===dump_relay_recipients===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;relay_recipients&#039;&#039;&#039; aan voor Postfix. Dit bestand moet naar /etc/postfix op mail-dev gekopieerd worden en er moet een postmap op uitgevoerd worden.&lt;br /&gt;
===dump_scouthout_aliases===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;scouthout_aliases.txt&#039;&#039;&#039; uit de &#039;&#039;&#039;alias&#039;&#039;&#039; tabel.&lt;br /&gt;
===dump_transport===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;transport&#039;&#039;&#039; aan voor Postfix. Dit bestand moet naar /etc/postfix gekopieerd worden en er moet een postmap op uitgevoerd worden.&lt;br /&gt;
&lt;br /&gt;
==Genereren van de mailboxen==&lt;br /&gt;
Alle (ook virtuele) gebruikers waarvoor mail-dev eindstation is voor email, hebben een home directory en een mailbox in een mail directory op dit systeem. Zowel HCC!Hobbynet als de HCC!Kadernet leden hebben allemaal een mailbox met Maildir structuur in /disk/mail/vmail/&amp;lt;domain&amp;gt;/&amp;lt;user&amp;gt;/Maildir/.&lt;br /&gt;
&lt;br /&gt;
===gen_mailbox===&lt;br /&gt;
Dit script maakt de &#039;&#039;&#039;hobbynet&#039;&#039;&#039; mailbox informatie aan. De passwords zijn afkomstig uit ldap op hcc-ldap-lb1. De mailbox naam was &#039;&#039;&#039;altijd&#039;&#039;&#039; &amp;lt;contact&amp;gt;@&amp;lt;systeem&amp;gt;.hobby.nl voor hobbynetleden. Het domein is altijd &#039;&#039;&#039;&amp;lt;systeem&amp;gt;.hobby.nl&#039;&#039;&#039;. Het &#039;&#039;&#039;type&#039;&#039;&#039; attribute in ldap wordt ook bewaard in de mailbox db tabel.&lt;br /&gt;
&lt;br /&gt;
===gen_mailbox2===&lt;br /&gt;
Dit script maakt de &#039;&#039;&#039;kadernet&#039;&#039;&#039; mailbox informatie aan. De mailbox naam is &#039;&#039;&#039;altijd&#039;&#039;&#039; &amp;lt;lidnummer&amp;gt;@kader.hcc.nl voor kaderleden. Het domein voor kaderleden is dus altijd &#039;&#039;&#039;kader.hcc.nl&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===gen_extra_mailbox===&lt;br /&gt;
Dit script maakt mailboxen aan die niet uit de andere bronnen te herleiden zijn. De mailboxen krijgen type 9.&lt;br /&gt;
&lt;br /&gt;
==Genereren van de aliases==&lt;br /&gt;
Email die op een domein op mail-dev wordt afgeleverd om direct weer verder gestuurd te worden heeft geen mailbox nodig. Voorbeeld hiervan is scouthout.nl. Alle email adressen expanderen via &#039;&#039;&#039;aliases&#039;&#039;&#039; naar een of meer externe adressen. Mail-dev fungeert hiervoor dus als mailrelay. Aliases zijn ook nodig voor functionele email adressen van kadernet functies zoals voorzitter, secretaris, enz. Ook zijn er adressen nodig voor grotere groepen ten bate van het kantoor zodat ze alle penningmeesters tegelijk kunnen mailen. De alias tabel wordt dus vrij groot. Er zijn weer meerdere kleine scripts die de tabellen vullen.&lt;br /&gt;
&lt;br /&gt;
===gen_alias===&lt;br /&gt;
Dit script genereert alle &#039;&#039;&#039;hobbynet&#039;&#039;&#039; aliases die uit hobbyabon.txt gemaakt kunnen worden. Voor de hobbynetleden wordt een alias gemaakt met de naam van de gebruiker in de &#039;&#039;&#039;alias&#039;&#039;&#039; tabel. Er komt dus een &#039;&#039;&#039;&amp;lt;contact&amp;gt;@&amp;lt;systeem&amp;gt;.hobby.nl&#039;&#039;&#039; die naar de mailbox &#039;&#039;&#039;&amp;lt;contact&amp;gt;@&amp;lt;systeem&amp;gt;.hobby.nl&#039;&#039;&#039; wijst. De &#039;&#039;&#039;alias&#039;&#039;&#039; tabel is zichtbaar in PostfixAdmin. De alias tabel kan beheerd worden met PostfixAdmin. Via phpmyadmin op dbadmin.hobby.nl kunnen natuurlijk alle tabellen in de database postfixadmin benaderd worden, mocht dit nodig zijn.&lt;br /&gt;
&lt;br /&gt;
===gen_fff_hobbynet_alias===&lt;br /&gt;
Dit script genereert de &#039;&#039;&#039;fff_hnet@hobby.nl&#039;&#039;&#039; alias door uit hobbyabon.txt het emailadres van leden met code 0,1,2,3 te halen.&lt;br /&gt;
&lt;br /&gt;
===gen_fff_www_alias===&lt;br /&gt;
Dit script genereert de &#039;&#039;&#039;fff_www@hobby.nl&#039;&#039;&#039; alias door uit hobbyabon.txt het emailadres te halen van dié leden die een website op een van de Hobbynet webservers hebben. Het is dus een subset van &#039;&#039;&#039;fff_hnet&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===gen_extra_alias===&lt;br /&gt;
Dit script leest &#039;&#039;&#039;extra_aliases.txt&#039;&#039;&#039; en genereert regels in de sql-loaderfile. Het betreft aliases die niet eenvoudig af te leiden zijn uit hobbyabon.txt en kaderfunc.txt.&lt;br /&gt;
&lt;br /&gt;
===gen_scouthout_alias===&lt;br /&gt;
Dit script leest &#039;&#039;&#039;scouthout_aliases.txt&#039;&#039;&#039; en genereert regels in de sql-loaderfile. Het betreft aliases die te maken hebben met scouthout.nl. Er is tevens een scriptje &#039;&#039;&#039;dump_scouthout_aliases&#039;&#039;&#039; dat scouthout_aliases.txt kan genereren uit de alias tabel. Dit kan nuttig zijn als er updates via PostfixAdmin zijn gedaan door de scouthout admin. &lt;br /&gt;
&lt;br /&gt;
===gen_alias2===&lt;br /&gt;
Dit script genereert alle &#039;&#039;&#039;kadernet&#039;&#039;&#039; aliases die uit kaderfunc.txt gemaakt kunnen worden. Voor de kaderleden waar het domain nog &#039;&#039;&#039;kader.hobby.nl&#039;&#039;&#039; is, wordt dat vervangen door &#039;&#039;&#039;kader.hcc.nl&#039;&#039;&#039;. Er wordt een alias gemaakt die naar de mailbox wijst (met het lidnummer uit kaderfunc.txt) en één met de HCC naam uit het in kaderfunc.txt opgenomen email adres. Er komt dus een &#039;&#039;&#039;1234567@kader.hcc.nl&#039;&#039;&#039; en een &#039;&#039;&#039;a.b.c.janssen@kader.hcc.nl&#039;&#039;&#039; die weer beide naar de mailbox &#039;&#039;&#039;1234567@kader.hcc.nl&#039;&#039;&#039; verwijzen. De alias tabel kan beheerd worden met PostfixAdmin. Via Phpmyadmin op dbadmin.hobby.nl kunnen natuurlijk ook alle tabellen in de database postfixadmin benaderd worden.&lt;br /&gt;
&lt;br /&gt;
===gen_func_alias===&lt;br /&gt;
Dit script genereert alle functionele aliases voor elke groepering. Het maakt aliases aan voor &#039;&#039;&#039;voorzitter@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039;, &#039;&#039;&#039;secretaris@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039; en &#039;&#039;&#039;penningmeester@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039;. Tevens wordt &#039;&#039;&#039;info@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039; gemaakt die ook naar secretaris@&amp;lt;groepering&amp;gt;.hcc.nl verwijst. De informatie wordt gehaald uit de kaderfunc.txt file.&lt;br /&gt;
&lt;br /&gt;
Om backwards compatible te zijn is ook voorzien in aliases voor &#039;voorz&#039;, &#039;secr&#039; en &#039;penm&#039; die verwijzen naar de lange naam. Uit praktische overweging worden hier ook de rfc mailboxen gemaakt. abuse@.. verwijst naar abuse@hobby.nl.&lt;br /&gt;
&lt;br /&gt;
===gen_best_alias===&lt;br /&gt;
Dit script genereert de &#039;&#039;&#039;bestuur&#039;&#039;&#039; alias voor elke groepering. Dus per groepering de voorzitter, secretaris, penningmeester en bestuursleden met als alias &#039;&#039;&#039;bestuur@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039;. De informatie wordt weer gehaald uit de &#039;&#039;&#039;kaderfunc.txt&#039;&#039;&#039; file. Sommige groeperingen zoals &#039;&#039;&#039;hobby-computer-club&#039;&#039;&#039; wordt overgeslagen. Er is geen &#039;&#039;&#039;bestuur@hobby-computer-club.hcc.nl&#039;&#039;&#039;...&lt;br /&gt;
&lt;br /&gt;
===gen_webm_alias===&lt;br /&gt;
Voor de webmasters is een apart script gemaakt omdat er een variabel aantal webmasters per groepering kan zijn. Bron bestand is weer kaderfunc.txt. Dit script genereert de &#039;&#039;&#039;webmaster@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039; alias die een variabel aantal target mailboxen kent. Ook wordt altijd de secretaris toegevoegd. In het geval dat er helemaal géén webmaster is aangemeld komt de mail dus tenminste in de mailbox van de secretaris &#039;&#039;(is dit nog zo?)&#039;&#039;. Bron bestand is natuurlijk weer kaderfunc.txt.&lt;br /&gt;
&lt;br /&gt;
===gen_kernl_alias===&lt;br /&gt;
Voor de kernleden is een apart script gemaakt omdat er een variabel aantal kernleden per groepering kan zijn. Bron bestand is weer kaderfunc.txt. Dit script genereert de &#039;&#039;&#039;kernleden@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039; alias die een variabel aantal target mailboxen kent.&lt;br /&gt;
&lt;br /&gt;
===gen_kadernet_alias===&lt;br /&gt;
Dit script leest kadernet_aliases.txt en genereert de SQL regels voor speciale kadernet aliases die niet uit kaderfunc.txt gemaakt kunnen worden.&lt;br /&gt;
&lt;br /&gt;
===gen_ig_&amp;lt;func&amp;gt;_alias===&lt;br /&gt;
Deze scripts genereren een alias die alle voorzitters, secretarissen, penningmeesters, webmasters, gewone bestuursleden en kernleden van interessegroepen (vroeger gebruikersgroep) als target hebben. Deze aliasen worden zelden gebruikt, maar voorzien erin om alle penningmeesters uit te nodigen voor een penm. overleg. De script zijn nagenoeg identiek. Zoals altijd zijn de target adressen mailboxen (herkenbaar aan het lidnummer). Bron bestand is kaderfunc.txt.&amp;lt;br&amp;gt;&lt;br /&gt;
Op verzoek van het Kantoor worden enkele key-personen in de alias gezet. Deze personen dienen in de alias &#039;&#039;&#039;kantoor@kader.hcc.nl&#039;&#039;&#039; (in extra_aliases.txt) gezet te worden om in de &#039;&#039;&#039;ig_&#039;&#039;&#039; alias te komen.&lt;br /&gt;
&lt;br /&gt;
===gen_regio_&amp;lt;func&amp;gt;_alias===&lt;br /&gt;
Deze scripts genereren een alias die alle voorzitters, secretarissen, penningmeesters, webmasters, gewone bestuursleden en kernleden van regio&#039;s (vroeger afdeling) als target hebben. Deze aliasen worden zelden gebruikt, maar voorzien erin om alle penningmeesters uit te nodigen voor een penm. overleg. De script zijn nagenoeg identiek. Zoals altijd zijn de target adressen mailboxen (herkenbaar aan het lidnummer). Bron bestand is kaderfunc.txt.&amp;lt;br&amp;gt;&lt;br /&gt;
Op verzoek van het Kantoor worden enkele key-personen in de alias gezet. Deze personen dienen in de alias &#039;&#039;&#039;kantoor@kader.hcc.nl&#039;&#039;&#039; (in extra_aliases.txt) gezet te worden om in de &#039;&#039;&#039;regio_&#039;&#039;&#039; alias te komen. Deze aliases zijn weer gecombineerd tot grotere groepen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Alle voorz, secr, penm, enz van ig&#039;s:&lt;br /&gt;
ig_voorz@kader.hcc.nl &lt;br /&gt;
ig_secr@kader.hcc.nl&lt;br /&gt;
ig_penm@kader.hcc.nl&lt;br /&gt;
ig_bestl@kader.hcc.nl&lt;br /&gt;
ig_kernl@kader.hcc.nl&lt;br /&gt;
ig_webm@kader.hcc.nl&lt;br /&gt;
&lt;br /&gt;
Alle voorz, secr, penm, enz van regio&#039;s&lt;br /&gt;
regio_voorz@kader.hcc.nl&lt;br /&gt;
regio_secr@kader.hcc.nl&lt;br /&gt;
regio_penm@kader.hcc.nl&lt;br /&gt;
regio_bestl@kader.hcc.nl&lt;br /&gt;
regio_kernl@kader.hcc.nl&lt;br /&gt;
regio_webm@kader.hcc.nl&lt;br /&gt;
&lt;br /&gt;
Alle voorzitters, secr, enz:&lt;br /&gt;
fff_voorz@kader.hcc.nl (ig_voorz@kader.hcc.nl en regio_voorz@kader.hcc.nl samen)&lt;br /&gt;
fff_secr@kader.hcc.nl (alle secretarissen)&lt;br /&gt;
fff_penm@kader.hcc.nl&lt;br /&gt;
fff_bestl@kader.hcc.nl&lt;br /&gt;
fff_kernl@kader.hcc.nl&lt;br /&gt;
fff_webm@kader.hcc.nl&lt;br /&gt;
&lt;br /&gt;
Alle bestuursleden van resp. ig&#039;s en regio&#039;s: &lt;br /&gt;
fff_ig_bestuur@kader.hcc.nl (ig_voorz, ig_secr, ig_penm en ig_bestl@kader.hcc.nl samen)&lt;br /&gt;
fff_regio_bestuur@kader.hcc.nl (regio_voorz, regio_secr, regio_penm en regio_bestl@kader.hcc.nl samen)&lt;br /&gt;
&lt;br /&gt;
Alle bestuursleden:&lt;br /&gt;
fff_bestuur@kader.hcc.nl (de 4 ig_&amp;lt;func&amp;gt; en de 4 regio_&amp;lt;func&amp;gt; samen)&lt;br /&gt;
 &lt;br /&gt;
Alle kaderleden:&lt;br /&gt;
fff_kader@kader.hcc.nl (ALLE kaderleden samen, dus besturen maar nu ook met de kernleden en webmasters)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===gen_sr_presentatoren en gen_sr_regio_coordinatoren_alias===&lt;br /&gt;
Deze twee scripts genereren de aliases voor de regio_coordinatoren en presentatoren van de SeniorenAcademie (SR). Voor deze functionarissen is een virtuele IG gemaakt (SR-Ambassadeurs) omdat niet alle functionarissen lid zijn van SR. Indelen bij de regio was een optie maar dan liggen er problemen op de loer met verhuizingen.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;PAS OP&#039;&#039;&#039;: deze scripts bevatten hard gecodeerde waarden!&lt;br /&gt;
&lt;br /&gt;
===gen_fff_kadernet_alias===&lt;br /&gt;
Dit script genereert de &#039;&#039;&#039;fff_kader@kader.hcc.nl&#039;&#039;&#039;. Hiervoor wordt kaderfunc.txt gebruikt (code 5).&amp;lt;br&amp;gt;&lt;br /&gt;
Op verzoek van het Kantoor worden enkele kantoor functies in de alias gezet. Deze personen dienen in de alias &#039;&#039;&#039;kantoor@kader.hcc.nl&#039;&#039;&#039; (in extra_aliases.txt) gezet te worden om in de &#039;&#039;&#039;fff_&#039;&#039;&#039; aliases te komen.&lt;br /&gt;
&lt;br /&gt;
==Genereren van de domains==&lt;br /&gt;
Postfix kan de email voor vele domeinen afhandelen. Om ongewenst relayeren (spam!) te voorkomen moeten de domeinen van de geadresseerden gecheckt kunnen worden. &lt;br /&gt;
&lt;br /&gt;
===gen_domain===&lt;br /&gt;
Dit script genereert de hobbynet domeinen voor de domeinen in hobbyabon.txt voor de tabel &#039;&#039;&#039;domain&#039;&#039;&#039;. Ook hier geldt weer dat de &#039;&#039;&#039;domain&#039;&#039;&#039; tabel beheerbaar is in PostfixAdmin.&lt;br /&gt;
&lt;br /&gt;
===gen_all_domain===&lt;br /&gt;
Het bronbestand voor gen_all_domain is &#039;&#039;&#039;all_domains.txt&#039;&#039;&#039;. Het script &#039;&#039;&#039;gen_all_domain&#039;&#039;&#039; voegt records toe aan de domain tabel die betrekking hebben op alle beheerde domeinen. Dit zijn b.v. hccm.nl en hcc-watersport.nl maar weer NIET modelbaan-gg.hcc.nl. Die laatste wordt door gen_domain2 aangemaakt.&lt;br /&gt;
&lt;br /&gt;
===gen_domain2===&lt;br /&gt;
Dit script genereert de kadernet domeinen. Voor kadernet wordt &#039;&#039;&#039;kader.hobby.nl&#039;&#039;&#039; vervangen door &#039;&#039;&#039;kader.hcc.nl&#039;&#039;&#039;. Ook hier geldt weer dat de &#039;&#039;&#039;domain&#039;&#039;&#039; tabel beheerbaar is in PostfixAdmin. Er worden domeinen gemaakt zonder de &#039;&#039;&#039;afd-&#039;&#039;&#039; of &#039;&#039;&#039;-gg&#039;&#039;&#039; en met &#039;&#039;&#039;regio-&#039;&#039;&#039; i.p.v. &#039;&#039;&#039;afd-&#039;&#039;&#039; en &#039;&#039;&#039;-ig&#039;&#039;&#039; i.p.v. &#039;&#039;&#039;-gg&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Genereren van de alias-domains==&lt;br /&gt;
Postfix kent een z.g. alias_domain. Dit is een domeinnaam die een alias is voor een andere domeinnaam. Alle email adressen in het originele domein komen 1 op 1 voor in het alias domein.&lt;br /&gt;
 &lt;br /&gt;
===gen_extra_alias_domain===&lt;br /&gt;
Dit script leest &#039;&#039;&#039;extra_alias_domains.txt&#039;&#039;&#039; en genereert SQL regels voor de tabel alias_domain&lt;br /&gt;
&lt;br /&gt;
De layout van de tekst file is simpel: alias_domain, target_domain. Voorbeeld:&lt;br /&gt;
 # list of alias_domains&lt;br /&gt;
 # mirror.tld,target.tld&lt;br /&gt;
 #&lt;br /&gt;
 hccm.nl:modelbaan-gg.hcc.nl&lt;br /&gt;
 hcc-modelbaan.nl:modelbaan-gg.hcc.nl&lt;br /&gt;
 hcc-games.nl:games-gg.hcc.nl&lt;br /&gt;
 hcc-clan.nl:games-gg.hcc.nl&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Opm&#039;&#039;&#039;: De automatisch gegenereerde HCC domeinnamen (ontstaan door -gg/afd-/cg- weg te laten) mogen dus NIET in de platte tekst file staan.&lt;br /&gt;
&lt;br /&gt;
===gen_alias_domain2===&lt;br /&gt;
Dit script genereert alle HCC afdeling en ig domeinen maar dan zonder de &#039;&#039;&#039;afd-&#039;&#039;&#039; prefix en &#039;&#039;&#039;-gg&#039;&#039;&#039; suffix. Input is kaderfunc.txt.&lt;br /&gt;
&lt;br /&gt;
==Systemusers==&lt;br /&gt;
Het upd_smail script genereert tevens een soor virtualusers bestand voor Roundcube. Om de kaderleden in staat te stellen met slechts hun lidnummer in te loggen op webmail is er een default domein &#039;&#039;&#039;kader.hcc.nl&#039;&#039;&#039; gedefinieerd. Als iemand zonder domein inlogt, wordt &#039;&#039;&#039;@kader.hcc.nl&#039;&#039;&#039; toegevoegd. Door fake entries op te nemen met &amp;lt;systeemuser&amp;gt;@kader.hcc.nl en een alias &#039;&#039;&#039;zonder &#039;&#039;&#039; domein kunnen die toch inloggen op het webinterface. De laatste groep zijn de hobbynet users die vanouds met S&amp;lt;systeem&amp;gt; konden inloggen. Voor hen wordt ook een fake entry gemaakt met S&amp;lt;systeem&amp;gt;@kader.hcc.nl met als alias het opgegeven email adres. Voor dit email adres is eerder een mailbox aangemaakt.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
De beschreven faciliteit bestaat alleen voor het Roundcube web email interface. Pop3 en imap clients moeten, behalve voor systeemusers, altijd een domein meegeven!&lt;br /&gt;
&lt;br /&gt;
==Extra scripts==&lt;br /&gt;
L8er...&lt;br /&gt;
&lt;br /&gt;
Terug naar [[EMAIL]]&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
	<entry>
		<id>https://wiki.hobby.nl/index.php?title=Uitleg_scripts&amp;diff=78362</id>
		<title>Uitleg scripts</title>
		<link rel="alternate" type="text/html" href="https://wiki.hobby.nl/index.php?title=Uitleg_scripts&amp;diff=78362"/>
		<updated>2020-04-18T09:41:23Z</updated>

		<summary type="html">&lt;p&gt;Egbert: /* gen_mailbox */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introductie==&lt;br /&gt;
De scripting is er op gericht een aantal tabellen te vullen in de postfixadmin database. De tabellen zijn in eerste instantie helemaal standaard gehouden zoals postfixadmin ze aanmaakt bij de installatie. Postfixadmin kan worden gebruikt om veranderingen in de data aan te brengen. Later zijn enkele velden toegevoegd voor het specifieke gebruik binnen Hobbynet. Voornamelijk om het creëren van tekst bestanden als bron bestanden aan te maken.&lt;br /&gt;
&lt;br /&gt;
===Proces===&lt;br /&gt;
Het hele proces is gericht op het behoud van (mogelijk gewijzigde) data. In de aanloop fase werden de platte tekst bestanden met de hand bijgehouden waarna de database tabellen gegenereerd werden. In de test fase werden de uit de database gemaakte tekst bestanden vergeleken met de originele bestanden. In de productie fase zijn er geen originele tekst bestanden meer; de vorige versie wordt veilig gesteld en daarna vervangen door de verse dump uit de database. Op die wijze worden nieuwe records meegenomen die met PostfixAdmin in de database zijn gemaakt. De laatst bekende data in de database wordt namelijk eerst gedumpt naar tekst bestanden, die vervolgens weer worden gebruikt om de database te laden. De externe bestanden hobbyabon.txt (was husers) en kaderfunc.txt (was b3a.txt) zijn hier een uitzondering op; die worden nooit overschreven maar door het script &#039;&#039;&#039;upd_mailserver&#039;&#039;&#039; op de LDAP server geplaatst. &#039;&#039;&#039;upd_smail&#039;&#039;&#039; op de mailserver doet de rest.&amp;lt;br&amp;gt;&lt;br /&gt;
Zie ook de pagina [[bronbestanden]].&lt;br /&gt;
&lt;br /&gt;
===Locatie van de bestanden===&lt;br /&gt;
De bron bestanden: &#039;&#039;&#039;kaderfunc.txt&#039;&#039;&#039;, &#039;&#039;&#039;hobbyabon.txt&#039;&#039;&#039; staan in de data directory (via scp van hcc-ldap-lb1 afkomstig), &#039;&#039;&#039;extra_alias_domains.txt&#039;&#039;&#039;, &#039;&#039;&#039;extra_aliases.txt&#039;&#039;&#039;, &#039;&#039;&#039;scouthout_aliases.txt&#039;&#039;&#039; en de &#039;&#039;&#039;_header/_footer&#039;&#039;&#039; bestanden (.tmpl) staan ook in &#039;&#039;&#039;/usr/local/hobbynet/data&#039;&#039;&#039; directory.&lt;br /&gt;
&lt;br /&gt;
De scripts staan in &#039;&#039;&#039;/usr/local/hobbynet/local&#039;&#039;&#039;. De backups van de database en tekst bestanden komen in &#039;&#039;&#039;/usr/local/hobbynet/data/backup&#039;&#039;&#039; terecht. De door de scripts gegenereerde MySQL bestanden komen in &#039;&#039;&#039;/usr/local/hobbynet/data/loader&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
De bestanden in de backup directory moeten geregeld opgeruimd worden; er zit geen limiet op het aantal versies. In de backup directory staat ook een script om een versie van een bepaalde datum/tijd snel terug te zetten waarna &#039;&#039;&#039;upd_smail&#039;&#039;&#039; de database herlaadt.&lt;br /&gt;
&lt;br /&gt;
===Scripts===&lt;br /&gt;
De (perl) scripts zijn bewust kort en simpel gehouden om ze zo modulair mogelijk te maken. De tactiek is telkens hetzelfde: bij elk te maken SQL loader bestand is er een header, tussenliggende gelijksoortige data regels en een footer te onderscheiden.&lt;br /&gt;
* De header is alle tekst die door een MySQL dump gemaakt wordt (met een delete-if-exists erin), tot en met de eerste SQL regel: INSERT INTO...VALUES.&lt;br /&gt;
* De diverse scripts voegen de tussenliggende data regels toe.&lt;br /&gt;
* De footer is gewoonlijk een laatste data regel maar dan eindigend op &#039;&#039;&#039;;&#039;&#039;&#039; in plaats van &#039;&#039;&#039;,&#039;&#039;&#039; en de afsluitende regels van de dump.&lt;br /&gt;
Een dergelijk SQL loader bestand is zonder meer terug te laden in MySQL. De tabel wordt eerst weggegooid en wordt daarna opnieuw aangemaakt.&lt;br /&gt;
&lt;br /&gt;
==upd_smail==&lt;br /&gt;
Dit script is het overkoepelende script dat alle &#039;&#039;&#039;dump_*&#039;&#039;&#039; en &#039;&#039;&#039;gen_*&#039;&#039;&#039; scripts uitvoert en mysql aanroept om de database te laden. &#039;&#039;&#039;upd_smail&#039;&#039;&#039; op zijn beurt wordt weer door &#039;&#039;&#039;upd_all&#039;&#039;&#039; aangeroepen. In dit &#039;&#039;&#039;upd_smail&#039;&#039;&#039; script worden vóórdat de tabellen vanaf scratch worden opgebouwd, de 4 tabellen veilig gesteld in een backup directory. Tevens worden tekst bestanden aangemaakt van die delen van de database die met de hand veranderd kunnen zijn. Het uitgangspunt is hier dat de database de echte waarheid is en de bronbestanden achter kunnen lopen. &lt;br /&gt;
&lt;br /&gt;
Het &#039;&#039;&#039;all_domains.txt&#039;&#039;&#039; bestand bevat de domeinen waar HCC voor betaalt aan SIDN. Ook de benodigde speciale subdomeinen staan in het all_domains.txt bestand. &lt;br /&gt;
&lt;br /&gt;
Per tabel worden de SQL header files samengevoegd met de output van de verschillende gen_* scripts. Tenslotte wordt een SQL footer toegevoegd, vaak alleen om de SQL te beëindigen met een &#039;&#039;&#039;;&#039;&#039;&#039;. Daarna wordt de tabel in MySQL aangemaakt en de data geladen. De &lt;br /&gt;
tabellen worden dus in z&#039;n geheel vervangen. Als laatste wordt een soort van &#039;&#039;&#039;virtalias&#039;&#039;&#039; bestand voor Roundcube gemaakt. Hieronder de complete &#039;&#039;&#039;upd_smail&#039;&#039;&#039; (slechts als referentie, kijk altijd naar het script op de server zelf):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
# $Id: /usr/local/hobbynet/bin/upd_smail $&lt;br /&gt;
#&lt;br /&gt;
# Driver voor alle subtaken dump... en gen....&lt;br /&gt;
#&lt;br /&gt;
# usage: ./upd_smail&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
CHOWN=/bin/chown&lt;br /&gt;
CHMOD=/bin/chmod&lt;br /&gt;
&lt;br /&gt;
HNET=/usr/local/hobbynet&lt;br /&gt;
HNET_BIN=$HNET/bin&lt;br /&gt;
HNET_LIB=$HNET/lib&lt;br /&gt;
HNET_BCK=$HNET/lib/backup&lt;br /&gt;
HNET_LDR=$HNET/lib/loader&lt;br /&gt;
&lt;br /&gt;
ID=$(date +&amp;quot;%Y%m%d-%H%M%S&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cd $HNET_LIB&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# save all 4 tables with unique name&lt;br /&gt;
#&lt;br /&gt;
mysqldump -u postfixadmin -ppassword -c postfixadmin mailbox &amp;gt;$HNET_BCK/mailbox_$ID.sql&lt;br /&gt;
mysqldump -u postfixadmin -ppassword -c postfixadmin alias &amp;gt;$HNET_BCK/alias_$ID.sql&lt;br /&gt;
mysqldump -u postfixadmin -ppassword -c postfixadmin domain &amp;gt;$HNET_BCK/domain_$ID.sql&lt;br /&gt;
mysqldump -u postfixadmin -ppassword -c postfixadmin alias_domain &amp;gt;$HNET_BCK/alias_domain_$ID.sql&lt;br /&gt;
#&lt;br /&gt;
# save extra mailboxes&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Saving extra mailboxess...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/extra_mailboxes.txt $HNET_BCK/extra_mailboxes_$ID.txt&lt;br /&gt;
$HNET_BIN/dump_extra_mailboxes | sort &amp;gt;$HNET_LIB/extra_mailboxes.txt&lt;br /&gt;
#&lt;br /&gt;
# save scouthout aliases&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Saving scouthout aliases...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/scouthout_aliases.txt $HNET_BCK/scouthout_aliases_$ID.txt&lt;br /&gt;
$HNET_BIN/dump_scouthout_aliases | sort &amp;gt;$HNET_LIB/scouthout_aliases.txt&lt;br /&gt;
#&lt;br /&gt;
# save new and extra aliases&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Saving new and extra aliases...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/extra_aliases.txt $HNET_BCK/extra_aliases_$ID.txt&lt;br /&gt;
$HNET_BIN/dump_extra_aliases | sort &amp;gt;$HNET_LIB/extra_aliases.txt&lt;br /&gt;
#&lt;br /&gt;
# save hcc and other domains&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Saving hcc and other domains...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/all_domains.txt $HNET_BCK/all_domains_$ID.txt&lt;br /&gt;
$HNET_BIN/dump_all_domains | sort &amp;gt;$HNET_LIB/all_domains.txt&lt;br /&gt;
#&lt;br /&gt;
# save new and extra domain_aliases&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Saving new and extra domain_aliases...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/extra_alias_domains.txt $HNET_BCK/extra_alias_domains_$ID.txt&lt;br /&gt;
$HNET_BIN/dump_extra_alias_domains | sort &amp;gt;$HNET_LIB/extra_alias_domains.txt&lt;br /&gt;
#&lt;br /&gt;
# prepare emergency backup procedure (here-doecument)&lt;br /&gt;
#&lt;br /&gt;
cat &amp;gt; $HNET_BCK/restore_$ID &amp;lt;&amp;lt;END&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
mysql -u postfixadmin -ppassword -c postfixadmin &amp;lt;$HNET_BCK/mailbox_$ID.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword -c postfixadmin &amp;lt;$HNET_BCK/alias_$ID.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword -c postfixadmin &amp;lt;$HNET_BCK/domain_$ID.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword -c postfixadmin &amp;lt;$HNET_BCK/alias_domain_$ID.sql&lt;br /&gt;
cp $HNET_BCK/extra_mailboxes_$ID.txt $HNET_LIB/extra_mailboxes.txt&lt;br /&gt;
cp $HNET_BCK/scouthout_aliases_$ID.txt $HNET_LIB/scouthout_aliases.txt&lt;br /&gt;
cp $HNET_BCK/extra_aliases_$ID.txt $HNET_LIB/extra_aliases.txt&lt;br /&gt;
cp $HNET_BCK/all_domains_$ID.txt $HNET_LIB/all_domains.txt&lt;br /&gt;
cp $HNET_BCK/extra_alias_domains_$ID.txt $HNET_LIB/extra_alias_domains.txt&lt;br /&gt;
END&lt;br /&gt;
chmod 755 $HNET_BCK/restore_$ID&lt;br /&gt;
#&lt;br /&gt;
# build all 4 tables from input files&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Building mailbox table for Hobbynet/Kadernet...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/mailbox_header.tmpl $HNET_LDR/mailbox.sql&lt;br /&gt;
$HNET_BIN/gen_mailbox &amp;gt;&amp;gt; $HNET_LDR/mailbox.sql&lt;br /&gt;
$HNET_BIN/gen_mailbox2 | sort | uniq &amp;gt;&amp;gt; $HNET_LDR/mailbox.sql&lt;br /&gt;
$HNET_BIN/gen_extra_mailbox &amp;gt;&amp;gt; $HNET_LDR/mailbox.sql&lt;br /&gt;
cat $HNET_LIB/mailbox_footer.tmpl &amp;gt;&amp;gt; $HNET_LDR/mailbox.sql&lt;br /&gt;
$CHMOD 644 $HNET_LDR/mailbox.sql&lt;br /&gt;
$CHOWN root:root $HNET_LDR/mailbox.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword postfixadmin &amp;lt;$HNET_LDR/mailbox.sql&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Building alias table for Hobbynet/Kadernet...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/alias_header.tmpl $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_fff_hobbynet_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_fff_www_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_extra_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_scouthout_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_alias2 | sort | uniq &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_func_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_best_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_webm_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_kernl_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_group_alias | sort | uniq &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_voorz_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_kernl_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_secr_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_penm_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_webm_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ig_bestl_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_voorz_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_kernl_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_secr_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_penm_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_webm_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_regio_bestl_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$HNET_BIN/gen_ledenraad_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
# use temporary file with unique mail addresses&lt;br /&gt;
cut --delimiter=&amp;quot;,&amp;quot; --field=4 $HNET_LIB/kaderfunc.txt | sort | uniq &amp;gt; $HNET_LIB/kaderfunc-sorted.txt&lt;br /&gt;
$HNET_BIN/gen_fff_kadernet_alias &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
rm $HNET_LIB/kaderfunc-sorted.txt&lt;br /&gt;
#&lt;br /&gt;
cat $HNET_LIB/alias_footer.tmpl &amp;gt;&amp;gt; $HNET_LDR/alias.sql&lt;br /&gt;
$CHMOD 644 $HNET_LDR/alias.sql&lt;br /&gt;
$CHOWN root:root $HNET_LDR/alias.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword -c postfixadmin &amp;lt;$HNET_LDR/alias.sql&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Building domain table for Hobbynet/Kadernet...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/domain_header.tmpl $HNET_LDR/domain.sql&lt;br /&gt;
$HNET_BIN/gen_domain &amp;gt;&amp;gt; $HNET_LDR/domain.sql&lt;br /&gt;
$HNET_BIN/gen_all_domain &amp;gt;&amp;gt; $HNET_LDR/domain.sql&lt;br /&gt;
$HNET_BIN/gen_domain2 &amp;gt;&amp;gt; $HNET_LDR/domain.sql&lt;br /&gt;
cat $HNET_LIB/domain_footer.tmpl &amp;gt;&amp;gt; $HNET_LDR/domain.sql&lt;br /&gt;
$CHMOD 644 $HNET_LDR/domain.sql&lt;br /&gt;
$CHOWN root:root $HNET_LDR/domain.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword postfixadmin &amp;lt;$HNET_LDR/domain.sql&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Building alias_domain table for Hobbynet/Kadernet...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/alias_domain_header.tmpl $HNET_LDR/alias_domain.sql&lt;br /&gt;
$HNET_BIN/gen_extra_alias_domain &amp;gt;&amp;gt; $HNET_LDR/alias_domain.sql&lt;br /&gt;
$HNET_BIN/gen_alias_domain2 &amp;gt;&amp;gt; $HNET_LDR/alias_domain.sql&lt;br /&gt;
cat $HNET_LIB/alias_domain_footer.tmpl &amp;gt;&amp;gt; $HNET_LDR/alias_domain.sql&lt;br /&gt;
$CHMOD 644 $HNET_LDR/alias_domain.sql&lt;br /&gt;
$CHOWN root:root $HNET_LDR/alias_domain.sql&lt;br /&gt;
mysql -u postfixadmin -ppassword postfixadmin &amp;lt;$HNET_LDR/alias_domain.sql&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;&amp;quot;&lt;br /&gt;
echo &amp;quot;Building systemusers for Roundcube...&amp;quot;&lt;br /&gt;
cp $HNET_LIB/systemusers.tmpl $HNET_LIB/systemusers&lt;br /&gt;
$HNET_BIN/gen_systemusers &amp;gt;&amp;gt; $HNET_LIB/systemusers&lt;br /&gt;
$CHMOD 644 $HNET_LIB/systemusers&lt;br /&gt;
$CHOWN root:root $HNET_LIB/systemusers&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;&amp;quot;&lt;br /&gt;
echo &amp;quot;Dumping transport for mail-dev...&amp;quot;&lt;br /&gt;
$HNET_BIN/dump_transport &amp;gt;$HNET_LIB/transport&lt;br /&gt;
cp /etc/postfix/transport /etc/postfix/transport.old&lt;br /&gt;
cp $HNET_LIB/transport /etc/postfix/transport&lt;br /&gt;
postmap /etc/postfix/transport&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Dumping relay_recipients for mail-dev...&amp;quot;&lt;br /&gt;
$HNET_BIN/dump_relay_recipients &amp;gt;$HNET_LIB/relay_recipients&lt;br /&gt;
cp /etc/postfix/relay_recipients /etc/postfix/relay_recipients.old&lt;br /&gt;
cp $HNET_LIB/relay_recipients /etc/postfix/relay_recipients&lt;br /&gt;
postmap /etc/postfix/relay_recipients&lt;br /&gt;
#&lt;br /&gt;
echo &amp;quot;Dumping relay_domains for mail2...&amp;quot;&lt;br /&gt;
$HNET_BIN/dump_mail2_domains &amp;gt;$HNET_LIB/relay_domains&lt;br /&gt;
#&lt;br /&gt;
# EOF&lt;br /&gt;
#&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conversie van data naar tekst bestanden==&lt;br /&gt;
Wat ooit gestart is al met de hand beheerde tekst bestanden, is vervangen door bestanden gemaakt uit de PFA database. Omdat alle updates m.b.v. PFA gemaakt worden, zijn die gegevens nieuwer. Door die eerst te dumpen en daarna weer te gebruiken als bron bestand blijven wijzigingen bewaard.&lt;br /&gt;
===dump_all_domains===&lt;br /&gt;
Maakt een tekst bestand in &#039;&#039;&#039;all_domains.txt&#039;&#039;&#039; van de alle domeinen in de domain tabel.&lt;br /&gt;
===dump_extra_alias_domains===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;extra_alias_domains.txt&#039;&#039;&#039; uit de &#039;&#039;&#039;alias_domain&#039;&#039;&#039; tabel.&lt;br /&gt;
===dump_extra_aliases===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;extra_aliases.txt&#039;&#039;&#039; uit de &#039;&#039;&#039;alias&#039;&#039;&#039; tabel.&lt;br /&gt;
===dump_extra_mailboxes===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;extra_mailboxes.txt&#039;&#039;&#039; uit de &#039;&#039;&#039;mailbox&#039;&#039;&#039; tabel.&lt;br /&gt;
===dump_mail2_domains===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;relay_domains&#039;&#039;&#039; uit de &#039;&#039;&#039;domain&#039;&#039;&#039; tabel voor gebruik op &#039;&#039;&#039;mail2&#039;&#039;&#039;.&lt;br /&gt;
===dump_relay_recipients===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;relay_recipients&#039;&#039;&#039; aan voor Postfix. Dit bestand moet naar /etc/postfix op mail-dev gekopieerd worden en er moet een postmap op uitgevoerd worden.&lt;br /&gt;
===dump_scouthout_aliases===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;scouthout_aliases.txt&#039;&#039;&#039; uit de &#039;&#039;&#039;alias&#039;&#039;&#039; tabel.&lt;br /&gt;
===dump_transport===&lt;br /&gt;
Maakt een tekst bestand &#039;&#039;&#039;transport&#039;&#039;&#039; aan voor Postfix. Dit bestand moet naar /etc/postfix gekopieerd worden en er moet een postmap op uitgevoerd worden.&lt;br /&gt;
&lt;br /&gt;
==Genereren van de mailboxen==&lt;br /&gt;
Alle (ook virtuele) gebruikers waarvoor mail-dev eindstation is voor email, hebben een home directory en een mailbox in een mail directory op dit systeem. Zowel HCC!Hobbynet als de HCC!Kadernet leden hebben allemaal een mailbox met Maildir structuur in /disk/mail/vmail/&amp;lt;domain&amp;gt;/&amp;lt;user&amp;gt;/Maildir/.&lt;br /&gt;
&lt;br /&gt;
===gen_mailbox===&lt;br /&gt;
Dit script maakt de &#039;&#039;&#039;hobbynet&#039;&#039;&#039; mailbox informatie aan. De passwords zijn afkomstig uit ldap op hcc-ldap-lb1. De mailbox naam was &#039;&#039;&#039;altijd&#039;&#039;&#039; &amp;lt;contact&amp;gt;@&amp;lt;systeem&amp;gt;.hobby.nl voor hobbynetleden. Het domein is altijd &#039;&#039;&#039;&amp;lt;systeem&amp;gt;.hobby.nl&#039;&#039;&#039;. Het &#039;&#039;&#039;type&#039;&#039;&#039; attribute in ldap wordt ook bewaard in de mailbox db tabel.&lt;br /&gt;
&lt;br /&gt;
Om het mogelijk te maken alle Hobbynet mail ergens anders af te leveren is de scripting aangepast (vbs20200416). Het mail veld in ou=users bepaald of er een mailbox wordt gemaakt os dat er forwarding wordt gedaan.&lt;br /&gt;
&lt;br /&gt;
===gen_mailbox2===&lt;br /&gt;
Dit script maakt de &#039;&#039;&#039;kadernet&#039;&#039;&#039; mailbox informatie aan. De mailbox naam is &#039;&#039;&#039;altijd&#039;&#039;&#039; &amp;lt;lidnummer&amp;gt;@kader.hcc.nl voor kaderleden. Het domein voor kaderleden is dus altijd &#039;&#039;&#039;kader.hcc.nl&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===gen_extra_mailbox===&lt;br /&gt;
Dit script maakt mailboxen aan die niet uit de andere bronnen te herleiden zijn. De mailboxen krijgen type 9.&lt;br /&gt;
&lt;br /&gt;
==Genereren van de aliases==&lt;br /&gt;
Email die op een domein op mail-dev wordt afgeleverd om direct weer verder gestuurd te worden heeft geen mailbox nodig. Voorbeeld hiervan is scouthout.nl. Alle email adressen expanderen via &#039;&#039;&#039;aliases&#039;&#039;&#039; naar een of meer externe adressen. Mail-dev fungeert hiervoor dus als mailrelay. Aliases zijn ook nodig voor functionele email adressen van kadernet functies zoals voorzitter, secretaris, enz. Ook zijn er adressen nodig voor grotere groepen ten bate van het kantoor zodat ze alle penningmeesters tegelijk kunnen mailen. De alias tabel wordt dus vrij groot. Er zijn weer meerdere kleine scripts die de tabellen vullen.&lt;br /&gt;
&lt;br /&gt;
===gen_alias===&lt;br /&gt;
Dit script genereert alle &#039;&#039;&#039;hobbynet&#039;&#039;&#039; aliases die uit hobbyabon.txt gemaakt kunnen worden. Voor de hobbynetleden wordt een alias gemaakt met de naam van de gebruiker in de &#039;&#039;&#039;alias&#039;&#039;&#039; tabel. Er komt dus een &#039;&#039;&#039;&amp;lt;contact&amp;gt;@&amp;lt;systeem&amp;gt;.hobby.nl&#039;&#039;&#039; die naar de mailbox &#039;&#039;&#039;&amp;lt;contact&amp;gt;@&amp;lt;systeem&amp;gt;.hobby.nl&#039;&#039;&#039; wijst. De &#039;&#039;&#039;alias&#039;&#039;&#039; tabel is zichtbaar in PostfixAdmin. De alias tabel kan beheerd worden met PostfixAdmin. Via phpmyadmin op dbadmin.hobby.nl kunnen natuurlijk alle tabellen in de database postfixadmin benaderd worden, mocht dit nodig zijn.&lt;br /&gt;
&lt;br /&gt;
===gen_fff_hobbynet_alias===&lt;br /&gt;
Dit script genereert de &#039;&#039;&#039;fff_hnet@hobby.nl&#039;&#039;&#039; alias door uit hobbyabon.txt het emailadres van leden met code 0,1,2,3 te halen.&lt;br /&gt;
&lt;br /&gt;
===gen_fff_www_alias===&lt;br /&gt;
Dit script genereert de &#039;&#039;&#039;fff_www@hobby.nl&#039;&#039;&#039; alias door uit hobbyabon.txt het emailadres te halen van dié leden die een website op een van de Hobbynet webservers hebben. Het is dus een subset van &#039;&#039;&#039;fff_hnet&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===gen_extra_alias===&lt;br /&gt;
Dit script leest &#039;&#039;&#039;extra_aliases.txt&#039;&#039;&#039; en genereert regels in de sql-loaderfile. Het betreft aliases die niet eenvoudig af te leiden zijn uit hobbyabon.txt en kaderfunc.txt.&lt;br /&gt;
&lt;br /&gt;
===gen_scouthout_alias===&lt;br /&gt;
Dit script leest &#039;&#039;&#039;scouthout_aliases.txt&#039;&#039;&#039; en genereert regels in de sql-loaderfile. Het betreft aliases die te maken hebben met scouthout.nl. Er is tevens een scriptje &#039;&#039;&#039;dump_scouthout_aliases&#039;&#039;&#039; dat scouthout_aliases.txt kan genereren uit de alias tabel. Dit kan nuttig zijn als er updates via PostfixAdmin zijn gedaan door de scouthout admin. &lt;br /&gt;
&lt;br /&gt;
===gen_alias2===&lt;br /&gt;
Dit script genereert alle &#039;&#039;&#039;kadernet&#039;&#039;&#039; aliases die uit kaderfunc.txt gemaakt kunnen worden. Voor de kaderleden waar het domain nog &#039;&#039;&#039;kader.hobby.nl&#039;&#039;&#039; is, wordt dat vervangen door &#039;&#039;&#039;kader.hcc.nl&#039;&#039;&#039;. Er wordt een alias gemaakt die naar de mailbox wijst (met het lidnummer uit kaderfunc.txt) en één met de HCC naam uit het in kaderfunc.txt opgenomen email adres. Er komt dus een &#039;&#039;&#039;1234567@kader.hcc.nl&#039;&#039;&#039; en een &#039;&#039;&#039;a.b.c.janssen@kader.hcc.nl&#039;&#039;&#039; die weer beide naar de mailbox &#039;&#039;&#039;1234567@kader.hcc.nl&#039;&#039;&#039; verwijzen. De alias tabel kan beheerd worden met PostfixAdmin. Via Phpmyadmin op dbadmin.hobby.nl kunnen natuurlijk ook alle tabellen in de database postfixadmin benaderd worden.&lt;br /&gt;
&lt;br /&gt;
===gen_func_alias===&lt;br /&gt;
Dit script genereert alle functionele aliases voor elke groepering. Het maakt aliases aan voor &#039;&#039;&#039;voorzitter@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039;, &#039;&#039;&#039;secretaris@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039; en &#039;&#039;&#039;penningmeester@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039;. Tevens wordt &#039;&#039;&#039;info@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039; gemaakt die ook naar secretaris@&amp;lt;groepering&amp;gt;.hcc.nl verwijst. De informatie wordt gehaald uit de kaderfunc.txt file.&lt;br /&gt;
&lt;br /&gt;
Om backwards compatible te zijn is ook voorzien in aliases voor &#039;voorz&#039;, &#039;secr&#039; en &#039;penm&#039; die verwijzen naar de lange naam. Uit praktische overweging worden hier ook de rfc mailboxen gemaakt. abuse@.. verwijst naar abuse@hobby.nl.&lt;br /&gt;
&lt;br /&gt;
===gen_best_alias===&lt;br /&gt;
Dit script genereert de &#039;&#039;&#039;bestuur&#039;&#039;&#039; alias voor elke groepering. Dus per groepering de voorzitter, secretaris, penningmeester en bestuursleden met als alias &#039;&#039;&#039;bestuur@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039;. De informatie wordt weer gehaald uit de &#039;&#039;&#039;kaderfunc.txt&#039;&#039;&#039; file. Sommige groeperingen zoals &#039;&#039;&#039;hobby-computer-club&#039;&#039;&#039; wordt overgeslagen. Er is geen &#039;&#039;&#039;bestuur@hobby-computer-club.hcc.nl&#039;&#039;&#039;...&lt;br /&gt;
&lt;br /&gt;
===gen_webm_alias===&lt;br /&gt;
Voor de webmasters is een apart script gemaakt omdat er een variabel aantal webmasters per groepering kan zijn. Bron bestand is weer kaderfunc.txt. Dit script genereert de &#039;&#039;&#039;webmaster@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039; alias die een variabel aantal target mailboxen kent. Ook wordt altijd de secretaris toegevoegd. In het geval dat er helemaal géén webmaster is aangemeld komt de mail dus tenminste in de mailbox van de secretaris &#039;&#039;(is dit nog zo?)&#039;&#039;. Bron bestand is natuurlijk weer kaderfunc.txt.&lt;br /&gt;
&lt;br /&gt;
===gen_kernl_alias===&lt;br /&gt;
Voor de kernleden is een apart script gemaakt omdat er een variabel aantal kernleden per groepering kan zijn. Bron bestand is weer kaderfunc.txt. Dit script genereert de &#039;&#039;&#039;kernleden@&amp;lt;groepering&amp;gt;.hcc.nl&#039;&#039;&#039; alias die een variabel aantal target mailboxen kent.&lt;br /&gt;
&lt;br /&gt;
===gen_kadernet_alias===&lt;br /&gt;
Dit script leest kadernet_aliases.txt en genereert de SQL regels voor speciale kadernet aliases die niet uit kaderfunc.txt gemaakt kunnen worden.&lt;br /&gt;
&lt;br /&gt;
===gen_ig_&amp;lt;func&amp;gt;_alias===&lt;br /&gt;
Deze scripts genereren een alias die alle voorzitters, secretarissen, penningmeesters, webmasters, gewone bestuursleden en kernleden van interessegroepen (vroeger gebruikersgroep) als target hebben. Deze aliasen worden zelden gebruikt, maar voorzien erin om alle penningmeesters uit te nodigen voor een penm. overleg. De script zijn nagenoeg identiek. Zoals altijd zijn de target adressen mailboxen (herkenbaar aan het lidnummer). Bron bestand is kaderfunc.txt.&amp;lt;br&amp;gt;&lt;br /&gt;
Op verzoek van het Kantoor worden enkele key-personen in de alias gezet. Deze personen dienen in de alias &#039;&#039;&#039;kantoor@kader.hcc.nl&#039;&#039;&#039; (in extra_aliases.txt) gezet te worden om in de &#039;&#039;&#039;ig_&#039;&#039;&#039; alias te komen.&lt;br /&gt;
&lt;br /&gt;
===gen_regio_&amp;lt;func&amp;gt;_alias===&lt;br /&gt;
Deze scripts genereren een alias die alle voorzitters, secretarissen, penningmeesters, webmasters, gewone bestuursleden en kernleden van regio&#039;s (vroeger afdeling) als target hebben. Deze aliasen worden zelden gebruikt, maar voorzien erin om alle penningmeesters uit te nodigen voor een penm. overleg. De script zijn nagenoeg identiek. Zoals altijd zijn de target adressen mailboxen (herkenbaar aan het lidnummer). Bron bestand is kaderfunc.txt.&amp;lt;br&amp;gt;&lt;br /&gt;
Op verzoek van het Kantoor worden enkele key-personen in de alias gezet. Deze personen dienen in de alias &#039;&#039;&#039;kantoor@kader.hcc.nl&#039;&#039;&#039; (in extra_aliases.txt) gezet te worden om in de &#039;&#039;&#039;regio_&#039;&#039;&#039; alias te komen. Deze aliases zijn weer gecombineerd tot grotere groepen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Alle voorz, secr, penm, enz van ig&#039;s:&lt;br /&gt;
ig_voorz@kader.hcc.nl &lt;br /&gt;
ig_secr@kader.hcc.nl&lt;br /&gt;
ig_penm@kader.hcc.nl&lt;br /&gt;
ig_bestl@kader.hcc.nl&lt;br /&gt;
ig_kernl@kader.hcc.nl&lt;br /&gt;
ig_webm@kader.hcc.nl&lt;br /&gt;
&lt;br /&gt;
Alle voorz, secr, penm, enz van regio&#039;s&lt;br /&gt;
regio_voorz@kader.hcc.nl&lt;br /&gt;
regio_secr@kader.hcc.nl&lt;br /&gt;
regio_penm@kader.hcc.nl&lt;br /&gt;
regio_bestl@kader.hcc.nl&lt;br /&gt;
regio_kernl@kader.hcc.nl&lt;br /&gt;
regio_webm@kader.hcc.nl&lt;br /&gt;
&lt;br /&gt;
Alle voorzitters, secr, enz:&lt;br /&gt;
fff_voorz@kader.hcc.nl (ig_voorz@kader.hcc.nl en regio_voorz@kader.hcc.nl samen)&lt;br /&gt;
fff_secr@kader.hcc.nl (alle secretarissen)&lt;br /&gt;
fff_penm@kader.hcc.nl&lt;br /&gt;
fff_bestl@kader.hcc.nl&lt;br /&gt;
fff_kernl@kader.hcc.nl&lt;br /&gt;
fff_webm@kader.hcc.nl&lt;br /&gt;
&lt;br /&gt;
Alle bestuursleden van resp. ig&#039;s en regio&#039;s: &lt;br /&gt;
fff_ig_bestuur@kader.hcc.nl (ig_voorz, ig_secr, ig_penm en ig_bestl@kader.hcc.nl samen)&lt;br /&gt;
fff_regio_bestuur@kader.hcc.nl (regio_voorz, regio_secr, regio_penm en regio_bestl@kader.hcc.nl samen)&lt;br /&gt;
&lt;br /&gt;
Alle bestuursleden:&lt;br /&gt;
fff_bestuur@kader.hcc.nl (de 4 ig_&amp;lt;func&amp;gt; en de 4 regio_&amp;lt;func&amp;gt; samen)&lt;br /&gt;
 &lt;br /&gt;
Alle kaderleden:&lt;br /&gt;
fff_kader@kader.hcc.nl (ALLE kaderleden samen, dus besturen maar nu ook met de kernleden en webmasters)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===gen_sr_presentatoren en gen_sr_regio_coordinatoren_alias===&lt;br /&gt;
Deze twee scripts genereren de aliases voor de regio_coordinatoren en presentatoren van de SeniorenAcademie (SR). Voor deze functionarissen is een virtuele IG gemaakt (SR-Ambassadeurs) omdat niet alle functionarissen lid zijn van SR. Indelen bij de regio was een optie maar dan liggen er problemen op de loer met verhuizingen.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;PAS OP&#039;&#039;&#039;: deze scripts bevatten hard gecodeerde waarden!&lt;br /&gt;
&lt;br /&gt;
===gen_fff_kadernet_alias===&lt;br /&gt;
Dit script genereert de &#039;&#039;&#039;fff_kader@kader.hcc.nl&#039;&#039;&#039;. Hiervoor wordt kaderfunc.txt gebruikt (code 5).&amp;lt;br&amp;gt;&lt;br /&gt;
Op verzoek van het Kantoor worden enkele kantoor functies in de alias gezet. Deze personen dienen in de alias &#039;&#039;&#039;kantoor@kader.hcc.nl&#039;&#039;&#039; (in extra_aliases.txt) gezet te worden om in de &#039;&#039;&#039;fff_&#039;&#039;&#039; aliases te komen.&lt;br /&gt;
&lt;br /&gt;
==Genereren van de domains==&lt;br /&gt;
Postfix kan de email voor vele domeinen afhandelen. Om ongewenst relayeren (spam!) te voorkomen moeten de domeinen van de geadresseerden gecheckt kunnen worden. &lt;br /&gt;
&lt;br /&gt;
===gen_domain===&lt;br /&gt;
Dit script genereert de hobbynet domeinen voor de domeinen in hobbyabon.txt voor de tabel &#039;&#039;&#039;domain&#039;&#039;&#039;. Ook hier geldt weer dat de &#039;&#039;&#039;domain&#039;&#039;&#039; tabel beheerbaar is in PostfixAdmin.&lt;br /&gt;
&lt;br /&gt;
===gen_all_domain===&lt;br /&gt;
Het bronbestand voor gen_all_domain is &#039;&#039;&#039;all_domains.txt&#039;&#039;&#039;. Het script &#039;&#039;&#039;gen_all_domain&#039;&#039;&#039; voegt records toe aan de domain tabel die betrekking hebben op alle beheerde domeinen. Dit zijn b.v. hccm.nl en hcc-watersport.nl maar weer NIET modelbaan-gg.hcc.nl. Die laatste wordt door gen_domain2 aangemaakt.&lt;br /&gt;
&lt;br /&gt;
===gen_domain2===&lt;br /&gt;
Dit script genereert de kadernet domeinen. Voor kadernet wordt &#039;&#039;&#039;kader.hobby.nl&#039;&#039;&#039; vervangen door &#039;&#039;&#039;kader.hcc.nl&#039;&#039;&#039;. Ook hier geldt weer dat de &#039;&#039;&#039;domain&#039;&#039;&#039; tabel beheerbaar is in PostfixAdmin. Er worden domeinen gemaakt zonder de &#039;&#039;&#039;afd-&#039;&#039;&#039; of &#039;&#039;&#039;-gg&#039;&#039;&#039; en met &#039;&#039;&#039;regio-&#039;&#039;&#039; i.p.v. &#039;&#039;&#039;afd-&#039;&#039;&#039; en &#039;&#039;&#039;-ig&#039;&#039;&#039; i.p.v. &#039;&#039;&#039;-gg&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Genereren van de alias-domains==&lt;br /&gt;
Postfix kent een z.g. alias_domain. Dit is een domeinnaam die een alias is voor een andere domeinnaam. Alle email adressen in het originele domein komen 1 op 1 voor in het alias domein.&lt;br /&gt;
 &lt;br /&gt;
===gen_extra_alias_domain===&lt;br /&gt;
Dit script leest &#039;&#039;&#039;extra_alias_domains.txt&#039;&#039;&#039; en genereert SQL regels voor de tabel alias_domain&lt;br /&gt;
&lt;br /&gt;
De layout van de tekst file is simpel: alias_domain, target_domain. Voorbeeld:&lt;br /&gt;
 # list of alias_domains&lt;br /&gt;
 # mirror.tld,target.tld&lt;br /&gt;
 #&lt;br /&gt;
 hccm.nl:modelbaan-gg.hcc.nl&lt;br /&gt;
 hcc-modelbaan.nl:modelbaan-gg.hcc.nl&lt;br /&gt;
 hcc-games.nl:games-gg.hcc.nl&lt;br /&gt;
 hcc-clan.nl:games-gg.hcc.nl&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Opm&#039;&#039;&#039;: De automatisch gegenereerde HCC domeinnamen (ontstaan door -gg/afd-/cg- weg te laten) mogen dus NIET in de platte tekst file staan.&lt;br /&gt;
&lt;br /&gt;
===gen_alias_domain2===&lt;br /&gt;
Dit script genereert alle HCC afdeling en ig domeinen maar dan zonder de &#039;&#039;&#039;afd-&#039;&#039;&#039; prefix en &#039;&#039;&#039;-gg&#039;&#039;&#039; suffix. Input is kaderfunc.txt.&lt;br /&gt;
&lt;br /&gt;
==Systemusers==&lt;br /&gt;
Het upd_smail script genereert tevens een soor virtualusers bestand voor Roundcube. Om de kaderleden in staat te stellen met slechts hun lidnummer in te loggen op webmail is er een default domein &#039;&#039;&#039;kader.hcc.nl&#039;&#039;&#039; gedefinieerd. Als iemand zonder domein inlogt, wordt &#039;&#039;&#039;@kader.hcc.nl&#039;&#039;&#039; toegevoegd. Door fake entries op te nemen met &amp;lt;systeemuser&amp;gt;@kader.hcc.nl en een alias &#039;&#039;&#039;zonder &#039;&#039;&#039; domein kunnen die toch inloggen op het webinterface. De laatste groep zijn de hobbynet users die vanouds met S&amp;lt;systeem&amp;gt; konden inloggen. Voor hen wordt ook een fake entry gemaakt met S&amp;lt;systeem&amp;gt;@kader.hcc.nl met als alias het opgegeven email adres. Voor dit email adres is eerder een mailbox aangemaakt.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
De beschreven faciliteit bestaat alleen voor het Roundcube web email interface. Pop3 en imap clients moeten, behalve voor systeemusers, altijd een domein meegeven!&lt;br /&gt;
&lt;br /&gt;
==Extra scripts==&lt;br /&gt;
L8er...&lt;br /&gt;
&lt;br /&gt;
Terug naar [[EMAIL]]&lt;/div&gt;</summary>
		<author><name>Egbert</name></author>
	</entry>
</feed>