LDAP: Difference between revisions

From Hobbynet Admin Wiki
Jump to navigation Jump to search
No edit summary
Line 153: Line 153:
dn: cn=config
dn: cn=config
add: olcTLSCACertificateFile
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/cacert_org.pem
olcTLSCACertificateFile: /etc/ssl/certs/CAcert_org.pem
-
-
add: olcTLSCertificateFile
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/ubuntu.crt
olcTLSCertificateFile: /etc/ssl/certs/hobbynet-wildcard_cert.pem
-
-
add: olcTLSCertificateKeyFile
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/ubuntu.key
olcTLSCertificateKeyFile: /etc/ssl/private/hobbynet_wildcard_key.pem
</pre>
</pre>
===sizelimit.ldif===
===sizelimit.ldif===
SizeLimit instelling toevoegen op de hccnet database. De default van 500 is te weinig.
SizeLimit instelling toevoegen op de hccnet database. De default van 500 is te weinig.

Revision as of 10:42, 10 November 2011

Introductie

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

LDAP server keuze

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

Loadbalanced

Er zijn twee servers (hcc-ldap-lb1 en hcc-ldap-lb2) die achter een loadbalancer in pomeleoepee mode staat zodat het verkeer altijd server1 gestuurd wordt. Beide servers houden elkaar up-to-date. In de gewone situatie zullen alle reads en writes naar server 1 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 server 1 weer beschikbaar is, wordt die bijgewerkt en zal weer master worden. Dit is nog niet getest en hoe de timing precies is, is nog niet duidelijk...

Installatie

installatie van OpenLDAP is simpel:

aptitude install slapd ldap-utils

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

UPDATE: in Oneiric Ocelot (11.10) is weer wel de mogelijkheid gegeven bij installatie een database aan te maken. Default wordt echter de fqdn hostname gebruikt. Bij dpkg-reconfigure kan het gewenste domein wel gegeven worden. Als tussenoplossing wordt op 10.04 LTS de minimale configuratie na installatie aangevuld met alles wat mist. De initiële configuratie staat in /usr/share/slapd/slapd.init.ldif. Alles na include: file:///etc/ldap/schema/core.ldif lijkt te missen. Het restant zoals dat in dezelfde file op 11.10 staat, wordt alsnog op 10.04 uitgevoerd. Als bij update of upgrade genoemde file wel compleet is, kan het uitvoeren van sldap.extra.ldif vervallen. Zie het init-ldap script.

Initiële database

Direct na installatie (of na dpkg-reconfigure slapd) staat dit 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. Het init_lapd script (zie verderop) vult de directory aan met lokale wensen. Gebruik ook de OpenLDAP site.

slapd.init.ldif

Bij installatie/reconfiguratie wordt /usr/share/slapd/slapd.init.ldif ingelezen. Om uit komen op de 11.10 installatie wordt direct hierna slapd.extra.ldif ingelezen

~/ldap# cat /usr/share/slapd/slapd.init.ldif
# Global config:
dn: cn=config
objectClass: olcGlobal
cn: config
# Where the pid file is put. The init.d script
# will not stop the server if you change this.
olcPidFile: /var/run/slapd/slapd.pid
# List of arguments that were passed to the server
olcArgsFile: /var/run/slapd/slapd.args
# Read slapd.conf(5) for possible values
olcLogLevel: none
# The tool-threads parameter sets the actual amount of cpu's that is used
# for indexing.
olcToolThreads: 1

# Frontend settings
dn: olcDatabase={-1}frontend,cn=config
objectClass: olcDatabaseConfig
objectClass: olcFrontendConfig
olcDatabase: {-1}frontend
# The maximum number of entries that is returned for a search operation
olcSizeLimit: 500
# Allow unlimited access to local connection from the local root user
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage by * break
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to dn.base="cn=subschema" by * read

# Config db settings
dn: olcDatabase=config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: config
# Allow unlimited access to local connection from the local root user
olcAccess: to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage by * break

# Load schemas
dn: cn=schema,cn=config
objectClass: olcSchemaConfig
cn: schema

include: file:///etc/ldap/schema/core.ldif

Hieronder het ontbrekende stuk dat wel in 11.10 zit. Hierin zijn de oorspronkelijke variabelen vervangen door vaste waarden omdat het het script dat door dpkg-reconfigure in 10.04 wordt gebuikt niet met de variabelen in de 11.10 versie kan omgaan. Tevens is olcDbDirectory uitgebreid met een subdirectory. Dit moet het werken met meerdere DITs vergemakkelijken.

root@ubuntu:~/ldap# cat slapd.extra.ldif
# Load the other schemas
include: file:///etc/ldap/schema/cosine.ldif
include: file:///etc/ldap/schema/nis.ldif
include: file:///etc/ldap/schema/inetorgperson.ldif

# Load module
dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: back_hdb

# Set defaults for the backend
dn: olcBackend=hdb,cn=config
objectClass: olcBackendConfig
olcBackend: hdb

# The database definition.
dn: olcDatabase=hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: hdb
olcDbCheckpoint: 512 30
olcDbConfig: set_cachesize 0 2097152 0
olcDbConfig: set_lk_max_objects 1500
olcDbConfig: set_lk_max_locks 1500
olcDbConfig: set_lk_max_lockers 1500
olcLastMod: TRUE
olcSuffix: dc=hccnet,dc=nl
olcDbDirectory: /var/lib/ldap/hccnet
olcRootDN: cn=admin,dc=hccnet,dc=nl
olcRootPW: XXXXXXXX
olcDbIndex: objectClass eq
olcDbIndex: cn,sn,uid pres,eq,approx,sub
olcAccess: to attrs=userPassword,shadowLastChange
  by self write
  by anonymous auth
  by * none
olcAccess: to dn.base=""
  by * read
olcAccess: to *
  by self write
  by * read

Hierna heb je op 10.04 LTS de situatie van 11.10 met domein hccnet.nl in een hdb backend database.

init-ldap script

Het lokale script init-ldap doet de upgrade naar 11.10 en vervolgens alles wat wij toegevoegd/gewijzigd willen hebben. Dit zou makkelijk in één of twee stappen kunnen maar omwille van de beheerbaarheid wordt elke stap afzonderlijk uitgevoerd.

#$/bin/sh
#
service slapd stop
#
rm /var/lib/ldap/hccnet/*
#
dpkg-reconfigure slapd
#
# add just the things that seen missing in 10.04 LTS but
# are loaded in 11.10
#
echo "Add missing things i n10.04 LTS..."
ldapadd -Y EXTERNAL -H ldapi:/// -f slapd.extra.ldif
#
# modify cn=config for TLS support
#
echo "Add TLS settings..."
ldapmodify -Y EXTERNAL -H ldapi:/// -f tls.ldif
#
# modify olcSizeLimit in frontend,config
#
echo "change SizeLimit in frontend db..."
ldapmodify -Y EXTERNAL -H ldapi:/// -f sizelimit.ldif
#
# modify olcLoLevel in cn=config
#
echo "Add logging..."
ldapmodify -Y EXTERNAL -H ldapi:/// -f logging.ldif
#
# add top level and create some admins
#
echo "Create hccnet.nl..."
ldapadd -x -D cn=admin,dc=hccnet,dc=nl -W  -H ldapi:/// -f hccnet.ldif

tls.ldif

SSL/TLS instelling toevoegen. Gebruik de juiste .pem bestanden in certs en/of private.

dn: cn=config
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/CAcert_org.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/hobbynet-wildcard_cert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/hobbynet_wildcard_key.pem

sizelimit.ldif

SizeLimit instelling toevoegen op de hccnet database. De default van 500 is te weinig.

dn: olcDatabase={1}hdb,cn=config
changetype: modify
replace: olcSizeLimit
olcSizeLimit: 100000

logging

Logging instelling toevoegen. Tevens wordt geadviseerd om rsyslog.conf ook aan te passen en de log data naar een eigen bestand te sturen.

dn: cn=config
changetype: modify
add: olcLogLevel
olcLogLevel: stats

In /etc/rsyslog.d/openldap.conf

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

hccnet.ldif

De eigenlijk hcc.nl directory toevoegen/uitbreiden

# Create top-level object in domain
dn: dc=hccnet,dc=nl
objectClass: top
objectClass: dcObject
objectclass: organization
o: Hobby Computer Club
dc: hccnet
description: Top level object hccnet.nl

# Admin user of top level.
dn: cn=admin,dc=hccnet,dc=nl
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP admin for hccnet.nl
userPassword: {MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ==

dn: ou=beheer,dc=hccnet,dc=nl
objectClass: organizationalUnit
ou: beheer

# manager user of top level.
dn: cn=manager,ou=beheer,dc=hccnet,dc=nl
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: manager
description: LDAP manager for hccnet.nl
userPassword: {MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ==

# Drupal user.
dn: cn=drupal-hcc-nl,ou=beheer,dc=hccnet,dc=nl
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: drupal-hcc-nl
description: Drupal admin for hccnet.nl
userPassword: {MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ==

dn: ou=leden,dc=hccnet,dc=nl
objectClass: organizationalUnit
ou: leden