LDAP Authentication and Authorization
Predrag Punosevac
punosevac72 at gmail.com
Sat Jun 24 12:22:12 UTC 2017
Hi Folks,
Just to post the solution for the people who might stumble on my
original post.
I had a permission problem on the LDAP server certificate file which
could not have been read by nslcd daemon. Original nslcd.conf file I
posted is also not quite correct so his is the complete how-to.
Note that you don't have to have openldap-client working at all to be
able to authorize and authenticate to FreeBSD server using LDAP account
only (ldap search will not work though). The most effective way to use
PAM approach is to
pkg install nss-pam-ldapd
cd /usr/local/etc/
Edit nslcd.conf file to use OpenLDAP server side certificate to get user
credentials.
root at hera:/usr/local/etc # more nslcd.conf
uid nslcd
gid nslcd
uri ldap://atlas.int.autonlab.org
base dc=autonlab,dc=org
# StartTLS
ssl start_tls
# CA certificates for server certificate verification
tls_cacertdir /usr/local/etc/nslcd-certs
tls_cacertfile /usr/local/etc/nslcd-certs/ca.crt
Note that nslcd runs as nslcd user so the file
/usr/local/etc/nslcd-certs/ca.crt
must be readable by nslcd daemon
root at hera:~ # ls -l /usr/local/etc/nslcd-certs/ca.crt
-r-------- 1 nslcd nslcd 1448 Jun 23 22:21
/usr/local/etc/nslcd-certs/ca.crt
enable nslcd daemon
echo 'nslcd_enable="YES"' >> /etc/rc.conf
start the daemon
service nslcd start
(note that for debugging purpose run as nslcd -d)
Edit your /etc/nsswitch file and restart nsswitch
root at hera:~ # more /etc/nsswitch.conf
#
# nsswitch.conf(5) - name service switch configuration file
# $FreeBSD: releng/11.0/etc/nsswitch.conf 301711 2016-06-09 01:28:44Z
markj $
#
# group: compat
group: files ldap
group_compat: nis
hosts: files dns
netgroup: compat
networks: files
# passwd: compat
passwd: files ldap
passwd_compat: nis
shells: files
# services: compat
services: files ldap
services_compat: nis
protocols: files
rpc: files
s/group: compat/group: files ldap/
s/passwd: compat/passwd: files ldap/
s/services: compat/services: files ldap/
To allow ssh login only edit /etc/pam.d/sshd by adding pam_ldap.so
option
root at hera:~ # more /etc/pam.d/sshd
#
# $FreeBSD: releng/11.0/etc/pam.d/sshd 197769 2009-10-05 09:28:54Z des $
#
# PAM configuration for the "sshd" service
#
# auth
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 no_warn
auth required pam_unix.so no_warn
try_first_pass
# account
account required pam_nologin.so
account required pam_login_access.so
account sufficient /usr/local/lib/pam_ldap.so
account required pam_unix.so
# session
session required pam_permit.so
# password
try_first_pass
password sufficient /usr/local/lib/pam_ldap.so
try_first_pass
password required pam_unix.so no_warn
try_first_pass
Make sure the above uses correct format (tab separators). Note that uses
will not be allowed if her/his shell (specified in LDAP data base) is
not installed/linked and home directory (specified in LDAP data base)
not mounted (see security/pam_mkhomedir for work around). Also LDAP
server from the base of OpenBSD doesn't allow password change.
Enjoy,
Predrag
More information about the freebsd-questions
mailing list