Use "agogo" HTML theme (with some modifications) for the Sphinx documentation. Do...
[krb5.git] / doc / user-guide.texinfo
1 \input texinfo @c -*-texinfo-*-
2 @c %**start of header
3 @c guide
4 @setfilename krb5-user.info
5 @settitle Kerberos V5 UNIX User's Guide
6 @setchapternewpage odd                  @c chapter begins on next odd page
7 @c @setchapternewpage on                   @c chapter begins on next page
8 @c @smallbook                              @c Format for 7" X 9.25" paper
9 @documentencoding UTF-8
10 @c %**end of header
11 @copying
12 Copyright @copyright{} 1985-2010 by the Massachusetts Institute of Technology.
13 @end copying
14
15 @paragraphindent 0
16 @iftex
17 @parskip 6pt plus 6pt
18 @end iftex
19
20 @dircategory Kerberos
21 @direntry
22 * krb5-user: (krb5-user).               Kerberos V5 UNIX User's Guide
23 @end direntry
24
25 @include definitions.texinfo
26 @set EDITION 1.0
27
28 @finalout                               @c don't print black warning boxes
29
30 @titlepage
31 @title @value{PRODUCT} UNIX User's Guide
32 @subtitle Release:  @value{RELEASE}
33 @subtitle Document Edition:  @value{EDITION}
34 @subtitle Last updated:  @value{UPDATED}
35 @author @value{COMPANY}
36
37 @page
38 @vskip 0pt plus 1filll
39 @insertcopying
40 @end titlepage
41
42 @comment  node-name,  next,  previous,  up
43 @node Top, Introduction, (dir), (dir)
44
45 @ifinfo
46 This file describes how to use the @value{PRODUCT} client programs.
47
48 @insertcopying
49 @end ifinfo
50
51 @c The master menu is updated using emacs19's M-x texinfo-all-menus-update
52 @c function.  Don't forget to run M-x texinfo-every-node-update after
53 @c you add a new section or subsection, or after you've rearranged the
54 @c comand before each @section or @subsection!  All you need to enter
55 @c is:
56 @c
57 @c @section New Section Name
58 @c
59 @c M-x texinfo-every-node-update will take care of calculating the
60 @c node's forward and back pointers.
61 @c
62 @c ---------------------------------------------------------------------
63
64 @menu
65 * Introduction::                
66 * Kerberos V5 Tutorial::        
67 * Kerberos V5 Reference::       
68 * Kerberos Glossary::           
69 * Copyright::                   
70 @end menu
71
72 @node Introduction, Kerberos V5 Tutorial, Top, Top
73 @chapter Introduction
74
75 @ifset CYGNUS
76 @value{PRODUCT} is based on the Kerberos V5 authentication system
77 developed at MIT.
78 @end ifset
79 @ifset MIT
80 Kerberos V5 is an authentication system developed at MIT.
81 @end ifset
82 Kerberos is named for the three-headed watchdog from Greek mythology,
83 who guarded the entrance to the underworld.
84
85 Under Kerberos, a client (generally either a user or a service) sends a
86 request for a ticket to the @i{Key Distribution Center} (KDC).  The KDC
87 creates a @dfn{ticket-granting ticket} (TGT) for the client, encrypts it
88 using the client's password as the key, and sends the encrypted TGT back
89 to the client.  The client then attempts to decrypt the TGT, using its
90 password.  If the client successfully decrypts the TGT (@i{i.e.}, if the
91 client gave the correct password), it keeps the decrypted TGT, which
92 indicates proof of the client's identity.
93
94 The TGT, which expires at a specified time, permits the client to obtain
95 additional tickets, which give permission for specific services.  The
96 requesting and granting of these additional tickets is user-transparent.
97
98 Since Kerberos negotiates authenticated, and optionally encrypted,
99 communications between two points anywhere on the internet, it provides
100 a layer of security that is not dependent on which side of a firewall
101 either client is on.  Since studies have shown that half of the computer
102 security breaches in industry happen from @i{inside} firewalls,
103 @value{COMPANY}'s @value{PRODUCT} plays a vital role in maintaining your
104 network security.
105
106 The @value{PRODUCT} package is designed to be easy to use.  Most of the
107 commands are nearly identical to UNIX network programs you already
108 use.  @value{PRODUCT} is a @dfn{single-sign-on} system, which means
109 that you have to type your password only once per session, and Kerberos
110 does the authenticating and encrypting transparently.
111
112 @menu
113 * What is a Ticket?::           
114 * What is a Kerberos Principal?::  
115 @end menu
116
117 @node What is a Ticket?, What is a Kerberos Principal?, Introduction, Introduction
118 @section What is a Ticket?
119
120 Your Kerberos @dfn{credentials}, or ``@dfn{tickets}'', are a set of
121 electronic information that can be used to verify your identity.  Your
122 Kerberos tickets may be stored in a file, or they may exist only in
123 memory.
124
125 The first ticket you obtain is a @dfn{ticket-granting ticket}, which
126 permits you to obtain additional tickets.  These additional tickets give
127 you permission for specific services.  The requesting and granting of
128 these additional tickets happens transparently.
129
130 A good analogy for the ticket-granting ticket is a three-day ski pass
131 that is good at four different resorts.  You show the pass at whichever
132 resort you decide to go to (until it expires), and you receive a lift
133 ticket for that resort.  Once you have the lift ticket, you can ski all
134 you want at that resort.  If you go to another resort the next day, you
135 once again show your pass, and you get an additional lift ticket for the
136 new resort.  The difference is that the @value{PRODUCT} programs notice
137 that you have the weekend ski pass, and get the lift ticket for you, so
138 you don't have to perform the transactions yourself.
139
140 @node What is a Kerberos Principal?,  , What is a Ticket?, Introduction
141 @section What is a Kerberos Principal?
142
143 A Kerberos @dfn{principal} is a unique identity to which Kerberos can
144 assign tickets.  Principals can have an arbitrary number of
145 components.  Each component is separated by a component separator,
146 generally `/'.  The last component is the realm, separated from the
147 rest of the principal by the realm separator, generally `@@'.  If there
148 is no realm component in the principal, then it will be assumed that
149 the principal is in the default realm for the context in which it is
150 being used.
151
152 Traditionally, a principal is divided into three parts:  the
153 @dfn{primary}, the @dfn{instance}, and the @dfn{realm}.  The format of
154 a typical Kerberos V5 principal is @code{primary/instance@@REALM}.
155
156 @itemize @bullet
157 @item The @dfn{primary} is the first part of the principal.  In the case
158 of a user, it's the same as your username.  For a host, the primary is
159 the word @code{host}.
160
161 @item The @dfn{instance} is an optional string that qualifies the
162 primary.  The instance is separated from the primary by a slash
163 (@code{/}).  In the case of a user, the instance is usually null, but a
164 user might also have an additional principal, with an instance called
165 @samp{admin}, which he/she uses to administrate a database.  The
166 principal @code{@value{RANDOMUSER1}@@@value{PRIMARYREALM}} is completely
167 separate from the principal
168 @code{@value{RANDOMUSER1}/admin@@@value{PRIMARYREALM}}, with a separate
169 password, and separate permissions.  In the case of a host, the instance
170 is the fully qualified hostname, e.g.,
171 @code{@value{RANDOMHOST1}.@value{PRIMARYDOMAIN}}.
172
173 @item The @dfn{realm} is your Kerberos realm.  In most cases, your
174 Kerberos realm is your domain name, in upper-case letters.  For example,
175 the machine @code{@value{RANDOMHOST1}.@value{SECONDDOMAIN}} would be in
176 the realm @code{@value{SECONDREALM}}.
177 @end itemize
178
179 @node Kerberos V5 Tutorial, Kerberos V5 Reference, Introduction, Top
180 @chapter Kerberos V5 Tutorial
181
182 This tutorial is intended to familiarize you with the @value{PRODUCT}
183 client programs.  We will represent your prompt as ``@code{shell%}''.
184 So an instruction to type the ``@kbd{ls}'' command would be represented as
185 follows:
186
187 @need 600
188 @smallexample
189 @group
190 @b{shell%} ls
191 @end group
192 @end smallexample
193
194 In these examples, we will use sample usernames, such as
195 @code{@value{RANDOMUSER1}} and @code{@value{RANDOMUSER2}}, sample
196 hostnames, such as @code{@value{RANDOMHOST1}} and
197 @code{@value{RANDOMHOST2}}, and sample domain names, such as
198 @code{@value{PRIMARYDOMAIN}} and @code{@value{SECONDDOMAIN}}.  When you
199 see one of these, substitute your username, hostname, or domain name
200 accordingly.
201
202 @menu
203 * Setting Up to Use Kerberos V5::  
204 * Ticket Management::           
205 * Password Management::         
206 * Kerberos V5 Applications::    
207 @end menu
208
209 @node Setting Up to Use Kerberos V5, Ticket Management, Kerberos V5 Tutorial, Kerberos V5 Tutorial
210 @section Setting Up to Use @value{PRODUCT}
211
212 Your system administrator will have installed the @value{PRODUCT}
213 programs in whichever directory makes the most sense for your system.
214 We will use @code{@value{ROOTDIR}} throughout this guide to refer to the
215 top-level directory @value{PRODUCT} directory.  We will therefor use
216 @code{@value{BINDIR}} to denote the location of the @value{PRODUCT} user
217 programs.  In your installation, the directory name may be different,
218 but whatever the directory name is, you should make sure it is included
219 in your path.  You will probably want to put it @i{ahead of} the
220 directories @code{/bin} and @code{/usr/bin} so you will get the
221 @value{PRODUCT} network programs, rather than the standard UNIX
222 versions, when you type their command names.
223
224 @node Ticket Management, Password Management, Setting Up to Use Kerberos V5, Kerberos V5 Tutorial
225 @section Ticket Management
226
227 On many systems, Kerberos is built into the login program, and you get
228 tickets automatically when you log in.  Other programs, such as
229 @code{rsh}, @code{rcp}, @code{telnet}, and @code{rlogin}, can forward
230 copies of your tickets to the remote host.  Most of these programs also
231 automatically destroy your tickets when they exit.  However,
232 @value{COMPANY} recommends that you explicitly destroy your Kerberos
233 tickets when you are through with them, just to be sure.  One way to
234 help ensure that this happens is to add the @code{kdestroy} command to
235 your @code{.logout} file.  Additionally, if you are going to be away
236 from your machine and are concerned about an intruder using your
237 permissions, it is safest to either destroy all copies of your tickets,
238 or use a screensaver that locks the screen.
239
240 @need 2000
241 @menu
242 * Kerberos Ticket Properties::  
243 * Obtaining Tickets with kinit::  
244 * Viewing Your Tickets with klist::  
245 * Destroying Your Tickets with kdestroy::  
246 @end menu
247
248 @node Kerberos Ticket Properties, Obtaining Tickets with kinit, Ticket Management, Ticket Management
249 @subsection Kerberos Ticket Properties
250
251 @noindent
252 There are various properties that Kerberos tickets can have:
253
254 If a ticket is @dfn{forwardable}, then the KDC can issue a new ticket with
255 a different network address based on the forwardable ticket.  This
256 allows for authentication forwarding without requiring a password to be
257 typed in again.  For example, if a user with a forwardable TGT logs
258 into a remote system, the KDC could issue a new TGT for that user with
259 the network address of the remote system, allowing authentication on
260 that host to work as though the user were logged in locally.
261
262 When the KDC creates a new ticket based on a forwardable ticket, it
263 sets the @dfn{forwarded} flag on that new ticket.  Any tickets that are
264 created based on a ticket with the forwarded flag set will also have
265 their forwarded flags set.
266
267 A @dfn{proxiable} ticket is similar to a forwardable ticket in that it
268 allows a service to take on the identity of the client.  Unlike a
269 forwardable ticket, however, a proxiable ticket is only issued for
270 specific services.  In other words, a ticket-granting ticket cannot be
271 issued based on a ticket that is proxiable but not forwardable.
272
273 A @dfn{proxy} ticket is one that was issued based on a proxiable ticket.
274
275 A @dfn{postdated} ticket is issued with the @i{invalid} flag set.
276 After the starting time listed on the ticket, it can be presented to
277 the KDC to obtain valid tickets.  
278
279 Tickets with the @dfn{postdateable} flag set can be used to issue postdated
280 tickets.
281
282 @dfn{Renewable} tickets can be used to obtain new session keys without
283 the user entering their password again.  A renewable ticket has two
284 expiration times.  The first is the time at which this particular
285 ticket expires.  The second is the latest possible expiration time for
286 any ticket issued based on this renewable ticket.
287
288 A ticket with the @dfn{initial} flag set was issued based on the
289 authentication protocol, and not on a ticket-granting ticket.   Clients
290 that wish to ensure that the user's key has been recently presented for
291 verification could specify that this flag must be set to accept the
292 ticket.
293
294 An @dfn{invalid} ticket must be rejected by application servers.  Postdated
295 tickets are usually issued with this flag set, and must be validated by
296 the KDC before they can be used.
297
298 A @dfn{preauthenticated} ticket is one that was only issued after the
299 client requesting the ticket had authenticated itself to the KDC.
300
301 The @dfn{hardware authentication} flag is set on a ticket which
302 required the use of hardware for authentication.  The hardware is
303 expected to be possessed only by the client which requested the
304 tickets.
305
306 If a ticket has the @dfn{transit policy checked} flag set, then the KDC that
307 issued this ticket implements the transited-realm check policy and
308 checked the transited-realms list on the ticket.  The transited-realms
309 list contains a list of all intermediate realms between the realm of the
310 KDC that issued the first ticket and that of the one that issued the
311 current ticket.  If this flag is not set, then the application server
312 must check the transited realms itself or else reject the ticket.
313
314 The @dfn{okay as delegate} flag indicates that the server specified in
315 the ticket is suitable as a delegate as determined by the policy of
316 that realm.  A server that is acting as a delegate has been granted a
317 proxy or a forwarded TGT.  This flag is a new addition to the
318 @value{PRODUCT} protocol and is not yet implemented on MIT servers.
319
320 An @dfn{anonymous}  ticket is one in which the named principal is a generic
321 principal for that realm; it does not actually specify the individual
322 that will be using the ticket.  This ticket is meant only to securely
323 distribute a session key.  This is a new addition to the @value{PRODUCT}
324 protocol and is not yet implemented on MIT servers.
325
326 @node Obtaining Tickets with kinit, Viewing Your Tickets with klist, Kerberos Ticket Properties, Ticket Management
327 @subsection Obtaining Tickets with kinit
328
329 If your site is using the @value{PRODUCT} login program, you will get
330 Kerberos tickets automatically when you log in.  If your site uses a
331 different login program, you may need to explicitly obtain your Kerberos
332 tickets, using the @code{kinit} program.  Similarly, if your Kerberos
333 tickets expire, use the @code{kinit} program to obtain new ones.
334
335 @need 1500
336 To use the @code{kinit} program, simply type @kbd{kinit} and then type
337 your password at the prompt.  For example, Jennifer (whose username is
338 @code{@value{RANDOMUSER1}}) works for Bleep, Inc. (a fictitious company
339 with the domain name @code{@value{PRIMARYDOMAIN}} and the Kerberos realm
340 @code{@value{PRIMARYREALM}}).  She would type:
341
342 @smallexample
343 @group
344 @b{shell%} kinit
345 @b{Password for @value{RANDOMUSER1}@@@value{PRIMARYREALM}:} @i{<-- [Type @value{RANDOMUSER1}'s password here.]}
346 @b{shell%}
347 @end group
348 @end smallexample
349
350 @need 1000
351 If you type your password incorrectly, kinit will give you the following
352 error message:
353
354 @smallexample
355 @group
356 @b{shell%} kinit
357 @b{Password for @value{RANDOMUSER1}@@@value{PRIMARYREALM}:} @i{<-- [Type the wrong password here.]}
358 @b{kinit: Password incorrect}
359 @b{shell%}
360 @end group
361 @end smallexample
362
363 @noindent and you won't get Kerberos tickets.
364
365 @noindent Notice that @code{kinit} assumes you want tickets for your own
366 username in your default realm.  
367 @need 1500
368 Suppose Jennifer's friend David is visiting, and he wants to borrow a
369 window to check his mail.  David needs to get tickets for himself in his
370 own realm, @value{SECONDREALM}.@footnote{Note:  the realm
371 @value{SECONDREALM} must be listed in your computer's Kerberos
372 configuration file, @code{/etc/krb5.conf}.}  He would type:
373
374 @smallexample
375 @group
376 @b{shell%} kinit @value{RANDOMUSER2}@@@value{SECONDREALM}
377 @b{Password for @value{RANDOMUSER2}@@@value{SECONDREALM}:} @i{<-- [Type @value{RANDOMUSER2}'s password here.]}
378 @b{shell%}
379 @end group
380 @end smallexample
381
382 @noindent David would then have tickets which he could use to log onto
383 his own machine.  Note that he typed his password locally on Jennifer's
384 machine, but it never went over the network.  Kerberos on the local host
385 performed the authentication to the KDC in the other realm.
386
387 @need 1000
388 If you want to be able to forward your tickets to another host, you need
389 to request @dfn{forwardable} tickets.  You do this by specifying the
390 @kbd{-f} option:
391
392 @smallexample
393 @group
394 @b{shell%} kinit -f
395 @b{Password for @value{RANDOMUSER1}@@@value{PRIMARYREALM}:} @i{<-- [Type your password here.]}
396 @b{shell%}
397 @end group
398 @end smallexample
399
400 @noindent
401 Note that @code{kinit} does not tell you that it obtained forwardable
402 tickets; you can verify this using the @code{klist} command
403 (@pxref{Viewing Your Tickets with klist}).
404
405 Normally, your tickets are good for your system's default ticket
406 lifetime, which is ten hours on many systems.  You can specify a
407 different ticket lifetime with the @samp{-l} option.  Add the letter
408 @samp{s} to the value for seconds, @samp{m} for minutes, @samp{h} for
409 hours, or @samp{d} for days.
410 @need 1500
411 For example, to obtain forwardable tickets for
412 @code{@value{RANDOMUSER2}@@@value{SECONDREALM}} that would be good for
413 three hours, you would type:
414
415 @smallexample
416 @group
417 @b{shell%} kinit -f -l 3h @value{RANDOMUSER2}@@@value{SECONDREALM}
418 @b{Password for @value{RANDOMUSER2}@@@value{SECONDREALM}:} @i{<-- [Type @value{RANDOMUSER2}'s password here.]}
419 @b{shell%}
420 @end group
421 @end smallexample
422
423 @noindent
424 You cannot mix units; specifying a lifetime of @samp{3h30m} would result
425 in an error.  Note also that most systems specify a maximum ticket
426 lifetime.  If you request a longer ticket lifetime, it will be
427 automatically truncated to the maximum lifetime.
428
429 @node Viewing Your Tickets with klist, Destroying Your Tickets with kdestroy, Obtaining Tickets with kinit, Ticket Management
430 @subsection Viewing Your Tickets with klist
431
432 The @code{klist} command shows your tickets.  When you first obtain
433 tickets, you will have only the ticket-granting ticket.  (@xref{What is
434 a Ticket?}.)  The listing would look like this:
435
436 @smallexample
437 @group
438 @b{shell%} klist
439 Ticket cache: /tmp/krb5cc_ttypa
440 Default principal: @value{RANDOMUSER1}@@@value{PRIMARYREALM}
441
442 Valid starting     Expires            Service principal
443 06/07/04 19:49:21  06/08/04 05:49:19  krbtgt/@value{PRIMARYREALM}@@@value{PRIMARYREALM}
444 @b{shell%}
445 @end group
446 @end smallexample
447
448 @noindent
449 The ticket cache is the location of your ticket file.  In the above
450 example, this file is named @code{/tmp/krb5cc_ttypa}.  The default
451 principal is your kerberos @dfn{principal}.  (@pxref{What is a Kerberos
452 Principal?})
453
454 The ``valid starting'' and ``expires'' fields describe the period of
455 time during which the ticket is valid.  The @dfn{service principal}
456 describes each ticket.  The ticket-granting ticket has the primary
457 @code{krbtgt}, and the instance is the realm name.
458
459 @need 2000
460 Now, if @value{RANDOMUSER1} connected to the machine
461 @code{@value{RANDOMHOST1}.@value{PRIMARYDOMAIN}}, and then typed
462 @kbd{klist} again, she would have gotten the following result:
463
464 @smallexample
465 @group
466 @b{shell%} klist
467 Ticket cache: /tmp/krb5cc_ttypa
468 Default principal: @value{RANDOMUSER1}@@@value{PRIMARYREALM}
469
470 Valid starting     Expires            Service principal
471 06/07/04 19:49:21  06/08/04 05:49:19  krbtgt/@value{PRIMARYREALM}@@@value{PRIMARYREALM}
472 06/07/04 20:22:30  06/08/04 05:49:19  host/@value{RANDOMHOST1}.@value{PRIMARYDOMAIN}@@@value{PRIMARYREALM}
473 @b{shell%}
474 @end group
475 @end smallexample
476
477 @noindent
478 Here's what happened:  when @value{RANDOMUSER1} used telnet to connect
479 to the host @code{@value{RANDOMHOST1}.@value{PRIMARYDOMAIN}}, the telnet
480 program presented her ticket-granting ticket to the KDC and requested a
481 host ticket for the host
482 @code{@value{RANDOMHOST1}.@value{PRIMARYDOMAIN}}.  The KDC sent the host
483 ticket, which telnet then presented to the host
484 @code{@value{RANDOMHOST1}.@value{PRIMARYDOMAIN}}, and she was allowed to
485 log in without typing her password.
486
487 @need 3000
488 Suppose your Kerberos tickets allow you to log into a host in another
489 domain, such as @code{@value{RANDOMHOST2}.@value{SECONDDOMAIN}}, which
490 is also in another Kerberos realm, @code{@value{SECONDREALM}}.  If you
491 telnet to this host, you will receive a ticket-granting ticket for the
492 realm @code{@value{SECONDREALM}}, plus the new @code{host} ticket for
493 @code{@value{RANDOMHOST2}.@value{SECONDDOMAIN}}.  @kbd{klist} will now
494 show:
495
496 @smallexample
497 @group
498 @b{shell%} klist
499 Ticket cache: /tmp/krb5cc_ttypa
500 Default principal: @value{RANDOMUSER1}@@@value{PRIMARYREALM}
501
502 Valid starting     Expires            Service principal
503 06/07/04 19:49:21  06/08/04 05:49:19  krbtgt/@value{PRIMARYREALM}@@@value{PRIMARYREALM}
504 06/07/04 20:22:30  06/08/04 05:49:19  host/@value{RANDOMHOST1}.@value{PRIMARYDOMAIN}@@@value{PRIMARYREALM}
505 06/07/04 20:24:18  06/08/04 05:49:19  krbtgt/@value{SECONDREALM}@@@value{PRIMARYREALM}
506 06/07/04 20:24:18  06/08/04 05:49:19  host/@value{RANDOMHOST2}.@value{SECONDDOMAIN}@@@value{SECONDREALM}
507 @b{shell%}
508 @end group
509 @end smallexample
510
511 You can use the @code{-f} option to view the @dfn{flags} that apply to
512 your tickets.  The flags are:
513
514 @table @b
515 @itemx F
516 @b{F}orwardable
517 @itemx f
518 @b{f}orwarded
519 @itemx P
520 @b{P}roxiable
521 @itemx p
522 @b{p}roxy
523 @itemx D
524 post@b{D}ateable
525 @itemx d
526 post@b{d}ated
527 @itemx R
528 @b{R}enewable
529 @itemx I
530 @b{I}nitial
531 @itemx i
532 @b{i}nvalid
533 @itemx H
534 @b{H}ardware authenticated
535 @itemx A
536 pre@b{A}uthenticated
537 @itemx T
538 @b{T}ransit policy checked
539 @itemx O
540 @b{O}kay as delegate
541 @itemx a
542 @b{a}nonymous
543 @end table
544
545 @need 1500
546 Here is a sample listing.  In this example, the user @value{RANDOMUSER1}
547 obtained her initial tickets (@samp{I}), which are forwardable
548 (@samp{F}) and postdated (@samp{d}) but not yet validated (@samp{i}).
549 (@xref{kinit Reference}, for more information about postdated tickets.)
550
551 @smallexample
552 @group
553 @b{shell%} klist -f
554 @b{Ticket cache: /tmp/krb5cc_320
555 Default principal: @value{RANDOMUSER1}@@@value{PRIMARYREALM}
556
557 Valid starting      Expires             Service principal
558 31/07/05 19:06:25  31/07/05 19:16:25  krbtgt/@value{PRIMARYREALM}@@@value{PRIMARYREALM}
559         Flags: FdiI
560 shell%}
561 @end group
562 @end smallexample
563
564 @need 1500
565 In the following example, the user @value{RANDOMUSER2}'s tickets were
566 forwarded (@samp{f}) to this host from another host.  The tickets are
567 reforwardable (@samp{F}).
568
569 @smallexample
570 @group
571 @b{shell%} klist -f
572 @b{Ticket cache: /tmp/krb5cc_p11795
573 Default principal: @value{RANDOMUSER2}@@@value{SECONDREALM}
574
575 Valid starting     Expires            Service principal
576 07/31/05 11:52:29  07/31/05 21:11:23  krbtgt/@value{SECONDREALM}@@@value{SECONDREALM}
577         Flags: Ff
578 07/31/05 12:03:48  07/31/05 21:11:23  host/@value{RANDOMHOST2}.@value{SECONDDOMAIN}@@@value{SECONDREALM}
579         Flags: Ff
580 shell%}
581 @end group
582 @end smallexample
583
584 @node Destroying Your Tickets with kdestroy,  , Viewing Your Tickets with klist, Ticket Management
585 @subsection Destroying Your Tickets with kdestroy
586
587 Your Kerberos tickets are proof that you are indeed yourself, and
588 tickets can be stolen.  If this happens, the person who has them can
589 masquerade as you until they expire.  For this reason, you should
590 destroy your Kerberos tickets when you are away from your computer.
591
592 @need 1000
593 Destroying your tickets is easy.  Simply type @kbd{kdestroy}.
594
595 @smallexample
596 @group
597 @b{shell%} kdestroy
598 @b{shell%}
599 @end group
600 @end smallexample
601
602 @need 1500
603 If @code{kdestroy} fails to destroy your tickets, it will beep and give
604 an error message.  For example, if @code{kdestroy} can't find any
605 tickets to destroy, it will give the following message:
606
607 @smallexample
608 @group
609 @b{shell%} kdestroy
610 @b{kdestroy: No credentials cache file found while destroying cache
611 shell%}
612 @end group
613 @end smallexample
614
615 @node Password Management, Kerberos V5 Applications, Ticket Management, Kerberos V5 Tutorial
616 @section Password Management
617
618 Your password is the only way Kerberos has of verifying your identity.
619 If someone finds out your password, that person can masquerade as
620 you---send email that comes from you, read, edit, or delete your files,
621 or log into other hosts as you---and no one will be able to tell the
622 difference.  For this reason, it is important that you choose a good
623 password (@pxref{Password Advice}), and keep it secret.  If you need to
624 give access to your account to someone else, you can do so through
625 Kerberos.  (@xref{Granting Access to Your Account}.)  You should
626 @i{never} tell your password to anyone, including your system
627 administrator, for any reason.  You should change your password
628 frequently, particularly any time you think someone may have found out
629 what it is.
630
631 @menu
632 * Changing Your Password::      
633 * Password Advice::             
634 * Granting Access to Your Account::  
635 @end menu
636
637 @node Changing Your Password, Password Advice, Password Management, Password Management
638 @subsection Changing Your Password
639
640 @need 2500
641 To change your Kerberos password, use the @code{kpasswd} command.  It
642 will ask you for your old password (to prevent someone else from walking
643 up to your computer when you're not there and changing your password),
644 and then prompt you for the new one twice.  (The reason you have to type
645 it twice is to make sure you have typed it correctly.)  For example,
646 user @code{@value{RANDOMUSER2}} would do the following:
647
648 @smallexample
649 @group
650 @b{shell%} kpasswd
651 @b{Password for @value{RANDOMUSER2}:}    @i{<- Type your old password.}
652 @b{Enter new password:}    @i{<- Type your new password.}
653 @b{Enter it again:}  @i{<- Type the new password again.}
654 @b{Password changed.}
655 @b{shell%}
656 @end group
657 @end smallexample
658
659 @need 1800
660 If @value{RANDOMUSER2} typed the incorrect old password, he would get
661 the following message:
662
663 @smallexample
664 @group
665 @b{shell%} kpasswd
666 @b{Password for @value{RANDOMUSER2}:}  @i{<- Type the incorrect old password.}
667 @b{kpasswd: Password incorrect while getting initial ticket
668 shell%}
669 @end group
670 @end smallexample
671
672 @need 2500
673 If you make a mistake and don't type the new password the same way
674 twice, @code{kpasswd} will ask you to try again:
675
676 @smallexample
677 @group
678 @b{shell%} kpasswd
679 @b{Password for @value{RANDOMUSER2}:}  @i{<- Type the old password.}
680 @b{Enter new password:}  @i{<- Type the new password.}
681 @b{Enter it again:} @i{<- Type a different new password.}
682 @b{kpasswd: Password mismatch while reading password
683 shell%}
684 @end group
685 @end smallexample
686
687 Once you change your password, it takes some time for the change to
688 propagate through the system.  Depending on how your system is set up,
689 this might be anywhere from a few minutes to an hour or more.  If you
690 need to get new Kerberos tickets shortly after changing your password,
691 try the new password.  If the new password doesn't work, try again using
692 the old one.
693
694 @node Password Advice, Granting Access to Your Account, Changing Your Password, Password Management
695 @subsection Password Advice
696
697 Your password can include almost any character you can type (except
698 control keys and the ``enter'' key).  A good password is one you can
699 remember, but that no one else can easily guess.  Examples of @i{bad}
700 passwords are words that can be found in a dictionary, any common or
701 popular name, especially a famous person (or cartoon character), your
702 name or username in any form (@i{e.g.}, forward, backward, repeated
703 twice, @i{etc.}), your spouse's, child's, or pet's name, your birth
704 date, your social security number, and any sample password that appears
705 in this (or any other) manual.
706
707 @need 2200
708 @value{COMPANY} recommends that your password be at least 6 characters
709 long, and contain UPPER- and lower-case letters, numbers, and/or
710 punctuation marks.  Some passwords that would be good if they weren't
711 listed in this manual include:
712
713 @itemize @bullet
714 @item some initials, like ``GykoR-66.'' for ``Get your kicks on Route
715 66.''
716
717 @item an easy-to-pronounce nonsense word, like ``slaRooBey'' or
718 ``krang-its''
719
720 @item a misspelled phrase, like ``2HotPeetzas!'' or ``ItzAGurl!!!''
721 @end itemize
722
723 @noindent Note:  don't actually use any of the above passwords.  They're
724 only meant to show you how to make up a good password.  Passwords that
725 appear in a manual are the first ones intruders will try.
726
727 @need 3800 
728 @value{PRODUCT} allows your system administrators to automatically
729 reject bad passwords, based on certain criteria, such as a password
730 dictionary or a minimum length.  For example, if the user
731 @code{@value{RANDOMUSER1}}, who had a policy "strict" that required a
732 minimum of 8 characaters, chose a password that was less than 8
733 characters, Kerberos would give an error message like the following:
734
735 @smallexample
736 @group
737 @b{shell%} kpasswd
738 @b{Password for @value{RANDOMUSER1}:}  @i{<- Type your old password here.}
739
740 @value{RANDOMUSER1}'s password is controlled by the policy strict, which
741 requires a minimum of 8 characters from at least 3 classes (the five classes
742 are lowercase, uppercase, numbers, punctuation, and all other characters).
743
744 @b{Enter new password:}  @i{<- Type an insecure new password.}
745 @b{Enter it again:}  @i{<- Type it again.}
746
747 kpasswd: Password is too short while attempting to change password.
748 Please choose another password.
749
750 @b{Enter new password:}  @i{<- Type a good password here.}
751 @b{Enter it again:}  @i{<- Type it again.}
752 @b{Password changed.
753 shell%}
754 @end group
755 @end smallexample
756
757 @noindent Your system administrators can choose the message that is
758 displayed if you choose a bad password, so the message you see may be
759 different from the above example.
760
761 @node Granting Access to Your Account,  , Password Advice, Password Management
762 @subsection Granting Access to Your Account
763
764 @need 1800
765 If you need to give someone access to log into your account, you can do
766 so through Kerberos, without telling the person your password.  Simply
767 create a file called @code{.k5login} in your home directory.  This file
768 should contain the Kerberos principal (@xref{What is a Kerberos
769 Principal?}.) of each person to whom you wish to give access.  Each
770 principal must be on a separate line.  Here is a sample @code{.k5login}
771 file:
772
773 @smallexample
774 @group
775 @value{RANDOMUSER1}@@@value{PRIMARYREALM}
776 @value{RANDOMUSER2}@@@value{SECONDREALM}
777 @end group
778 @end smallexample
779
780 @noindent This file would allow the users @code{@value{RANDOMUSER1}} and
781 @code{@value{RANDOMUSER2}} to use your user ID, provided that they had
782 Kerberos tickets in their respective realms.  If you will be logging
783 into other hosts across a network, you will want to include your own
784 Kerberos principal in your @code{.k5login} file on each of these hosts.
785
786 @need 1000
787 Using a @code{.k5login} file is much safer than giving out your
788 password, because:
789
790 @itemize @bullet
791 @item You can take access away any time simply by removing the principal
792 from your @code{.k5login} file.
793
794 @item Although the user has full access to your account on one
795 particular host (or set of hosts if your @code{.k5login} file is shared,
796 @i{e.g.}, over NFS), that user does not inherit your network privileges.
797
798 @item Kerberos keeps a log of who obtains tickets, so a system
799 administrator could find out, if necessary, who was capable of using
800 your user ID at a particular time.
801 @end itemize
802
803 One common application is to have a @code{.k5login} file in
804 @code{root}'s home directory, giving root access to that machine to the
805 Kerberos principals listed.  This allows system administrators to allow
806 users to become root locally, or to log in remotely as @code{root},
807 without their having to give out the root password, and without anyone
808 having to type the root password over the network.
809
810 @node Kerberos V5 Applications,  , Password Management, Kerberos V5 Tutorial
811 @section Kerberos V5 Applications
812
813 @value{PRODUCT} is a @dfn{single-sign-on} system.  This means that you
814 only have to type your password once, and the @value{PRODUCT} programs
815 do the authenticating (and optionally encrypting) for you.  The way this
816 works is that Kerberos has been built into each of a suite of network
817 programs.  For example, when you use a @value{PRODUCT} program to
818 connect to a remote host, the program, the KDC, and the remote host
819 perform a set of rapid negotiations.  When these negotiations are
820 completed, your program has proven your identity on your behalf to the
821 remote host, and the remote host has granted you access, all in the
822 space of a few seconds.
823
824 The @value{PRODUCT} applications are versions of existing UNIX network
825 programs with the Kerberos features added.
826
827 @menu
828 * Overview of Additional Features::  
829 * telnet::                      
830 * rlogin::                      
831 * FTP::                         
832 * rsh::                         
833 * rcp::                         
834 * ksu::                         
835 @end menu
836
837 @node Overview of Additional Features, telnet, Kerberos V5 Applications, Kerberos V5 Applications
838 @subsection Overview of Additional Features
839
840 The @value{PRODUCT} @dfn{network programs} are those programs that
841 connect to another host somewhere on the internet.  These programs
842 include @code{rlogin}, @code{telnet}, @code{ftp}, @code{rsh},
843 @code{rcp}, and @code{ksu}.  These programs have all of the original
844 features of the corresponding non-Kerberos @code{rlogin}, @code{telnet},
845 @code{ftp}, @code{rsh}, @code{rcp}, and @code{su} programs, plus
846 additional features that transparently use your Kerberos tickets for
847 negotiating authentication and optional encryption with the remote host.
848 In most cases, all you'll notice is that you no longer have to type your
849 password, because Kerberos has already proven your identity.
850
851 The @value{PRODUCT} network programs allow you the options of forwarding
852 your tickets to the remote host (if you obtained forwardable tickets
853 with the @code{kinit} program; @pxref{Obtaining Tickets with kinit}), and
854 encrypting data transmitted between you and the remote host.
855
856 This section of the tutorial assumes you are familiar with the
857 non-Kerberos versions of these programs, and highlights the Kerberos
858 functions added in the @value{PRODUCT} package.
859
860 @node telnet, rlogin, Overview of Additional Features, Kerberos V5 Applications
861 @subsection telnet
862
863 The @value{PRODUCT} @code{telnet} command works exactly like the
864 standard UNIX telnet program, with the following Kerberos options added:
865
866 @table @kbd
867 @itemx -f
868 forwards a copy of your tickets to the remote host.
869
870 @itemx -F
871 forwards a copy of your tickets to the remote host, and marks them
872 re-forwardable from the remote host.
873
874 @itemx -k @i{realm}
875 requests tickets for the remote host in the specified realm, instead of
876 determining the realm itself.
877
878 @itemx -K
879 uses your tickets to authenticate to the remote host, but does not log
880 you in.
881
882 @itemx -a
883 attempt automatic login using your tickets.  @code{telnet} will assume
884 the same username unless you explicitly specify another.
885
886 @itemx -x
887 turns on encryption.
888
889 @end table
890
891 @need 4000
892 For example, if @code{@value{RANDOMUSER2}} wanted to use the standard
893 UNIX telnet to connect to the machine
894 @code{@value{RANDOMHOST1}.@value{PRIMARYDOMAIN}}, he would type:
895
896 @smallexample
897 @group
898 @b{shell%} telnet @value{RANDOMHOST1}.@value{SECONDDOMAIN}
899 @b{Trying 128.0.0.5 ...
900 Connected to @value{RANDOMHOST1}.@value{SECONDDOMAIN}.
901 Escape character is '^]'.
902
903 NetBSD/i386 (daffodil) (ttyp3)
904
905 login:} @value{RANDOMUSER2}
906 @b{Password:}    @i{<- @value{RANDOMUSER2} types his password here}
907 @b{Last login: Fri Jun 21 17:13:11 from @value{RANDOMHOST2}.@value{PRIMARYDOMAIN}
908 Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
909         The Regents of the University of California.   All rights reserved.
910
911 NetBSD 1.1: Tue May 21 00:31:42 EDT 1996
912
913 Welcome to NetBSD!
914 shell%}
915 @end group
916 @end smallexample
917
918 @noindent Note that the machine
919 @code{@value{RANDOMHOST1}.@value{SECONDDOMAIN}} asked for
920 @code{@value{RANDOMUSER2}}'s password.  When he typed it, his password
921 was sent over the network unencrypted.  If an intruder were watching
922 network traffic at the time, that intruder would know
923 @code{@value{RANDOMUSER2}}'s password.
924
925 @need 4000
926 If, on the other hand, @code{@value{RANDOMUSER1}} wanted to use the
927 @value{PRODUCT} telnet to connect to the machine
928 @code{@value{RANDOMHOST2}.@value{PRIMARYDOMAIN}}, she could forward a
929 copy of her tickets, request an encrypted session, and log on as herself
930 as follows:
931
932 @smallexample
933 @group
934 @b{shell%} telnet -a -f -x @value{RANDOMHOST2}.@value{PRIMARYDOMAIN}
935 @b{Trying 128.0.0.5...
936 Connected to @value{RANDOMHOST2}.@value{PRIMARYDOMAIN}.
937 Escape character is '^]'.
938 [ Kerberos V5 accepts you as ``@value{RANDOMUSER1}@@@value{PRIMARYDOMAIN}'' ]
939 [ Kerberos V5 accepted forwarded credentials ]
940 What you type is protected by encryption.
941 Last login: Tue Jul 30 18:47:44 from @value{RANDOMHOST1}.@value{SECONDDOMAIN}
942 Athena Server (sun4) Version 9.1.11 Tue Jul 30 14:40:08 EDT 2002
943
944 shell%}
945 @end group
946 @end smallexample
947
948 @noindent Note that @code{@value{RANDOMUSER1}}'s machine used Kerberos
949 to authenticate her to @code{@value{RANDOMHOST2}.@value{PRIMARYDOMAIN}},
950 and logged her in automatically as herself.  She had an encrypted
951 session, a copy of her tickets already waiting for her, and she never
952 typed her password.
953
954 If you forwarded your Kerberos tickets, @code{telnet} automatically
955 destroys them when it exits.  The full set of options to @value{PRODUCT}
956 @code{telnet} are discussed in the Reference section of this manual.
957 (@pxref{telnet Reference})
958
959 @need 2000
960 @node rlogin, FTP, telnet, Kerberos V5 Applications
961 @subsection rlogin
962
963 @need 1000
964 The @value{PRODUCT} @code{rlogin} command works exactly like the
965 standard UNIX rlogin program, with the following Kerberos options added:
966
967 @table @kbd
968 @itemx -f
969 forwards a copy of your tickets to the remote host.
970
971 @itemx -F
972 forwards a copy of your tickets to the remote host, and marks them
973 re-forwardable from the remote host.
974
975 @itemx -k @i{realm}
976 requests tickets for the remote host in the specified realm, instead of
977 determining the realm itself.
978
979 @itemx -x
980 encrypts the input and output data streams (the username is sent unencrypted)
981
982 @end table
983
984 @need 3000
985 For example, if @code{@value{RANDOMUSER2}} wanted to use the standard
986 UNIX rlogin to connect to the machine
987 @code{@value{RANDOMHOST1}.@value{SECONDDOMAIN}}, he would type:
988
989 @smallexample
990 @group
991 @b{shell%} rlogin @value{RANDOMHOST1}.@value{SECONDDOMAIN} -l @value{RANDOMUSER2}
992 @b{Password:}  @i{<- @value{RANDOMUSER2} types his password here}
993 @b{Last login: Fri Jun 21 10:36:32 from :0.0
994 Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
995         The Regents of the University of California.   All rights reserved.
996
997 NetBSD 1.1: Tue May 21 00:31:42 EDT 1996
998
999 Welcome to NetBSD!
1000 shell%}
1001 @end group
1002 @end smallexample
1003
1004 @noindent Note that the machine
1005 @code{@value{RANDOMHOST1}.@value{SECONDDOMAIN}} asked for
1006 @code{@value{RANDOMUSER2}}'s password.  When he typed it, his password
1007 was sent over the network unencrypted.  If an intruder were watching
1008 network traffic at the time, that intruder would know
1009 @code{@value{RANDOMUSER2}}'s password.
1010
1011 @need 4000
1012 If, on the other hand, @code{@value{RANDOMUSER1}} wanted to use
1013 @value{PRODUCT} rlogin to connect to the machine
1014 @code{@value{RANDOMHOST2}.@value{PRIMARYDOMAIN}}, she could forward a
1015 copy of her tickets, mark them as not forwardable from the remote host,
1016 and request an encrypted session as follows:
1017
1018 @smallexample
1019 @group
1020 @b{shell%} rlogin @value{RANDOMHOST2}.@value{PRIMARYDOMAIN} -f -x
1021 @b{This rlogin session is using DES encryption for all data transmissions.
1022 Last login: Thu Jun 20 16:20:50 from @value{RANDOMHOST1}
1023 Athena Server (sun4) Version 9.1.11 Tue Jul 30 14:40:08 EDT 2002
1024 shell%}
1025 @end group
1026 @end smallexample
1027
1028 @noindent Note that @code{@value{RANDOMUSER1}}'s machine used Kerberos
1029 to authenticate her to @code{@value{RANDOMHOST2}.@value{PRIMARYDOMAIN}},
1030 and logged her in automatically as herself.  She had an encrypted
1031 session, a copy of her tickets were waiting for her, and she never typed
1032 her password.
1033
1034 If you forwarded your Kerberos tickets, @code{rlogin} automatically
1035 destroys them when it exits.  The full set of options to @value{PRODUCT}
1036 @code{rlogin} are discussed in the Reference section of this manual.
1037 (@pxref{rlogin Reference})
1038
1039 @node FTP, rsh, rlogin, Kerberos V5 Applications
1040 @subsection FTP
1041
1042 @need 1000
1043 The @value{PRODUCT} @code{FTP} program works exactly like the standard
1044 UNIX FTP program, with the following Kerberos features added:
1045
1046 @table @kbd
1047 @itemx -k @i{realm}
1048 requests tickets for the remote host in the specified realm, instead of
1049 determining the realm itself.
1050
1051 @itemx -f
1052 requests that your tickets be forwarded to the remote host.  The
1053 @kbd{-f} argument must be the last argument on the command line.
1054
1055 @itemx protect @i{level}
1056 (issued at the @code{ftp>} prompt) sets the protection level.  ``Clear''
1057 is no protection; ``safe'' ensures data integrity by verifying the
1058 checksum, and ``private'' encrypts the data.  Encryption also ensures
1059 data integrity.
1060 @end table
1061
1062 @need 5000
1063 For example, suppose @code{@value{RANDOMUSER1}} wants to get her
1064 @code{RMAIL} file from the directory @code{~@value{RANDOMUSER1}/Mail},
1065 on the host @code{@value{RANDOMHOST1}.@value{PRIMARYDOMAIN}}.  She wants
1066 to encrypt the file transfer.  The exchange would look like the
1067 following:
1068
1069 @smallexample
1070 @group
1071 @b{shell%} ftp @value{RANDOMHOST1}.@value{PRIMARYDOMAIN}
1072 Connected to @value{RANDOMHOST1}.@value{PRIMARYDOMAIN}.
1073 220 @value{RANDOMHOST1}.@value{PRIMARYDOMAIN} FTP server (Version 5.60) ready.
1074 334 Using authentication type GSSAPI; ADAT must follow
1075 GSSAPI accepted as authentication type
1076 GSSAPI authentication succeeded
1077 200 Data channel protection level set to private.
1078 Name (@value{RANDOMHOST1}.@value{PRIMARYDOMAIN}:@value{RANDOMUSER1}): 
1079 232 GSSAPI user @value{RANDOMUSER1}@@@value{PRIMARYREALM} is authorized as @value{RANDOMUSER1}
1080 230 User @value{RANDOMUSER1} logged in.
1081 Remote system type is UNIX.
1082 Using binary mode to transfer files.
1083 ftp> protect private
1084 200 Protection level set to Private.
1085 ftp> cd ~@value{RANDOMUSER1}/MAIL
1086 250 CWD command successful.
1087 ftp> get RMAIL
1088 227 Entering Passive Mode (128,0,0,5,16,49)
1089 150 Opening BINARY mode data connection for RMAIL (361662 bytes).
1090 226 Transfer complete.
1091 361662 bytes received in 2.5 seconds (1.4e+02 Kbytes/s)
1092 ftp> quit
1093 @b{shell%}
1094 @end group
1095 @end smallexample
1096
1097 The full set of options to @value{PRODUCT} @code{FTP} are discussed
1098 in the Reference section of this manual.  (@pxref{FTP Reference})
1099
1100 @node rsh, rcp, FTP, Kerberos V5 Applications
1101 @subsection rsh
1102
1103 The @value{PRODUCT} @code{rsh} program works exactly like the standard
1104 UNIX rlogin program, with the following Kerberos features added:
1105
1106 @table @kbd
1107 @itemx -f
1108 forwards a copy of your tickets to the remote host.
1109
1110 @itemx -F
1111 forwards a copy of your tickets to the remote host, and marks them
1112 re-forwardable from the remote host.
1113
1114 @itemx -k @i{realm}
1115 requests tickets for the remote host in the specified realm, instead of
1116 determining the realm itself.
1117
1118 @itemx -x
1119 encrypts the input and output data streams (the command line is not encrypted)
1120
1121 @end table
1122
1123 @need 1800
1124 For example, if your Kerberos tickets allowed you to run programs on the
1125 host @* @code{@value{RANDOMHOST2}@@@value{SECONDDOMAIN}} as root, you could
1126 run the @samp{date} program as follows:
1127
1128 @smallexample
1129 @group
1130 @b{shell%} rsh @value{RANDOMHOST2}.@value{SECONDDOMAIN} -l root -x date
1131 @b{This rsh session is using DES encryption for all data transmissions.
1132 Tue Jul 30 19:34:21 EDT 2002
1133 shell%}
1134 @end group
1135 @end smallexample
1136
1137 If you forwarded your Kerberos tickets, @code{rsh} automatically
1138 destroys them when it exits.  The full set of options to @value{PRODUCT}
1139 @code{rsh} are discussed in the Reference section of this manual.
1140 (@pxref{rsh Reference})
1141
1142 @node rcp, ksu, rsh, Kerberos V5 Applications
1143 @subsection rcp
1144
1145 @need 1000
1146 The @value{PRODUCT} @code{rcp} program works exactly like the standard
1147 UNIX rcp program, with the following Kerberos features added:
1148
1149 @table @kbd
1150 @itemx -k @i{realm}
1151 requests tickets for the remote host in the specified realm, instead of
1152 determining the realm itself.
1153
1154 @itemx -x
1155 turns on encryption.
1156 @end table
1157
1158
1159 @need 1500
1160 For example, if you wanted to copy the file @code{/etc/motd} from the
1161 host @code{@value{RANDOMHOST1}.@value{PRIMARYDOMAIN}} into the current
1162 directory, via an encrypted connection, you would simply type:
1163
1164 @smallexample
1165 @b{shell%} rcp -x @value{RANDOMHOST1}.@value{PRIMARYDOMAIN}:/etc/motd .
1166 @end smallexample
1167
1168 The @kbd{rcp} program negotiates authentication and encryption
1169 transparently.  The full set of options to @value{PRODUCT} @code{rcp}
1170 are discussed in the Reference section of this manual.  (@pxref{rcp
1171 Reference})
1172
1173 @node ksu,  , rcp, Kerberos V5 Applications
1174 @subsection ksu
1175
1176 The @value{PRODUCT} @code{ksu} program replaces the standard UNIX su
1177 program.  @code{ksu} first authenticates you to Kerberos.  Depending on
1178 the configuration of your system, @code{ksu} may ask for your Kerberos
1179 password if authentication fails.  @emph{Note that you should never type
1180 your password if you are remotely logged in using an unencrypted
1181 connection.}
1182
1183 Once @code{ksu} has authenticated you, if your Kerberos principal
1184 appears in the target's @code{.k5login} file (@pxref{Granting Access to
1185 Your Account}) or in the target's @code{.k5users} file (see below), it
1186 switches your user ID to the target user ID.
1187
1188 @need 2000
1189 For example, @code{@value{RANDOMUSER2}} has put
1190 @code{@value{RANDOMUSER1}}'s Kerberos principal in his @code{.k5login}
1191 file.  If @code{@value{RANDOMUSER1}} uses @code{ksu} to become
1192 @code{@value{RANDOMUSER2}}, the exchange would look like this.  (To
1193 differentiate between the two shells, @code{@value{RANDOMUSER1}}'s
1194 prompt is represented as @code{@value{RANDOMUSER1}%} and
1195 @code{@value{RANDOMUSER2}}'s prompt is represented as
1196 @code{@value{RANDOMUSER2}%}.)
1197
1198 @smallexample
1199 @group
1200 @b{@value{RANDOMUSER1}%} ksu @value{RANDOMUSER2}
1201 @b{Account @value{RANDOMUSER2}: authorization for @value{RANDOMUSER1}@@@value{PRIMARYREALM} successful
1202 Changing uid to @value{RANDOMUSER2} (3382)
1203 @value{RANDOMUSER2}%}
1204 @end group
1205 @end smallexample
1206
1207 @noindent
1208 Note that the new shell has a copy of @code{@value{RANDOMUSER1}}'s
1209 tickets.  The ticket filename contains @code{@value{RANDOMUSER2}}'s UID
1210 with @samp{.1} appended to it:
1211
1212 @smallexample
1213 @group
1214 @b{@value{RANDOMUSER2}%} klist
1215 @b{Ticket cache: /tmp/krb5cc_3382.1
1216 Default principal: @value{RANDOMUSER1}@@@value{PRIMARYREALM}
1217
1218 Valid starting      Expires             Service principal
1219 07/31/04 21:53:01  08/01/04 07:52:53  krbtgt/@value{PRIMARYREALM}@@@value{PRIMARYREALM}
1220 07/31/04 21:53:39  08/01/04 07:52:53  host/@value{RANDOMHOST1}.@value{PRIMARYDOMAIN}@@@value{PRIMARYREALM}
1221 @value{RANDOMUSER2}%}
1222 @end group
1223 @end smallexample
1224
1225 @need 2500
1226 If @code{@value{RANDOMUSER1}} had not appeared in
1227 @code{@value{RANDOMUSER2}}'s @code{.k5login} file (and the system was
1228 configured to ask for a password), the exchange would have looked like
1229 this (assuming @code{@value{RANDOMUSER2}} has taken appropriate
1230 precautions in protecting his password):
1231
1232 @smallexample
1233 @group
1234 @b{@value{RANDOMUSER1}%} ksu @value{RANDOMUSER2}
1235 @b{WARNING: Your password may be exposed if you enter it here and are logged 
1236          in remotely using an unsecure (non-encrypted) channel. 
1237 Kerberos password for @value{RANDOMUSER2}@@@value{PRIMARYREALM}:}  @i{<-  @code{@value{RANDOMUSER1}} types the wrong password here.}
1238 @b{ksu: Password incorrect
1239 Authentication failed.
1240 @value{RANDOMUSER1}%}
1241 @end group
1242 @end smallexample
1243
1244 Now, suppose @code{@value{RANDOMUSER2}} did not want to give
1245 @code{@value{RANDOMUSER1}} full access to his account, but wanted to
1246 give her permission to list his files and use the "more" command to view
1247 them.  He could create a @code{.k5users} file giving her permission to
1248 run only those specific commands.
1249
1250 @need 3500
1251 The @code{.k5users} file is like the @code{.k5login} file, except that
1252 each principal is optionally followed by a list of commands.  @code{ksu}
1253 will let those principals execute only the commands listed, using the
1254 @kbd{-e} option.  @code{@value{RANDOMUSER2}}'s @code{.k5users} file
1255 might look like the following:
1256
1257 @smallexample
1258 @group
1259 @value{RANDOMUSER1}@@@value{PRIMARYREALM}       /bin/ls /usr/bin/more
1260 @value{ADMINUSER}@@@value{PRIMARYREALM}         /bin/ls
1261 @value{ADMINUSER}/admin@@@value{PRIMARYREALM}   *
1262 @value{RANDOMUSER2}@@@value{SECONDREALM}
1263 @end group
1264 @end smallexample
1265
1266 @noindent The above @code{.k5users} file would let
1267 @code{@value{RANDOMUSER1}} run only the commands @code{/bin/ls} and
1268 @code{/usr/bin/more}.  It would let @code{@value{ADMINUSER}} run only
1269 the command @code{/bin/ls} if he had regular tickets, but if he had
1270 tickets for his @code{admin} instance,
1271 @code{@value{ADMINUSER}/admin@@@value{PRIMARYREALM}}, he would be able
1272 to execute any command.  The last line gives @code{@value{RANDOMUSER2}}
1273 in the realm @value{SECONDREALM} permission to execute any command.
1274 (@i{I.e.}, having only a Kerberos principal on a line is equivalent to
1275 giving that principal permission to execute @code{*}.)  This is so that
1276 @value{RANDOMUSER2} can allow himself to execute commands when he logs
1277 in, using Kerberos, from a machine in the realm @value{SECONDREALM}.
1278
1279 @need 2500
1280 Then, when @code{@value{RANDOMUSER1}} wanted to list his home directory,
1281 she would type:
1282
1283 @smallexample
1284 @group
1285 @b{@value{RANDOMUSER1}%} ksu @value{RANDOMUSER2} -e ls ~@value{RANDOMUSER2}
1286 @b{Authenticated @value{RANDOMUSER1}@@@value{PRIMARYREALM}
1287 Account @value{RANDOMUSER2}: authorization for @value{RANDOMUSER1}@@@value{PRIMARYREALM} for execution of
1288                /bin/ls successful
1289 Changing uid to @value{RANDOMUSER2} (3382)
1290 Mail            News            Personal        misc            bin
1291 @value{RANDOMUSER1}%}
1292 @end group
1293 @end smallexample
1294
1295 @noindent If @code{@value{RANDOMUSER1}} had tried to give a different
1296 command to @code{ksu}, it would have prompted for a password as with the
1297 previous example.
1298
1299 Note that unless the @code{.k5users} file gives the target permission to
1300 run any command, the user must use @code{ksu} with the @kbd{-e}
1301 @i{command} option.
1302
1303 @need 1000
1304 The @code{ksu} options you are most likely to use are:
1305
1306 @table @kbd
1307 @itemx -n @i{principal}
1308 specifies which Kerberos principal you want to use for @code{ksu}.
1309 (@i{e.g.}, the user @code{@value{ADMINUSER}} might want to use his
1310 @code{admin} instance.  @xref{What is a Ticket?}.)
1311
1312 @itemx -c
1313 specifies the location of your Kerberos credentials cache (ticket file).
1314
1315 @itemx -k
1316 tells @code{ksu} not to destroy your Kerberos tickets when @code{ksu} is
1317 finished.
1318
1319 @itemx -f
1320 requests forwardable tickets.  (@xref{Obtaining Tickets with kinit}.)  This
1321 is only applicable if @code{ksu} needs to obtain tickets.
1322
1323 @itemx -l @i{lifetime}
1324 sets the ticket lifetime.  (@xref{Obtaining Tickets with kinit}.)  This is
1325 only applicable if @code{ksu} needs to obtain tickets.
1326
1327 @itemx -z
1328 tells @code{ksu} to copy your Kerberos tickets only if the UID you are
1329 switching is the same as the Kerberos primary (either yours or the one
1330 specified by the @kbd{-n} option).
1331
1332 @itemx -Z
1333 tells @code{ksu} not to copy any Kerberos tickets to the new UID.
1334
1335 @itemx -e @i{command}
1336 tells @code{ksu} to execute @i{command} and then exit.  See the
1337 description of the @code{.k5users} file above.
1338
1339 @itemx -a @i{text}
1340 (at the end of the command line) tells @code{ksu} to pass everything
1341 after @samp{-a} to the target shell.
1342 @end table
1343
1344 The full set of options to @value{PRODUCT} @code{ksu} are discussed
1345 in the Reference section of this manual.  (@pxref{ksu Reference})
1346
1347 @node Kerberos V5 Reference, Kerberos Glossary, Kerberos V5 Tutorial, Top
1348 @chapter Kerberos V5 Reference
1349
1350 This section will include copies of the manual pages for the
1351 @value{PRODUCT} client programs.  You can read the manual entry for any
1352 command by typing @code{man} @i{command}, where @i{command} is the name
1353 of the command for which you want to read the manual entry.  For
1354 example, to read the @code{kinit} manual entry, you would type:
1355
1356 @smallexample
1357 @b{shell%} man kinit
1358 @end smallexample
1359
1360 Note:  To be able to view the @value{PRODUCT} manual pages on line, you
1361 may need to add the directory @code{@value{ROOTDIR}/man} to your MANPATH
1362 environment variable.  (Remember to replace @code{@value{ROOTDIR}} with
1363 the top-level directory in which @value{PRODUCT} is installed.)  For
1364 example, if you had the the following line in your @code{.login}
1365 file@footnote{The MANPATH variable may be specified in a different
1366 initialization file, depending on your operating system.  Some of the
1367 files in which you might specify environment variables include
1368 @code{.login}, @code{.profile}, or @code{.cshrc}.}:
1369
1370 @smallexample
1371 setenv MANPATH /usr/local/man:/usr/man
1372 @end smallexample
1373
1374 @noindent
1375 and the @value{PRODUCT} man pages were in the directory
1376 @code{/usr/@value{LCPRODUCT}/man}, you would change the line to the following:
1377
1378 @smallexample
1379 setenv MANPATH /usr/@value{LCPRODUCT}/man:/usr/local/man:/usr/man
1380 @end smallexample
1381
1382 @ifinfo
1383 Note to info users:  the manual pages are not available within this info
1384 tree.  You can read them from emacs with the command:
1385
1386 @smallexample
1387 M-x manual-entry @emph{command}
1388 @end smallexample
1389 @end ifinfo
1390
1391 @page
1392
1393 @menu
1394 * kinit Reference::             
1395 * klist Reference::             
1396 * ksu Reference::               
1397 * kdestroy Reference::          
1398 * kpasswd Reference::           
1399 * telnet Reference::            
1400 * FTP Reference::               
1401 * rlogin Reference::            
1402 * rsh Reference::               
1403 * rcp Reference::               
1404 @end menu
1405
1406 @node kinit Reference, klist Reference, Kerberos V5 Reference, Kerberos V5 Reference
1407 @section kinit Reference
1408
1409 @iftex
1410 @special{psfile=kinit1.ps voffset=-700 hoffset=-40}
1411 @centerline{Reference Manual for @code{kinit}}
1412 @page
1413
1414 @special{psfile=kinit2.ps voffset=-700 hoffset=-40}
1415 @centerline{Reference Manual for @code{kinit}}
1416 @page
1417 @end iftex
1418
1419 @ifinfo
1420 Type @kbd{M-x manual-entry kinit} to read this manual page.
1421 @end ifinfo
1422
1423 @ifhtml
1424 @html
1425 <a href="kinit.html"> kinit manpage</a>
1426 @end html
1427 @end ifhtml
1428
1429 @node klist Reference, ksu Reference, kinit Reference, Kerberos V5 Reference
1430 @section klist Reference
1431
1432 @iftex
1433 @special{psfile=klist1.ps voffset=-700 hoffset=-40}
1434 @centerline{Reference Manual for @code{klist}}
1435 @page
1436 @end iftex
1437
1438 @iftex
1439 @special{psfile=klist2.ps voffset=-700 hoffset=-40}
1440 @centerline{Reference Manual for @code{klist}}
1441 @page
1442 @end iftex
1443
1444 @ifinfo
1445 Type @kbd{M-x manual-entry klist} to read this manual page.
1446 @end ifinfo
1447
1448 @ifhtml
1449 @html
1450 <a href="klist.html"> klist manpage</a>
1451 @end html
1452 @end ifhtml
1453
1454 @node ksu Reference, kdestroy Reference, klist Reference, Kerberos V5 Reference
1455 @section ksu Reference
1456
1457 @iftex
1458 @special{psfile=ksu1.ps voffset=-700 hoffset=-40}
1459 @centerline{Reference Manual for @code{ksu}}
1460 @page
1461
1462 @special{psfile=ksu2.ps voffset=-700 hoffset=-40}
1463 @centerline{Reference Manual for @code{ksu}}
1464 @page
1465
1466 @special{psfile=ksu3.ps voffset=-700 hoffset=-40}
1467 @centerline{Reference Manual for @code{ksu}}
1468 @page
1469
1470 @special{psfile=ksu4.ps voffset=-700 hoffset=-40}
1471 @centerline{Reference Manual for @code{ksu}}
1472 @page
1473
1474 @special{psfile=ksu5.ps voffset=-700 hoffset=-40}
1475 @centerline{Reference Manual for @code{ksu}}
1476 @page
1477 @end iftex
1478
1479 @ifinfo
1480 Type @kbd{M-x manual-entry ksu} to read this manual page.
1481 @end ifinfo
1482
1483 @ifhtml
1484 @html
1485 <a href="ksu.html"> ksu manpage</a>
1486 @end html
1487 @end ifhtml
1488
1489 @node kdestroy Reference, kpasswd Reference, ksu Reference, Kerberos V5 Reference
1490 @section kdestroy Reference
1491
1492 @iftex
1493 @special{psfile=kdestroy1.ps voffset=-700 hoffset=-60}
1494 @centerline{Reference Manual for @code{kdestroy}}
1495 @page
1496 @end iftex
1497
1498 @ifinfo
1499 Type @kbd{M-x manual-entry kdestroy} to read this manual page.
1500 @end ifinfo
1501
1502 @ifhtml
1503 @html
1504 <a href="kdestroy.html"> kdestroy manpage</a>
1505 @end html
1506 @end ifhtml
1507
1508 @node kpasswd Reference, telnet Reference, kdestroy Reference, Kerberos V5 Reference
1509 @section kpasswd Reference
1510
1511 @iftex
1512 @special{psfile=kpasswd1.ps voffset=-700 hoffset=-40}
1513 @centerline{Reference Manual for @code{kpasswd}}
1514 @page
1515 @end iftex
1516
1517 @ifinfo
1518 Type @kbd{M-x manual-entry kpasswd} to read this manual page.
1519 @end ifinfo
1520
1521 @ifhtml
1522 @html
1523 <a href="kpasswd.html"> kpasswd manpage</a>
1524 @end html
1525 @end ifhtml
1526
1527 @node telnet Reference, FTP Reference, kpasswd Reference, Kerberos V5 Reference
1528 @section telnet Reference
1529
1530 @iftex
1531 @special{psfile=telnet1.ps voffset=-700 hoffset=-40}
1532 @centerline{Reference Manual for @code{telnet}}
1533 @page
1534
1535 @special{psfile=telnet2.ps voffset=-700 hoffset=-40}
1536 @centerline{Reference Manual for @code{telnet}}
1537 @page
1538
1539 @special{psfile=telnet3.ps voffset=-700 hoffset=-40}
1540 @centerline{Reference Manual for @code{telnet}}
1541 @page
1542
1543 @special{psfile=telnet4.ps voffset=-700 hoffset=-40}
1544 @centerline{Reference Manual for @code{telnet}}
1545 @page
1546
1547 @special{psfile=telnet5.ps voffset=-700 hoffset=-40}
1548 @centerline{Reference Manual for @code{telnet}}
1549 @page
1550
1551 @special{psfile=telnet6.ps voffset=-700 hoffset=-40}
1552 @centerline{Reference Manual for @code{telnet}}
1553 @page
1554
1555 @special{psfile=telnet7.ps voffset=-700 hoffset=-40}
1556 @centerline{Reference Manual for @code{telnet}}
1557 @page
1558
1559 @special{psfile=telnet8.ps voffset=-700 hoffset=-40}
1560 @centerline{Reference Manual for @code{telnet}}
1561 @page
1562
1563 @special{psfile=telnet9.ps voffset=-700 hoffset=-40}
1564 @centerline{Reference Manual for @code{telnet}}
1565 @page
1566 @end iftex
1567
1568 @ifinfo
1569 Type @kbd{M-x manual-entry telnet} to read this manual page.
1570 @end ifinfo
1571
1572 @ifhtml
1573 @html
1574 <a href="telnet.html"> telnet manpage</a>
1575 @end html
1576 @end ifhtml
1577
1578 @node FTP Reference, rlogin Reference, telnet Reference, Kerberos V5 Reference
1579 @section FTP Reference
1580
1581 @iftex
1582 @special{psfile=ftp1.ps voffset=-700 hoffset=-40}
1583 @centerline{Reference Manual for @code{FTP}}
1584 @page
1585
1586 @special{psfile=ftp2.ps voffset=-700 hoffset=-40}
1587 @centerline{Reference Manual for @code{FTP}}
1588 @page
1589
1590 @special{psfile=ftp3.ps voffset=-700 hoffset=-40}
1591 @centerline{Reference Manual for @code{FTP}}
1592 @page
1593
1594 @special{psfile=ftp4.ps voffset=-700 hoffset=-40}
1595 @centerline{Reference Manual for @code{FTP}}
1596 @page
1597
1598 @special{psfile=ftp5.ps voffset=-700 hoffset=-40}
1599 @centerline{Reference Manual for @code{FTP}}
1600 @page
1601
1602 @special{psfile=ftp6.ps voffset=-700 hoffset=-40}
1603 @centerline{Reference Manual for @code{FTP}}
1604 @page
1605
1606 @special{psfile=ftp7.ps voffset=-700 hoffset=-40}
1607 @centerline{Reference Manual for @code{FTP}}
1608 @page
1609
1610 @special{psfile=ftp8.ps voffset=-700 hoffset=-40}
1611 @centerline{Reference Manual for @code{FTP}}
1612 @page
1613
1614 @special{psfile=ftp9.ps voffset=-700 hoffset=-40}
1615 @centerline{Reference Manual for @code{FTP}}
1616 @page
1617 @end iftex
1618
1619 @ifinfo
1620 Type @kbd{M-x manual-entry FTP} to read this manual page.
1621 @end ifinfo
1622
1623 @ifhtml
1624 @html
1625 <a href="ftp.html"> ftp manpage</a>
1626 @end html
1627 @end ifhtml
1628
1629 @node rlogin Reference, rsh Reference, FTP Reference, Kerberos V5 Reference
1630 @section rlogin Reference
1631
1632 @iftex
1633 @special{psfile=rlogin1.ps voffset=-700 hoffset=-40}
1634 @centerline{Reference Manual for @code{rlogin}}
1635 @page
1636
1637 @special{psfile=rlogin2.ps voffset=-700 hoffset=-40}
1638 @centerline{Reference Manual for @code{rlogin}}
1639 @page
1640 @end iftex
1641
1642 @ifinfo
1643 Type @kbd{M-x manual-entry rlogin} to read this manual page.
1644 @end ifinfo
1645
1646 @ifhtml
1647 @html
1648 <a href="rlogin.html"> rlogin manpage</a>
1649 @end html
1650 @end ifhtml
1651
1652 @node rsh Reference, rcp Reference, rlogin Reference, Kerberos V5 Reference
1653 @section rsh Reference
1654
1655 @iftex
1656 @special{psfile=rsh1.ps voffset=-700 hoffset=-40}
1657 @centerline{Reference Manual for @code{rsh}}
1658 @page
1659
1660 @special{psfile=rsh2.ps voffset=-700 hoffset=-40}
1661 @centerline{Reference Manual for @code{rsh}}
1662 @page
1663 @end iftex
1664
1665 @ifinfo
1666 Type @kbd{M-x manual-entry rsh} to read this manual page.
1667 @end ifinfo
1668
1669 @ifhtml
1670 @html
1671 <a href="rsh.html"> rsh manpage</a>
1672 @end html
1673 @end ifhtml
1674
1675 @node rcp Reference,  , rsh Reference, Kerberos V5 Reference
1676 @section rcp Reference
1677
1678 @iftex
1679 @special{psfile=rcp1.ps voffset=-700 hoffset=-40}
1680 @centerline{Reference Manual for @code{rcp}}
1681 @page
1682 @end iftex
1683
1684 @iftex
1685 @special{psfile=rcp2.ps voffset=-700 hoffset=-40}
1686 @centerline{Reference Manual for @code{rcp}}
1687 @page
1688 @end iftex
1689
1690 @ifinfo
1691 Type @kbd{M-x manual-entry rcp} to read this manual page.
1692 @end ifinfo
1693
1694 @ifhtml
1695 @html
1696 <a href="rcp.html"> rcp manpage</a>
1697 @end html
1698 @end ifhtml
1699
1700 @node Kerberos Glossary, Copyright, Kerberos V5 Reference, Top
1701 @appendix Kerberos Glossary
1702
1703 @include glossary.texinfo
1704
1705 @node Copyright,  , Kerberos Glossary, Top
1706 @appendix Copyright
1707
1708 @include copyright.texinfo
1709
1710 @contents
1711 @bye