In my homelab, I run an OpenLDAP server and services on the
localhost use that to manage access and permissions related to network
filesystems (e.g. NFSv4 and samba).
I've previously done this by setting up slapd and running pam_ldap and nss_ldap as per FreeBSD
docs. However, the boot time of my server had long sufferred due to
slapd trying to run itself as user ldap:ldap which nss_ldap was attempting to find, would fail, and
timeout after 5 minutes.
Recently I have found out about nss-pam-ldapd which tries to improve upon
both nss_ldap and pam_ldap. I've found configuring nss-pam-ldapd to be much more robust in its
response and I don't have to worry about timeouts and caches
anymore.
As a bonus, the 4 minutes timeout that I used to get when starting one of the jails which depended on ldap on startup is gone too!
nss-pam-ldapd has fantastic
documentation, and I followed it carefully to setup my /usr/local/etc/nslcd.conf file, paying
special attention to bind_timelimit, timelimit, and reconnect_retrytime (see nslcd.conf(5) manpage).
uid nslcd
gid nslcd
uri ldap://topoli.home.lan/
ldap_version 3
base dc=home,dc=lan
#binddn cn=root,dc=home,dc=lan
#bindpw secret
bind_timelimit 3
timelimit 5
reconnect_retrytime 5
nss_initgroups_ignoreusers ALLLOCALThen setting up /etc/pam.d/system like so.
auth sufficient pam_opie.so no_warn no_fake_prompts
auth requisite pam_opieaccess.so no_warn allow_local
auth sufficient /usr/local/lib/pam_ldap.so minimum_uid=10000
auth required pam_unix.so no_warn try_first_pass nullok
account required pam_login_access.so
account sufficient /usr/local/lib/pam_ldap.so minimum_uid=10000
account required pam_unix.so
session required pam_lastlog.so no_fail
password required pam_unix.so no_warn try_first_pass
password sufficient /usr/local/lib/pam_ldap.so minimum_uid=10000I have set the minimum uid to 10000 to reflect my slapd config.
To round it all out, here's my /usr/local/etc/slapd.conf.
include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
include /usr/local/etc/openldap/schema/nis.schema
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args
modulepath /usr/local/libexec/openldap
moduleload back_mdb
database mdb
maxsize 1073741824
suffix "dc=home,dc=lan"
rootdn "cn=root,dc=home,dc=lan"
rootpw secret
directory /var/db/openldap-data
index objectClass eq
index cn,uid,memberUid,uniqueMember,gidNumber pres,eq
logfile /var/log/slapd.log
loglevel noneMake sure to set your own access
directives and mind the root user and password. When setting things up,
I recommend starting with no access controls and adding them later.
Also my /usr/local/etc/openldap/ldap.conf.
BASE dc=home,dc=lan
URI ldap://topoli.home.lanTo find out what each line means, see slapd.conf(5) and ldap.conf(5).