NAME¶
pam_ldap - LDAP pluggable authentication module
DESCRIPTION¶
The
pam_ldap module is a Pluggable Authentication Module (PAM) which
provides for authentication, authorization and password changing against
LDAP servers.
Features of the PADL pam_ldap module include support for transport layer
security, SASL authentication, directory server-enforced password policy, and
host- and group- based logon authorization.
The present version of
pam_ldap supports AIX 5L, FreeBSD 3.x and above,
HP-UX 11i, IRIX 6.x, Linux, Mac OS X 10.2 and above, and Solaris 2.6 and
above. Many vendors provide their own LDAP authentication providers, often
also called pam_ldap. This manual page applies to the PADL
pam_ldap
module only. If you are using a vendor provided module, consult the relevant
documentation instead.
When authenticating or authorizing a user,
pam_ldap first maps the user's
login name to a distinguished name by searching the directory server. This
must be possible using the local system's identity, specified in
pam_ldap.conf. (Note that presently only simple authentication is supported
for authenticating in this initial step.)
To authenticate a user,
pam_ldap attempts to bind to the directory server
using the distinguished name of the user (retrieved previously). Both simple
and SASL authentication mechanisms are supported; in the former case, one
should take care to use transport security to prevent the user's password
being transmitted in the clear.
A variety of authorization primitives are supported by
pam_ldap,
discussed in the configuration section below.
Finally,
pam_ldap supports a number of password change protocols used by
directory servers from various vendors. (Some directory servers support more
than one password change protocol.)
Whilst
pam_ldap is generally configured in the system LDAP naming
configuration file (pam_ldap.conf), some options can be configured in the PAM
configuration file, to allow for per-service granularity. These options
include the path to the LDAP naming configuration file to use, so in effect
all options can be configured on a per-service basis. Options are listed below
under PAM Configuration.
CONFIGURATION¶
pam_ldap stores its configuration in the
pam_ldap.conf file. (It
should be noted that some LDAP client libraries, such as OpenLDAP, also use a
configuration file of the same name.
pam_ldap supports many of the same
configuration file options as OpenLDAP, but it adds several that are specific
to the functionality it provides. It is not guaranteed that
pam_ldap
will continue to match the configuration file semantics of OpenLDAP. You may
wish to use different files.)
Configuration file options consist of a keyword followed by a space and any
arguments. The following options are supported by both
pam_ldap and the
PADL
nss_ldap module:
- host <name:port ...>
- Specifies the name(s) or IP address(es) of the LDAP
server(s) to connect to. In the case that nss_ldap is used for host
name resolution, each server should be specified as an IP address or name
that can be resolved without using LDAP. Multiple servers may be
specified, each separated by a space. The failover time depends on whether
the LDAP client library supports configurable network or connect
timeouts (see bind_timelimit below).
- base <base>
- Specifies the default base distinguished name (DN) to use
for searches.
- uri <ldap[is]://[name[:port]] ...>
- For LDAP client libraries that support it, specifies
the URI(s) of the LDAP server(s) to connect to. The URI scheme may be
ldap, ldapi, or ldaps, specifying LDAP over TCP, IPC
and SSL respectively. If applicable, a port number can be specified; the
default port number for the selected protocol is used if omitted. This
option takes precedence over the host option; it is not possible to
combine the two.
- ldap_version <version>
- Specifies the version of the LDAP protocol to use.
Presently version must be 2 or 3. The default is to use the maximum
version supported by the client library.
- binddn <binddn>
- Specifies the distinguished name with which to bind to the
directory server(s). This option is optional; the default is to bind
anonymously.
- bindpw <bindpw>
- Specifies the cleartext credentials with which to bind.
This option is only applicable when used with binddn above. The
default is no credential (anonymous bind). When binding to the directory
using SASL or other authentication mechanisms apart from simple
binds, this option is not used.
- rootbinddn <binddn>
- This option has the same syntax and effect as the
binddn option above, except it applies when the effective user ID
is zero. If not specified, then the identity specified in binddn is
used instead. Because the configuration file may be readable by many
users, the root bind DN credentials are stored in the
pam_ldap.secret file instead. This file is usually in the same
directory as the configuration file.
- port <port>
- Specifies the port to connect to; this option is used with
the host option, and is ignored with the uri option.
- scope <sub|one|base>
- Specifies the search scope (subtree, one level or base
object). The default scope is subtree; base scope is almost never useful
for nameservice lookups.
- deref <never|searching|finding|always>
- Specifies the policy for dereferencing aliases. The default
policy is to never dereference aliases.
- timelimit <timelimit>
- Specifies the time limit (in seconds) to use when
performing searches. A value of zero (0), which is the default, is to wait
indefinitely for searches to be completed.
- bind_timelimit <timelimit>
- Specifies the time limit (in seconds) to use when
connecting to the directory server. This is distinct from the time limit
specified in timelimit and affects the initial server connection
only. (Server connections are otherwise cached.) Only some LDAP
client libraries have the underlying functionality necessary to support
this option. The default bind timelimit is 30 seconds.
- referrals <yes|no>
- Specifies whether automatic referral chasing should be
enabled. The default behaviour is specifed by the LDAP client
library.
- restart <yes|no>
- Specifies whether the LDAP client library should
restart the select(2) system call when interrupted. This feature is not
supported by all client libraries.
- logdir <directory>
- Specifies the directory used for logging by the LDAP
client library. This feature is not supported by all client
libraries.
- debug <level>
- Specifies the debug level used for logging by the
LDAP client library. This feature is not supported by all client
libraries, and does not apply to the nss_ldap and pam_ldap
modules themselves (debugging, if any, is configured separately and
usually at compile time).
- ssl <on|off|start_tls>
- Specifies whether to use SSL/TLS or not (the default is not
to). If start_tls is specified then StartTLS is used rather than
raw LDAP over SSL. Not all LDAP client libraries support both SSL
and StartTLS, and all related configuration options.
- sslpath <cert7_path>
- For the Netscape and Mozilla LDAP client libraries
only, this specifies the path to the X.509 certificate database.
- tls_checkpeer <yes|no>
- Specifies whether to require and verify the server
certificate or not, when using SSL/TLS with the OpenLDAP client library.
The default is to use the default behaviour of the client library; for
OpenLDAP 2.0 and earlier it is "no", for OpenLDAP 2.1 and later
it is "yes". At least one of tls_cacertdir and
tls_cacertfile is required if peer verification is enabled.
- tls_cacertdir <certificate_dir>
- Specifies the directory containing X.509 certificates for
peer authentication.
- tls_cacertfile <certificate_file>
- Specifies the path to the X.509 certificate for peer
authentication.
- tls_randfile <entropy_file>
- Specifies the path to an entropy source.
- tls_ciphers <ciphers>
- Specifies the ciphers to use for TLS. See your TLS
implementation's documentation for further information.
- tls_cert <certificate_file>
- Specifies the path to the file containing the local
certificate for client TLS authentication.
- tls_key <key_file>
- Specifies the path to the file containing the private key
for client TLS authentication.
- The following configuration options apply to pam_ldap
only:
- pam_login_attribute <attribute>
- Specifies the attribute to use when constructing the
attribute value assertion for retrieving a directory entry for a user's
login name. The default is "uid", for compatibility with RFC
2307.
- pam_filter <filter>
- Specifies a filter to use when retrieving user information.
The user entry must match the attribute value assertion of
(pam_login_attribute=login_name) as well as any filter specified here.
There is no default for this option.
- pam_lookup_policy <yes|no>
- Specifies whether to search the root DSE for password
policy. The default is "no".
- pam_check_host_attr <yes|no>
- Specifies whether the "host" attribute should be
checked for logon authorization ("account" in the PAM stack).
The default is not to. If set to "yes" and a user has no value
for the "host" attribute, then the user will be unable to
login.
- pam_check_service_attr <yes|no>
- Specifies whether the "authorizedService"
attribute should be checked for logon authorization ("account"
in the PAM stack). The default is not to. If set to "yes" and a
user has no value for the "authorizedService" attribute, then
the user will be unable to login.
- pam_groupdn <groupdn>
- Specifies the distinguished name of a group to which a user
must belong for logon authorization to succeed. pam_member_attribute
<attribute> Specifies the attribute to use when testing a user's
membership of a group specified in the pam_groupdn option.
- pam_min_uid <uid>
- If specified, a user must have a POSIX user ID of at least
uid in order for logon authorization to succeed.
- pam_max_uid <uid>
- If specified, a user must have a POSIX user ID of no
greater than uid in order for logon authorization to succeed.
- pam_template_login_attribute <attribute>
- When using template users (not supported by all PAM
applications), specifies the attribute containing the user's actual login
name. The pam_ldap module will set PAM_USER to the value of this
attribute if present in the user's entry, otherwise it defaults to the
user specified in the pam_template_login option.
- pam_template_login <user>
- When using template users (not supported by all PAM
applications), pam_ldap will set PAM_USER to the value of this
option if the user does not contain a template login attribute.
- pam_password <protocol>
- Specifies the password change protocol to use. The
following protocols are supported:
- clear
- Change password using an LDAPModify request, replacing the
userPassword value with the new cleartext password.
- clear_remove_old
- Change password using an LDAPModify request, first removing
the userPassword value containing the old cleartext password, and then
adding the userPassword value with the new cleartext password. This
protocol is necessary for use with Novell NDS and IBM RACF.
- crypt
- Change password using an LDAPModify request, first
generating a one way hash of the new password using crypt(3) and
then replacing userPassword value with the new hashed password.
- md5
- Change password using an LDAPModify request, first
generating a one way hash of the new password using MD5 and then replacing
userPassword value with the new hashed password.
- nds
- This is an alias for clear_remove_old.
- racf
- This is an alias for clear_remove_old.
- ad
- Change password using an LDAPModify request, using the
Active Directory Services Interface (ADSI) password change protocol.
- exop
- Change password using the RFC 3062 password modify extended
operation (only the new password is sent).
- exop_send_old
- Change password using the RFC 3062 password modify extended
operation (both the old and new passwords are sent).
- pam_password_prohibit_message <message>
- Specifies a message to send to users indicating that
passwords cannot be changed. This could be used to redirect users to
another means of changing passwords.
- pam_sasl_mech <mechanism>
- Specifies the SASL mechanism to use for PAM authentication.
This requires SASL libraries be installed. Support for this functionality
presently experimental and does not support password policy controls.
PAM CONFIGURATION¶
It is possible to configure some aspects of
pam_ldap on a per-service
basis, in the PAM configuration file (this is usually /etc/pam.conf; for PAM
implementations based on Linux-PAM, per-service files in /etc/pam.d are also
supported).
The following options may be specified as arguments to the
pam_ldap
module:
- config=<path>
- Specifies that pam_ldap should use the configuration
file in path instead of pam_ldap.conf to retrieve its global
configuration. Configuring multiple instances of pam_ldap for the
same service with different configuration files is not supported, because
the configuration information is cached.
- use_first_pass
- Specifies that pam_ldap should always use the first
password provided in the authentication stack.
- try_first_pass
- Specifies that pam_ldap should first try the first
password provided in the authentication stack, and then prompt the user
for their LDAP password if authentication fails.
- ignore_unknown_user
- Specifies that pam_ldap should return PAM_IGNORE for
users that are not present in LDAP. This forces the PAM framework
to ignore the pam_ldap module. This option is useful where certain
accounts do not reside in LDAP, but one wishes to make
pam_ldap "required" for all accounts in the directory. In
this case one would make both pam_ldap and the other module (for
example, pam_unix) "required" and enable the
ignore_unknown_user option. (For this to work, the other module
must behave similarly for users in the directory; in the case of a module
such as pam_unix that uses the system accounts database, using
nss_ldap(5) should be sufficient to meet this requirement.)
- ignore_authinfo_unavail
- Specifies that pam_ldap should return PAM_IGNORE if
it cannot contact the LDAP server. This option forces the PAM
framework to ignore the pam_ldap module in this case.
- no_warn
- Specifies that warning messages should not be propagated to
the PAM application.
- use_authtok
- Analogous to use_first_pass for password changing
only.
- debug
- This option is recognized by pam_ldap but is
presently ignored.
AUTHOR¶
The
pam_ldap module was developed by PADL Software Pty Ltd
(www.padl.com).
FILES¶
- /etc/pam_ldap.conf, /etc/pam_ldap.secret,
/etc/pam.conf
SEE ALSO¶
pam(8)