1 #
2 # CDDL HEADER START
3 #
4 # The contents of this file are subject to the terms of the
5 # Common Development and Distribution License (the "License").
6 # You may not use this file except in compliance with the License.
7 #
8 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 # or http://www.opensolaris.org/os/licensing.
10 # See the License for the specific language governing permissions
11 # and limitations under the License.
12 #
13 # When distributing Covered Code, include this CDDL HEADER in each
14 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 # If applicable, add the following below this CDDL HEADER, with the
16 # fields enclosed by brackets "[]" replaced with your own identifying
17 # information: Portions Copyright [yyyy] [name of copyright owner]
18 #
19 # CDDL HEADER END
20 #
21
22 #
23 # Copyright 2008 Sun Microsystems, Inc. All rights reserved.
24 # Use is subject to license terms.
25 #
26 # ident "@(#)README 1.8 08/11/21 SMI"
27 #
28
29 This directory contains a set of tools to set up Kerberos V5
30 environment for testing purposes. This file describes what they
31 are, how to use them, how to install them, etc.
32
33 Krb5tools
34 =========
35
36 krb5tools includes the following tools currently:
37
38 kdccfg - set up specified host as KDC
39 kdc_clientcfg - set up specified host as KDC client
40 krb5nfscfg - set up specified host for kerberized NFS
41 princadm - create or delete principals
42 kinfo - print Kerberos configuration, principals,
43 cached tickets, and logs, etc.
44
45 These tools can work on either localhost or a remote host. If a host
46 is specified, the requested operation is performed on that host;
47 otherwise, localhost is used.
48
49 For flexibility, each tool focuses on a single task and can be used
50 together. For example, kdc_clientcfg uses an existing KDC and sets
51 up a host as that KDC's client. It is user's responsibility to
52 set up that KDC, That can be done, e.g., by calling kdccfg.
53
54 For another example, krb5nfscfg enables kerverized NFS support on
55 a KDC client. It is user's responsibility to set up that host as
56 a KDC client before calling krb5nfscfg. That can be done, e.g., by
57 calling kdc_clientcfg.
58
59 That is, conceptually, these tools are designed to be stacked atop
60 each other, as illustrated in the diagram below:
61
62 +-----------------+
63 | krb5nfscfg |
64 +-----------------+
65 | kdc_clientcfg |
66 +-----------------+
67 | kdccfg |
68 +-----------------+
69
70 User are supposed to use these tool from bottom up when setting up
71 a host, and from top down when cleaning up that host.
72
73
74 Synopses and Usages
75 ===================
76
77 All tools (except kinfo) have -s and -c option, which means setup
78 and cleanup, respectively. User should specify either -s or -c
79 to use them; otherwise it is considered as an usage error.
80
81 Below are the detailed description for each tool:
82
83 1) kdccfg
84
85 kdccfg <-s|-c> [-d domain_list] [host]
86 -s set up the host as KDC
87 -c clean up the host with previous KDC configuration
88 -d a comma separated list of additional DNS domains that
89 will be mapped to the same realm. This is optional.
90 It is only needed if the realm contains multiple domains.
91 host the host to be set up as KDC (if -s is specified) or
92 to be clean up (if -c is specified). This is optional.
93 If no host is specified, localhost will be used.
94
95 kdccfg sets up the specified host as KDC. If the host isn't
96 specified, localhost is used.
97
98 To set up KDC, the tool does the following:
99
100 - create /etc/resolv.conf if it doesn't exist
101 - create krb5.conf, kdc.conf, kadm.conf under /etc/krb5
102 - create principal database
103 - create a user principal for database admin
104 - add principals used by kadmin into its keytab
105 - start krb5kdc and kadmin service
106
107 Examples:
108
109 The command below sets up KDC on localhost:
110
111 snake # kdccfg -s
112
113 The command below sets up KDC on a remote host:
114
115 snake # kdccfg -s deadduck
116
117 The command below sets up KDC on localhost (snake.sfbay), and maps
118 not only sfbay.sun.com domain, but also central.sfbay.com, prc.sun.com
119 to ACME.COM realm (the default one).
120
121 snake # kdccfg -s -d central.sfbay.com,prc.sun.com
122
123 2) kdc_clientcfg
124
125 kdc_clientcfg <-s|-c> <-k kdc> [-p princ] ... [host]
126 -s set up the host as Kerberos client
127 -c clean up the host with previous Kerberos client
128 configuration
129 -k kdc KDC server
130 -p princ a principal to be created (if -s is specified)
131 or deleted (if -c is specified). princ argument
132 has the following format:
133
134 principal_name,attr1=value1,attr2=value2,...
135
136 Currently supported attributes include:
137
138 password
139 the password for user principal. This
140 attribute is optional. If it is not
141 specified, the principal will be
142 considered as a service principal.
143 enctype
144 the encryption type of the key for the
145 principal in KDB. This attribute is
146 optional. If it is not specified, for
147 each supported encryptiion type, a key
148 will be generated in KDB
149
150 If the operation is to delete a principal, all
151 attributes associated with that principal are
152 ignored and thus no need to specify them.
153
154 There can be multiple -p options.
155 host the host to be set up as KDC client (if -s is
156 specified) or to be clean up (if -c is specified)
157 This is optional. If no host is specified,
158 localhost will be used.
159
160 kdc_clientcfg sets up the specified host as Kerberos client, using
161 a previously configured KDC. If the host isn't specified, localhost
162 is used.
163
164 To set up KDC client, the tool does the following:
165
166 - synchronize system time with KDC
167 - create /etc/resolv.conf if it doesn't exist
168 - create /etc/krb5.conf
169 - create principals user passed with -p options
170
171 Note that, although it works, there is no need to run kdc_clientcfg
172 on a KDC. A KDC is its own client by nature. If you need to create
173 service principals for the host on which KDC is running, you can use
174 princadm tool.
175
176 Examples:
177
178 The commands below set up a remote host (deadduck) as KDC, and creates
179 a host principal on the remote host. Then it sets up localhost (snake)
180 as KDC client, and creates a user principal and a host principal on
181 localhost (snake):
182
183 snake # kdccfg -s deadduck
184 snake # princadm -s -p host/deadduck.sfbay.sun.com deadduck
185 snake # kdc_clientcfg -s -k deadduck -p test001,password=l1admin \
186 -p host/snake.sfbay.sun.com
187
188 The command below calls kdc_clientcfg with -c to clean up the setup
189 on localhost in above example. Note it uses -p option to remove
190 principals it created during setup:
191
192 snake # kdc_clientcfg -c -p test001 -p host/snake.sfbay.sun.com
193
194
195 3) krb5nfscfg
196
197 krb5nfscfg <-s|-c> [host]
198 -s set up the host for kerberized NFS
199 -c clean up the host with previous kerberized NFS
200 configuration
201 host the host to be set up for kerberized NFS (if -s is
202 specified) or to be clean up (if -c is specified).
203 This is optional. If no host is specified, localhost
204 will be used.
205
206 This tool sets up kerberized NFS on the specified host. If the host
207 isn't specified, localhost is used.
208
209 To set up NFS support for Kerberos, the tool does the following:
210
211 - modify /etc/nfssec.conf
212 - make sure rpc/gss service is online
213 - create nfs/$fqdn principal, which is needed by nfs service
214
215 Examples:
216
217 The commands below set up a remote host (deadduck) as KDC, and
218 localhost (snake) as KDC client, and enable kerberized NFS on both
219 hosts:
220
221 snake # kdccfg -s deadduck
222 snake # kdc_clientcfg -s -k deadduck -p host/snake.sfbay.sun.com
223 snake # krb5nfscfg -s deadduck
224 snake # krb5nfscfg -s
225
226 4) princadm
227
228 princadm <-s|-c> <-p princ>... [host]
229 -s create principals specified with -p option(s)
230 -c delete principals specified with -p option(s)
231 -p princ a principal to be created (if -s is specified)
232 or deleted (if -c is specified). princ argument
233 has the following format:
234
235 principal_name,attr1=value1,attr2=value2,...
236
237 Currently supported attributes include:
238
239 password
240 the password for user principal. This
241 attribute is optional. If it is not
242 specified, the principal will be
243 considered as a service principal.
244 enctype
245 the encryption type of the key for the
246 principal in KDB. This attribute is
247 optional. If it is not specified, for
248 each supported encryptiion type, a key
249 will be generated in KDB
250
251 If the operation is to delete a principal, all
252 attributes associated with that principal are
253 ignored and thus no need to specify them.
254
255 There can be multiple -p options.
256 host the host for which service principals will be
257 created or deleted. If host is not specified,
258 localhost will be used.
259
260 This tool creates/deletes specified principals in/from krb5 database
261 and/or keytab. The principals are specified with -p options.
262
263 When creating/deleting principals, the tool automatically adds/removes
264 those principals into/from keytab.
265
266 - When creating a principal, if user doesn't provide password for
267 it, the principal will be considered as a service principal.
268 Its keys will be generated automatically by krb5, and the tool
269 will add them into keytab.
270
271 - When deleting a principal, if there are keys for the the
272 principal in keytab, the tool will remove them from keytab.
273
274 Because services principals (including host principal) are host specific,
275 they should only be added into the keytab of the host where those
276 services are running. The tool checks this by comparing host component
277 of user passed service principals with FQDN of the target host (either
278 localhost or the remote host user specified).
279
280 Examples:
281
282 The command below creates nfs/snake.sfbay.sun.com and test001 principals,
283 note the usage of password and enctype attributes. Because
284 nfs/snake.sfbay.sun.com is a service principal, the tool also adds its
285 keys into keytab on localhost.
286
287 snake # princadm -s \
288 -p nfs/snake.sfbay.sun.com,enctype=aes128-cts-hmac-sha1-96 \
289 -p test001,password=l1admin,enctype=des-cbc-crc
290
291 The command below deletes nfs/snake.sfbay.sun.com and hx156269 principals.
292 It also removes nfs/snake.sfbay.sun.com from keytab on localhost:
293
294 snake # princadm -c -p nfs/snake.sfbay.sun.com -p hx156269
295
296 The command below creates nfs/deadduck.sfbay.sun.com principal and adds
297 it into keytab on deadduck host:
298
299 snake # princadm -s -p nfs/deadduck.sfbay.sun.com deadduck
300
301 5) kinfo
302
303 kinfo <config | princ | ccache | log | all> [host]
304 config print system configuration information that help
305 to debug setup issues. It includes hostname, OS
306 version, system time, installed packages, DNS
307 setup, and Kerveros configuration information
308 like realm, kdc, and the mapped domains.
309 princ print all principals in Kerberos database.
310 ccache print cached tickets saved in credentials cache file.
311 log print the last 10 lines in /var/krb5/kdc.log if
312 the host is KDC, and the last 10 lines of
313 /var/adm/messages.
314 all print all the above information.
315
316 This tool prints information (ie., configuration, existing principals,
317 cached tickets, error messagesin log files, etc) that helps to debug
318 issues.
319
320 Examples:
321
322 The following command prints system configuration which may help to debug
323 Kerberos issues:
324
325 snake # kinfo config
326
327 The following command prints all principals on KDC:
328
329 snake # kinfo princ
330
331 The following command prints all contents in credentials cache file:
332
333 snake # kinfo ccache
334
335
336 Prerequisites
337 =============
338
339 Before you use these tools, you need to check the following things:
340
341 1) You can use the tools over the network. A copy of these tools is
342 available in the STC gate under $GATE/proto/tools/krb5tools, where
343 $GATE represents the path to the location of the gate. To use the
344 tools, add the bin subdir into your PATH environment variable.
345 For example:
346
347 # export PATH=/ws/stcnv-gate/proto/tools/krb5tools/bin:$PATH
348
349 You can also install these tools on your host. For installation
350 instructions, see Installation section.
351
352 2) You need to be root to run these tools
353
354 3) If you want to use these tools to configure a remote host, you
355 need to make sure you have rsh or ssh access to that remote
356 host as root.
357
358 Notes: rsh is used by default. If you want to use ssh, you need
359 to set RSH to "ssh".
360
361 To enable rsh access to the remote host, you need to do the
362 following on that remote host:
363
364 - create ~root/.rhosts file on the remote host, which contains a line
365 like "+ +"
366 - comment out "CONSOLE=/dev/console" line in /etc/default/login
367 on that remote host
368
369 To enable ssh access to the remote host, please refer to Appendix
370 A for the detailed steps to do that.
371
372 4) Customize environment variables if necessary. Below are variables
373 used by krb5tools. Among them, the only one you need to check
374 is DNS_SERVER. If you want to output more debug information,
375 you also need to set KRB5TOOLS_DEBUG. For all the others
376 variables, they should just work fine.
377
378 DNS_SERVER - IP address of your dns server. Default value
379 is 129.145.155.226 (only valid within Sun).
380 If that doesn't work for your domain, you
381 need to change it.
382
383 KRB5TOOLS_DEBUG - debugging flag. Default value is 0, which
384 means no debug information. See more details
385 in "How to Debug These Tools" section.
386
387 REALM - kerberos realm. Default value is ACME.COM.
388
389 KDB_PASSWD - master password for krb5 database, used by
390 kdb5_util(1M). Default value is abc123.
391
392 ADMIN_USER - krb5 database administration principal, used
393 by kamdin(1M). Default value is test.
394
395 ADMIN_PASSWD - password for $ADMIN_USER. Default value is
396 abc123.
397
398 TMPDIR - directory to place temporary files. Default
399 value is /usr/tmp.
400
401 RSH - remote shell to use. Valid values are "rsh" and
402 "ssh". Default value is "rsh".
403
404 5) These tools need to get FQDN for the host they run on or they
405 try to set up. So it is recommended that all hosts should have
406 reverse DNS lookup. If this can't be satisfied, then user needs
407 pass FQDN for the remote host, for example:
408
409 # kdccfg -s cruse.prc.sun.com.
410
411 Note the trailing dot, this is required so that tools can detect
412 that a FQDN is passed.
413
414 If the host to be set up is localhost, then just call these tools
415 as usual, for example:
416
417 # kdccfg -s
418
419 In this case, the tool will use NIS domainname to try to generate
420 a valid FQDN for localhost.
421
422
423 How to Debug
424 ============
425
426 By default, all tools print out error messages for diagnosis if
427 something went wrong. In most cases, these message should be enough
428 to help users to find the cause for failures.
429
430 In some cases, however, if those information is not enough, or if
431 one needs to debug the tools themselves, one can set KRB5TOOLS_DEBUG
432 environment variable before running these tools. Currently this
433 variable can have three values:
434
435 0 - no debugging information. This is the default value.
436 1 - print some debugging information. This help to identify what
437 went wrong quickly.
438 2 - print all debugging information. The output is very verbose.
439
440
441 Installation
442 ============
443
444 You can install the tools on your localhost, using the following
445 steps:
446
447 # pkgadd -d <package location> SUNWstc-krb5tools
448
449 The default installation location is /opt/SUNWstc-krb5tools. To use the
450 tools from this location, add /opt/SUNWstc-krb5tools/bin to your PATH
451 environment variable:
452
453 # export PATH=$PATH:/opt/SUNWstc-krb5tools/bin
454
455
456 Building Tools from Source
457 ==========================
458
459 The krb5tools package can be built from source. To do this, place the
460 the source code in an STC workspace and invoke 'stf_build'. An example
461 build recipe:
462
463 # cd <WS_ROOT>/usr/src/tools/krb5tools
464 # stf_build package
465
466 where <WS_ROOT> represents the root of the STC workspace being built.
467 'stf_build' is part of the SUNWstc-stf package. These commands will
468 create an installable package directory at
469 <WS_ROOT>/packages/`uname -p`/SUNWstc-krb5tools
470 which can be installed as described in the "Installation" section above.
471
472
473 Appendix A: How to Set Up Password-less SSH Access for Root
474 ===========================================================
475
476 1) generate RSA authentication keys for root on localhost, keep
477 pressing Return key when prompted
478
479 localhost# ssh-keygen -t rsa
480
481 This will generate public key in ~root/.ssh/id_rsa.pub and private
482 key in ~root/.ssh/id_rsa.
483
484 2) add the root's public key in ~root/.ssh/authorized_keys on the remote
485 host
486
487 a) transfer ~root/.ssh/id_rsa.pub on localhost to the remote host.
488 Suppose it is saved under /tmp.
489
490 b) add public key contained in that file into ~root/.ssh/authorized_keys
491
492 remotehost# cat >> ~root/.ssh/authorized_keys < /tmp/id_rsa.pub
493
494 c) make sure ~root/.ssh/authorized_keys file permission is 644.
495
496 3) modify /etc/ssh/sshd_config on remote host to allow public key
497 authentication for root. The line for PermitRootLogin should be
498 like the following:
499
500 remotehost# grep "^PermitRootLogin" /etc/ssh/sshd_config
501 PermitRootLogin without-password
502
503 4) start ssh-agent on localhost host and call ssh-add to load root's
504 private key
505
506 localhost# [[ -n $SSH_AUTH_SOCK ]] && ssh-agent -k
507 localhost# eval `ssh-agent -s`
508 localhost# ssh-add
509
510 use the following command to verify the key has been loaded
511 successfully.
512
513 localhost# ssh-add -l
514
515 5) get public key of the remote host and save it into ~root/.ssh/known_hosts
516 on localhost. This is done automatically when you connect to
517 the remote host via SSH for the first time. Type "yes" and press
518 Return key when prompted.
519
520 localhost# ssh dubya
521 The authenticity of host 'dubya (10.4.196.208)' can't be established.
522 RSA key fingerprint is 09:53:a6:16:6f:1b:49:38:ca:06:63:6e:16:ef:c7:69.
523 Are you sure you want to continue connecting (yes/no)? yes
524 Warning: Permanently added 'dubya,10.4.196.208' (RSA) to the list of
525 known hosts.
526 Last login: Thu Mar 8 21:23:44 2007 from assassin
527 Sun Microsystems Inc. SunOS 5.11 snv_59 October 2007
528 #
529
530 Note: the host key for remote host may change if it is reinstalled.
531 In that event, the one cached in ~root/.ssh/known_hosts on localhost is
532 stale and the above ssh command will fail, printing a diagnostic
533 message.
534
535 If the diagnostic message indicates that the failure may be related
536 to a changed host key, you can remove the line for the remote machine
537 from ~root/.ssh/known_hosts and try ssh command again.
538
539 6) now everything is done and you should be able to ssh the remote
540 host as root.
541
542 localhost# ssh dubya
543 Last login: Thu Mar 8 22:34:43 2007 from assassin
544 Sun Microsystems Inc. SunOS 5.11 snv_59 October 2007
545 #
546