doc: Document namespaces and synthetic principals
This commit is contained in:
		| @@ -6,15 +6,17 @@ | |||||||
|  |  | ||||||
| A | A | ||||||
| @cindex realm | @cindex realm | ||||||
| realm is an administrative domain.  The name of a Kerberos realm is | realm is an administrative domain containing any number of Kerberos | ||||||
| usually the Internet domain name in uppercase.  Call your realm the same | principals and namespaces.  The name of a Kerberos realm is | ||||||
| as your Internet domain name if you do not have strong reasons for not | usually a domain name in uppercase.  Call your realm the same | ||||||
|  | as your site's domain name if you do not have strong reasons for not | ||||||
| doing so.  It will make life easier for you and everyone else. | doing so.  It will make life easier for you and everyone else. | ||||||
|  |  | ||||||
| @menu | @menu | ||||||
| * Configuration file:: | * Configuration file:: | ||||||
| * Creating the database:: | * Creating the database:: | ||||||
| * Modifying the database:: | * Modifying the database:: | ||||||
|  | * Using namespaces and synthetic principals to keep the database small:: | ||||||
| * Checking the setup:: | * Checking the setup:: | ||||||
| * keytabs:: | * keytabs:: | ||||||
| * Remote administration:: | * Remote administration:: | ||||||
| @@ -40,7 +42,8 @@ To setup a realm you will first have to create a configuration file: | |||||||
| @file{/etc/krb5.conf}. The @file{krb5.conf} file can contain many | @file{/etc/krb5.conf}. The @file{krb5.conf} file can contain many | ||||||
| configuration options, some of which are described here. | configuration options, some of which are described here. | ||||||
|  |  | ||||||
| There is a sample @file{krb5.conf} supplied with the distribution. | There is a sample @file{krb5.conf} supplied with the distribution, and | ||||||
|  | a page for it in section 5 of the system manual. | ||||||
|  |  | ||||||
| The configuration file is a hierarchical structure consisting of | The configuration file is a hierarchical structure consisting of | ||||||
| sections, each containing a list of bindings (either variable | sections, each containing a list of bindings (either variable | ||||||
| @@ -106,14 +109,17 @@ with contents similar to the following. | |||||||
|  |  | ||||||
| @end example | @end example | ||||||
|  |  | ||||||
| If you use a realm name equal to your domain name, you can omit the | When realm names correspond to domain names, one can avoid having to | ||||||
| @samp{libdefaults}, and @samp{domain_realm}, sections. If you have a DNS | configure @samp{domain_realm} mappings, and one can avoid having to | ||||||
| SRV-record for your realm, or your Kerberos server has DNS CNAME | configure a @samp{default_realm} in the @samp{libdefaults} section. | ||||||
| @samp{kerberos.my.realm}, you can omit the @samp{realms} section too. | DNS SRV resource records can be used for KDC discovery, obviating the | ||||||
|  | need list KDCs in the @samp{realms} section of the @samp{krb5.conf} | ||||||
|  | file. | ||||||
|  |  | ||||||
| @cindex KRB5_CONFIG | @cindex KRB5_CONFIG | ||||||
| If you want to use a different configuration file then the default you | The Heimdal libraries and commands (and the MIT ones too), support the | ||||||
| can point a file with the environment variable @samp{KRB5_CONFIG}. | use of the environment variable @samp{KRB5_CONFIG} for using an | ||||||
|  | alternative configuration. | ||||||
|  |  | ||||||
| @example | @example | ||||||
| env KRB5_CONFIG=$HOME/etc/krb5.conf kinit user@@REALM | env KRB5_CONFIG=$HOME/etc/krb5.conf kinit user@@REALM | ||||||
| @@ -122,15 +128,16 @@ env KRB5_CONFIG=$HOME/etc/krb5.conf kinit user@@REALM | |||||||
| @cindex GSS_MECH_CONFIG | @cindex GSS_MECH_CONFIG | ||||||
| The GSS-API mechanism configuration file can also be changed from the | The GSS-API mechanism configuration file can also be changed from the | ||||||
| default with the enviornment variable @samp{GSS_MECH_CONFIG}. Note that | default with the enviornment variable @samp{GSS_MECH_CONFIG}. Note that | ||||||
| this file only configures additional plugin mechanisms: Kerberos, NTLM | this file can only configure additional plugin mechanisms: Kerberos, | ||||||
| and SPNEGO are built in to the Heimdal GSS-API library. | NTLM and SPNEGO are built in to the Heimdal GSS-API library. | ||||||
|  |  | ||||||
| @node Creating the database, Modifying the database, Configuration file, Setting up a realm | @node Creating the database, Modifying the database, Configuration file, Setting up a realm | ||||||
| @section Creating the database | @section Creating the database | ||||||
|  |  | ||||||
| The database library will look for the database in the directory | The Heimdal database library, @code{libhdb}, will look for the | ||||||
| @file{@value{dbdir}}, so you should probably create that directory. | database in the directory @file{@value{dbdir}}, so you should probably | ||||||
| Make sure the directory has restrictive permissions. | create that directory.  Make sure the directory has restrictive | ||||||
|  | permissions. | ||||||
|  |  | ||||||
| @example | @example | ||||||
| # mkdir /var/heimdal | # mkdir /var/heimdal | ||||||
| @@ -139,8 +146,8 @@ Make sure the directory has restrictive permissions. | |||||||
|  |  | ||||||
| Heimdal supports various database backends: lmdb (LMDB), db3 (Berkeley | Heimdal supports various database backends: lmdb (LMDB), db3 (Berkeley | ||||||
| DB 3.x, 4.x, or 5.x), db1 (Berkeley DB 2.x), sqlite (SQLite3), and ldap | DB 3.x, 4.x, or 5.x), db1 (Berkeley DB 2.x), sqlite (SQLite3), and ldap | ||||||
| (LDAP).  The default is @value{dbtype}, and is selected at build time | (LDAP).  The default is @value{dbtype}, and is selected at configure | ||||||
| from one of lmdb, db3, or db1. | time from one of lmdb, db3, or db1. | ||||||
|  |  | ||||||
| These defaults can be overriden in the 'database' key in the @samp{kdc} | These defaults can be overriden in the 'database' key in the @samp{kdc} | ||||||
| section of the configuration. | section of the configuration. | ||||||
| @@ -177,6 +184,11 @@ on which attackers can't do a dictionary attack. | |||||||
| If you have a master key, make sure you make a backup of your master | If you have a master key, make sure you make a backup of your master | ||||||
| key file; without it backups of the database are of no use. | key file; without it backups of the database are of no use. | ||||||
|  |  | ||||||
|  | Note that encryption of the keys in the database is only useful when | ||||||
|  | the database is stored on external storage media that is easy to | ||||||
|  | steal. Thus for the most part there is no need to encrypt the keys in | ||||||
|  | the database. | ||||||
|  |  | ||||||
| To initialise the database use the @command{kadmin} program, with the | To initialise the database use the @command{kadmin} program, with the | ||||||
| @kbd{-l} option (to enable local database mode). First issue a | @kbd{-l} option (to enable local database mode). First issue a | ||||||
| @kbd{init MY.REALM} command. This will create the database and insert | @kbd{init MY.REALM} command. This will create the database and insert | ||||||
| @@ -231,7 +243,7 @@ krbtgt/MY.REALM@@MY.REALM 1:0:1:52b53b61c875ce16:-:0:7:c8943be ... | |||||||
| kadmin/changepw@@MY.REALM 1:0:1:f48c8af2b340e9fb:-:0:7:e3e6088 ... | kadmin/changepw@@MY.REALM 1:0:1:f48c8af2b340e9fb:-:0:7:e3e6088 ... | ||||||
| @end smallexample | @end smallexample | ||||||
|  |  | ||||||
| @node Modifying the database, Checking the setup, Creating the database, Setting up a realm | @node Modifying the database, Using namespaces and synthetic principals to keep the database small, Creating the database, Setting up a realm | ||||||
| @section Modifying the database | @section Modifying the database | ||||||
|  |  | ||||||
| All modifications of principals are done with with kadmin. | All modifications of principals are done with with kadmin. | ||||||
| @@ -293,7 +305,47 @@ R second | |||||||
|  |  | ||||||
| @c Describe more of kadmin commands here... | @c Describe more of kadmin commands here... | ||||||
|  |  | ||||||
| @node Checking the setup, keytabs, Modifying the database, Setting up a realm | @node Using namespaces and synthetic principals to keep the database small, Checking the setup, Modifying the database, Setting up a realm | ||||||
|  | @section Using namespaces and synthetic principals to keep the database small | ||||||
|  |  | ||||||
|  | Keeping a Kerberos database small is useful for several reasons: | ||||||
|  |  | ||||||
|  | @itemize @bullet | ||||||
|  | @item to avoid low write transaction rates | ||||||
|  | @item to avoid replication latency | ||||||
|  | @item to keep re-keying costs down | ||||||
|  | @end itemize | ||||||
|  |  | ||||||
|  | To avoid needing database entries for client principals, configure and | ||||||
|  | enable PKINIT and synthetic principals. Alternatively, configure and | ||||||
|  | enable the use of GSS-API pre-authentication, though this is currently | ||||||
|  | experimental. | ||||||
|  |  | ||||||
|  | With synthetic client principals enabled, client principals will be | ||||||
|  | deemed to exist if they can pre-authenticate using a method that | ||||||
|  | yields an authenticated principal name, and if the client principal | ||||||
|  | does not already exist. | ||||||
|  |  | ||||||
|  | To lock out or disable a specific synthetic client principal, create | ||||||
|  | it in the database with the desired attributes. | ||||||
|  |  | ||||||
|  | To avoid needing database entries for host-based service principals, | ||||||
|  | create virtual host-based service principal namespaces using the | ||||||
|  | @command{add_ns} sub-command of the @command{kadmin} command. Virtual | ||||||
|  | host-based service principals will exist for every possible hostname | ||||||
|  | under a containing namespace, with keys derived from the namespace's | ||||||
|  | based keys and the current key rotation period. The long-term keys of | ||||||
|  | virtual host-based service principals rotate on a hard schedule as | ||||||
|  | configured for their namespaces, so hosts and applications using them | ||||||
|  | must keep re-fetching their @samp{keytabs}. See the manual pages for | ||||||
|  | @file{krb5.conf}, @command{kadmin}, and @command{httpkadmind} for more | ||||||
|  | details. | ||||||
|  |  | ||||||
|  | Using these features one can end up with a database that contains just | ||||||
|  | @code{krbtgt} principals, principals for locked users, and principals | ||||||
|  | that are neither @code{krbtgt}, user, nor host-based services. | ||||||
|  |  | ||||||
|  | @node Checking the setup, keytabs, Using namespaces and synthetic principals to keep the database small, Setting up a realm | ||||||
| @section Checking the setup | @section Checking the setup | ||||||
|  |  | ||||||
| There are two tools that can check the consistency of the Kerberos | There are two tools that can check the consistency of the Kerberos | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Nicolas Williams
					Nicolas Williams