K5START(1) | kstart | K5START(1) |
k5start - Obtain and optionally keep active a Kerberos ticket
k5start [-abFhLnPqstvx] [-c child pid
file] [-f keytab]
[-g group] [-H minutes] [-I service
instance]
[-i client instance] [-K minutes] [-k
ticket cache]
[-l time string] [-m mode] [-o
owner]
[-p pid file] [-r service realm] [-S
service name]
[-u client principal] [principal [command
...]]
k5start -U -f keytab
[-abFhLnPqstvx] [-c child pid file]
[-g group] [-H minutes] [-I service
instance]
[-K minutes] [-k ticket cache] [-l time
string]
[-m mode] [-o owner] [-p pid file]
[-r service realm] [-S service name]
[command ...]
k5start obtains and caches an initial Kerberos ticket-granting ticket for a principal. k5start can be used as an alternative to kinit, but it is primarily intended to be used by programs that want to use a keytab to obtain Kerberos credentials, such as a web server that needs to authenticate to another service such as an LDAP server.
Normally, the principal for which to give tickets should be specified as the first argument. principal may be either just a principal name (including the optional instance) or a full principal and realm string. The -u and -i options can be used as an alternative mechanism for specifying the principal, but generally aren't as convenient. If no principal is given as either the first argument or the argument to the -u option, the client principal defaults to the Unix username of the user running k5start in the default local realm.
Optionally, a command may be given on the command line of k5start. If so, that command is run after Kerberos authentication (and running aklog if desired), with the appropriate environment variables set to point it to the right ticket cache. k5start will then continue running, waking up periodically to refresh credentials slightly before they would expire, until the command completes. (The frequency with which it wakes up to refresh credentials can still be controlled with the -K option.) To run in this mode, the principal must either be specified as a regular command-line argument or via the -U option; the -u and -i options may not be used. Also, a keytab must be specified with -f to run a specific command.
The command will not be run using the shell, so if you want to use shell metacharacters in the command with their special meaning, give "sh -c command" as the command to run and quote command.
If the command contains command-line options (like "-c"), put -- on the command line before the beginning of the command to tell k5start to not parse those options as its own.
When running a command, k5start propagates HUP, TERM, INT, and QUIT signals to the child process and does not exit when those signals are received. (If the propagated signal causes the child process to exit, k5start will then exit.) This allows k5start to react properly when run under a command supervision system such as runit(8) or svscan(8) that uses signals to control supervised commands, and to run interactive commands that should receive Ctrl-C.
If a running k5start receives an ALRM signal, it immediately refreshes the ticket cache regardless of whether it is in danger of expiring.
If k5start is run with a command or the -K flag and the -x flag is not given, it will keep trying even if the initial authentication fails. It will retry the initial authentication immediately and then with exponential backoff to once per minute, and keep trying until authentication succeeds or it is killed. The command, if any, will not be started until authentication succeeds.
This behavior probably should have been the default behavior of -K. The default was not changed to avoid changes for existing users, but for new applications, consider always using -a with -K.
This option is important if another program is manipulating the ticket cache that k5start is using. For example, if another program is automatically renewing a ticket more frequently than k5start, then k5start will never see a ticket that is close to expiring and will therefore, by default, never try to renew the ticket. This means that k5start will also never renew AFS tokens, even if the -t option was given, since k5start only renews AFS tokens after it successfully renews a ticket. If this option is specified in such a situation, k5start will renew its ticket every time it checks the ticket, so AFS tokens will be renewed.
This argument is only valid in combination with either -K or a command to run.
If this flag is given, k5start will also change directories to "/". All paths (such as to a command to run or a PID file) should therefore be given as absolute, not relative, paths.
If used in conjunction with a command to run, that command will also run in the background and will also have its input and output redirected to /dev/null. It will have to report any errors via some other mechanism for the errors to be seen.
Note that on Mac OS X, the default ticket cache type is per-session and using the -b flag will disassociate k5start from the existing ticket cache. When using -b in conjunction with -K on Mac OS X, you probably also want to use the -k flag to specify a ticket cache file and force the use of a file cache.
When using this option, consider also using -L to report k5start errors to syslog.
Note that, when used with -b, the PID file is written out after k5start is backgrounded and changes its working directory to /, so relative paths for the PID file will be relative to / (probably not what you want).
If -H is used with -t, the external program will always be run even if a ticket with a sufficient remaining lifetime was found.
If -H is used with -K, k5start will not exit immediately. Instead, the specified remaining lifetime will replace the default value of two minutes, meaning that k5start will ensure, each time it wakes up, that the ticket has a remaining lifetime of the minutes argument. This is an alternative to -a to ensure that tickets always have a certain minimal amount of lifetime remaining.
If this option is not given but a command was given on the command line, the default interval is 60 minutes (1 hour).
If an error occurs in refreshing the ticket cache, the wake-up interval will be shortened to one minute and the operation retried at that interval for as long as the error persists.
If any of -o, -g, or -m are given, ticket cache must be either a simple path to a file or start with "FILE:" or "WRFILE:".
This is useful when debugging problems in combination with -b.
Setting a mode that does not allow k5start to read or write to the ticket cache will cause k5start to fail and exit when using the -K option or running a command.
Note that, when used with -b the PID file is written out after k5start is backgrounded and changes its working directory to /, so relative paths for the PID file will be relative to / (probably not what you want).
If k5start has been built with AFS setpag() support and a command was given on the command line, k5start will create a new PAG before obtaining AFS tokens. Otherwise, it will obtain tokens in the current PAG.
When -U is given, k5start will not expect a principal name to be given on the command line, and any arguments after the options will be taken as a command to run.
Note that there's normally no reason to use this flag rather than simply giving the principal on the command line as the first regular argument.
The program exits with status 0 if it successfully gets a ticket or has a happy ticket (see -H). If k5start runs aklog or some other program k5start returns the exit status of that program.
Use the /etc/krb5.keytab keytab to obtain a ticket granting ticket for the principal host/example.com, putting the ticket cache in /tmp/service.tkt. The lifetime is 10 hours and the program wakes up every 10 minutes to check if the ticket is about to expire.
k5start -k /tmp/service.tkt -f /etc/krb5.keytab -K 10 -l 10h \ host/example.com
Do the same, but using the default ticket cache and run the command /usr/local/bin/auth-backup. k5start will continue running until the command finishes. If the initial authentication fails, keep trying, and don't start the command until it succeeds. This could be used during system startup for a command that must have valid tickets before starting, and tolerates having k5start start before the network is completely set up.
k5start -f /etc/krb5.keytab -K 10 -l 10h host/example.com \ /usr/local/bin/auth-backup
Shows the permissions of the temporary cache file created by k5start:
k5start -f /etc/krb5.keytab host/example.com \ -- sh -c 'ls -l $KRB5CCNAME'
Notice the "--" before the command to keep k5start from parsing the "-c" as its own option.
Do the same thing, but determine the principal from the keytab:
k5start -f /etc/krb5.keytab -U -- sh -c 'ls -l $KRB5CCNAME'
Note that no principal is given before the command.
Starts k5start as a daemon using the Debian start-stop-daemon management program. This is the sort of line that one could put into a Debian init script:
start-stop-daemon --start --pidfile /var/run/k5start.pid \ --exec /usr/local/bin/k5start -- -b -p /var/run/k5start.pid \ -f /etc/krb5.keytab host/example.com
This uses /var/run/k5start.pid as the PID file and obtains host/example.com tickets from the system keytab file. k5start would then be stopped with:
start-stop-daemon --stop --pidfile /var/run/k5start.pid rm -f /var/run/k5start.pid
This code could be added to an init script for Apache, for example, to start a k5start process alongside Apache to manage its Kerberos credentials.
If the environment variable AKLOG is set, its value will be used as the program to run with -t rather than the default complied into k5start. If AKLOG is not set and KINIT_PROG is set, its value will be used instead. KINIT_PROG is honored for backward compatibility but its use is not recommended due to its confusing name.
If no ticket file (with -k) or command is specified on the command line, k5start will use the environment variable KRB5CCNAME to determine the location of the the ticket granting ticket. If either a command is specified or the -k option is used, KRB5CCNAME will be set to point to the ticket file before running the aklog program or any command given on the command line.
The default ticket cache is determined by the underlying Kerberos libraries. The default path for aklog is determined at build time, and will normally be whichever of aklog or afslog is found in the user's path.
If a command is specified and -k was not given, k5start will create a temporary ticket cache file of the form "/tmp/krb5cc_%d_%s" where %d is the UID k5start is running as and %s is a random string.
k5start was based on the k4start code written by Robert Morgan. It was ported to Kerberos v5 by Booker C. Bense. Additional cleanup and current maintenance are done by Russ Allbery <eagle@eyrie.org>.
Implementations of -b and -p and the example for a Debian init script are based on code contributed by Navid Golpayegani.
Copyright 2015 Russ Allbery <eagle@eyrie.org>
Copyright 2002, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2014 The Board of Trustees of the Leland Stanford Junior University
Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without any warranty.
The kstart web page at <http://www.eyrie.org/~eagle/software/kstart/> will have the current version of k5start and krenew.
2015-12-26 | 4.2 |