home | help
KRB5.CONF(5)			  MIT Kerberos			    KRB5.CONF(5)

NAME
     krb5.conf - Kerberos configuration file

     The  krb5.conf  file contains Kerberos configuration information, including
     the locations of KDCs and admin servers for the Kerberos realms  of  inter-
     est, defaults for the current realm and for Kerberos applications, and map-
     pings of hostnames onto Kerberos realms.  Normally, you should install your
     krb5.conf	file  in the directory /etc.  You can override the default loca-
     tion by setting the environment variable KRB5_CONFIG.  Multiple colon-sepa-
     rated filenames may be  specified	in  KRB5_CONFIG;  all  files  which  are
     present  will  be read.  Starting in release 1.14, directory names can also
     be specified in KRB5_CONFIG; all files within  the  directory  whose  names
     consist  solely  of alphanumeric characters, dashes, or underscores will be
     read.

STRUCTURE
     The krb5.conf file is set up in the style of a Windows INI file.  Lines be-
     ginning with '#' or ';' (possibly after initial whitespace) are ignored  as
     comments.	 Sections  are	headed	by the section name, in square brackets.
     Each section may contain zero or more relations, of the form:

	foo = bar

     or:

	fubar = {
	    foo = bar
	    baz = quux
	}

     The krb5.conf file can include other files using either  of  the  following
     directives at the beginning of a line:

	include FILENAME
	includedir DIRNAME

     FILENAME or DIRNAME should be an absolute path. The named file or directory
     must  exist  and  be  readable.   Including  a directory includes all files
     within the directory whose names consist solely of alphanumeric characters,
     dashes, or underscores.  Starting in release 1.15, files with names  ending
     in  ".conf"  are  also included, unless the name begins with ".".	Included
     profile files are syntactically independent of their parents, so  each  in-
     cluded  file  must  begin with a section header.  Starting in release 1.17,
     files are read in alphanumeric order; in previous	releases,  they  may  be
     read in any order.

     Placing  a  '*'  after the closing bracket of a section name indicates that
     the section is final, meaning that if the same section appears again later,
     it will be ignored.  A subsection can be marked as final by placing  a  '*'
     after  either  the tag name or the closing brace.	A relation can be marked
     as final by placing a '*' after the tag name.  Prior to release 1.22,  only
     sections  and  subsections can be marked as final, and the flag only causes
     values to be ignored if they appear in later files specified  in  KRB5_CON-
     FIG, not if they appear later within the same file or an included file.

     The krb5.conf file can specify that configuration should be obtained from a
     loadable module, rather than the file itself, using the following directive
     at the beginning of a line before any section headers:

	module MODULEPATH:RESIDUAL

     MODULEPATH may be relative to the library path of the krb5 installation, or
     it may be an absolute path.  RESIDUAL is provided to the module at initial-
     ization  time.   If krb5.conf uses a module directive, kdc.conf should also
     use one if it exists.

SECTIONS
     The krb5.conf file may contain the following sections:
		 +----------------+-----------------------------+
		 | [libdefaults]  | Settings used by  the  Ker- |
		 |		  | beros V5 library		|
		 +----------------+-----------------------------+
		 | [realms]	  | Realm-specific  contact in- |
		 |		  | formation and settings	|
		 +----------------+-----------------------------+
		 | [domain_realm] | Maps  server  hostnames  to |
		 |		  | Kerberos realms		|
		 +----------------+-----------------------------+
		 | [capaths]	  | Authentication   paths  for |
		 |		  | non-hierarchical		|
		 |		  | cross-realm 		|
		 +----------------+-----------------------------+
		 | [appdefaults]  | Settings used by some  Ker- |
		 |		  | beros V5 applications	|
		 +----------------+-----------------------------+
		 | [plugins]	  | Controls plugin module reg- |
		 |		  | istration			|
		 +----------------+-----------------------------+

     Additionally,  krb5.conf  may  include  any  of  the relations described in
     kdc.conf, but it is not a recommended practice.

   [libdefaults]
     The libdefaults section may contain any of the following relations:

     allow_des3
	    Permit the KDC to issue tickets with des3-cbc-sha1 session keys.  In
	    future releases, this flag will allow des3-cbc-sha1 to  be	used  at
	    all.   The	default  value for this tag is false.  (Added in release
	    1.21.)

     allow_rc4
	    Permit the KDC to issue tickets with arcfour-hmac session keys.   In
	    future  releases,  this  flag  will allow arcfour-hmac to be used at
	    all.  The default value for this tag is false.   (Added  in  release
	    1.21.)

     allow_weak_crypto
	    If	this  flag is set to false, then weak encryption types (as noted
	    in Encryption types in kdc.conf) will be filtered out of  the  lists
	    default_tgs_enctypes,  default_tkt_enctypes, and permitted_enctypes.
	    The default value for this tag is false.

     canonicalize
	    If this flag is set to true, initial ticket requests to the KDC will
	    request canonicalization of the client principal name,  and  answers
	    with  different  client principals than the requested principal will
	    be accepted.  The default value is false.

     ccache_type
	    This parameter determines the format of credential cache types  cre-
	    ated by kinit or other programs.  The default value is 4, which rep-
	    resents  the  most	current  format.  Smaller values can be used for
	    compatibility with very old implementations of Kerberos which inter-
	    act with credential caches on the same host.

     clockskew
	    Sets the maximum allowable amount of clockskew in seconds  that  the
	    library will tolerate before assuming that a Kerberos message is in-
	    valid.  The default value is 300 seconds, or five minutes.

	    The  clockskew setting is also used when evaluating ticket start and
	    expiration times.  For example, tickets that have reached their  ex-
	    piration  time  can still be used (and renewed if they are renewable
	    tickets) if they have been expired for a shorter duration  than  the
	    clockskew setting.

     default_ccache_name
	    This  relation  specifies  the name of the default credential cache.
	    The default is @CCNAME@.  This relation is subject to parameter  ex-
	    pansion (see below).  New in release 1.11.

     default_client_keytab_name
	    This relation specifies the name of the default keytab for obtaining
	    client  credentials.   The	default  is @CKTNAME@.	This relation is
	    subject to parameter expansion (see below).  New in release 1.11.

     default_keytab_name
	    This relation specifies the default keytab name to be used by appli-
	    cation servers such as sshd.  The default is @KTNAME@.   This  rela-
	    tion is subject to parameter expansion (see below).

     default_rcache_name
	    This  relation  specifies the name of the default replay cache.  The
	    default is dfl:.  This relation is subject	to  parameter  expansion
	    (see below).  New in release 1.18.

     default_realm
	    Identifies the default Kerberos realm for the client.  Set its value
	    to your Kerberos realm.  If this value is not set, then a realm must
	    be	specified  with  every Kerberos principal when invoking programs
	    such as kinit.

     default_tgs_enctypes
	    Identifies the supported list of session key encryption  types  that
	    the client should request when making a TGS-REQ, in order of prefer-
	    ence  from highest to lowest.  The list may be delimited with commas
	    or whitespace.  See Encryption types in kdc.conf for a list  of  the
	    accepted values for this tag.  Starting in release 1.18, the default
	    value  is the value of permitted_enctypes.	For previous releases or
	    if	permitted_enctypes  is	 not   set,   the   default   value   is
	    aes256-cts-hmac-sha1-96			 aes128-cts-hmac-sha1-96
	    aes256-cts-hmac-sha384-192 aes128-cts-hmac-sha256-128  des3-cbc-sha1
	    arcfour-hmac-md5 camellia256-cts-cmac camellia128-cts-cmac.

	    Do	not set this unless required for specific backward compatibility
	    purposes; stale values of this setting can prevent clients from tak-
	    ing advantage of new stronger enctypes when the  libraries	are  up-
	    graded.

     default_tkt_enctypes
	    Identifies	the  supported list of session key encryption types that
	    the client should request when making an AS-REQ, in order of prefer-
	    ence from highest to lowest.  The format is  the  same  as	for  de-
	    fault_tgs_enctypes.   Starting in release 1.18, the default value is
	    the value of permitted_enctypes.  For previous releases or	if  per-
	    mitted_enctypes    is    not    set,    the    default    value   is
	    aes256-cts-hmac-sha1-96			 aes128-cts-hmac-sha1-96
	    aes256-cts-hmac-sha384-192	aes128-cts-hmac-sha256-128 des3-cbc-sha1
	    arcfour-hmac-md5 camellia256-cts-cmac camellia128-cts-cmac.

	    Do not set this unless required for specific backward  compatibility
	    purposes; stale values of this setting can prevent clients from tak-
	    ing  advantage  of	new stronger enctypes when the libraries are up-
	    graded.

     dns_canonicalize_hostname
	    Indicate whether name lookups will be used to canonicalize hostnames
	    for use in service principal names.  Setting this flag to false  can
	    improve  security  by reducing reliance on DNS, but means that short
	    hostnames will not be canonicalized  to  fully-qualified  hostnames.
	    If this option is set to fallback (new in release 1.18), DNS canoni-
	    calization	will  only be performed the server hostname is not found
	    with the original name when  requesting  credentials.   The  default
	    value is true.

     dns_lookup_kdc
	    Indicate  whether  DNS SRV records should be used to locate the KDCs
	    and other servers for a  realm,  if  they  are  not  listed  in  the
	    krb5.conf  information  for  the realm.  (Note that the admin_server
	    entry must be in the krb5.conf realm information in order to contact
	    kadmind, because the DNS implementation for kadmin is incomplete.)

	    Enabling this option does open up a type  of  denial-of-service  at-
	    tack, if someone spoofs the DNS records and redirects you to another
	    server.   However,	it's  no worse than a denial of service, because
	    that fake KDC will be unable to decode anything you send it (besides
	    the initial ticket request, which has no encrypted data),  and  any-
	    thing  the	fake  KDC sends will not be trusted without verification
	    using some secret that it won't know.

     dns_lookup_realm
	    Indicate whether DNS TXT records should be used to map hostnames  to
	    realm  names for hostnames not listed in the [domain_realm] section,
	    and to determine the default realm if default_realm is not set.  The
	    default value is false.

     dns_uri_lookup
	    Indicate whether DNS URI records should be used to locate  the  KDCs
	    and  other	servers  for  a  realm,  if  they  are not listed in the
	    krb5.conf information for the realm.  SRV  records	are  used  as  a
	    fallback  if  no URI records were found.  The default value is true.
	    New in release 1.15.

     enforce_ok_as_delegate
	    If this flag to true, GSSAPI credential delegation will be	disabled
	    when  the  ok-as-delegate flag is not set in the service ticket.  If
	    this flag is false, the ok-as-delegate ticket flag is only	enforced
	    when  an application specifically requests enforcement.  The default
	    value is false.

     err_fmt
	    This relation allows for custom  error  message  formatting.   If  a
	    value  is  set,  error  messages will be formatted by substituting a
	    normal error message for %M and an error code for %C in the value.

     extra_addresses
	    This allows a computer to use multiple local addresses, in order  to
	    allow Kerberos to work in a network that uses NATs while still using
	    address-restricted tickets.  The addresses should be in a comma-sep-
	    arated list.  This option has no effect if noaddresses is true.

     forwardable
	    If	this  flag  is	true, initial tickets will be forwardable by de-
	    fault, if allowed by the KDC.  The default value is false.

     ignore_acceptor_hostname
	    When accepting GSSAPI or krb5 security contexts for host-based  ser-
	    vice  principals, ignore any hostname passed by the calling applica-
	    tion, and allow clients to authenticate to any service principal  in
	    the  keytab  matching  the	service  name and realm name (if given).
	    This option can improve the administrative flexibility of server ap-
	    plications on multihomed hosts, but could compromise the security of
	    virtual hosting environments.  The default value is false.	 New  in
	    release 1.10.

     k5login_authoritative
	    If	this  flag  is true, principals must be listed in a local user's
	    k5login file to be granted login access, if a .k5login file  exists.
	    If this flag is false, a principal may still be granted login access
	    through  other mechanisms even if a k5login file exists but does not
	    list the principal.  The default value is true.

     k5login_directory
	    If set, the library will look for a local user's k5login file within
	    the named directory, with a  filename  corresponding  to  the  local
	    username.	If  not  set, the library will look for k5login files in
	    the user's home directory, with the filename .k5login.  For security
	    reasons, .k5login files must be owned by the local user or by root.

     kcm_mach_service
	    On macOS only, determines the name of the bootstrap service used  to
	    contact  the  KCM  daemon for the KCM credential cache type.  If the
	    value is -, Mach RPC will not be used to  contact  the  KCM  daemon.
	    The default value is org.h5l.kcm.

     kcm_socket
	    Determines the path to the Unix domain socket used to access the KCM
	    daemon  for  the KCM credential cache type.  If the value is -, Unix
	    domain sockets will not be used to contact the KCM daemon.	The  de-
	    fault value is /var/run/.heim_org.h5l.kcm-socket.

     kdc_default_options
	    Default KDC options (Xored for multiple values) when requesting ini-
	    tial  tickets.   By  default it is set to 0x00000010 (KDC_OPT_RENEW-
	    ABLE_OK).

     kdc_timesync
	    Accepted values for this relation are 1 or 0.   If	it  is	nonzero,
	    client  machines  will compute the difference between their time and
	    the time returned by the KDC in the timestamps in  the  tickets  and
	    use  this  value  to correct for an inaccurate system clock when re-
	    questing service tickets or authenticating to services.   This  cor-
	    rective  factor is only used by the Kerberos library; it is not used
	    to change the system clock.  The default value is 1.

     noaddresses
	    If this flag is true, requests for initial tickets will not be  made
	    with  address  restrictions  set,  allowing  the  tickets to be used
	    across NATs.  The default value is true.

     permitted_enctypes
	    Identifies the encryption types that servers will permit for session
	    keys and for ticket and authenticator encryption, ordered by prefer-
	    ence from highest to lowest.  Starting in  release	1.18,  this  tag
	    also  acts	as  the  default  value for default_tgs_enctypes and de-
	    fault_tkt_enctypes.    The	 default   value   for	 this	tag   is
	    aes256-cts-hmac-sha1-96			 aes128-cts-hmac-sha1-96
	    aes256-cts-hmac-sha384-192 aes128-cts-hmac-sha256-128  des3-cbc-sha1
	    arcfour-hmac-md5 camellia256-cts-cmac camellia128-cts-cmac.

     plugin_base_dir
	    If	set,  determines  the  base directory where krb5 plugins are lo-
	    cated.  The default value is the krb5/plugins  subdirectory  of  the
	    krb5  library  directory.  This relation is subject to parameter ex-
	    pansion (see below) in release 1.17 and later.

     preferred_preauth_types
	    This allows you to set the preferred preauthentication  types  which
	    the  client  will attempt before others which may be advertised by a
	    KDC.  The default value for this setting is "17, 16, 15, 14",  which
	    forces libkrb5 to attempt to use PKINIT if it is supported.

     proxiable
	    If	this flag is true, initial tickets will be proxiable by default,
	    if allowed by the KDC.  The default value is false.

     qualify_shortname
	    If this string is set, it determines  the  domain  suffix  for  sin-
	    gle-component  hostnames  when DNS canonicalization is not used (ei-
	    ther because dns_canonicalize_hostname is false or	because  forward
	    canonicalization failed).  The default value is the first search do-
	    main of the system's DNS configuration.  To disable qualification of
	    shortnames,  set  this  relation  to  the  empty  string  with qual-
	    ify_shortname = "".  (New in release 1.18.)

     rdns   If this flag is true, reverse name lookup will be used  in	addition
	    to	forward  name lookup to canonicalizing hostnames for use in ser-
	    vice principal names.  If dns_canonicalize_hostname is set to false,
	    this flag has no effect.  The default value is true.

     realm_try_domains
	    Indicate whether a host's domain components should be used to deter-
	    mine the Kerberos realm of the host.  The value of this variable  is
	    an integer: -1 means not to search, 0 means to try the host's domain
	    itself,  1	means  to also try the domain's immediate parent, and so
	    forth.  The library's usual mechanism for locating	Kerberos  realms
	    is	used  to  determine whether a domain is a valid realm, which may
	    involve consulting DNS if dns_lookup_kdc is set.  The default is not
	    to search domain components.

     renew_lifetime
	    (Time duration string.)  Sets the  default	renewable  lifetime  for
	    initial ticket requests.  The default value is 0.

     request_timeout
	    (Time  duration  string.)	Sets  the maximum total time for KDC and
	    password change requests.  This timeout does not affect  the  inter-
	    vals  between requests, so setting a low timeout may result in fewer
	    requests being attempted and/or some servers not being contacted.  A
	    value of 0 indicates no specific maximum,  in  which  case	requests
	    will  time	out  if no server responds after several tries.  The de-
	    fault value is 0.  (New in release 1.22.)

     spake_preauth_groups
	    A whitespace or comma-separated list of words  which  specifies  the
	    groups  allowed  for  SPAKE  preauthentication.  The possible values
	    are:
		      +--------------+-----------------------------+
		      | edwards25519 | Edwards25519   curve   (RFC |
		      | 	     | 7748)			   |
		      +--------------+-----------------------------+
		      | P-256	     | NIST P-256 curve (RFC 5480) |
		      +--------------+-----------------------------+
		      | P-384	     | NIST P-384 curve (RFC 5480) |
		      +--------------+-----------------------------+
		      | P-521	     | NIST P-521 curve (RFC 5480) |
		      +--------------+-----------------------------+

	    The default value for the client is edwards25519.  The default value
	    for the KDC is empty.  New in release 1.17.

     ticket_lifetime
	    (Time  duration  string.)	Sets  the  default  lifetime for initial
	    ticket requests.  The default value is 1 day.

     udp_preference_limit
	    When sending a message to the KDC, the library will  try  using  TCP
	    before UDP if the size of the message is above udp_preference_limit.
	    If	the  message is smaller than udp_preference_limit, then UDP will
	    be tried before TCP.  Regardless of the size, both protocols will be
	    tried if the first attempt fails.

     verify_ap_req_nofail
	    If this flag is true, then an attempt to verify initial  credentials
	    will fail if the client machine does not have a keytab.  The default
	    value is false.

     client_aware_channel_bindings
	    If	this  flag is true, then all application protocol authentication
	    requests will be flagged to indicate that the  application	supports
	    channel  bindings when operating over a secure channel.  The default
	    value is false.

   [realms]
     Each tag in the [realms] section of the file is  the  name  of  a	Kerberos
     realm.  The value of the tag is a subsection with relations that define the
     properties  of  that  particular realm.  For each realm, the following tags
     may be specified in the realm's subsection:

     admin_server
	    Identifies the host where  the  administration  server  is	running.
	    Typically,	this  is  the primary Kerberos server.	This tag must be
	    given a value in order to communicate with the  kadmind  server  for
	    the realm.

     auth_to_local
	    This  tag  allows  you  to	set a general rule for mapping principal
	    names to local user names.	It will be used if there is not  an  ex-
	    plicit  mapping for the principal name that is being translated. The
	    possible values are:

	    RULE:exp
		   The local name will be formulated from exp.

		   The format for  exp	is  [n:string](regexp)s/pattern/replace-
		   ment/g.  The integer n indicates how many components the tar-
		   get	principal  should  have.  If this matches, then a string
		   will be formed from string, substituting  the  realm  of  the
		   principal  for $0 and the n'th component of the principal for
		   $n (e.g., if the principal was johndoe/admin then [2:$2$1foo]
		   would result in the string adminjohndoefoo).  If this  string
		   matches  regexp, then the s//[g] substitution command will be
		   run over the string.  The optional g will cause the substitu-
		   tion to be global over the string, instead of replacing  only
		   the first match in the string.

	    DEFAULT
		   The	principal  name will be used as the local user name.  If
		   the principal has more than one component or is  not  in  the
		   default realm, this rule is not applicable and the conversion
		   will fail.

	    For example:

	       [realms]
		   ATHENA.MIT.EDU = {
		       auth_to_local = RULE:[2:$1](johndoe)s/^.*$/guest/
		       auth_to_local = RULE:[2:$1;$2](^.*;admin$)s/;admin$//
		       auth_to_local = RULE:[2:$2](^.*;root)s/^.*$/root/
		       auth_to_local = DEFAULT
		   }

	    would  result  in  any principal without root or admin as the second
	    component to be translated with the default rule.  A principal  with
	    a  second  component of admin will become its first component.  root
	    will be used as the local name for any principal with a second  com-
	    ponent of root.  The exception to these two rules are any principals
	    johndoe/*, which will always get the local name guest.

     auth_to_local_names
	    This  subsection  allows you to set explicit mappings from principal
	    names to local user names.	The tag is the	mapping  name,	and  the
	    value is the corresponding local user name.

     default_domain
	    This  tag  specifies the domain used to expand hostnames when trans-
	    lating Kerberos 4 service principals to Kerberos 5	principals  (for
	    example, when converting rcmd.hostname to host/hostname.domain).

     disable_encrypted_timestamp
	    If	this  flag  is true, the client will not perform encrypted time-
	    stamp preauthentication if requested by the KDC.  Setting this  flag
	    can  help  to prevent dictionary attacks by active attackers, if the
	    realm's KDCs support SPAKE preauthentication or if initial authenti-
	    cation always uses another mechanism or always uses FAST.  This flag
	    persists across  client  referrals	during	initial  authentication.
	    This  flag	does  not  prevent the KDC from offering encrypted time-
	    stamp.  New in release 1.17.

     http_anchors
	    When KDCs and kpasswd servers are accessed	through  HTTPS	proxies,
	    this  tag  can be used to specify the location of the CA certificate
	    which should be trusted to issue the certificate for a proxy server.
	    If left unspecified, the system-wide default set of CA  certificates
	    is used.

	    The  syntax  for  values  is  similar  to  that  of  values  for the
	    pkinit_anchors tag:

	    FILE: filename

	    filename is assumed to be the name	of  an	OpenSSL-style  ca-bundle
	    file.

	    DIR: dirname

	    dirname  is  assumed  to  be an directory which contains CA certifi-
	    cates.  All files in the directory will be examined; if they contain
	    certificates (in PEM format), they will be used.

	    ENV: envvar

	    envvar specifies the name of an environment variable which has  been
	    set  to a value conforming to one of the previous values.  For exam-
	    ple, ENV:X509_PROXY_CA, where environment variable X509_PROXY_CA has
	    been set to FILE:/tmp/my_proxy.pem.

     kdc    The name or address of a host running a KDC for the realm, or a UNIX
	    domain socket path of a locally running KDC.  An optional port  num-
	    ber,  separated  from  the hostname by a colon, may be included.  If
	    the name or address contains colons (for example, if it is	an  IPv6
	    address),  enclose	it  in	square brackets to distinguish the colon
	    from a port separator.  For your computer to be able to  communicate
	    with  the KDC for each realm, this tag must be given a value in each
	    realm subsection in the configuration file, or there must be DNS SRV
	    records specifying the KDCs.

     kpasswd_server
	    The location of the password change server for the realm, using  the
	    same  syntax as kdc.  If there is no such entry, DNS will be queried
	    (unless forbidden by dns_lookup_kdc).  Finally, port 464 on the  ad-
	    min_server host will be tried.

     master_kdc
	    The  name  for primary_kdc prior to release 1.19.  Its value is used
	    as a fallback if primary_kdc is not specified.

     primary_kdc
	    Identifies the primary KDC(s).  Currently, this tag is used in  only
	    one  case:	If an attempt to get credentials fails because of an in-
	    valid password, the client software will attempt to contact the pri-
	    mary KDC, in case the user's password has just been changed, and the
	    updated database has not been propagated to the replica servers yet.
	    New in release 1.19.

     sitename
	    Specifies the name of the host's site for the purpose  of  DNS-based
	    KDC discovery for this realm.  New in release 1.22.

     v4_instance_convert
	    This  subsection allows the administrator to configure exceptions to
	    the default_domain mapping rule.  It contains V4 instances (the  tag
	    name)  which should be translated to some specific hostname (the tag
	    value) as the second component in a Kerberos V5 principal name.

     v4_realm
	    This relation is used by the krb524 library routines when converting
	    a V5 principal name to a V4 principal name.  It is used when the  V4
	    realm  name  and the V5 realm name are not the same, but still share
	    the same principal names and passwords. The tag value  is  the  Ker-
	    beros V4 realm name.

   [domain_realm]
     The  [domain_realm]  section  provides a translation from hostnames to Ker-
     beros realms.  Each tag is a domain name, providing the  mapping  for  that
     domain and all subdomains.  If the tag begins with a period (.) then it ap-
     plies  only  to subdomains.  The Kerberos realm may be identified either in
     the realms section or using DNS SRV records.  Tag names should be in  lower
     case.  For example:

	[domain_realm]
	    crash.mit.edu = TEST.ATHENA.MIT.EDU
	    .dev.mit.edu = TEST.ATHENA.MIT.EDU
	    mit.edu = ATHENA.MIT.EDU

     maps  the	host  with  the  name crash.mit.edu into the TEST.ATHENA.MIT.EDU
     realm.  The second entry maps all hosts under the domain  dev.mit.edu  into
     the  TEST.ATHENA.MIT.EDU realm, but not the host with the name dev.mit.edu.
     That host is matched by the third entry, which maps the  host  mit.edu  and
     all  hosts under the domain mit.edu that do not match a preceding rule into
     the realm ATHENA.MIT.EDU.

     If no translation entry applies to a hostname used for a service  principal
     for a service ticket request, the library will try to get a referral to the
     appropriate  realm  from the client realm's KDC.  If that does not succeed,
     the host's realm is considered to be the  hostname's  domain  portion  con-
     verted  to uppercase, unless the realm_try_domains setting in [libdefaults]
     causes a different parent domain to be used.

   [capaths]
     In order to perform direct (non-hierarchical)  cross-realm  authentication,
     configuration  is	needed	to  determine  the  authentication paths between
     realms.

     A client will use this section to find the authentication path between  its
     realm  and  the  realm  of the server.  The server will use this section to
     verify the authentication path used by the client, by  checking  the  tran-
     sited field of the received ticket.

     There  is	a tag for each participating client realm, and each tag has sub-
     tags for each of the server realms.  The value of the subtags is an  inter-
     mediate realm which may participate in the cross-realm authentication.  The
     subtags  may  be  repeated if there is more then one intermediate realm.  A
     value of "." means that the two realms share keys directly, and no interme-
     diate realms should be allowed to participate.

     Only those entries which will be needed on the client or the server need to
     be present.  A client needs a tag for its local realm with subtags for  all
     the  realms  of  servers it will need to authenticate to.	A server needs a
     tag for each realm of the clients it will	serve,	with  a  subtag  of  the
     server realm.

     For  example,  ANL.GOV,  PNL.GOV,	and NERSC.GOV all wish to use the ES.NET
     realm as an intermediate realm.  ANL has a sub realm of TEST.ANL.GOV  which
     will  authenticate  with  NERSC.GOV but not PNL.GOV.  The [capaths] section
     for ANL.GOV systems would look like this:

	[capaths]
	    ANL.GOV = {
		TEST.ANL.GOV = .
		PNL.GOV = ES.NET
		NERSC.GOV = ES.NET
		ES.NET = .
	    }
	    TEST.ANL.GOV = {
		ANL.GOV = .
	    }
	    PNL.GOV = {
		ANL.GOV = ES.NET
	    }
	    NERSC.GOV = {
		ANL.GOV = ES.NET
	    }
	    ES.NET = {
		ANL.GOV = .
	    }

     The [capaths] section of the configuration file used on  NERSC.GOV  systems
     would look like this:

	[capaths]
	    NERSC.GOV = {
		ANL.GOV = ES.NET
		TEST.ANL.GOV = ES.NET
		TEST.ANL.GOV = ANL.GOV
		PNL.GOV = ES.NET
		ES.NET = .
	    }
	    ANL.GOV = {
		NERSC.GOV = ES.NET
	    }
	    PNL.GOV = {
		NERSC.GOV = ES.NET
	    }
	    ES.NET = {
		NERSC.GOV = .
	    }
	    TEST.ANL.GOV = {
		NERSC.GOV = ANL.GOV
		NERSC.GOV = ES.NET
	    }

     When a subtag is used more than once within a tag, clients will use the or-
     der  of values to determine the path.  The order of values is not important
     to servers.

   [appdefaults]
     Each tag in the [appdefaults] section names a Kerberos V5 application or an
     option that is used by some Kerberos V5 application[s].  The value  of  the
     tag defines the default behaviors for that application.

     For example:

	[appdefaults]
	    telnet = {
		ATHENA.MIT.EDU = {
		    option1 = false
		}
	    }
	    telnet = {
		option1 = true
		option2 = true
	    }
	    ATHENA.MIT.EDU = {
		option2 = false
	    }
	    option2 = true

     The above four ways of specifying the value of an option are shown in order
     of  decreasing  precedence.  In  this  example, if telnet is running in the
     realm EXAMPLE.COM, it should, by default, have option1 and option2  set  to
     true.   However,  a  telnet program in the realm ATHENA.MIT.EDU should have
     option1 set to false and option2  set  to	true.	Any  other  programs  in
     ATHENA.MIT.EDU  should  have option2 set to false by default.  Any programs
     running in other realms should have option2 set to true.

     The list of specifiable options for each application may be found	in  that
     application's man pages.  The application defaults specified here are over-
     ridden by those specified in the realms section.

   [plugins]
	* pwqual interface

	* kadm5_hook interface

	* clpreauth and kdcpreauth interfaces

     Tags  in  the [plugins] section can be used to register dynamic plugin mod-
     ules and to turn modules on and off.  Not every  krb5  pluggable  interface
     uses the [plugins] section; the ones that do are documented here.

     New in release 1.9.

     Each  pluggable  interface  corresponds  to a subsection of [plugins].  All
     subsections support the same tags:

     disable
	    This tag may have multiple values. If there are values for this tag,
	    then the named modules will be disabled for the pluggable interface.

     enable_only
	    This tag may have multiple values. If there are values for this tag,
	    then only the named modules will be enabled for the pluggable inter-
	    face.

     module
	    This tag may have multiple values.	Each value is a  string  of  the
	    form  modulename:pathname, which causes the shared object located at
	    pathname to be registered as a dynamic module named  modulename  for
	    the  pluggable  interface.	 If pathname is not an absolute path, it
	    will be treated  as  relative  to  the  plugin_base_dir  value  from
	    [libdefaults].

     For  pluggable  interfaces  where	module order matters, modules registered
     with a module tag normally come first, in the order  they	are  registered,
     followed  by  built-in  modules in the order they are documented below.  If
     enable_only tags are used, then the order of those tags overrides the  nor-
     mal module order.

     The following subsections are currently supported within the [plugins] sec-
     tion:

   ccselect interface
     The  ccselect  subsection	controls  modules for credential cache selection
     within a cache collection.  In addition to any registered dynamic	modules,
     the  following built-in modules exist (and may be disabled with the disable
     tag):

     k5identity
	    Uses a .k5identity file in the user's home	directory  to  select  a
	    client principal

     realm  Uses  the  service realm to guess an appropriate cache from the col-
	    lection

     hostname
	    If the service principal is host-based, uses the service hostname to
	    guess an appropriate cache from the collection

   pwqual interface
     The pwqual subsection controls modules for the password quality  interface,
     which  is	used  to  reject weak passwords when passwords are changed.  The
     following built-in modules exist for this interface:

     dict   Checks against the realm dictionary file

     empty  Rejects empty passwords

     hesiod
	    Checks against user information stored in Hesiod (only  if	Kerberos
	    was built with Hesiod support)

     princ  Checks against components of the principal name

   kadm5_hook interface
     The  kadm5_hook  interface  provides  plugins with information on principal
     creation, modification, password changes and deletion.  This interface  can
     be used to write a plugin to synchronize MIT Kerberos with another database
     such as Active Directory.	No plugins are built in for this interface.

   kadm5_auth interface
     The  kadm5_auth  section  (introduced in release 1.16) controls modules for
     the kadmin authorization interface, which determines whether a client prin-
     cipal is allowed to perform a kadmin  operation.	The  following	built-in
     modules exist for this interface:

     acl    This  module  reads  the  kadm5.acl  file, and authorizes operations
	    which are allowed according to the rules in the file.

     self   This module authorizes self-service  operations  including	password
	    changes,  creation of new random keys, fetching the client's princi-
	    pal record or string attributes, and fetching the policy record  as-
	    sociated with the client principal.

   clpreauth and kdcpreauth interfaces
     The  clpreauth  and  kdcpreauth  interfaces allow plugin modules to provide
     client and KDC preauthentication mechanisms.  The following  built-in  mod-
     ules exist for these interfaces:

     pkinit
	    This module implements the PKINIT preauthentication mechanism.

     encrypted_challenge
	    This module implements the encrypted challenge FAST factor.

     encrypted_timestamp
	    This module implements the encrypted timestamp mechanism.

   hostrealm interface
     The hostrealm section (introduced in release 1.12) controls modules for the
     host-to-realm  interface,	which  affects the local mapping of hostnames to
     realm names and the choice of default realm.  The following  built-in  mod-
     ules exist for this interface:

     profile
	    This  module  consults the [domain_realm] section of the profile for
	    authoritative host-to-realm mappings, and the default_realm variable
	    for the default realm.

     dns    This module looks for DNS records for  fallback  host-to-realm  map-
	    pings   and   the	default   realm.    It	 only  operates  if  the
	    dns_lookup_realm variable is set to true.

     domain
	    This module applies heuristics for fallback host-to-realm  mappings.
	    It	implements  the  realm_try_domains variable, and uses the upper-
	    cased parent domain of the hostname if that does not produce  a  re-
	    sult.

   localauth interface
     The localauth section (introduced in release 1.12) controls modules for the
     local  authorization interface, which affects the relationship between Ker-
     beros principals and local system accounts.  The following built-in modules
     exist for this interface:

     default
	    This module implements the DEFAULT type for auth_to_local values.

     rule   This module implements the RULE type for auth_to_local values.

     names  This module looks for an auth_to_local_names mapping for the princi-
	    pal name.

     auth_to_local
	    This module processes auth_to_local values in  the	default  realm's
	    section,  and  applies the default method if no auth_to_local values
	    exist.

     k5login
	    This module authorizes a principal to a local account  according  to
	    the account's .k5login file.

     an2ln  This module authorizes a principal to a local account if the princi-
	    pal name maps to the local account name.

   certauth interface
     The  certauth section (introduced in release 1.16) controls modules for the
     certificate authorization interface, which determines whether a certificate
     is allowed to preauthenticate a user via PKINIT.	The  following	built-in
     modules exist for this interface:

     pkinit_san
	    This  module authorizes the certificate if it contains a PKINIT Sub-
	    ject Alternative Name for the requested client principal, or  a  Mi-
	    crosoft UPN SAN matching the principal if pkinit_allow_upn is set to
	    true for the realm.

     pkinit_eku
	    This  module  rejects  the certificate if it does not contain an Ex-
	    tended Key Usage attribute consistent with	the  pkinit_eku_checking
	    value for the realm.

     dbmatch
	    This  module  authorizes  or  rejects  the	certificate according to
	    whether it matches the pkinit_cert_match  string  attribute  on  the
	    client principal, if that attribute is present.

PKINIT OPTIONS
     NOTE:
	The  following	are PKINIT-specific options.  These values may be speci-
	fied in [libdefaults] as global defaults,  or  within  a  realm-specific
	subsection  of [libdefaults], or may be specified as realm-specific val-
	ues in the [realms] section.  A realm-specific value overrides, not adds
	to, a generic [libdefaults] specification.  The search order is:

     1. realm-specific subsection of [libdefaults]:

	   [libdefaults]
	       EXAMPLE.COM = {
		   pkinit_anchors = FILE:/usr/local/example.com.crt
	       }

     2. realm-specific value in the [realms] section:

	   [realms]
	       OTHERREALM.ORG = {
		   pkinit_anchors = FILE:/usr/local/otherrealm.org.crt
	       }

     3. generic value in the [libdefaults] section:

	   [libdefaults]
	       pkinit_anchors = DIR:/usr/local/generic_trusted_cas/

   Specifying PKINIT identity information
     The syntax for specifying Public Key identity, trust, and revocation infor-
     mation for PKINIT is as follows:

     FILE:filename[,keyfilename]
	    This option has context-specific behavior.

	    In pkinit_identity or pkinit_identities, filename specifies the name
	    of a PEM-format file containing the user's certificate.  If keyfile-
	    name is not specified, the user's private key is expected to  be  in
	    filename  as  well.   Otherwise, keyfilename is the name of the file
	    containing the private key.

	    In pkinit_anchors or pkinit_pool, filename is assumed to be the name
	    of an OpenSSL-style ca-bundle file.

     DIR:dirname
	    This option has context-specific behavior.

	    In pkinit_identity or pkinit_identities, dirname specifies a  direc-
	    tory  with	files  named *.crt and *.key where the first part of the
	    file name is the same for matching pairs of certificate and  private
	    key  files.   When	a  file with a name ending with .crt is found, a
	    matching file ending with .key is assumed  to  contain  the  private
	    key.   If no such file is found, then the certificate in the .crt is
	    not used.

	    In pkinit_anchors or  pkinit_pool,	dirname  is  assumed  to  be  an
	    OpenSSL-style  hashed CA directory where each CA cert is stored in a
	    file named hash-of-ca-cert.#.  This  infrastructure  is  encouraged,
	    but  all files in the directory will be examined and if they contain
	    certificates (in PEM format), they will be used.

	    In pkinit_revoke, dirname is assumed to be an  OpenSSL-style  hashed
	    CA	directory  where  each revocation list is stored in a file named
	    hash-of-ca-cert.r#.  This  infrastructure  is  encouraged,	but  all
	    files  in the directory will be examined and if they contain a revo-
	    cation list (in PEM format), they will be used.

     PKCS12:filename
	    filename is the name of a  PKCS  #12  format  file,  containing  the
	    user's certificate and private key.

     PKCS11:[module_name=]modname[:slotid=slot-id][:token=token-label][:cer-
     tid=cert-id][:certlabel=cert-label]
	    All  keyword/values are optional.  modname specifies the location of
	    a library implementing PKCS #11.  If a value is encountered with  no
	    keyword,  it  is  assumed  to  be the modname.  If no module-name is
	    specified, the default is @PKCS11MOD@.  slotid= and/or token= may be
	    specified to force the use of a particular smard card reader or  to-
	    ken  if there is more than one available.  certid= and/or certlabel=
	    may be specified to force the selection of a particular  certificate
	    on	the device.  Specifier values must not contain colon characters,
	    as	 colons   are	always	 treated   as	separators.    See   the
	    pkinit_cert_match  configuration  option  for  more ways to select a
	    particular certificate to use for PKINIT.

     ENV:envvar
	    envvar specifies the name of an environment variable which has  been
	    set  to a value conforming to one of the previous values.  For exam-
	    ple, ENV:X509_PROXY, where environment variable X509_PROXY has  been
	    set to FILE:/tmp/my_proxy.pem.

   PKINIT krb5.conf options
     pkinit_anchors
	    Specifies  the  location of trusted anchor (root) certificates which
	    the client trusts to sign KDC  certificates.   This  option  may  be
	    specified multiple times.  These values from the config file are not
	    used if the user specifies X509_anchors on the command line.

     pkinit_cert_match
	    Specifies  matching rules that the client certificate must match be-
	    fore it is used to attempt PKINIT authentication.	If  a  user  has
	    multiple  certificates  available (on a smart card, or via other me-
	    dia), there must be exactly one certificate chosen before attempting
	    PKINIT authentication.  This option may be specified multiple times.
	    All the available certificates are checked against each rule in  or-
	    der until there is a match of exactly one certificate.

	    The  Subject  and  Issuer comparison strings are the RFC 2253 string
	    representations from the certificate Subject DN and Issuer	DN  val-
	    ues.

	    The syntax of the matching rules is:
	       [relation-operator]component-rule ...

	    where:

	    relation-operator
		   can	be either &&, meaning all component rules must match, or
		   ||, meaning only one component rule must match.  The  default
		   is &&.

	    component-rule
		   can	be one of the following.  Note that there is no punctua-
		   tion or whitespace between component rules.
		      <SUBJECT>regular-expression
		      <ISSUER>regular-expression
		      <SAN>regular-expression
		      <EKU>extended-key-usage-list
		      <KU>key-usage-list

		   extended-key-usage-list is a comma-separated list of required
		   Extended Key Usage values.  All values in the  list	must  be
		   present  in	the  certificate.  Extended Key Usage values can
		   be:

		   * pkinit

		   * msScLogin

		   * clientAuth

		   * emailProtection

		   key-usage-list is a comma-separated list of required Key  Us-
		   age	values.   All  values in the list must be present in the
		   certificate.  Key Usage values can be:

		   * digitalSignature

		   * keyEncipherment

	    Examples:

	       pkinit_cert_match = ||<SUBJECT>.*DoE.*<SAN>.*@EXAMPLE.COM
	       pkinit_cert_match = &&<EKU>msScLogin,clientAuth<ISSUER>.*DoE.*
	       pkinit_cert_match = <EKU>msScLogin,clientAuth<KU>digitalSignature

     pkinit_eku_checking
	    This option specifies what Extended Key Usage value the KDC certifi-
	    cate presented to the client must contain.	(Note that  if	the  KDC
	    certificate  has  the  pkinit  SubjectAlternativeName encoded as the
	    Kerberos TGS name, EKU checking is not necessary since  the  issuing
	    CA	has certified this as a KDC certificate.)  The values recognized
	    in the krb5.conf file are:

	    kpKDC  This is the default value and specifies  that  the  KDC  must
		   have the id-pkinit-KPKdc EKU as defined in RFC 4556.

	    kpServerAuth
		   If  kpServerAuth  is  specified,  a	KDC certificate with the
		   id-kp-serverAuth EKU will be accepted.  This key usage  value
		   is used in most commercially issued server certificates.

	    none   If  none  is  specified, then the KDC certificate will not be
		   checked to verify it has an acceptable EKU.	The use of  this
		   option is not recommended.

     pkinit_dh_min_bits
	    Specifies  the  group  of the Diffie-Hellman key the client will at-
	    tempt to use.  The acceptable values are 1024,  2048,  P-256,  4096,
	    P-384,  and  P-521.   The default is 2048.	(P-256, P-384, and P-521
	    are new in release 1.22.)

     pkinit_identities
	    Specifies the location(s) to be used to find the user's X.509  iden-
	    tity  information.	If this option is specified multiple times, each
	    value is attempted in order until certificates are found.  Note that
	    these values are not used if the user  specifies  X509_user_identity
	    on the command line.

     pkinit_kdc_hostname
	    The  presence of this option indicates that the client is willing to
	    accept a KDC certificate with a  dNSName  SAN  (Subject  Alternative
	    Name)  rather  than  requiring  the  id-pkinit-san as defined in RFC
	    4556.  This option may  be	specified  multiple  times.   Its  value
	    should  contain the acceptable hostname for the KDC (as contained in
	    its certificate).

     pkinit_pool
	    Specifies the location of intermediate  certificates  which  may  be
	    used  by  the  client to complete the trust chain between a KDC cer-
	    tificate and a trusted anchor.  This option may be specified  multi-
	    ple times.

     pkinit_require_crl_checking
	    The  default  certificate verification process will always check the
	    available revocation information to see if a  certificate  has  been
	    revoked.   If a match is found for the certificate in a CRL, verifi-
	    cation fails.  If the certificate being verified is not listed in  a
	    CRL,  or  there is no CRL present for its issuing CA, and pkinit_re-
	    quire_crl_checking is false, then verification succeeds.

	    However, if pkinit_require_crl_checking is true and there is no  CRL
	    information available for the issuing CA, then verification fails.

	    pkinit_require_crl_checking  should  be set to true if the policy is
	    such that up-to-date CRLs must be present for every CA.

     pkinit_revoke
	    Specifies the location of Certificate Revocation List (CRL) informa-
	    tion to be used by the client when verifying the validity of the KDC
	    certificate presented.  This option may be specified multiple times.

PARAMETER EXPANSION
     Starting with release 1.11, several variables, such as default_keytab_name,
     allow parameters to be expanded.  Valid parameters are:
		 +-------------------+-----------------------------+
		 | %{TEMP}	     | Temporary directory	   |
		 +-------------------+-----------------------------+
		 | %{uid}	     | Unix real  UID  or  Windows |
		 |		     | SID			   |
		 +-------------------+-----------------------------+
		 | %{euid}	     | Unix  effective	user ID or |
		 |		     | Windows SID		   |
		 +-------------------+-----------------------------+
		 | %{USERID}	     | Same as %{uid}		   |
		 +-------------------+-----------------------------+
		 | %{null}	     | Empty string		   |
		 +-------------------+-----------------------------+
		 | %{LIBDIR}	     | Installation library direc- |
		 |		     | tory			   |
		 +-------------------+-----------------------------+
		 | %{BINDIR}	     | Installation binary  direc- |
		 |		     | tory			   |
		 +-------------------+-----------------------------+
		 | %{SBINDIR}	     | Installation  admin  binary |
		 |		     | directory		   |
		 +-------------------+-----------------------------+
		 | %{username}	     | (Unix) Username	of  effec- |
		 |		     | tive user ID		   |
		 +-------------------+-----------------------------+
		 | %{APPDATA}	     | (Windows)  Roaming applica- |
		 |		     | tion data for current user  |
		 +-------------------+-----------------------------+
		 | %{COMMON_APPDATA} | (Windows) Application  data |
		 |		     | for all users		   |
		 +-------------------+-----------------------------+
		 | %{LOCAL_APPDATA}  | (Windows) Local application |
		 |		     | data for current user	   |
		 +-------------------+-----------------------------+
		 | %{SYSTEM}	     | (Windows)   Windows  system |
		 |		     | folder			   |
		 +-------------------+-----------------------------+
		 | %{WINDOWS}	     | (Windows) Windows folder    |
		 +-------------------+-----------------------------+
		 | %{USERCONFIG}     | (Windows) Per-user MIT krb5 |
		 |		     | config file directory	   |
		 +-------------------+-----------------------------+
		 | %{COMMONCONFIG}   | (Windows) Common  MIT  krb5 |
		 |		     | config file directory	   |
		 +-------------------+-----------------------------+

SAMPLE KRB5.CONF FILE
     Here is an example of a generic krb5.conf file:

	[libdefaults]
	    default_realm = ATHENA.MIT.EDU
	    dns_lookup_kdc = true
	    dns_lookup_realm = false

	[realms]
	    ATHENA.MIT.EDU = {
		kdc = kerberos.mit.edu
		kdc = kerberos-1.mit.edu
		kdc = kerberos-2.mit.edu
		admin_server = kerberos.mit.edu
		primary_kdc = kerberos.mit.edu
	    }
	    EXAMPLE.COM = {
		kdc = kerberos.example.com
		kdc = kerberos-1.example.com
		admin_server = kerberos.example.com
	    }

	[domain_realm]
	    mit.edu = ATHENA.MIT.EDU

	[capaths]
	    ATHENA.MIT.EDU = {
		   EXAMPLE.COM = .
	    }
	    EXAMPLE.COM = {
		   ATHENA.MIT.EDU = .
	    }

FILES
     /etc/krb5.conf

SEE ALSO
     syslog(3)

AUTHOR
     MIT

COPYRIGHT
     1985-2026, MIT

1.22.2								    KRB5.CONF(5)

home | help