Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
.TH FACTOTUM 4
2
.SH NAME
3
factotum, fgui \- authentication agent
4
.SH SYNOPSIS
5
.B auth/factotum
6
[
7
.B -DdknpuS
8
] [
9
.B -a asaddr
10
] [
11
.B -s
12
.I srvname
13
] [
14
.B -m
15
.I mtpt
16
]
17
.PP
18
.B auth/factotum
19
.B -g
20
.IB attribute = value
21
.B ...
22
.IB attribute ?
23
.B ...
24
.PP
25
.B auth/fgui
26
.SH DESCRIPTION
27
.I Factotum
28
is a user-level file system that
29
acts as the authentication agent for a user.
30
It does so by managing a set of
31
.IR keys .
32
A key is a collection of information used to authenticate a particular action.
33
Stored as a list of
34
.IB attribute = value
35
pairs, a key typically contains a user, an authentication domain, a protocol, and
36
some secret data.
37
.PP
38
.I Factotum
39
presents a two level directory.  The first
40
level contains a single directory
41
.BR factotum ,
42
which in turn contains:
43
.TF needkey
44
.TP
45
.B rpc
46
each open represents a new private channel to
47
.I factotum
48
.TP
49
.B proto
50
when read lists the protocols available
51
.TP
52
.B confirm
53
for confiming the use of key
54
.TP
55
.B needkey
56
allows external programs to control the addition of new keys
57
.TP
58
.B log
59
a log of actions
60
.TP
61
.B ctl
62
for maintaining keys; when read, it returns a list of keys.
63
For secret attributes, only the attribute name follow by a
64
.L ?
65
is returned.
66
.PD
67
.PP
68
In any authentication, the caller typically acts as a client
69
and the callee as a server.  The server determines
70
the authentication domain, sometimes after a negotiation with
71
the client.  Authentication always requires the client to
72
prove its identity to the server.  Under some protocols, the
73
authentication is mutual.
74
Proof is accomplished using secret information kept by factotum
75
in conjunction with a cryptographic protocol.
76
.PP
77
.I Factotum
78
can act in the role of client for any process possessing the
79
same user id as it.  For select protocols such as
80
.B p9sk1
81
it can also act as a client for other processes provided
82
its user id may speak for the other process' user id (see
83
.IR authsrv (6)).
84
.I Factotum
85
can act in the role of server for any process.
86
.PP
87
.IR Factotum 's
88
structure is independent of
89
any particular authentication protocol.
90
.I Factotum
91
supports the following protocols:
92
.TF mschap
93
.TP
94
.B p9any
95
a metaprotocol used to negotiate which actual protocol to use.
96
.TP
97
.B p9sk1
98
a Plan 9 shared key protocol described in
99
.IR authsrv (6)'s
100
``File Service'' section.
101
.TP
102
.B p9sk2
103
a variant of
104
.B p9sk1
105
described in
106
.IR authsrv (6)'s
107
``Remote Execution'' section.
108
.TP
109
.B p9cr
110
a Plan 9 protocol that can use either
111
.B p9sk1
112
keys or SecureID tokens.
113
.TP
114
.B apop
115
the challenge/response protocol used by POP3 mail servers.
116
.TP
117
.B cram
118
the challenge/response protocol also used by POP3 mail servers.
119
.TP
120
.B chap
121
the challenge/response protocols used by PPP and PPTP.
122
.TP
123
.B mschap
124
a proprietary Microsoft protocol also used by PPP and PPTP.
125
.TP
126
.B rsa
127
RSA public key decryption, used by SSH and TLS.
128
.TP
129
.B pass
130
passwords in the clear.
131
.TP
132
.B vnc
133
.IR vnc (1)'s
134
challenge/response.
135
.TP
136
.B wep
137
WEP passwords for wireless ethernet cards.
138
.PD
139
.PP
140
The options are:
141
.TP
142
.B \-a
143
supplies the address of the authentication server to use.
144
Without this option, it will attempt to find an authentication server by
145
querying the connection server, the file
146
.BR <mtpt>/ndb ,
147
and finally the network database in
148
.BR /lib/ndb .
149
.TP
150
.B \-m
151
specifies the mount point to use, by default
152
.BR /mnt .
153
.TP
154
.B \-s
155
specifies the service name to use.
156
Without this option,
157
.I factotum
158
does not create a service file in
159
.BR /srv .
160
.TP
161
.B \-D
162
turns on 9P tracing, written to standard error.
163
.TP
164
.B \-d
165
turns on debugging, written to standard error.
166
.TP
167
.B \-g
168
causes the agent to prompt for the key, write it
169
to the
170
.B ctl
171
file, and exit.
172
The agent will prompt for values for any of the
173
attributes ending with a question mark
174
.RB ( ? )
175
and will append all the supplied
176
.I attribute = value
177
pairs.  See the section on key templates below.
178
.TP
179
.B \-n
180
don't look for a secstore.
181
.TP
182
.B \-S
183
indicates that the agent is running on a
184
CPU server.  On starting, it will attempt to get a
185
.B p9sk1
186
key from NVRAM using
187
.B readnvram
188
(see
189
.IR authsrv (2)),
190
prompting for anything it needs.
191
It will never subsequently prompt for a
192
key that it doesn't have.
193
This option is typically used by
194
the kernel at boot time.
195
.TP
196
.B \-k
197
causes the NVRAM to be written.
198
It is only valid with the
199
.B \-S
200
option.
201
This option is typically used by
202
the kernel at boot time.
203
.TP
204
.B \-u
205
causes the agent to prompt for user
206
id and writes it to
207
.BR /dev/hostowner .
208
It is mutually exclusive with
209
.B \-k
210
and
211
.BR \-S .
212
This option is typically used by
213
the kernel at boot time.
214
.TP
215
.B \-p
216
causes the agent not to mark itself `private'
217
via 
218
.IR proc (3),
219
so that it can be debugged.
220
It is implied by
221
.BR \-d .
222
.PD
223
.PP
224
.I Fgui
225
is a graphic user interface for confirming key usage and
226
entering new keys.  It hides the window in which it starts
227
and waits reading requests from
228
.B confirm
229
and
230
.BR needkey .
231
For each requests, it unhides itself and waits for
232
user input.
233
See the sections on key confirmation and key prompting below.
234
.SS "Key Tuples
235
.PP
236
A
237
.I "key tuple
238
is a space delimited list of 
239
.IB attribute = value
240
pairs.  An attribute whose name begins with an exclamation point
241
.RB ( ! )
242
does not appear when reading the
243
.B ctl
244
file.
245
The required attributes depend on the authentication protocol.
246
.PP
247
.BR P9sk1 ,
248
.BR p9sk2 ,
249
and
250
.BR p9cr
251
all require a key with
252
.BR proto = p9sk1 ,
253
a
254
.B dom
255
attribute identifying the authentication domain, a
256
.B user
257
name valid in that domain, and either a
258
.B !password
259
or
260
.B !hex
261
attribute specifying the password or hexadecimal secret
262
to be used.  Here is an example:
263
.PP
264
.EX
265
    proto=p9sk1 dom=avayalabs.com user=presotto !password=lucent
266
.EE
267
.PP
268
.BR Apop ,
269
.BR cram ,
270
.BR chap ,
271
and
272
.BR mschap ,
273
require a key with a
274
.B proto
275
attribute whose value matches the protocol,
276
in addition to
277
.BR server ,
278
.BR user ,
279
and
280
.B !password
281
attributes; 
282
e.g.
283
.PP
284
.EX
285
    proto=apop server=mit.edu user=rsc !password=nerdsRus
286
.EE
287
Vnc is similar but does not require a
288
.B user
289
attribute.
290
.PP
291
.B Pass
292
requires a key with
293
.B proto=pass
294
in addition to
295
.B user
296
and
297
.B !password
298
attributes; e.g.
299
.PP
300
.EX
301
    proto=pass user=tb !password=does.it.matter
302
.EE
303
.PP
304
.B Rsa
305
requires a key with
306
.B proto=rsa
307
in addition to all the hex attributes defining an RSA key:
308
.BR ek ,
309
.BR n ,
310
.BR !p ,
311
.BR !q ,
312
.BR !kp ,
313
.BR !kq ,
314
.BR !c2 ,
315
and
316
.BR !dk .
317
By convention, programs using the RSA protocol also require a
318
.B service
319
attribute set to
320
.BR ssh ,
321
.BR sshserve ,
322
or
323
.BR tls .
324
.PP
325
.B Wep
326
requires a
327
.BR key1 ,
328
.BR key2 ,
329
or
330
.BR key3
331
set to the password to be used.
332
Starting the protocol causes
333
.I factotum
334
to configure the wireless ethernet card
335
.B #l/ether0
336
for WEP encryption with the given password.
337
.PP
338
All keys can have additional attributes that act either as comments
339
or as selectors to distinguish them in the
340
.IR auth (2)
341
library calls.
342
.PP
343
The factotum owner can use any key stored by factotum.
344
Any key may have one or more
345
.B owner
346
attributes listing the users who can use the key
347
as though they were the owner.
348
For example, the TLS and SSH host keys on a server
349
often have an attribute
350
.B owner=*
351
to allow any user (and in particular,
352
.LR none )
353
to run the TLS or SSH server-side protocol.
354
.PP
355
Any key may have a
356
.B role
357
attribute for restricting how it can be used.
358
If this attribute is missing, the key can be used in any role.
359
The possible values are:
360
.TP
361
.B client
362
for authenticating outbound calls
363
.TP
364
.B server
365
for authenticating inbound calls
366
.TP
367
.B speakfor
368
for authenticating processes whose
369
user id does not match
370
.IR factotum 's.
371
.PP
372
If a key has a
373
.B disabled
374
attribute (with any value), the key is not used
375
during any protocols.  Factotum automatically marks
376
keys with
377
.B disabled=by.factotum
378
when they fail during certain authentication
379
protocols (in particular, the Plan 9 ones).
380
.PD
381
.PP
382
Whenever
383
.I factotum
384
runs as a server, it must have a
385
.B p9sk1
386
key in order to communicate with the authentication
387
server for validating passwords and challenge/responses of
388
other users.
389
.SS "Key Templates
390
Key templates are used by routines that interface to
391
.I factotum
392
such as
393
.B auth_proxy
394
and
395
.B auth_challenge
396
(see
397
.IR auth (2))
398
to specify which key and protocol to use for an authentication.
399
Like a key tuple, a key template is also a list of 
400
.IB attribute = value
401
pairs.
402
It must specify at least the protocol and enough
403
other attributes to uniquely identify a key, or set of keys, to use.
404
The keys chosen are those that match all the attributes specified
405
in the template.  The possible attribute/value formats are:
406
.TP 1i
407
.IB attr = val
408
The attribute
409
.I attr
410
must exist in the key and its value must exactly
411
match
412
.I val
413
.TP 1i
414
.IB attr ?
415
The attribute
416
.I attr
417
must exist in the key but its value doesn't matter.
418
.TP 1i
419
.I attr
420
The attribute
421
.I attr
422
must exist in the key with a null value
423
.PD
424
.PP
425
Key templates are also used by factotum to request a key either via
426
an RPC error or via the
427
.B needkey
428
interface.
429
The possible attribute/value formats are:
430
.TP 1i
431
.IB attr = val
432
This pair must remain unchanged
433
.TP 1i
434
.IB attr ?
435
This attribute needs a value
436
.TP 1i
437
.I attr
438
The pair must remain unchanged
439
.PD
440
.SS "Control and Key Management
441
.PP
442
A number of messages can be written to the control file.
443
The messages are:
444
.TP
445
.B "key \fIattribute-value-list\fP
446
add a new key.  This will replace any old key whose
447
public, i.e. non ! attributes, match.
448
.TP
449
.B "delkey \fIattribute-value-list\fP
450
delete a key whose attributes match those given.
451
.TP
452
.B debug
453
toggle debugging on and off, i.e., the debugging also
454
turned on by the
455
.B \-d
456
option.
457
.PP
458
By default when factotum starts it looks for a
459
.IR secstore (1)
460
account on $auth for the user and, if one exists,
461
prompts for a secstore password in order to fetch
462
the file
463
.IR factotum ,
464
which should contain control file commands.
465
An example would be
466
.EX
467
  key dom=x.com proto=p9sk1 user=boyd !hex=26E522ADE2BBB2A229
468
  key proto=rsa service=ssh size=1024 ek=3B !dk=...
469
.EE
470
where the first line sets a password for
471
challenge/response authentication, strong against dictionary
472
attack by being a long random string, and the second line
473
sets a public/private keypair for ssh authentication,
474
generated by
475
.B ssh_genkey
476
(see
477
.IR ssh (1)).
478
.PD
479
.SS "Confirming key use
480
.PP
481
The 
482
.B confirm
483
file provides a connection from
484
.I factotum
485
to a confirmation server, normally the program
486
.IR auth/fgui .
487
Whenever a key with the
488
.B confirm
489
attribute is used, 
490
.I factotum
491
requires confirmation of its use.  If no process has
492
.B confirm
493
opened, use of the key will be denied.
494
However, if the file is opened a request can be read from it
495
with the following format:
496
.PP
497
.B confirm
498
.BI tag= tagno
499
.I "<key template>
500
.PP
501
The reply, written back to
502
.BR confirm ,
503
consists of string:
504
.PP
505
.BI tag= tagno
506
.BI answer= xxx
507
.PP
508
If
509
.I xxx
510
is the string
511
.B yes
512
then the use is confirmed and the authentication will proceed.
513
Otherwise, it fails.
514
.PP
515
.B Confirm
516
is exclusive open and can only be opened by a process with
517
the same user id as
518
.IR factotum .
519
.SS "Prompting for keys
520
.PP
521
The 
522
.B needkey
523
file provides a connection from
524
.I factotum
525
to a key server, normally the program
526
.IR auth/fgui .
527
Whenever
528
.I factotum
529
needs a new key, it first checks to see if
530
.B needkey
531
is opened.  If it isn't, it returns a error to its client.
532
If the file is opened a request can be read from it
533
with the following format:
534
.PP
535
.B needkey
536
.BI tag= tagno
537
.I "<key template>
538
.PP
539
It is up to the reader to then query the user for any missing fields,
540
write the key tuple into the
541
.B ctl
542
file, and then reply by writing into the
543
.B needkey
544
file the string:
545
.PP
546
.BI tag= tagno
547
.PP
548
.B Needkey
549
is exclusive open and can only be opened by a process with
550
the same user id as
551
.IR factotum .
552
.SS "The RPC Protocol
553
Authentication is performed by
554
.IP 1)
555
opening
556
.BR rpc
557
.IP 2)
558
setting up the protocol and key to be used (see the
559
.B start
560
RPC below),
561
.IP 3)
562
shuttling messages back and forth between
563
.IR factotum
564
and the other party (see the
565
.B read
566
and
567
.B write
568
RPC's) until done
569
.IP 4)
570
if successful, reading back an
571
.I AuthInfo
572
structure (see
573
.IR authsrv (2)).
574
.PP
575
The RPC protocol is normally embodied by one of the
576
routines in
577
.IR auth (2).
578
We describe it here should anyone want to extend
579
the library.
580
.PP
581
An RPC consists of writing a request message to
582
.B rpc
583
followed by reading a reply message back.
584
RPC's are strictly ordered; requests and replies of
585
different RPC's cannot be interleaved.
586
Messages consist of a verb, a single space, and data.
587
The data format depends on the verb.  The request verbs are:
588
.TP
589
.B "start \fIattribute-value-list\fP
590
start a new authentication.
591
.I Attribute-value-pair-list
592
must include a
593
.B proto
594
attribute, a
595
.B role
596
attribute with value
597
.B client
598
or
599
.BR server ,
600
and enough other attributes to uniquely identify a key to use.
601
A
602
.B start
603
RPC is required before any others.    The possible replies are:
604
.RS
605
.TP
606
.B ok
607
start succeeded.
608
.TP
609
.B "error \fIstring\fP
610
where
611
.I string
612
is the reason.
613
.RE
614
.PD
615
.TP
616
.B read
617
get data from
618
.I factotum
619
to send to the other party.  The possible replies are:
620
.RS
621
.TP
622
.B ok
623
read succeeded, this is zero length message.
624
.TP
625
.B "ok \fIdata\fP
626
read succeeded, the data follows the space and is
627
unformatted.
628
.TP
629
.B "done
630
authentication has succeeded, no further RPC's are
631
necessary
632
.TP
633
.B "done haveai
634
authentication has succeeded, an
635
.B AuthInfo
636
structure (see
637
.IR auth (2))
638
can be retrieved with an
639
.B authinfo
640
RPC
641
.TP
642
.B "phase \fIstring\fP
643
its not your turn to read, get some data from
644
the other party and return it with a write RPC.
645
.TP
646
.B "error \fIstring\fP
647
authentication failed,
648
.I string
649
is the reason.
650
.TP
651
.B "protocol not started
652
a
653
.B start
654
RPC needs to precede reads and writes
655
.TP
656
.B "needkey \fIattribute-value-list\fP
657
a key matching the argument is needed.  This argument
658
may be passed as an argument to
659
.I factotum
660
.B -g
661
in order to prompt for a key.  After that, the
662
authentication may proceed, i.e., the read restarted.
663
.PD
664
.RE
665
.TP
666
.B "write \fIdata\fP
667
send data from the other party to
668
.IR factotum .
669
The possible replies are:
670
.RS
671
.TP
672
.B "ok
673
the write succeeded
674
.TP
675
.B "needkey \fIattribute-value-list\fP
676
see above
677
.TP
678
.B "toosmall \fIn\fP
679
the write is too short, get more data from the
680
other party and retry the write.
681
.I n
682
specifies the maximun total number of bytes.
683
.TP
684
.B "phase \fIstring\fP
685
its not your turn to write, get some data from
686
.I factotum
687
first.
688
.TP
689
.B "done
690
see above
691
.TP
692
.B "done haveai
693
see above
694
.RE
695
.TP
696
.B authinfo
697
retrieve the AuthInfo structure.  
698
The possible replies are:
699
.RS
700
.TP
701
.B "ok \fIdata\fP
702
.I data
703
is a marshaled form of the AuthInfo structure.
704
.TP
705
.B "error \fIstring\fP
706
where
707
.I string
708
is the reason for the error.
709
.PD
710
.RE
711
.TP
712
.B attr
713
retrieve the attributes used in the
714
.B start
715
RPC.
716
The possible replies are:
717
.RS
718
.TP
719
.B "ok \fIattribute-value-list\fP
720
.TP
721
.B "error \fIstring\fP
722
where
723
.I string
724
is the reason for the error.
725
.PD
726
.RE
727
.SH SOURCE
728
.B /sys/src/cmd/auth/factotum