Contents
This section covers the installation of the MIT Kerberos implementation as well as some aspects of administration. This section assumes you are familiar with the basic concepts of Kerberos (see also Chapter 45, Network Authentication—Kerberos).
The domain of a Kerberos installation is called a
realm and is identified by a name, such as FOOBAR.COM or
simply ACCOUNTING. Kerberos is
case-sensitive, so foobar.com is actually a different
realm than FOOBAR.COM. Use the case you prefer. It is
common practice, however, to use uppercase realm names.
It is also a good idea to use your DNS domain name (or a subdomain,
such as ACCOUNTING.FOOBAR.COM). As shown below, your life
as an administrator can be much easier if you configure your
Kerberos clients to locate the KDC and other
Kerberos services via DNS. To do so, it is
helpful if your realm name is a subdomain of your DNS domain name.
Unlike the DNS name space, Kerberos is not
hierarchical. You cannot set up a realm named FOOBAR.COM,
have two “subrealms” named DEVELOPMENT and
ACCOUNTING underneath it, and expect the two subordinate
realms to somehow inherit principals from FOOBAR.COM.
Instead, you would have three separate realms for which you would have to
configure crossrealm authentication for users from one realm
to interact with servers or other users from another realm.
For the sake of simplicity, assume you are setting up just one realm for
your entire organization. For the remainder of this section, the realm name
EXAMPLE.COM is used in all examples.
The first thing required to use Kerberos is a machine that acts as the key distribution center, or KDC for short. This machine holds the entire Kerberos user database with passwords and all information.
The KDC is the most important part of your security infrastructure—if someone breaks into it, all user accounts and all of your infrastructure protected by Kerberos is compromised. An attacker with access to the Kerberos database can impersonate any principal in the database. Tighten security for this machine as much as possible:
Put the server machine into a physically secured location, such as a locked server room to which only a very few people have access.
Do not run any network applications on it except the KDC. This includes servers and clients—for example, the KDC should not import any file systems via NFS or use DHCP to retrieve its network configuration.
Install a minimal system first then check the list of installed packages and remove any unneeded packages. This includes servers, such as inetd, portmap, and cups, as well as anything X-based. Even installing an SSH server should be considered a potential security risk.
No graphical login is provided on this machine as an X server is a potential security risk. Kerberos provides its own administration interface.
Configure /etc/nsswitch.conf to use only
local files for user and group lookup. Change the lines for
passwd and group to look like
this:
passwd: files group: files
Edit the passwd, group,
shadow, and gshadow files in
/etc and remove the lines that
start with a + character (these are for NIS
lookups).
Disable all user accounts except root's account by editing
/etc/shadow and replacing the hashed passwords with
* or ! characters.
To use Kerberos successfully, make sure that all system clocks within your organization are synchronized within a certain range. This is important because Kerberos protects against replayed credentials. An attacker might be able to observe Kerberos credentials on the network and reuse them to attack the server. Kerberos employs several defenses to prevent this. One of them is that it puts time stamps into its tickets. A server receiving a ticket with a time stamp that differs from the current time rejects the ticket.
Kerberos allows a certain leeway when comparing time stamps. However, computer clocks can be very inaccurate in keeping time—it is not unheard of for PC clocks to lose or gain half an hour over the course of a week. For this reason, configure all hosts on the network to synchronize their clocks with a central time source.
A simple way to do so is by installing an NTP time server on one machine and having all clients synchronize their clocks with this server. Do this either by running an NTP daemon in client mode on all these machines or by running ntpdate once a day from all clients (this solution probably works for a small number of clients only). The KDC itself needs to be synchronized to the common time source as well. Because running an NTP daemon on this machine would be a security risk, it is probably a good idea to do this by running ntpdate via a cron entry. To configure your machine as an NTP client, proceed as outlined in Section 32.1, “Configuring an NTP Client with YaST”.
It is also possible to adjust the maximum deviation
Kerberos allows when checking time stamps. This
value (called clock skew) can be set in the
krb5.conf file as described in
Section 46.5.3, “Adjusting the Clock Skew”.
This section covers the initial configuration and installation of the KDC, including the creation of an administrative principal. This procedure is consists of several steps:
Install the RPMs. On a machine designated as the KDC, install special software packages. See Section 46.4.1, “Installing the RPMs” for details.
Adjust the Configuration Files.
The configuration files /etc/krb5.conf and
/var/lib/kerberos/krb5kdc/kdc.conf must be
adjusted for your scenario. These files contain all information
on the KDC.
Create the Kerberos Database. Kerberos keeps a database of all principal identifiers and the secret keys of all principals that need to be authenticated.
Adjust the ACL Files: Add Administrators. The Kerberos database on the KDC can be managed remotely. To prevent unauthorized principals from tampering with the database, Kerberos uses access control lists. You must explicitly enable remote access for the administrator principal to enable him to manage the database.
Adjust the Kerberos Database: Add Administrators. You need at least one administrative principal to run and administer Kerberos. This principal must be added before starting the KDC.
Start the Kerberos Daemon. Once the KDC software is installed and properly configured, start the Kerberos daemon to provide Kerberos service for your realm.
Create a Principal for Yourself.
Before you can start, install the Kerberos software. On the KDC, install
the packages krb5, krb5-server, and krb5-client.
Your next step is to initialize the database where Kerberos keeps all information about principals. Set up the database master key, which is used to protect the database from accidental disclosure, in particular when it is backed up to a tape. The master key is derived from a pass phrase and is stored in a file called the stash file. This is so you do not need to enter the password every time the KDC is restarted. Make sure that you choose a good pass phrase, such as a sentence from a book opened to a random page.
When you make tape backups of the Kerberos database
(/var/lib/kerberos/krb5kdc/principal), do not back up
the stash file (which is in
/var/lib/kerberos/krb5kdc/.k5.EXAMPLE.COM). Otherwise,
everyone able to read the tape could also decrypt the database. Therefore,
it is also a good idea to keep a copy of the pass phrase in a safe or some
other secure location, because you need it to restore your
database from backup tape after a crash.
To create the stash file and the database, run:
$> kdb5_util create -r EXAMPLE.COM -s Initializing database '/var/lib/kerberos/krb5kdc/principal' for realm 'EXAMPLE.COM', master key name 'K/M@EXAMPLE.COM' You will be prompted for the database Master Password. It is important that you NOT FORGET this password. Enter KDC database master key: <= Type the master password. Re-enter KDC database master key to verify: <= Type it again. $>
To verify that it did anything, use the list command:
$>kadmin.local kadmin> listprincs K/M@EXAMPLE.COM kadmin/admin@EXAMPLE.COM kadmin/changepw@EXAMPLE.COM krbtgt/EXAMPLE.COM@EXAMPLE.COM
This shows that there are now a number of principals in the database. All of these are for internal use by Kerberos.
Next, create two Kerberos principals for
yourself: one normal principal for your everyday work and one for
administrative tasks relating to Kerberos.
Assuming your login name is newbie, proceed
as follows:
kadmin.local kadmin> ank newbie newbie@EXAMPLE.COM's Password: <type password here> Verifying password: <re-type password here>
Next, create another principal named newbie/admin by
typing ank newbie/admin at the
kadmin prompt. The admin suffixed to
your username is a role. Later, use this role when
administering the Kerberos database. A user can
have several roles for different purposes. Roles are basically completely
different accounts with similar names.
Start the KDC daemon and the kadmin daemon. To start the daemons manually,
enter
rckrb5kdc start and rckadmind start.
Also make sure that KDC and kadmind are started by default
when the server machine is rebooted with the command
insserv krb5kdc and
insserv kadmind.
When configuring Kerberos, there are basically
two approaches you can take—static configuration in the
/etc/krb5.conf file or dynamic configuration with DNS.
With DNS configuration, Kerberos applications try
to locate the KDC services using DNS records. With static configuration, add
the hostnames of your KDC server to krb5.conf (and
update the file whenever you move the KDC or reconfigure your realm in other
ways).
DNS-based configuration is generally a lot more flexible and the amount of
configuration work per machine is a lot less. However, it requires that your
realm name is either the same as your DNS domain or a subdomain of it.
Configuring Kerberos via DNS also creates a minor
security issue—an attacker can seriously disrupt your infrastructure
through your DNS (by shooting down the name server, spoofing DNS records,
etc.). However, this amounts to a denial of service at most. A similar
scenario applies to the static configuration case unless you enter IP
addresses in krb5.conf instead of hostnames.
One way to configure Kerberos is to edit
the configuration file /etc/krb5.conf. The file
installed by default contains various sample entries. Erase all of these
entries before starting. krb5.conf is made up of
several sections, each introduced by the section name included in brackets
like [this].
To configure your Kerberos clients, add the
following stanza to krb5.conf (where kdc.example.com is the hostname of the
KDC):
[libdefaults]
default_realm = EXAMPLE.COM
[realms]
EXAMPLE.COM = {
kdc = kdc.example.com
admin_server = kdc.example.com
}
The default_realm line sets the default realm for
Kerberos applications. If you have several
realms, just add additional statements to the [realms]
section.
Also add a statement to this file that tells applications how to map
hostnames to a realm. For example, when connecting to a remote host, the
Kerberos library needs to know in which realm this host is located. This
must be configured in the [domain_realms] section:
[domain_realm]
.example.com = EXAMPLE.COM
www.foobar.com = EXAMPLE.COM
This tells the library that all hosts in the
example.com DNS domains are in the
EXAMPLE.COM Kerberos realm.
In addition, one external host named www.foobar.com
should also be considered a member of the EXAMPLE.COM
realm.
DNS-based Kerberos configuration makes heavy use of SRV records. See (RFC2052) A DNS RR for specifying the location of services at http://www.ietf.org. These records are not supported in earlier implementations of the BIND name server. At least BIND version 8 is required for this.
The name of an SRV record, as far as
Kerberos is concerned, is always in the format
_service._proto.realm, where realm is the
Kerberos realm. Domain names in DNS are case
insensitive, so case-sensitive Kerberos realms
would break when using this configuration method.
_service is a service name (different names are used
when trying to contact the KDC or the password service, for example).
_proto can be either _udp or
_tcp, but not all services support both
protocols.
The data portion of SRV resource records consists of a priority value, a weight, a port number, and a hostname. The priority defines the order in which hosts should be tried (lower values indicate a higher priority). The weight is there to support some sort of load balancing among servers of equal priority. You probably do not need any of this, so it is okay to set these to zero.
MIT Kerberos currently looks up the following names when looking for services:
This defines the location of the KDC daemon (the authentication and ticket granting server). Typical records look like this:
_kerberos._udp.EXAMPLE.COM. IN SRV 0 0 88 kdc.example.com. _kerberos._tcp.EXAMPLE.COM. IN SRV 0 0 88 kdc.example.com.
This describes the location of the remote administration service. Typical records look like this:
_kerberos-adm._tcp.EXAMPLE.COM. IN SRV 0 0 749 kdc.example.com.
Because kadmind does not support UDP,
there should be no _udp record.
As with the static configuration file, there is a mechanism to inform
clients that a specific host is in the EXAMPLE.COM
realm, even if it is not part of the example.com DNS
domain. This can be done by attaching a TXT record to
_keberos.hostname, as shown here:
_keberos.www.foobar.com. IN TXT "EXAMPLE.COM"
The clock skew is the tolerance for accepting tickets with time stamps that do not exactly match the host's system clock. Usually, the clock skew is set to 300 seconds (five minutes). This means a ticket can have a time stamp somewhere between five minutes ago and five minutes in the future from the server's point of view.
When using NTP to synchronize all hosts, you can reduce this
value to about one minute. The clock skew value can be set in
/etc/krb5.conf like this:
[libdefaults]
clockskew = 120As an alternative to the manual configuration described above, use YaST to configure a Kerberos client. Proceed as follows:
Log in as root and select +.
Select .
To configure a DNS-based Kerberos client, proceed as follows:
Confirm the that are displayed.
Click to configure details on ticket-related issues, OpenSSH support, and time synchronization.
To configure a static Kerberos client, proceed as follows:
Set , , and to the values that match your setup.
Click to configure details on ticket-related issues, OpenSSH support, and time synchronization.
To configure ticket-related options in the dialog, choose from the following options:
Specify the and the in days, hours, or minutes (using the units of measurement d, h, and m, with no blank space between the value and the unit).
To forward your complete identity to use your tickets on other hosts, select .
Enable the transfer of certain tickets by selecting .
Keep tickets available with a PAM module even after a session has ended by enabling .
Enable Kerberos authentication support for your OpenSSH client by selecting the corresponding check box. The client then uses Kerberos tickets to authenticate with the SSH server.
Exclude a range of user accounts
from using Kerberos authentication by providing
a value for the that a user of this feature
must have. For instance, you may want to exclude the system administrator
(root).
Use to set a value for the allowable difference between the time stamps and your host's system time.
To keep the system time in sync with an NTP server, you can also set up the host as an NTP client by selecting , which opens the YaST NTP client dialog that is described in Section 32.1, “Configuring an NTP Client with YaST”. After finishing the configuration, YaST performs all the necessary changes and the Kerberos client is ready for use.
To be able to add and remove principals from the
Kerberos database without accessing the KDC's
console directly, tell the Kerberos
administration server which principals are allowed to do what. Do this by
editing the file /var/lib/kerberos/krb5kdc/kadm5.acl.
The ACL (access control list) file allows you to specify privileges with a
fine degree of control.
For details, refer to the manual
page with man 8 kadmind.
Right now, just grant yourself the privilege to do anything you want with the database by putting the following line into the file:
newbie/admin *
Replace the username newbie with your own.
Restart kadmind for the change to take effect.
You should now be able to perform Kerberos administration tasks remotely using the kadmin tool. First, obtain a ticket for your admin role and use that ticket when connecting to the kadmin server:
kadmin -p newbie/admin Authenticating as principal newbie/admin@EXAMPLE.COM with password. Password for newbie/admin@EXAMPLE.COM: kadmin: getprivs current privileges: GET ADD MODIFY DELETE kadmin:
Using the getprivs command, verify which privileges you have. The list shown above is the full set of privileges.
As an example, modify the principal newbie:
kadmin -p newbie/admin Authenticating as principal newbie/admin@EXAMPLE.COM with password. Password for newbie/admin@EXAMPLE.COM: kadmin: getprinc newbie Principal: newbie@EXAMPLE.COM Expiration date: [never] Last password change: Wed Jan 12 17:28:46 CET 2005 Password expiration date: [none] Maximum ticket life: 0 days 10:00:00 Maximum renewable life: 7 days 00:00:00 Last modified: Wed Jan 12 17:47:17 CET 2005 (admin/admin@EXAMPLE.COM) Last successful authentication: [never] Last failed authentication: [never] Failed password attempts: 0 Number of keys: 2 Key: vno 1, Triple DES cbc mode with HMAC/sha1, no salt Key: vno 1, DES cbc mode with CRC-32, no salt Attributes: Policy: [none] kadmin: modify_principal -maxlife "8 hours" newbie Principal "newbie@EXAMPLE.COM" modified. kadmin: getprinc joe Principal: newbie@EXAMPLE.COM Expiration date: [never] Last password change: Wed Jan 12 17:28:46 CET 2005 Password expiration date: [none] Maximum ticket life: 0 days 08:00:00 Maximum renewable life: 7 days 00:00:00 Last modified: Wed Jan 12 17:59:49 CET 2005 (newbie/admin@EXAMPLE.COM) Last successful authentication: [never] Last failed authentication: [never] Failed password attempts: 0 Number of keys: 2 Key: vno 1, Triple DES cbc mode with HMAC/sha1, no salt Key: vno 1, DES cbc mode with CRC-32, no salt Attributes: Policy: [none] kadmin:
This changes the maximum ticket life time to eight hours. For more
information about the kadmin command and the options
available, refer to http://web.mit.edu/kerberos/www/krb5-1.4/krb5-1.4/doc/krb5-admin.html#Kadmin%20Options
or look at man 8 kadmin.
In addition to making sure every machine on your network knows which Kerberos realm it is in and what KDC to contact, create a host principal for it. So far, only user credentials have been discussed. However, Kerberos-compatible services usually need to authenticate themselves to the client user, too. Therefore, special host principals must be present in the Kerberos database for each host in the realm.
The naming convention for host principals is
host/<hostname>@<REALM>, where
hostname is the host's fully qualified hostname.
Host principals are similar to user principals, but have significant
differences. The main difference between a user principal and a host
principal is that the key of the former is protected by a
password—when a user obtains a ticket-granting ticket from the KDC, he
needs to type his password so Kerberos can decrypt the ticket. It
would be quite inconvenient for the system administrator if he had to obtain
new tickets for the SSH daemon every eight hours or so.
Instead, the key required to decrypt the initial ticket for the host
principal is extracted by the administrator from the KDC once and stored in
a local file called the keytab. Services such the SSH
daemon read this key and use it to obtain new tickets automatically when
needed. The default keytab file resides in
/etc/krb5.keytab.
To create a host principal for test.example.com,
enter the following commands during your kadmin
session:
kadmin -p newbie/admin Authenticating as principal newbie/admin@EXAMPLE.COM with password. Password for newbie/admin@EXAMPLE.COM: kadmin: addprinc -randkey host/test.example.com WARNING: no policy specified for host/test.example.com@EXAMPLE.COM; defaulting to no policy Principal "host/test.example.com@EXAMPLE.COM" created.
Instead of setting a password for the new principal, the
-randkey flag tells kadmin to generate a
random key. This is used here because no user interaction is wanted for this
principal. It is a server account for the machine.
Finally, extract the key and store it in the local keytab file
/etc/krb5.keytab. This file is owned by the superuser,
so you must be root to execute the
next command in the kadmin shell:
kadmin: ktadd host/test.example.com Entry for principal host/test.example.com with kvno 3, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/test.example.com with kvno 3, encryption type DES cbc mode with CRC-32 added to keytab WRFILE:/etc/krb5.keytab. kadmin:
When completed, make sure that you destroy the admin ticket obtained with kinit above with kdestroy.
SUSE Linux Enterprise® comes with a PAM module named pam_krb5,
which supports Kerberos login and password
update. This module can be used by applications, such as console login, su,
and graphical login applications like KDM, where
the user presents a password and would like the authenticating application
to obtain an initial Kerberos ticket on his
behalf.
The pam_unix2 module also supports
Kerberos authentication and password update. To
enable Kerberos support in
pam_unix2, edit the file
/etc/security/pam_unix2.conf so it contains the
following lines:
auth: use_krb5 nullok account: use_krb5 password: use_krb5 nullok session: none
After that, all programs evaluating the entries in this file use
Kerberos for user authentication. For a user that
does not have a Kerberos principal,
pam_unix2 falls back on the normal password
authentication mechanism. For those users who have a principal, it should
now be possible to change their Kerberos
passwords transparently using the passwd command.
To make fine adjustments to the way in which
pam_krb5 is used, edit the file
/etc/krb5.conf and add default applications to
pam. For details, refer to the manual page with
man 5 pam_krb5.
The pam_krb5 module was specifically not designed for
network services that accept
Kerberos tickets as part of user authentication. This is an entirely
different matter, which is discussed below.
OpenSSH supports Kerberos authentication in both protocol version 1 and 2. In version 1, there are special protocol messages to transmit Kerberos tickets. Version 2 does not use Kerberos directly anymore, but relies on GSSAPI, the General Security Services API. This is a programming interface that is not specific to Kerberos—it was designed to hide the peculiarities of the underlying authentication system, be it Kerberos, a public-key authentication system like SPKM, or others. The GSSAPI library included supports only Kerberos, however.
To use sshd with Kerberos authentication, edit
/etc/ssh/sshd_config and set the following
options:
# These are for protocol version 1 # # KerberosAuthentication yes # KerberosTicketCleanup yes # These are for version 2 - better to use this GSSAPIAuthentication yes GSSAPICleanupCredentials yes
Then restart your SSH daemon using rcsshd
restart.
To use Kerberos authentication with protocol
version 2, enable it on the client side as well. Do this either in the
systemwide configuration file /etc/ssh/ssh_config or
on a per-user level by editing ~/.ssh/config. In both
cases, add the option GSSAPIAuthentication yes.
You should now be able to connect using Kerberos
authentication. Use klist to verify that you have a valid
ticket then connect to the SSH server. To force SSH protocol version 1,
specify the -1 option on the command line.
![]() | Additional Information |
|---|---|
The file
| |
When using Kerberos, one way to distribute the user information (such as user ID, groups,and home directory) in your local network is to use LDAP. This requires a strong authentication mechanism that prevents packet spoofing and other attacks. One solution is to use Kerberos for LDAP communication, too.
OpenLDAP implements most authentication flavors through SASL, the simple authentication session layer. SASL is basically a network protocol designed for authentication. The SASL implementation is cyrus-sasl, which supports a number of different authentication flavors. Kerberos authentication is performed through GSSAPI (General Security Services API). By default, the SASL plug-in for GSSAPI is not installed. Install it manually with rpm -ivh cyrus-sasl-gssapi-*.rpm.
To enable Kerberos to bind to the
OpenLDAP server, create a principal
ldap/earth.example.com and add that to the keytab.
By default, the LDAP server slapd runs as user and group ldap, while the keytab file is readable by
root only. Therefore, either
change the LDAP configuration so the server runs as root or make the keytab file readable by the
group ldap. The latter is done
automatically by the OpenLDAP start script
(/etc/init.d/ldap) if the keytab file has been
specified in the OPENLDAP_KRB5_KEYTAB variable in
/etc/sysconfig/openldap and the
OPENLDAP_CHOWN_DIRS variable is set to yes,
which is the default setting. If OPENLDAP_KRB5_KEYTAB is left
empty, the default keytab under /etc/krb5.keytab is
used and you must adjust the privileges yourself as described below.
To run slapd as root, edit /etc/sysconfig/openldap.
Disable the OPENLDAP_USER and
OPENLDAP_GROUP variables by putting a comment
character in front of them.
To make the keytab file readable by group LDAP, execute
chgrp ldap /etc/krb5.keytab chmod 640 /etc/krb5.keytab
A third, and maybe the best solution, is to tell OpenLDAP to use a special keytab file. To do this, start kadmin, and enter the following command after you have added the principal ldap/earth.example.com:
ktadd -k /etc/openldap/ldap.keytab ldap/earth.example.com@EXAMPLE.COM
Then, on the shell, run:
chown ldap.ldap /etc/openldap/ldap.keytab chmod 600 /etc/openldap/ldap.keytab
To tell OpenLDAP to use a different keytab file, change the
following variable in /etc/sysconfig/openldap:
OPENLDAP_KRB5_KEYTAB="/etc/openldap/ldap.keytab"
Finally, restart the LDAP server using
rcldap restart.
You should now be able to use tools, such as ldapsearch, with Kerberos authentication automatically.
ldapsearch -b ou=people,dc=example,dc=com '(uid=newbie)' SASL/GSSAPI authentication started SASL SSF: 56 SASL installing layers [...] # newbie, people, example.com dn: uid=newbie,ou=people,dc=example,dc=com uid: newbie cn: Olaf Kirch [...]
As you can see, ldapsearch prints a message that it started GSSAPI authentication. The next message is very cryptic, but it shows that the security strength factor (SSF for short) is 56 (The value 56 is somewhat arbitrary. Most likely it was chosen because this is the number of bits in a DES encryption key). What this tells you is that GSSAPI authentication was successful and that encryption is being used to provide integrity protection and confidentiality for the LDAP connection.
In Kerberos, authentication is always mutual. This means that not only have you authenticated yourself to the LDAP server, but also the LDAP server authenticated itself to you. In particular, this means communication is with the desired LDAP server, rather than some bogus service set up by an attacker.
Now, allow each user to modify the login shell attribute of their LDAP user
record. Assuming you have a schema where the LDAP entry of user joe is located at
uid=joe,ou=people,dc=example,dc=com, set up the
following access controls in /etc/openldap/slapd.conf:
# This is required for things to work _at all_
access to dn.base="" by * read
# Let each user change their login shell
access to dn="*,ou=people,dc=example,dc=com" attrs=loginShell
by self write
# Every user can read everything
access to *
by users read
The second statement gives authenticated users write access to the
loginShell attribute of their own LDAP entry. The third
statement gives all authenticated users read access to the entire LDAP
directory.
There is one minor piece of the puzzle missing—how the LDAP
server can find out that the Kerberos user
joe@EXAMPLE.COM corresponds to the LDAP distinguished
name uid=joe,ou=people,dc=example,dc=com. This sort of
mapping must be configured manually using the saslExpr
directive. In this example, add the following to
slapd.conf:
authz-regexp uid=(.*),cn=GSSAPI,cn=auth uid=$1,ou=people,dc=example,dc=com
To understand how this works, you need to know that when SASL authenticates
a user, OpenLDAP forms a distinguished name from
the name given to it by SASL (such as joe) and the name
of the SASL flavor (GSSAPI). The result would be
uid=joe,cn=GSSAPI,cn=auth.
If a authz-regexp has been configured, it checks the DN
formed from the SASL information using the first argument as a regular
expression. If this regular expression matches, the name is replaced with
the second argument of the authz-regexp statement. The
placeholder $1 is replaced with the substring matched by
the (.*) expression.
More complicated match expressions are possible. If you have a more complicated directory structure or a schema in which the username is not part of the DN, you can even use search expressions to map the SASL DN to the user DN.