Chroot OpenLDAP on NetBSD
483 words, 3 minutes
Installing a LDAP directory on NetBSD is really easy with OpenLDAP and pkgsrc. But chrooting it requires a few particular steps.
Installation
Install the NetBSD system than add the OpenLDAP package:
# pkg_add -uu http://nyftp.netbsd.org/pub/pkgsrc/packages/NetBSD/i386/5.0/All/openldap-server-2.4.23nb1.tgz
Configuration
Create the chroot environnement where OpenLDAP will installed:
# set -o braceexpand
# mkdir -p /home/ldap/{etc,data,dev,etc}
# chown slapd:ldap /home/ldap/data
# cp -p /usr/pkg/share/examples/openldap/DB_CONFIG /home/ldap/data/
# install -d -m 0755 -o slapd -g ldap /home/ldap/var/run
Enable UID and GID identification:
# grep slapd /etc/master.passwd > /home/ldap/etc/master.passwd
# pwd_mkdb -d /home/ldap /home/ldap/etc/master.passwd
# grep ldap /etc/group > /home/ldap/etc/group
Initial schema and configuration file:
# install -p -m 0644 -o root -g wheel /usr/pkg/etc/openldap/schema/core.schema /home/ldap/etc/core.schema
# install -p -m 0640 -o slapd -g ldap /usr/pkg/etc/openldap/slapd.conf /home/ldap/etc/slapd.conf
OpenLDAP will run chrooted but the rc.d file and other tools
(slapindex…) can’t deal with it. What I did is configure an “inside”
slapd.conf (used from slapd) and an “outside” one (used by the tools). The
only difference lies in the path configured to access the various files.
Edit the “inside” configuration file ; set the administrative password and database path:
# slappasswd
# vi /home/ldap/etc/slapd.conf
(...)
include /etc/core.schema
(...)
rootpw {SSHA}Bp1uq7j3vcON95fsRtvxQ386dmC8WFUW
(...)
directory /data
The “outside” file looks quite the same:
# diff /home/ldap/etc/slapd.conf /usr/pkg/etc/openldap/slapd.conf
3,7c3,7
< include /etc/core.schema
< include /etc/cosine.schema
< include /etc/nis.schema
< include /etc/authldap.schema
< include /etc/inetorgperson.schema
---
> include /home/ldap/etc/core.schema
> include /home/ldap/etc/cosine.schema
> include /home/ldap/etc/nis.schema
> include /home/ldap/etc/authldap.schema
> include /home/ldap/etc/inetorgperson.schema
9,34c9,10
< pidfile /var/openldap/run/slapd.pid
< argsfile /var/openldap/run/slapd.args
---
> pidfile /home/ldap/var/openldap/run/slapd.pid
> argsfile /home/ldap/var/openldap/run/slapd.args
41c17
< directory /data
---
> directory /home/ldap/data
Edit the rc.conf and rc.local files to enable daemon autostart:
# vi /etc/rc.conf
slapd=YES
slapd_flags="-u slapd -g ldap -r /home/ldap -f /etc/slapd.conf"
# vi /etc/rc.local
[ -x /usr/pkg/share/examples/rc.d/slapd ] &&
/usr/pkg/share/examples/rc.d/slapd start
Additionnal tweaks
Securing with SSL
Configuring SSL requires copying the certificates to the chroot directory and
modifying slapd.conf:
# mkdir /home/ldap/dev
# cd /home/ldap/dev && sh /dev/MAKEDEV random
# mkdir -p /home/ldap/etc/ssl
# cp -p ca.tumfatig.local.pem ldap.tumfatig.local.crt ldap.tumfatig.local.key /home/ldap/etc/ssl/
# chown slapd:ldap /home/ldap/etc/ssl/*
# vi /home/ldap/etc/slapd.conf
TLSCipherSuite HIGH:MEDIUM:+SSLv2
TLSCACertificateFile /etc/ssl/ca.tumfatig.local.pem
TLSCertificateFile /etc/ssl/ldap.tumfatig.local.crt
TLSCertificateKeyFile /etc/ssl/ldap.tumfatig.local.key
# vi /etc/rc.conf
slapd_flags="-u slapd -g ldap -r /home/ldap -f /etc/slapd.conf -h 'ldaps:///'"
# /usr/pkg/share/examples/rc.d/slapd restart
The OpenLDAP tools will require the CA file reference:
# cat /etc/openldap/ldap.conf
TLS_CACERT /etc/openssl/certs/ca.tumfatig.local.pem
The CA file should also be installed on every computer you’ll use to connect
to the ldaps service.
On Mac OS X (Snow Leopard), you’d have to import the CA file with the Keychain
Access application.
Note that a correct DNS resolving is important.
Schema modification
I extended the LDAP schema using the Courier Authentication ressource:
# cd /home/ldap/etc
# ftp http://courier.cvs.sourceforge.net/viewvc/courier/libs/authlib/authldap.schema
# vi authldap.schema
attributetype ( 1.3.6.1.4.1.10018.1.1.14 NAME 'mailhost'
DESC 'Host to which incoming POP/IMAP connections should be proxied'
EQUALITY caseIgnoreIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
# set -o braceexpand
# cp -p /usr/pkg/etc/openldap/schema/{nis,cosine,inetorgperson}.schema .
# vi /home/ldap/etc/slapd.conf
include /etc/core.schema
include /etc/cosine.schema
include /etc/nis.schema
include /etc/authldap.schema
include /etc/inetorgperson.schema