Practical LDAP and Linux
Practical LDAP and Linux
Aug-23-02 1
Presentation Overview
‹ The need for LDAP
‹ LDAP Overview and Basics
‹ Setting up and tuning OpenLDAP
‹ Name services, authentication and authorisation
‹ Mail routing with sendmail and postfix
‹ Apache authentication
‹ Other LDAP tools and applications
Aug-23-02 2
The need for LDAP
‹ Multiple disparate sources of the same information
‹ Users need separate logins and passwords to login to
different systems
‹ Complex to keep information in sync
‹ Similar data spread around many flat files or in
database with different formats
‹ Inadequacies of NIS ie. Not very extensible
‹ X.500 is too complicated
Aug-23-02 3
LDAP Overview
‹ LDAP is a ‘Lightweight Directory Access Protocol’
‹ LDAP marries a lightweight DAP with the X.500
information model
‹ Uses an extensible hierarchical object data model
‹ An LDAP server may implement multiple ‘back-ends’:
RDBMS, simple indexes (Berkeley DB), X.500 gateway
‹ Designed for frequent reads and infrequent writes
Aug-23-02 4
LDAP Benefits
‹ Standardised schemas exist for many purposes
(well beyond that of NIS)
‹ Allows consolidation of many information sources
‹ Well defined API, support from many applications
‹ Easily replicated and distributed
‹ Multiple backends allow integration with existing data
sources (RDBMS, etc)
‹ Much faster than RDBMS (using lightweight backend
like Berkeley DB)
Aug-23-02 5
dc=com
\----- dc=metaparadigm
LDAP Basics
|----- ou=people
| \----- uid=mclark
\----- ou=groups
\----- cn=users
Aug-23-02 6
LDAP Basics (cont.)
‹ ‘objectClass’ is a mandatory attribute which specifies
the schema (attribute constraints) for the given node
‹ Multiple ‘objectClass’ attributes can be combined
together to achieve inheritance
‹ Example ‘objectClass’ (common schema) attributes:
dcObject, organizationalUnit, person, organizationalPerson,
inetOrgPerson, inetLocalMailRecipient
Aug-23-02 7
LDAP Schemas
‹ Many standard schemas exist including:
People schemas - person, organisationalPerson, inetOrgPerson,
posixAccount, mailLocalRecpient, strongAuthenticationUser
Group schemas – groupOfUniqueNames, posixGroup, organisationalRole,
roleMember
Host / Network schemas – domain, ipHost, ipNetwork, ipProtocol,
ipService, ieee802Device, bootableDevice
‹ An invaluable schema repository from Alan Knowles at the Hong
Kong Linux Centre:
<http://ldap.akbkhome.com/>
Aug-23-02 8
LDIF File format
‹ LDIF (Lightweight Directory Interchange Format) is
used to import/export from a LDAP directory server
dn: dc=metaparadigm,dc=com
objectclass: dcObject
objectclass: organization
o: Metaparadigm Pte Ltd
dc: metaparadigm
dn: ou=people,dc=metaparadigm,dc=com
objectclass: organisationalUnit
ou: people
dn: uid=mclark,ou=people,dc=metaparadigm,dc=com
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
uid: mclark
cn: Michael Clark
givenname: Michael
sn: Clark
o: Metaparadigm Pte Ltd
userPassword: {SSHA}D3DT4BJyKicf+PJ1+eqkWMNRG/B28xt+
mail: [email protected]
Aug-23-02 9
Custom schemas
‹ LDAP schemas uses SNMP style OIDs (Object Ids) for
uniquely defining schema elements
‹ Apply for IANA enterprise number here:
<http://www.iana.org/cgi-bin/enterprise.pl>
‹ Private enterprise number OID prefix is 1.3.6.1.4.1 eg.
Metaparadigm uses 1.3.6.1.4.1.11137
‹ Information on custom schemas can be found here:
<http://www.openldap.org/doc/admin/schema.html>
Aug-23-02 10
Linux LDAP servers
‹ OpenLDAP is the primary open-source LDAP
implementation based on Univ. Michigan LDAP
<http://www.openldap.org/>
‹ Sun provides the iPlanet Directory Server
‹ Oracle provides an LDAP server using an Oracle
database backend
‹ Many others available (Innosoft)
‹ Linux can also integrate with LDAP servers running on
other platforms such as Microsoft Active Directory or
Novell eDirectory
Aug-23-02 11
Scalability and Fault Tolerance
‹ OpenLDAP supports real-time directory replication to
provide load-balancing and high availibility
‹ OpenLDAP supports single master, multiple slaves
‹ Most LDAP aware applications can be configured to use
multiple LDAP servers (providing fallback servers)
‹ Multiple master support is in the works (currently alpha)
‹ OpenLDAP can be integrated with ‘heartbeat’ and ‘mon’
to provide fault tolerance <http://www.linux-ha.org/>
Aug-23-02 12
Setting up OpenLDAP
‹ Configuration is located in: /etc/openldap/slapd.conf
‹ We need to include the schemas we are using
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/misc.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
Aug-23-02 13
Setting up OpenLDAP (cont.)
‹ We can now start slapd (Standalone LDAP daemon)
# /etc/init.d/ldap start
Aug-23-02 14
Tuning OpenLDAP
‹ We need to add additional indexes for performance
index uidNumber,gidNumber,mailLocalAddress pres,eq
index cn,sn,givenName,memberUid,uid,mail pres,eq,sub
access to *
by self write
by users read
by anonymous auth
Aug-23-02 15
Tuning OpenLDAP (cont.)
‹ Setup logging in syslog.conf (default is LOCAL4)
local4.* /var/log/ldap.log
Aug-23-02 16
LDAP Search Filters
‹ LDAP uses a simple ‘search filters’ syntax (RFC2254)
‹ LDAP queries return all attributes of matching entries (or
specifically selected attributes) which match the search filter
‹ LDAP query particles are enclosed within parenthesis in the form
of ( attribute <matching rule> value ) ie. (cn=Michael Clark)
‹ Matching rules include (=, =~, >=, <=)
‹ * can be used as a wildcard within the value
‹ These can be combined together using the boolean operators:
and, or and not (&, |, !) eg:
(&(cn=Michael Clark)(objectClass=posixAccount))
(&(objectClass=inetOrgPerson)(!(o=Microsoft*)))
(|(cn=Michael*)(cn=Mike*))
Aug-23-02 17
LDAP Search Filters
‹ The following example ldap search retrieves the names and
email address of all users with a givenname of ‘Michael’ or ‘Mark’
# ldapsearch -LLL -h ldap1-prd -b dc=ofs,dc=edu,dc=sg \
'(&(|(givenname=Michael)(givenname=Mark))(objectClass=inetOrgPerson))' cn mail
dn: uid=mark_bergeron,ou=people,dc=ofs,dc=edu,dc=sg
mail: [email protected]
cn: Mark Bergeron
dn: uid=michael,ou=people,dc=ofs,dc=edu,dc=sg
mail: [email protected]
cn: Michael Chen
dn: uid=mclark,ou=people,dc=ofs,dc=edu,dc=sg
mail: [email protected]
cn: Michael Clark
…
‹ Very easy to incorporate this into shell scripts with awk or sed
Aug-23-02 18
Unix Name service
‹ LDAP integrates with NSS (Name Service Switch) using the
nss_ldap module <http://www.padl.com/OSS/nss_ldap.html/>
Requires configuration of /etc/ldap.conf
host ldap.metaparadigm.com
base dc=metaparadigm,dc=com
ldap_version 3
binddn cn=Manager,dc=metaparadigm,dc=com
bindpw secret
pam_filter objectclass=posixAccount
pam_login_attribute uid
pam_member_attribute memberUid
nss_base_passwd ou=people,dc=metaparadigm,dc=com?one
nss_base_group dc=metaparadigm,dc=com?sub
Aug-23-02 19
LDAP authentication
‹ LDAP integrates with PAM (Pluggable Authentication Modules)
using pam_ldap <http://www.padl.com/OSS/pam_ldap.html>
pam_ldap shares /etc/ldap.conf with nss_ldap.conf
We create a pam definition file: /etc/pam.d/ldap-auth
#%PAM-1.0
auth required /lib/security/pam_env.so
auth sufficient /lib/security/pam_unix.so likeauth nullok
auth sufficient /lib/security/pam_ldap.so
auth required /lib/security/pam_deny.so
account required /lib/security/pam_unix.so
session required /lib/security/pam_limits.so
session required /lib/security/pam_unix.so
Aug-23-02 20
Mail routing - sendmail
‹ We use the ‘inetLocalMailRecipient’ schema which extends
‘inetOrgPerson’
‹ Additional attributes ‘mailLocalAddress’, ‘mailHost’ and
‘mailRoutingAddress’. Users can have multiple
‘mailLocalAddress’ attributes.
‹ Allows for easily distributed multiple back-end mail stores
‹ Below are changes to sendmail.mc (tested in 8.11.x)
define(`confLDAP_DEFAULT_SPEC',`-h ldap.metaparadigm.com -b dc=metaparadigm,dc=com')dnl
FEATURE(ldap_routing)dnl
LDAPROUTE_DOMAIN(metaparadigm.com)
Aug-23-02 21
Mail routing – sendmail (cont.)
‹ Any sendmail map can be defined using LDAP.
‹ Example of custom alias map using 8.11.x (should also work on
8.12.x only official map schema support is available)
LOCAL_CONFIG
undefine(`ALIAS_FILE')
Kldapaliases ldap -z, -v mailForwardingAddress -k (&(objectClass=mailForwardingAlias)(mailAlias=%0))
O AliasFile=sequence:ldapaliases
attributetype ( 1.3.6.1.4.1.11137.3.1.48
NAME 'mailAlias' DESC 'alias part of address'
EQUALITY caseIgnoreIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} SINGLE-VALUE )
attributetype ( 1.3.6.1.4.1.11137.3.1.47
NAME 'mailForwardingAddress' DESC 'RFC822 address to use'
EQUALITY caseIgnoreIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
objectclass ( 1.3.6.1.4.1.11137.3.2.49
NAME 'mailForwardingAlias' DESC 'Internet local mail recipient'
SUP top AUXILIARY
MAY ( cn $ o $ mail $ mailAlias $ mailForwardingAddress ) )
Aug-23-02 22
Mail routing - postfix
‹ Postfix documentation specifies a non-standard schema.
Below example is implemented with same schema as
sendmail. (change in /etc/postfix/main.cf)
virtual_maps = ldap:metaroute
metaroute_server_host = ldap.metaparadigm.com
metaroute_search_base = dc=metaparadigm,dc=com
metaroute_query_filter = (mailLocalAddress=%s)
metaroute_result_attribute = mailRoutingAddress
metaroute_domain = metaparadigm.com
metaroute_bind = no
Aug-23-02 23
Shared Address book
‹ LDAP provides a convenient Corporate style shared
address book similar to that of Exchange which is not
otherwise available with standard Internet e-mail
‹ Support in almost all email clients:
Evolution
Mozilla
Outlook
Eudora
Various web mail clients
…
Aug-23-02 24
Apache Authentication
‹ 2 Apache modules available
‘mod_auth_ldap’ apache module
<http://nona.net/software/ldap/>
‘auth_ldap’ apache module
<http://www.rudedog.org/auth_ldap/>
‹ Example httpd.conf using mod_auth_ldap
<Location /secret>
AuthType Basic
AuthName "Secret"
AuthLDAPURL ldap://ldap.metaparadigm.com:389/ou=people,dc=metaparadigm,dc=com?uid
require valid-user
</Location>
Aug-23-02 25
LDAP Browsers and Editors
‹ Java LDAP Browser <http://www.iit.edu/~gawojar/ldap/>
Allows easy updating
and editing of directory
information.
Can create templates
for commonly used
directory objects.
‹ Huge number of other
tools (web, GTK, …)
Aug-23-02 26
Migration to LDAP
‹ Padl migration tools
<http://www.padl.com/OSS/MigrationTools.html>
‹ Migrates existing flat files or NIS databases
passwd, group, hosts, networks, services, etc…
Aug-23-02 27
Other Application support
‹ Samba LDAP-PDC
<http://www.unav.es/cti/ldap-smb-howto.html>
‹ LDAP DNS (no more HUPing named)
http://www.nimh.org/code/ldapdns/
‹ RADIUS (various patches floating around)
‹ Any application that supports PAM
ssh, netatalk, many others…
Aug-23-02 28