Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
PAM_KRB5(8)		     System Manager's Manual		     PAM_KRB5(8)

NAME
     pam_krb5 -- Kerberos PAM module

SYNOPSIS
       auth	       sufficient      pam_krb5.so minimum_uid=1000
       session	       required        pam_krb5.so minimum_uid=1000
       account	       required        pam_krb5.so minimum_uid=1000
       password        sufficient      pam_krb5.so minimum_uid=1000

DESCRIPTION
     The   Kerberos   service	module	 for   PAM,   typically   installed   at
     /lib/security/pam_krb5.so, provides functionality for the four  PAM  opera-
     tions: authentication, account management, session management, and password
     management.   pam_krb5.so	is a shared object that is dynamically loaded by
     the PAM subsystem as necessary, based on the system PAM configuration.  PAM
     is a system for plugging in external authentication and session  management
     modules so that each application doesn't have to know the best way to check
     user  authentication  or create a user session on that system.  For details
     on how to configure PAM on  your  system,	see  the  PAM  man  page,  often
     pam.conf(5).

     Here are the actions of this module when called from each group:

     auth    Provides implementations of pam_authenticate(3) and pam_setcred(3).
	     The former takes the username from the PAM session, prompts for the
	     user's  password (unless configured to use an already-entered pass-
	     word), and then performs a Kerberos initial authentication, storing
	     the obtained credentials (if  successful)	in  a  temporary  ticket
	     cache.   The  latter, depending on the flags it is called with, ei-
	     ther takes the contents of the temporary ticket cache and writes it
	     out to a persistent ticket cache owned by the user or uses the tem-
	     porary ticket cache to refresh an existing user ticket cache.

	     Passwords as long or longer than PAM_MAX_RESP_SIZE octets (normally
	     512 octets) will be rejected, since excessively long passwords  can
	     be used as a denial of service attack.

	     After  doing  the	initial  authentication, the Kerberos PAM module
	     will attempt to obtain tickets for a key in the local system keytab
	     and then verify those tickets.  Unless this step is performed,  the
	     authentication  is vulnerable to KDC spoofing, but it requires that
	     the system have a local key and that the PAM module be running as a
	     user that can read the keytab file (normally /etc/krb5.keytab.  You
	     can point the Kerberos PAM module at a different  keytab  with  the
	     keytab  option.   If  that  keytab cannot be read or if no keys are
	     found in it, the default behavior is to  fail  authentication.   If
	     you  want	to  skip this check, set the "allow_kdc_spoof" option to
	     true either in the [appdefaults] section of  /etc/krb5.conf  or  in
	     the PAM policy.

	     By  default, whenever the user is authenticated, a basic authoriza-
	     tion check will also be done using  krb5_kuserok(3).   The  default
	     behavior  of  this  function  is  to check the user's account for a
	     .k5login file and, if one is present, ensure that the user's  prin-
	     cipal  is listed in that file.  If .k5login is not present, the de-
	     fault check is to ensure that the user's principal is  in	the  de-
	     fault local realm and the user portion of the principal matches the
	     account  name (this can be changed by configuring a custom aname to
	     localname mapping in krb5.conf; see the Kerberos documentation  for
	     details).	 This  can  be customized with several configuration op-
	     tions; see below.

	     If the username provided to PAM contains an "@" and  Kerberos  can,
	     treating  the  username  as  a principal, map it to a local account
	     name, pam_authenticate(3) will change the PAM user  to  that  local
	     account  name.   This  allows  users  to log in with their Kerberos
	     principal and let Kerberos do the mapping to an account.  This  can
	     be  disabled  with  the  no_update_user option.  Be aware, however,
	     that this facility cannot be used with OpenSSH.  OpenSSH  will  re-
	     ject  usernames  that don't match local accounts before this remap-
	     ping can be done and will pass an invalid password to the PAM  mod-
	     ule.   Also be aware that several other common PAM modules, such as
	     pam_securetty, expect to be able to look up the  user  with  getpw-
	     nam(3)  and  cannot  be called before pam_krb5 when using this fea-
	     ture.

	     When pam_setcred(3) is called to initialize a new ticket cache, the
	     environment variable KRB5CCNAME is set to the path to  that  ticket
	     cache.   By default, the cache will be named /tmp/krb5cc_UID_RANDOM
	     where UID is the user's UID and RANDOM is six randomly-chosen  let-
	     ters.   This  can	be configured with the ccache and ccache_dir op-
	     tions.

	     pam-krb5  does  not  use  the  default  ticket  cache  location  or
	     default_cc_name  in  the "[libdefaults]" section of krb5.conf.  The
	     default cache location would share a cache for all sessions of  the
	     same  user,  which causes confusing behavior when the user logs out
	     of one of multiple sessions.

	     If pam_setcred(3) initializes a new ticket cache, it will also  set
	     up  that  ticket cache so that it will be deleted when the PAM ses-
	     sion is closed.  Normally, the calling program (login, sshd,  etc.)
	     will  run	the  user's shell as a sub-process, wait for it to exit,
	     and then close the PAM session, thereby cleaning up the user's ses-
	     sion.

     session
	     Provides implementations of pam_open_session(3), which  is  equiva-
	     lent  to  calling	pam_setcred(3) with the PAM_ESTABLISH_CRED flag,
	     and pam_close_session(3), which destroys the ticket  cache  created
	     by pam_setcred(3).

     account
	     Provides  an implementation of pam_acct_mgmt(3).  All it does is do
	     the same authorization check  as  performed  by  the  pam_authenti-
	     cate(3) implementation described above.

     password
	     Provides  an  implementation  of pam_chauthtok(3), which implements
	     password changes.	The user is prompted for their existing password
	     (unless configured to use an already entered one) and the PAM  mod-
	     ule  then	obtains  credentials  for the special Kerberos principal
	     "kadmin/changepw".  It then prompts the user for  a  new  password,
	     twice  to	ensure	that the user entered it properly (again, unless
	     configured to use an already entered password),  and  then  does  a
	     Kerberos password change.

	     Passwords as long or longer than PAM_MAX_RESP_SIZE octets (normally
	     512  octets) will be rejected, since excessively long passwords can
	     be used as a denial of service attack.

	     Unlike the normal Unix password module, this module will allow  any
	     user to change any other user's password if they know the old pass-
	     word.   Also, unlike the normal Unix password module, root will al-
	     ways be prompted for the old password, since root	has  no  special
	     status in Kerberos.  (To change passwords in Kerberos without know-
	     ing the old password, use kadmin(8) instead.)

     Both  the	account  and session management calls of the Kerberos PAM module
     will return PAM_IGNORE if called in the context of a PAM session for a user
     who did not authenticate with Kerberos (a return code of  "ignore"  in  the
     Linux PAM configuration language).

     Note  that  this  module  assumes the network is available in order to do a
     Kerberos authentication.  If the network is not  available,  some	Kerberos
     libraries	have  timeouts	longer	than  the  timeout  imposed by the login
     process.  This means that using this module incautiously can make it impos-
     sible to log on to console as root.  For this reason, you should always use
     the ignore_root or minimum_uid options, list a local authentication  module
     such  as  pam_unix  first	with a control field of "sufficient" so that the
     Kerberos PAM module will be skipped if local  password  authentication  was
     successful.

     This  is  not the same PAM module as the Kerberos PAM module available from
     Sourceforge, or the one included on Red Hat systems.  It supports	many  of
     the  same options, has some additional options, and doesn't support some of
     the options those modules do.

CONFIGURATION
     The Kerberos PAM module takes many options, not all of which  are	relevant
     to every PAM group; options that are not relevant will be silently ignored.
     Any  of  these  options  can  be  set in the PAM configuration as arguments
     listed after "pam_krb5.so".  Some of the options can also	be  set  in  the
     system  krb5.conf	file; if this is possible, it will be noted below in the
     option description.

     To set a boolean option in the PAM configuration file, just give  the  name
     of  the  option in the arguments.	To set an option that takes an argument,
     follow the option name with an equal sign (=) and the value, with no  sepa-
     rating  whitespace.  Whitespace in option arguments is not supported in the
     PAM configuration.

     To set an option for the PAM module in the system krb5.conf file, put  that
     option  in the "[appdefaults]" section.  All options must be followed by an
     equal sign (=) and a value, so for boolean options add "= true".  The  Ker-
     beros  PAM  module  will  look  for  options either at the top level of the
     "[appdefaults]" section or in a subsection named "pam", inside or outside a
     section for the realm.  For example, the following fragment of a  krb5.conf
     file   would  set	forwardable  to  true,	minimum_uid  to  1000,	and  set
     ignore_k5login only if the realm is EXAMPLE.COM.

	 [appdefaults]
	     forwardable = true
	     pam = {
		 minimum_uid = 1000
		 EXAMPLE.COM = {
		     ignore_k5login = true
		 }
	     }

     For more information on the syntax of  krb5.conf,	see  krb5.conf(5).  Note
     that  options that depend on the realm will be set only on the basis of the
     default realm, either as configured in krb5.conf(5) or as set by the  realm
     option  described below.  If the user authenticates to an account qualified
     with a realm, that realm will not be used when  determining  which  options
     will apply.

     There  is	no difference to the PAM module whether options are specified at
     the top level or in a "pam" section; the "pam" section is supported in case
     there are options that should be set for the PAM module but not  for  other
     applications.

     If  the  same  option is set in krb5.conf and in the PAM configuration, the
     latter takes precedent.  Note, however, that due to the configuration  syn-
     tax,  there's  no way to turn off a boolean option in the PAM configuration
     that was turned on in krb5.conf.

     The start of each option description is annotated with the version of  pam-
     krb5 in which that option was added with the current meaning.

   Authorization
     allow_kdc_spoof
	     Allow authentication to succeed even if there is no host or service
	     key  available  in  a  keytab  to	authenticate  the Kerberos KDC's
	     ticket.

     alt_auth_map=<format>
	     [3.12] This functions similarly to the search_k5login option.   The
	     <format> argument is used as the authentication Kerberos principal,
	     with any "%s" in <format> replaced with the username.  If the user-
	     name  contains  an  "@",  only  the part of the username before the
	     realm is used to replace "%s".  If <format> contains  a  realm,  it
	     will be used; otherwise, the realm of the username (if any) will be
	     appended to the result.  There is no quote removal.

	     If  this option is present, the default behavior is to try this al-
	     ternate principal first and then fall back to the standard behavior
	     if it fails.  The primary usage is to allow alternative  principals
	     to be used for authentication in programs like sudo.  Most examples
	     will look like:

		 alt_auth_map=%s/root

	     which  attempts authentication as the root instance of the username
	     first and	then  falls  back  to  the  regular  username  (but  see
	     force_alt_auth and only_alt_auth).

	     This option also allows a cheap way to attempt authentication in an
	     alternative realm first and then fall back to the primary realm.  A
	     setting like:

		 alt_auth_map=%s@EXAMPLE.COM

	     will attempt authentication in the EXAMPLE.COM realm first and then
	     fall back on the local default realm.  This is more convenient than
	     running  the module multiple times with multiple default realms set
	     with realm, but it is very limited: only two realms can  be  tried,
	     and the alternate realm is always tried first.

	     This  option  can	be set in "[appdefaults]" in krb5.conf, although
	     normally it doesn't make sense to do that; normally it is	used  in
	     the PAM options of configuration for specific programs.  It is only
	     applicable  to  the auth and account groups.  If this option is set
	     for the auth group, be sure to set it for the account group as well
	     or account authorization may fail.

     force_alt_auth
	     [3.12] This option is used with alt_auth_map and forces authentica-
	     tion as the mapped principal if that principal exists in  the  KDC.
	     Only  if  the  KDC  returns principal unknown does the Kerberos PAM
	     module fall back to normal authentication.  This  can  be	used  to
	     force  authentication  with an alternate instance.  If alt_auth_map
	     is not set, it has no effect.

	     This option can be set in "[appdefaults]" in krb5.conf and is  only
	     applicable to the auth group.

     ignore_k5login
	     [2.0]  Never look for a .k5login file in the user's home directory.
	     Instead, only check that the Kerberos principal maps to  the  local
	     account name.  The default check is to ensure the realm matches the
	     local realm and the user portion of the principal matches the local
	     account  name, but this can be customized by setting up an aname to
	     localname mapping in krb5.conf.

	     This option can be set in "[appdefaults]" in krb5.conf and is  only
	     applicable to the auth and account groups.

     ignore_root
	     [1.1]  Do not do anything if the username is "root".  The authenti-
	     cation and password calls will silently fail (allowing that  status
	     to be ignored via a control of "optional" or "sufficient"), and the
	     account  and  session  calls  (including  pam_setcred)  will return
	     PAM_IGNORE, telling the PAM library to proceed as if  they  weren't
	     mentioned	in  the PAM configuration.  This option is supported and
	     will remain, but normally you want to use minimum_uid instead.

	     This option can be set in "[appdefaults]" in krb5.conf.

     minimum_uid=<uid>
	     [2.0] Do not do anything if the authenticated account  name  corre-
	     sponds  to  a  local account and that local account has a UID lower
	     than <uid>. If both of those conditions are true,	the  authentica-
	     tion and password calls will silently fail (allowing that status to
	     be  ignored  via  a control of "optional" or "sufficient"), and the
	     account and  session  calls  (including  pam_setcred)  will  return
	     PAM_IGNORE,  telling  the PAM library to proceed as if they weren't
	     mentioned in the PAM configuration.

	     Using this option is highly recommended if you don't  need  to  use
	     Kerberos to authenticate password logins to the root account (which
	     isn't  recommended  since	Kerberos requires a network connection).
	     It provides some defense in depth against user principals that hap-
	     pen to match a system account incorrectly	authenticating	as  that
	     system account.

	     This option can be set in "[appdefaults]" in krb5.conf.

     only_alt_auth
	     [3.12]  This option is used with alt_auth_map and forces the use of
	     the mapped principal for authentication.  It disables  fallback  to
	     normal authentication in all cases and overrides search_k5login and
	     force_alt_auth.   If  alt_auth_map is not set, it has no effect and
	     the standard authentication behavior is used.

	     This option can be set in "[appdefaults]" in krb5.conf and is  only
	     applicable to the auth group.

     search_k5login
	     [2.0] Normally, the Kerberos implementation of pam_authenticate at-
	     tempts to obtain tickets for the authenticating username in the lo-
	     cal realm.  If this option is set and the local user has a .k5login
	     file in their home directory, the module will instead open and read
	     that  .k5login file, attempting to use the supplied password to au-
	     thenticate as each principal listed there in turn.  If any of those
	     authentications succeed, the user will  be  successfully  authenti-
	     cated;  otherwise, authentication will fail.  This option is useful
	     for allowing password authentication (via console or  sshd  without
	     GSS-API support) to shared accounts.  If there is no .k5login file,
	     the  behavior  is	the  same as normal.  Using this option requires
	     that the user's .k5login file be readable at the time of  authenti-
	     cation.

	     This  option can be set in "[appdefaults]" in krb5.conf and is only
	     applicable to the auth group.

   Kerberos Behavior
     anon_fast
	     [4.6] Attempt  to	use  Flexible  Authentication  Secure  Tunneling
	     (FAST)  by  first	authenticating	as  the  anonymous  user  (WELL-
	     KNOWN/ANONYMOUS) and using its credentials as the FAST armor.  This
	     requires anonymous PKINIT be enabled  for	the  local  realm,  that
	     PKINIT be configured on the local system, and that the Kerberos li-
	     brary support FAST and anonymous PKINIT.

	     FAST  is  a mechanism to protect Kerberos against password guessing
	     attacks and provide other security improvements.  To work, FAST re-
	     quires that a ticket be obtained with a strong key to  protect  ex-
	     changes  with  potentially weaker user passwords.	This option uses
	     anonymous authentication to obtain that key and  then  uses  it  to
	     protect the subsequent authentication.

	     If  anonymous  PKINIT  is	not available or fails, FAST will not be
	     used and the authentication will proceed as normal.

	     To instead use an existing ticket cache for the  FAST  credentials,
	     use  fast_ccache  instead	of this option.  If both fast_ccache and
	     anon_fast are set, the ticket cache named by  fast_ccache	will  be
	     tried first, and the Kerberos PAM module will fall back on attempt-
	     ing anonymous PKINIT if that cache could not be used.

	     This  option can be set in "[appdefaults]" in krb5.conf and is only
	     applicable to the auth and password groups.

	     The operation is the same as if using the fast_ccache  option,  but
	     the   cache  is  created  and  destroyed  automatically.	If  both
	     fast_ccache and anon_fast options are used, the  fast_ccache  takes
	     precedent and no anonymous authentication is done.

     fast_ccache=<ccache_name>
	     [4.3]  The  same  as anon_fast, but use an existing Kerberos ticket
	     cache rather than anonymous PKINIT.  This allows use of FAST with a
	     realm that doesn't support PKINIT or doesn't support anonymous  au-
	     thentication.

	     <ccache_name>  should be a credential cache containing a ticket ob-
	     tained using a strong key, such as the randomized key for the  host
	     principal	of  the  local	system.  If <ccache_name> names a ticket
	     cache that is readable by the authenticating process and has  tick-
	     ets  then	FAST will be attempted.  The easiest way to use this op-
	     tion is to use a program like k5start to maintain	a  ticket  cache
	     using the host's keytab.  This ticket cache should normally only be
	     readable  by  root,  so this option will not be able to protect au-
	     thentications done as non-root users (such as screensavers).

	     If no credentials are present in the ticket cache, or if the ticket
	     cache does not exist or is not readable, FAST will not used and au-
	     thentication will proceed as normal.  However, if	the  credentials
	     in  that  ticket cache are expired, authentication will fail if the
	     KDC supports FAST.

	     To use anonymous PKINIT to  protect  the  FAST  exchange,	use  the
	     anon_fast	option instead.  anon_fast is easier to configure, since
	     no existing ticket cache is required, but requires PKINIT be avail-
	     able and configured and that the local realm support anonymous  au-
	     thentication.   If  both  fast_ccache  and  anon_fast  are set, the
	     ticket cache named by fast_ccache will be tried first, and the Ker-
	     beros PAM module will fall back on attempting anonymous  PKINIT  if
	     that cache could not be used.

	     This  option can be set in "[appdefaults]" in krb5.conf and is only
	     applicable to the auth and password groups.

     forwardable
	     [1.0] Obtain forwardable tickets.	If set (to either true or false,
	     although it can only be set to false in krb5.conf), this  overrides
	     the  Kerberos  library  default set in the [libdefaults] section of
	     krb5.conf.

	     This option can be set in "[appdefaults]" in krb5.conf and is  only
	     applicable to the auth group.

     keytab=<path>
	     [3.0]  Specifies  the keytab to use when validating the user's cre-
	     dentials.	The default  is  the  default  system  keytab  (normally
	     /etc/krb5.keytab),  which is usually only readable by root.  Appli-
	     cations not running as root that use this PAM module for  authenti-
	     cation  may  wish to point it to another keytab the application can
	     read.  The first principal found in the keytab will be used as  the
	     principal for credential verification.

	     This  option can be set in "[appdefaults]" in krb5.conf and is only
	     applicable to the auth group.

     realm=<realm>
	     [2.2] Set the default Kerberos realm and obtain credentials in that
	     realm, rather than in the normal default realm for this system.  If
	     this option is used, it should be set for all groups being used for
	     consistent results.  This setting will affect  authorization  deci-
	     sions  since  it changes the default realm.  This setting will also
	     change the service principal used to verify  the  obtained  creden-
	     tials to be in the specified realm.

	     If you only want to set the realm assumed for user principals with-
	     out  changing  the realm for authorization decisions or the service
	     principal used to verify credentials, see the user_realm option.

     renew_lifetime=<lifetime>
	     [2.0] Obtain renewable tickets with a maximum renewable lifetime of
	     <lifetime>. <lifetime> should be a Kerberos lifetime string such as
	     "2d4h10m" or a time in minutes.  If set, this  overrides  the  Ker-
	     beros   library   default	set  in  the  [libdefaults]  section  of
	     krb5.conf.

	     This option can be set in "[appdefaults]" in krb5.conf and is  only
	     applicable to the auth group.

     ticket_lifetime=<lifetime>
	     [3.0]  Obtain tickets with a maximum lifetime of <lifetime>. <life-
	     time> should be a Kerberos lifetime string such as "2d4h10m"  or  a
	     time  in  minutes.  If set, this overrides the Kerberos library de-
	     fault set in the [libdefaults] section of krb5.conf.

	     This option can be set in "[appdefaults]" in krb5.conf and is  only
	     applicable to the auth group.

     user_realm
	     [4.6]  Obtain credentials in the specified realm rather than in the
	     default realm for this system.  If this option is used,  it  should
	     be  set  for all groups being used for consistent results (although
	     the account group currently doesn't care about realm).   This  will
	     not  change  authorization  decisions.  If the obtained credentials
	     are supposed to allow access to a shell account, the user will need
	     an appropriate .k5login file entry or the system will have to  have
	     a custom aname_to_localname mapping.

   PAM Behavior
     clear_on_fail
	     [3.9]  When  changing passwords, PAM first does a preliminary check
	     through the complete password stack, and  then  calls  each  module
	     again to do the password change.  After that preliminary check, the
	     order  of	module invocation is fixed.  This means that even if the
	     Kerberos password change fails (or if one	of  the  other	password
	     changes  in  the  stack  fails),  other password PAM modules in the
	     stack will still be called even if the failing module is marked re-
	     quired or requisite.  When using multiple password PAM  modules  to
	     synchronize  passwords  between  multiple systems when they change,
	     this behavior can cause unwanted differences between  the	environ-
	     ments.

	     Setting  this  option  provides a way to work around this behavior.
	     If this option is set and a Kerberos password change  is  attempted
	     and  fails  (due to network errors or password strength checking on
	     the KDC, for example), this module will clear the	stored	password
	     in the PAM stack.	This will force any subsequent modules that have
	     use_authtok set to fail so that those environments won't get out of
	     sync  with  the password in Kerberos.  The Kerberos PAM module will
	     not meddle with the stored password if it skips  the  user  due  to
	     configuration such as minimum_uid.

	     Unfortunately,  setting this option interferes with other desirable
	     PAM configurations, such as attempting to change  the  password  in
	     Kerberos first and falling back on the local Unix password database
	     if  that  fails.	It therefore isn't the default.  Turn it on (and
	     list pam_krb5 first after pam_cracklib if used) when  synchronizing
	     passwords between multiple environments.

	     This  option can be set in "[appdefaults]" in krb5.conf and is only
	     applicable to the password group.

     debug   [1.0] Log more verbose trace and debugging information to syslog at
	     LOG_DEBUG priority, including entry and exit from each of	the  ex-
	     ternal PAM interfaces (except pam_close_session).

	     This option can be set in "[appdefaults]" in krb5.conf.

     defer_pwchange
	     [3.11]  By  default,  pam-krb5  lets  the	Kerberos  library handle
	     prompting for a password change if an account's password is expired
	     during the auth group.  If this fails, pam_authenticate(3)  returns
	     an error.

	     According	to the PAM standard, this is not the correct way to han-
	     dle expired passwords.  Instead, pam_authenticate(3) should  return
	     success   without	 attempting   a   password   change,   and  then
	     pam_acct_mgmt(3) should return PAM_NEW_AUTHTOK_REQD, at which point
	     the calling application is responsible for either rejecting the au-
	     thentication or calling pam_chauthtok(3).	However,  following  the
	     standard  requires  that all applications call pam_acct_mgmt(3) and
	     check its return status; otherwise, expired accounts may be able to
	     successfully authenticate.  Many applications do not do this.

	     If this option is set, pam-krb5 uses the fully correct  PAM  mecha-
	     nism  for	handling  expired accounts instead of failing in pam_au-
	     thenticate(3).  Due to the security risk of widespread  broken  ap-
	     plications,  be very careful about enabling this option.  It should
	     normally only be turned on to solve a specific problem (such as us-
	     ing Solaris Kerberos libraries that  don't  support  prompting  for
	     password changes during authentication), and then only for specific
	     applications  known  to  call pam_acct_mgmt(3) and check its return
	     status properly.

	     This option is only supported when pam-krb5 is built with MIT  Ker-
	     beros.  If built against Heimdal, this option does nothing and nor-
	     mal  expired  password  change handling still happens.  (Heimdal is
	     missing the required API to implement this option, at least  as  of
	     version 1.6.)

	     This  option can be set in "[appdefaults]" in krb5.conf and is only
	     applicable to the auth group.

     fail_pwchange
	     [4.2] By default, pam-krb5 lets the Kerberos library handle prompt-
	     ing for a password change if an account's password is expired  dur-
	     ing  the  auth group.  If this option is set, expired passwords are
	     instead treated as an authentication failure identical to an incor-
	     rect password.  Also see defer_pwchange and force_pwchange.

	     This option can be set in "[appdefaults]" in krb5.conf and is  only
	     applicable to the auth group.

     force_pwchange
	     [3.11]  If  this option is set and authentication fails with a Ker-
	     beros error indicating the user's password is expired,  attempt  to
	     immediately  change  their  password  during the authenticate step.
	     Under normal circumstances, this is unnecessary.  Most Kerberos li-
	     braries will do this for you, and setting this option  will  prompt
	     the  user twice to change their password if the first attempt (done
	     by the Kerberos library) fails.  However, some system Kerberos  li-
	     braries (such as Solaris's) have password change prompting disabled
	     in  the Kerberos library; on those systems, you can set this option
	     to simulate the normal library behavior.

	     This option can be set in "[appdefaults]" in krb5.conf and is  only
	     applicable to the auth group.

     no_update_user
	     [4.7]  Normally,  if pam-krb5 is able to canonicalize the principal
	     to a local name using krb5_aname_to_localname(3) or similar  calls,
	     it changes the PAM_USER variable for this PAM session to the canon-
	     icalized  local  name.   Setting this option disables this behavior
	     and leaves PAM_USER set to the initial authentication identity.

	     This option can be set in "[appdefaults]" in krb5.conf and is  only
	     applicable to the auth group.

     silent  [1.0]  Don't  show messages and errors from Kerberos, such as warn-
	     ings of expiring passwords, to the user via the prompter.	This  is
	     equivalent   to   the  behavior  when  the  application  passes  in
	     PAM_SILENT, but can be set in the PAM configuration.

	     This option is only applicable to the auth and password groups.

     trace=<log-file>
	     [4.6] Enables Kerberos library trace logging to the  specified  log
	     file  if it is supported by the Kerberos library.	This is intended
	     for temporary debugging.  The specified file will	be  appended  to
	     without further security checks, so do not specify a file in a pub-
	     licly writable directory like /tmp.

   PKINIT
     pkinit_anchors=<anchors>
	     [3.0] When doing PKINIT authentication, use <anchors> as the client
	     trust  anchors.   This is normally a reference to a file containing
	     the trusted certificate authorities.  This option is only	used  if
	     try_pkinit or use_pkinit are set.

	     This  option can be set in "[appdefaults]" in krb5.conf and is only
	     applicable to the auth and password groups.

     pkinit_prompt
	     [3.0] Before attempting PKINIT authentication, prompt the	user  to
	     insert  a smart card.  You may want to set this option for programs
	     such as gnome-screensaver that call PAM as soon  as  the  mouse  is
	     touched  and  don't give the user an opportunity to enter the smart
	     card first.  Any information entered at the  first  prompt  is  ig-
	     nored.   If  try_pkinit is set, a user who wishes to use a password
	     instead can just press Enter and then enter their password as  nor-
	     mal.  This option is only used if try_pkinit or use_pkinit are set.

	     This  option can be set in "[appdefaults]" in krb5.conf and is only
	     applicable to the auth and password groups.

     pkinit_user=<userid>
	     [3.0] When doing PKINIT authentication, use <userid>  as  the  user
	     ID.  The  value  of  this string is highly dependent on the type of
	     PKINIT implementation you're using, but will generally be something
	     like:

		 PKCS11:/usr/lib/pkcs11/lib/soft-pkcs11.so

	     to specify the module to use with a smart card.  It may also  point
	     to  a user certificate or to other types of user IDs.  See the Ker-
	     beros library documentation for more details.  This option is  only
	     used if try_pkinit or use_pkinit are set.

	     This  option can be set in "[appdefaults]" in krb5.conf and is only
	     applicable to the auth and password groups.

     preauth_opt=<option>
	     [3.3] Sets a preauth option (currently only applicable  when  built
	     with  MIT	Kerberos).  <option> is either a key/value pair with the
	     key separated from the value by "=" or a boolean option  (in  which
	     case  it's  turned  on).	In krb5.conf, multiple options should be
	     separated by whitespace.  In the PAM configuration, this option can
	     be given multiple times to set multiple options.  In  either  case,
	     <option> may not contain whitespace.

	     The  primary  use of this option, at least in the near future, will
	     be to set options for the MIT Kerberos  PKINIT  support.	For  the
	     full list of possible options, see the PKINIT plugin documentation.
	     At  the time of this writing, "X509_user_identity" is equivalent to
	     pkinit_user and "X509_anchors"  is  equivalent  to  pkinit_anchors.
	     "flag_DSA_PROTOCOL" can only be set via this option.

	     Any   settings   made  with  this	option	are  applied  after  the
	     pkinit_anchors and pkinit_user options, so if an equivalent setting
	     is made via preauth_opt, it will probably override the  other  set-
	     ting.

	     This  option can be set in "[appdefaults]" in krb5.conf and is only
	     applicable to the auth and password groups.  Note that there is  no
	     way  to remove a setting made in krb5.conf using the PAM configura-
	     tion, but options set in the PAM configuration  are  applied  after
	     options  set  in  krb5.conf and therefore may override earlier set-
	     tings.

     try_pkinit
	     [3.0] Attempt PKINIT authentication before trying a  regular  pass-
	     word.   You will probably also need to set the pkinit_user configu-
	     ration option.  If PKINIT fails, the PAM module will fall	back  on
	     regular  password	authentication.   This	option is currently only
	     supported if pam-krb5 was built against Heimdal 0.8rc1 or later  or
	     MIT Kerberos 1.6.3 or later.

	     If  this  option is set and pam-krb5 is built against MIT Kerberos,
	     and PKINIT fails and the module falls back to password  authentica-
	     tion,  the  user's password will not be stored in the PAM stack for
	     subsequent modules.  This is a bug in the interaction  between  the
	     module  and MIT Kerberos that requires some reworking of the PKINIT
	     authentication method to fix.

	     This option can be set in "[appdefaults]" in krb5.conf and is  only
	     applicable to the auth and password groups.

     use_pkinit
	     [3.0,  4.9  for  MIT  Kerberos] Require PKINIT authentication.  You
	     will probably also need to set the  pkinit_user  configuration  op-
	     tion.   If  PKINIT fails, authentication will fail.  This option is
	     only supported if pam-krb5 was  built  against  Heimdal  0.8rc1  or
	     later or MIT Kerberos 1.12 or later.

	     Be aware that, with MIT Kerberos, this option is implemented by us-
	     ing a responder without a prompter, and thus any informational mes-
	     sages from the Kerberos libraries or KDC during authentication will
	     not be displayed.

	     This  option can be set in "[appdefaults]" in krb5.conf and is only
	     applicable to the auth and password groups.

   Prompting
     banner=<banner>
	     [3.0] By default, the prompts when a user	changes  their	password
	     are:

		 Current Kerberos password:
		 Enter new Kerberos password:
		 Retype new Kerberos password:

	     The  string  "Kerberos"  is  inserted so that users aren't confused
	     about which password they're changing.   Setting  this  option  re-
	     places  the  word	"Kerberos"  with whatever this option is set to.
	     Setting this option to the empty string  removes  the  word  before
	     "password:" entirely.

	     If  set  in  the PAM configuration, <banner> may not contain white-
	     space.  If you want  a  value  containing	whitespace,  set  it  in
	     krb5.conf.

	     This  option can be set in "[appdefaults]" in krb5.conf and is only
	     applicable to the password group.

     expose_account
	     [3.0] By default, the Kerberos PAM module password prompt is simply
	     "Password:". This avoids leaking any information about  the  system
	     realm  or account to principal conversions.  If this option is set,
	     the string "for <principal>"  is  added  before  the  colon,  where
	     <principal> is the user's principal.  This string is also added be-
	     fore the colon on prompts when changing the user's password.

	     Enabling  this  option with ChallengeResponseAuthentication enabled
	     in OpenSSH may cause problems for some ssh clients that only recog-
	     nize "Password:" as a prompt.  This option  is  automatically  dis-
	     abled  if	search_k5login	is enabled since the principal displayed
	     would be inaccurate.

	     This option can be set in "[appdefaults]" in krb5.conf and is  only
	     applicable to the auth and password groups.

     force_first_pass
	     [4.0]  Use  the  password	obtained by a previous authentication or
	     password module to authenticate the user without prompting the user
	     again.  If no previous module obtained the  user's  password,  fail
	     without   prompting   the	 user.	  Also	see  try_first_pass  and
	     use_first_pass for weaker versions of this option.

	     This option is only applicable to the  auth  and  password  groups.
	     For  the  password group, it applies only to the old password.  See
	     use_authtok for a similar setting for the new password.

     no_prompt
	     [4.6] Never prompt for the current password.  Instead,  pass  in  a
	     NULL  password to the Kerberos library and let the Kerberos library
	     do the prompting.	This may be needed if, for example, the Kerberos
	     library is configured to use other authentication	mechanisms  than
	     passwords and needs full control over the prompting process.

	     The major disadvantage of this option is that it means the PAM mod-
	     ule will never see the user's password and therefore cannot save it
	     in the PAM module data for any subsequent modules.  In other words,
	     this option cannot be used if another module is in the stack behind
	     the  Kerberos PAM module and wants to use use_first_pass.	The Ker-
	     beros library also usually includes the principal	in  the  prompt,
	     and   therefore   this   option   implies	 behavior   similar   to
	     expose_account.  Similar to expose_account, this can cause problems
	     with OpenSSH if ChallengeResponseAuthentication is  enabled,  since
	     clients may not recognize password prompts other than "Password:".

	     Using  this  option  with search_k5login would result in a password
	     prompt for every principal listed	in  the  user's  .k5login  file.
	     This is probably not desired behavior, although it's not prohibited
	     by the module.

	     This  option  is  only  applicable to the auth and password groups.
	     For the password group,  it  applies  only  to  the  authentication
	     process; the user will still be prompted for a new password.

     prompt_principal
	     [3.6] Before prompting for the user's password (or using the previ-
	     ously  entered  password,	if  try_first_pass,  use_first_pass,  or
	     force_first_pass are set), prompt the user for the Kerberos princi-
	     pal to use for authentication.  This allows the user  to  authenti-
	     cate  with  a different principal than the one corresponding to the
	     local username, provided that either a .k5login file or local  Ker-
	     beros  principal to account mapping authorize that principal to ac-
	     cess the local account.

	     Be cautious when using this configuration option and don't  use  it
	     with  OpenSSH PasswordAuthentication, only ChallengeResponseAuthen-
	     tication.	Some PAM-enabled applications expect PAM modules to only
	     prompt for passwords and may even blindly give the password to  the
	     first prompt, no matter what it is.  Such applications, in combina-
	     tion  with  this option, may expose the user's password in log mes-
	     sages and Kerberos requests.

     try_first_pass
	     [1.0] If the authentication module isn't the first  on  the  stack,
	     and  a previous module obtained the user's password, use that pass-
	     word to authenticate the user without  prompting  them  again.   If
	     that  authentication  fails,  fall  back  on prompting the user for
	     their password.  This option has no effect  if  the  authentication
	     module  is first in the stack or if no previous module obtained the
	     user's password.  Also see use_first_pass and force_first_pass  for
	     stronger versions of this option.

	     This  option  is  only  applicable to the auth and password groups.
	     For the password group, it applies only to the old password.

     use_authtok
	     [4.0] Use the new password obtained by a previous	password  module
	     when changing passwords rather than prompting for the new password.
	     If the new password isn't available, fail.  This can be used to re-
	     quire  passwords  be  checked  by	another,  prior  module, such as
	     pam_cracklib.

	     This option is only applicable to the password group.

     use_first_pass
	     [1.0] Use the password obtained by a previous authentication module
	     to authenticate the user without prompting the user again.   If  no
	     previous  module obtained the user's password for either an authen-
	     tication or password change, fall back on prompting the user.  If a
	     previous module did obtain the user's password  but  authentication
	     with  that password fails, fail without further prompting the user.
	     Also see try_first_pass and force_first_pass for other versions  of
	     this option.

	     This  option  is  only  applicable to the auth and password groups.
	     For the password group, it applies only to the old  password.   See
	     use_authtok for a similar setting for the new password.

   Ticket Caches
     ccache=<pattern>
	     [2.0]  Use  <pattern>  as the pattern for creating credential cache
	     names.  <pattern> must  be  in  the  form	<type>:<residual>  where
	     <type>  and the following colon are optional if a file cache should
	     be used.  The special token "%u", anywhere  in  <pattern>,  is  re-
	     placed  with  the	user's numeric UID. The special token "%p", any-
	     where in <pattern>, is replaced with the current process ID.

	     If <pattern> ends in the literal string "XXXXXX"  (six  X's),  that
	     string  will  be  replaced by randomly generated characters and the
	     ticket cache will be created using  mkstemp(3).  This  is	strongly
	     recommended if <pattern> points to a world-writable directory.

	     This  option can be set in "[appdefaults]" in krb5.conf and is only
	     applicable to the auth and session groups.

     ccache_dir=<directory>
	     [1.2] Store both the temporary ticket cache used during authentica-
	     tion and user ticket caches in <directory> instead of in /tmp.  The
	     algorithm for generating the ticket cache	name  is  otherwise  un-
	     changed.	<directory>  may  be  prefixed	with "FILE:" to make the
	     cache type unambiguous (and this may be required  on  systems  that
	     use a cache type other than file as the default).

	     Be  aware that pam_krb5 creates and stores a temporary ticket cache
	     file owned by root during the login process.   If	you  set  ccache
	     above  to	avoid  using  the  system /tmp directory for user ticket
	     caches, you may also want to set ccache_dir to move those temporary
	     caches to some other location.  This will allow  pam_krb5	to  con-
	     tinue working even if the system /tmp directory is full.

	     This  option can be set in "[appdefaults]" in krb5.conf and is only
	     applicable to the auth and session groups.

     no_ccache
	     [1.0] Do not create a ticket cache after authentication.  This  op-
	     tion  shouldn't be set in general, but is useful as part of the PAM
	     configuration for a particular service that uses PAM for  authenti-
	     cation  but isn't creating user sessions and doesn't want the over-
	     head of ever writing the user credentials to disk.  When using this
	     option, the application should only call pam_authenticate(3); other
	     functions	 like	 pam_setcred(3),    pam_start_session(3),    and
	     pam_acct_mgmt(3) don't make sense with this option.  Don't use this
	     option  if the application needs PAM account and session management
	     calls.

	     This option is only applicable to the auth group.

     retain_after_close
	     [2.3] Normally, the user's ticket cache is  destroyed  when  either
	     pam_end(3)  or pam_close_session(3) is called by the authenticating
	     application so that ticket caches aren't left behind after the user
	     logs out.	In some cases, however, this isn't desirable.	(On  So-
	     laris  8,	for  instance, the default behavior means login will de-
	     stroy the ticket cache before running the user's shell.)	If  this
	     option  is set, the PAM module will never destroy the user's ticket
	     cache.  If you set this, you may  want  to  call  kdestroy  in  the
	     shell's  logout  configuration or run a temporary file removal pro-
	     gram to avoid accumulating hundreds of ticket caches in /tmp.

	     This option can be set in "[appdefaults]" in krb5.conf and is  only
	     applicable to the auth and session groups.

ENVIRONMENT
     KRB5CCNAME
	     Set  by  pam_setcred(3)  with  the  PAM_ESTABLISH_CRED  option, and
	     therefore also by pam_open_session(3), to point to the new  creden-
	     tial  cache  for  the user.  See the ccache and ccache_dir options.
	     By default, the cache name will be prefixed with  "FILE:"	to  make
	     the cache type unambiguous.

     PAM_KRB5CCNAME
	     Set  by  pam_authenticate(3) to point to the temporary ticket cache
	     used for authentication (unless the no_ccache  option  was  given).
	     pam_setcred(3)  then  uses  that environment variable to locate the
	     temporary cache even if it was not called in the same  PAM  session
	     as pam_authenticate(3) (a problem with sshd running in some modes).
	     This environment variable is only used internal to the PAM module.

FILES
     /tmp/krb5cc_UID_RANDOM
	     The  default  credential cache name.  UID is the decimal UID of the
	     local user and RANDOM is a random six-character string.   The  pat-
	     tern  may	be changed with the ccache option and the directory with
	     the ccache_dir option.

     /tmp/krb5cc_pam_RANDOM
	     The credential cache name used for the temporary  credential  cache
	     created  by  pam_authenticate(3).	This cache is removed again when
	     the PAM session is ended or when pam_setcred(3) is called and  will
	     normally  not  be	user-visible.	RANDOM is a random six-character
	     string.

     ~/.k5login
	     File containing Kerberos principals that are allowed access to that
	     account.

BUGS
     If try_pkinit is set and pam-krb5 is built with MIT  Kerberos,  the  user's
     password  is not saved in the PAM data if PKINIT fails and the module falls
     back to password authentication.

CAVEATS
     Be sure to list this module in the session group as well as the auth  group
     when  using  it for interactive logins.  Otherwise, some applications (such
     as OpenSSH) will not set up the user's ticket cache correctly.

     The Kerberos library, via pam-krb5, will prompt the user  to  change  their
     password  if  their  password is expired, but when using OpenSSH, this will
     only work when ChallengeResponseAuthentication is enabled.  Unless this op-
     tion is enabled, OpenSSH doesn't pass PAM messages to the user and can only
     respond to a simple password prompt.

     If you are using MIT Kerberos, be aware that users whose passwords are  ex-
     pired will not be prompted to change their password unless the KDC configu-
     ration  for  your realm in [realms] in krb5.conf contains a master_kdc set-
     ting or, if using DNS SRV records, you have a DNS entry for  _kerberos-mas-
     ter as well as _kerberos.

     pam_authenticate(3) returns failure when called for an ignored account, re-
     quiring  the  system administrator to use "optional" or "sufficient" to ig-
     nore the module and move on to the next module.  It's arguably more correct
     to return PAM_IGNORE, which causes the  module  to  be  ignored  as  if  it
     weren't  in  the  configuration, but this increases the risk of inadvertent
     security holes when listing pam-krb5 as the only authentication module.

     This module treats the empty password as an authentication  failure  rather
     than  attempting  to use that password to avoid unwanted prompting behavior
     in the Kerberos libraries.  If you have a Kerberos  principal  that  inten-
     tionally has an empty password, it won't work with this module.

     This module will not refresh an existing ticket cache if called with an ef-
     fective  UID or GID different than the real UID or GID, since refreshing an
     existing ticket cache requires trusting the KRB5CCNAME environment variable
     and the environment should not be trusted in a setuid context.

     Old versions of OpenSSH are known	to  call  pam_authenticate  followed  by
     pam_setcred(PAM_REINITIALIZE_CRED)  without first calling pam_open_session,
     thereby requesting that an existing ticket cache  be  renewed  (similar  to
     what a screensaver would want) rather than requesting a new ticket cache be
     created.	Since this behavior is indistinguishable at the PAM level from a
     screensaver, pam-krb5 when used with these old versions of OpenSSH will re-
     fresh the ticket cache of the OpenSSH daemon rather than setting up  a  new
     ticket  cache  for the user.  The resulting ticket cache will have the cor-
     rect permissions, but will not be named  correctly  or  referenced  in  the
     user's  environment  and  will  be overwritten by the next user login.  The
     best solution to this problem is to upgrade OpenSSH. I'm not  sure  exactly
     when this problem was fixed, but at the very least OpenSSH 4.3 and later do
     not exhibit it.

AUTHOR
     pam-krb5  was  originally written by Frank Cusack.  Andres Salomon made ex-
     tensive modifications, and then Russ Allbery <eagle@eyrie.org>  adopted  it
     and  made	even more extensive modifications.  Russ Allbery currently main-
     tains the module.

COPYRIGHT AND LICENSE
     Copyright 2005-2010, 2014, 2020 Russ Allbery <eagle@eyrie.org>

     Copyright 2008-2014 The Board of Trustees of  the	Leland	Stanford  Junior
     University

     Copying  and  distribution  of this file, with or without modification, are
     permitted in any medium without royalty provided the copyright  notice  and
     this  notice  are	preserved.  This file is offered as-is, without any war-
     ranty.

     SPDX-License-Identifier: FSFAP

SEE ALSO
     kadmin(8), kdestroy(1), krb5.conf(5), pam.conf(5), passwd(1), syslog(3)

     The current version of this module  is  available	from  its  web	page  at
     https://www.eyrie.org/~eagle/software/pam-krb5/.

FreeBSD ports 15.quarterly	November 21, 2025		     PAM_KRB5(8)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=pam_krb5&sektion=8&manpath=FreeBSD+15.1-RELEASE+and+Ports.quarterly>

home | help