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  op-
       erations:  authentication,  account management, session management, and
       password	management.  pam_krb5.so is a shared object  that  is  dynami-
       cally 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 password), 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, either takes the contents of
	       the temporary ticket cache and writes it	out  to	 a  persistent
	       ticket  cache  owned  by	 the user or uses the temporary	ticket
	       cache to	refresh	an existing user ticket	cache.

	       Passwords as long or longer than	PAM_MAX_RESP_SIZE octets (nor-
	       mally 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 per-
	       formed, 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 (nor-
	       mally /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  be-
	       havior  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	autho-
	       rization	check will also	be done	 using	krb5_kuserok(3).   The
	       default	behavior  of  this function is to check	the user's ac-
	       count for a .k5login file and, if one is	present,  ensure  that
	       the  user's  principal  is listed in that file.	If .k5login is
	       not present, the	default	check is to  ensure  that  the	user's
	       principal is in the default 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 cus-
	       tomized with several configuration options; 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 reject usernames	that don't match local
	       accounts	before this remapping can be done and will pass	an in-
	       valid password to the PAM module.  Also be aware	 that  several
	       other  common  PAM modules, such	as pam_securetty, expect to be
	       able to look up the user	with getpwnam(3) and cannot be	called
	       before pam_krb5 when using this feature.

	       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 letters.	This can  be  configured  with
	       the ccache and ccache_dir options.

	       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  session  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	clean-
	       ing up the user's session.

       session
	       Provides	 implementations  of  pam_open_session(3),  which   is
	       equivalent   to	calling	 pam_setcred(3)	 with  the  PAM_ESTAB-
	       LISH_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_authenticate(3) implementation described above.

       password
	       Provides	an implementation of  pam_chauthtok(3),	 which	imple-
	       ments  password changes.	 The user is prompted for their	exist-
	       ing password (unless configured to use an already entered  one)
	       and  the	 PAM  module  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 (nor-
	       mally 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  password.	Also,  unlike the normal Unix password module,
	       root will always	be prompted for	the old	password,  since  root
	       has  no	special	 status	 in Kerberos.  (To change passwords in
	       Kerberos	without	knowing	the old	password,  use	kadmin(8)  in-
	       stead.)

       Both  the account and session management	calls of the Kerberos PAM mod-
       ule 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  Ker-
       beros  libraries	 have  timeouts	longer than the	timeout	imposed	by the
       login process.  This means that using this module incautiously can make
       it impossible 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 sup-
       port some of the	options	those modules do.

CONFIGURATION
       The Kerberos PAM	module takes many options, not all of which are	 rele-
       vant 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 separating 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  fol-
       lowed  by  an equal sign	(=) and	a value, so for	boolean	options	add "=
       true".  The Kerberos 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  ac-
       count  qualified	 with a	realm, that realm will not be used when	deter-
       mining 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 configura-
       tion syntax, 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	 user-
	       name.   If  the	username 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
	       alternate  principal  first  and	then fall back to the standard
	       behavior	if it fails.  The primary usage	is to  allow  alterna-
	       tive  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 user-
	       name 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	conve-
	       nient than running the module multiple times with multiple  de-
	       fault  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, al-
	       though normally it doesn't make sense to	do that;  normally  it
	       is  used	 in the	PAM options of configuration for specific pro-
	       grams.  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 authen-
	       tication	 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	direc-
	       tory.  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 prin-
	       cipal matches the local account name,  but  this	 can  be  cus-
	       tomized	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 au-
	       thentication 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 cor-
	       responds	to a local account and that local account  has	a  UID
	       lower than <uid>. If both of those conditions are true, the au-
	       thentication  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 ac-
	       count (which isn't recommended since Kerberos requires  a  net-
	       work  connection).   It	provides some defense in depth against
	       user principals that happen to match a  system  account	incor-
	       rectly 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 fall-
	       back 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
	       attempts	 to  obtain tickets for	the authenticating username in
	       the local realm.	 If this option	is set and the local user  has
	       a  .k5login  file  in their home	directory, the module will in-
	       stead open and read that	.k5login file, attempting to  use  the
	       supplied	 password  to  authenticate  as	 each principal	listed
	       there in	turn.  If any of those	authentications	 succeed,  the
	       user will be successfully authenticated;	otherwise, authentica-
	       tion  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	authentication.

	       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	library	support	FAST and anonymous PKINIT.

	       FAST is a mechanism to protect Kerberos against password	guess-
	       ing attacks and provide other security improvements.  To	 work,
	       FAST  requires  that  a ticket be obtained with a strong	key to
	       protect exchanges 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 creden-
	       tials,  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  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.

	       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  sup-
	       port anonymous authentication.

	       <ccache_name>  should be	a credential cache containing a	ticket
	       obtained	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  tickets  then  FAST	will be	attempted.  The	easiest	way to
	       use this	option 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 authentications 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	authentication will proceed as	normal.	  However,  if
	       the  credentials	 in that ticket	cache are expired, authentica-
	       tion 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 available and	configured and that the	 local	realm  support
	       anonymous  authentication.   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 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
	       credentials.   The  default  is the default system keytab (nor-
	       mally /etc/krb5.keytab),	which  is  usually  only  readable  by
	       root.   Applications not	running	as root	that use this PAM mod-
	       ule for authentication 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  verifica-
	       tion.

	       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 decisions since  it	 changes  the  default
	       realm.	This  setting  will  also change the service principal
	       used to verify the obtained credentials to be in	the  specified
	       realm.

	       If  you	only want to set the realm assumed for user principals
	       without 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	 life-
	       time  of	 <lifetime>.  <lifetime> should	be a Kerberos lifetime
	       string such as "2d4h10m"	or a time in minutes.	If  set,  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.

       ticket_lifetime=<lifetime>
	       [3.0] Obtain tickets with a  maximum  lifetime  of  <lifetime>.
	       <lifetime>  should  be  a  Kerberos  lifetime  string  such  as
	       "2d4h10m" or a time in minutes.	If  set,  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.

       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 fail-
	       ing module is marked required or	requisite.  When using	multi-
	       ple  password PAM modules to synchronize	passwords between mul-
	       tiple systems when they change, this  behavior  can  cause  un-
	       wanted differences between the environments.

	       Setting	this  option provides a	way to work around this	behav-
	       ior.  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	subse-
	       quent  modules  that have use_authtok set to fail so that those
	       environments won't get out of sync with the  password  in  Ker-
	       beros.  The Kerberos PAM	module will not	meddle with the	stored
	       password	if it skips the	user due to configuration such as min-
	       imum_uid.

	       Unfortunately, setting this option interferes with other	desir-
	       able PAM	configurations,	such as	attempting to change the pass-
	       word in Kerberos	first and falling back on the local Unix pass-
	       word  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 sys-
	       log at LOG_DEBUG	priority, including entry and exit  from  each
	       of the external 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 ex-
	       pired   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
	       handle 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 reject-
	       ing  the	 authentication	or calling pam_chauthtok(3).  However,
	       following the standard  requires	 that  all  applications  call
	       pam_acct_mgmt(3)	 and  check  its return	status;	otherwise, ex-
	       pired 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
	       mechanism for handling expired accounts instead of  failing  in
	       pam_authenticate(3).   Due  to  the security risk of widespread
	       broken applications, be very careful about  enabling  this  op-
	       tion.  It should	normally only be turned	on to solve a specific
	       problem	(such  as  using 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
	       Kerberos.   If  built against Heimdal, this option does nothing
	       and normal 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
	       prompting for a password	change if an account's password	is ex-
	       pired during the	auth group.  If	this option  is	 set,  expired
	       passwords  are  instead	treated	 as  an	authentication failure
	       identical to an incorrect 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
	       Kerberos	 error	indicating the user's password is expired, at-
	       tempt to	immediately change their password during the authenti-
	       cate step.  Under normal	circumstances,	this  is  unnecessary.
	       Most  Kerberos libraries	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.  How-
	       ever, some system Kerberos libraries (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 princi-
	       pal 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 canonicalized local name.   Setting	this  option  disables
	       this  behavior and leaves PAM_USER set to the initial authenti-
	       cation 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
	       warnings	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 publicly 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 en-
	       ter the smart card first.  Any information entered at the first
	       prompt is ignored.  If try_pkinit is set, a user	who wishes  to
	       use  a  password	 instead  can  just press Enter	and then enter
	       their  password	as  normal.   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 Kerberos library documentation for more details.  This  op-
	       tion 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  op-
	       tion  (in  which	 case it's turned on).	In krb5.conf, multiple
	       options should be separated by whitespace.  In the PAM configu-
	       ration, 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 setting.

	       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 configuration, but options set in the PAM configuration are
	       applied	after options set in krb5.conf and therefore may over-
	       ride earlier settings.

       try_pkinit
	       [3.0] Attempt PKINIT authentication  before  trying  a  regular
	       password.   You	will probably also need	to set the pkinit_user
	       configuration 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 Ker-
	       beros, and PKINIT fails and the module falls back  to  password
	       authentication,	the  user's password will not be stored	in the
	       PAM stack for subsequent	modules.  This is a bug	in the	inter-
	       action  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
	       option.	If PKINIT fails, authentication	will fail.   This  op-
	       tion  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
	       using a responder without a prompter,  and  thus	 any  informa-
	       tional  messages	 from the Kerberos libraries or	KDC during au-
	       thentication 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 pass-
	       word 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
	       whitespace.   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	before	the colon on prompts when changing the
	       user's password.

	       Enabling	this option with  ChallengeResponseAuthentication  en-
	       abled  in  OpenSSH may cause problems for some ssh clients that
	       only recognize "Password:" as a prompt.	This option  is	 auto-
	       matically disabled if search_k5login is enabled since the prin-
	       cipal 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 pass-
	       word, 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
	       module  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 Kerberos library also usually includes the
	       principal in the	prompt,	and therefore this option implies  be-
	       havior  similar	to expose_account.  Similar to expose_account,
	       this can	cause problems with  OpenSSH  if  ChallengeResponseAu-
	       thentication  is	enabled, since clients may not recognize pass-
	       word prompts other than "Password:".

	       Using this option with search_k5login would result in  a	 pass-
	       word  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
	       previously entered password, if try_first_pass, use_first_pass,
	       or force_first_pass are set), prompt the	user for the  Kerberos
	       principal  to  use for authentication.  This allows the user to
	       authenticate with a different principal	than  the  one	corre-
	       sponding	to the local username, provided	that either a .k5login
	       file  or	 local Kerberos	principal to account mapping authorize
	       that principal to access	the local account.

	       Be cautious when	using this configuration option	and don't  use
	       it  with	 OpenSSH PasswordAuthentication, only ChallengeRespon-
	       seAuthentication.  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  combination with this	option,	may expose the
	       user's password in log messages 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 password 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 mod-
	       ule  when  changing passwords rather than prompting for the new
	       password.  If the new password isn't available, fail.  This can
	       be used to require passwords be checked by another, prior  mod-
	       ule, 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 authentication	 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 replaced with the user's numeric UID. The special
	       token "%p", anywhere 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 authen-
	       tication	 and  user  ticket caches in <directory> instead of in
	       /tmp.  The algorithm for	generating the ticket  cache  name  is
	       otherwise  unchanged.  <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 continue 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
	       option  shouldn't  be  set in general, but is useful as part of
	       the PAM configuration for a particular service  that  uses  PAM
	       for authentication but isn't creating user sessions and doesn't
	       want the	overhead 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 ei-
	       ther pam_end(3) or pam_close_session(3) is called  by  the  au-
	       thenticating  application so that ticket	caches aren't left be-
	       hind after the user logs	out.  In  some	cases,	however,  this
	       isn't  desirable.  (On Solaris 8, for instance, the default be-
	       havior means login will destroy 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 program 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 cre-
	       dential cache for the user.  See	the ccache and ccache_dir  op-
	       tions.	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  pattern  may be changed with the ccache option and the di-
	       rectory 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 ran-
	       dom 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 applica-
       tions (such as OpenSSH) will not	set up the user's  ticket  cache  cor-
       rectly.

       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 option 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
       expired	will  not  be prompted to change their password	unless the KDC
       configuration for your realm in [realms]	in krb5.conf contains  a  mas-
       ter_kdc	setting	or, if using DNS SRV records, you have a DNS entry for
       _kerberos-master	as well	as _kerberos.

       pam_authenticate(3) returns failure when	called for an ignored account,
       requiring the system administrator to use "optional" or "sufficient" to
       ignore 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  in-
       advertent  security holes when listing pam-krb5 as the only authentica-
       tion 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 intentionally has an empty password, it won't work with this  mod-
       ule.

       This module will	not refresh an existing	ticket cache if	called with an
       effective UID or	GID different than the real UID	or GID,	since refresh-
       ing  an existing	ticket cache requires trusting the KRB5CCNAME environ-
       ment 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_ses-
       sion, thereby requesting	that an	existing ticket	cache be renewed (sim-
       ilar  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	refresh	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 correct permissions, but will not be named
       correctly or referenced in the user's environment and will be overwrit-
       ten 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
       extensive   modifications,  and	then  Russ  Allbery  <eagle@eyrie.org>
       adopted it and made even	more extensive	modifications.	 Russ  Allbery
       currently maintains 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  no-
       tice  and this notice are preserved.  This file is offered as-is, with-
       out any warranty.

       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	15.0		       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.0-RELEASE+and+Ports>

home | help