-
Notifications
You must be signed in to change notification settings - Fork 0
/
FAQ
637 lines (498 loc) · 25.8 KB
/
FAQ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
FREQUENTLY ASKED QUESTIONS
--------------------------
Q). Can the daemon authenticate against LDAP, SecurID, and similar?
A). PAM is the best manner of integrating LDAP, SecurID, and similar with
Tacacs. Tacacs then uses PAM to resolve authentication requests and
PAM in-turn makes queries to/through the given service.
Some PAM configuration is necessary. There are at least three different
PAM configuration methods; no attempt to guide your configuration has
been made by us.
To use PAM, the daemon must have been built with PAM support. The
configure script attempts to location the PAM libraries by default and
will include PAM support if they're found. Otherwise, you have to figure
out why its not finding them.
On Linux, the pam-dev library packages are needed.
Q). Does tac_plus required a working DNS?
A). As distributed, whenever a START packet arrive, the daemon makes a
call to getpeername to find out the name of the requestor. Depending
entirely on how your Unix host is set up, this may make DNS
queries. If this is a problem, comment out the code in tac_plus.c
which does this, and just use ip addresses instead of host names.
Q). Is the "name" field used for anything
A). No. It's purely for documentation. I had once thought it might be
useful when outputting error messages, and that you might need the
information if you converted a passwd(5) style file, but no use is
currently made of the field.
Q). Why do I get PPP authorization failures because of "no username in
request" when I've already logged in and authenticated?
A). With "aaa authentication PPP default tacacs+", the ppp
authentication overrides the earlier login authentication. If the ppp
authentication fails, the username ends up blank. Changing the config
to "aaa authentication ppp default if-needed tacacs+" fixes this
problem.
Q). I'm sure I configured it correctly, but accounting still doesn't
work.
A). You will find that although you can configure accounting in 10.3,
and it outputs debug messages, it doesn't send any accounting
packets. This is because Accounting only works from 11.0 onwards.
Q). Does TACACS+ use a database instead of a flat (/etc/passwd like)
file to decrease search times, say if we are talking about a large
database of 40,000 users?
A). The TACACS+ authentication database is held internally as a hash
table. This makes lookup times fast and fairly linear, at the expense
of making the server use potentially large amounts of memory space.
NOTE: If you specify that the server uses passwd(5) files for
authentication, then you don't get this speed benefit, but you save
space.
If you're willing to write the code, it should be a relatively simple
matter to interface the code to a database scheme e.g. unix dbm files,
or some proprietary database package, if you wish.
Q). Is there any way to avoid having clear text versions of the
ARAP and CHAP secrets in the configuration file?
A). CHAP and ARAP require that the server knows the cleartext password (or
equivalently, something from which the server can generate the
cleartext password). Note that this is part of the definition of CHAP
and ARAP, not just the whim of some Cisco engineer who drank too much
coffee late one night.
If we encrypted the CHAP and ARAP passwords in the database, then we'd
need to keep a key around so that the server can decrypt them when
CHAP or ARAP needs them. So this only ends up being a slight
obfuscation and not much more secure than the original scheme.
In extended TACACS, the CHAP and ARAP secrets were separated from the
password file because the password file may be a system password file
and hence world readable. But with TACACS+'s native database, there
is no such requirement, so we think the best solution is to
read-protect the files. Note that this is the same problem that a
kerberos server has. If your security is compromised on the kerberos
server, then your database is wide open. Kerberos does encrypt the
database, but if you want your server to automatically restart, then
you end up having to "kstash" the key in a file anyway and you're back
to the same security problem.
So storing the cleartext password on the security server is really an
absolute requirement of the CHAP and ARAP protocols, not something
imposed by TACACS+.
We could have chosen a scheme where the NAS sends the challenge
information to the TACACS+ daemon and the daemon uses the cleartext
password to generate the response and returns that, but that means
that we must include specific protocol knowledge into the protocol for
both ARAP and CHAP and we would have to update the protocol every time
a new authentication protocol is added. Hence we decided to go with
the SENDPASS mechanism.
Note that the above doesn't apply to PAP. You can keep an inbound PAP
password des-encrypted, since all you need to do with it is verify
that the password the principal gave you is correct.
Q). How is the typical login authentication sequence done?
A). NAS sends START packet to daemon
Daemon send GETUSER containing login prompt to NAS
NAS prompts user for username
NAS sends pkt to daemon
Daemon sends GETPASS containing password prompt to the NAS
NAS prompts user for password
NAS sends pkt to daemon
Daemon sends accept, reject or error to NAS
Q). Is there a GUI for the configuration file?
A). No. Use your favourite text editor.
Q). What does "default service = permit" really do?
A). When a request comes in to authorize exec startup, or ppp (with
protocol lcp, ip, ipx), or slip, or arap or a specific command, the
daemon looks for a matching declarations for the user (or groups the
user is a member of).
For exec startup, it looks for a "service=exec" OR any command
configured.
For ppp, it looks for a "service=ppp" and "protocol=(one of lcp, ip, ipx)".
For slip there must be a "service=slip" and for arap a "service=arap"
clause.
For specific commands, there must be a matching cmd=<cmdname>.
If these aren't found, authorization will fail, *unless* you say
"default service = permit".
Q). How do I make PAP work?
A). Avoid using PAP if possible since it's not very secure. If you
*must* use it, PAP passwords may be specified along with arap and chap
passwords for each user. Note that the details of this changed in
version 3.0 and onwards.
For outbound PAP, where you are forced to send a password to the
remote host to identify yourself, there is now a separate "opap"
directive e.g.
opap = cleartext OOOO
You use this to set the outbound PAP password. It must be a cleartext
password.
NOTE: It is very bad practice to use an outbound PAP password that is
the same as any of your inbound passwords. For this reason, a "global"
password does not apply to outbound PAP, only to inbound PAP,
bidirectional CHAP and ARAP.
Before 3.0, PAP logins were treated like ordinary user logins, so you
needed to declare a user in the Daemon configuration file whose name
was typically the remote hostname (or user), with a login password, in
order to process the PAP request.
Q). How can I deny some one from telneting from a commserver by ip
address only. i.e. when command is 10.0.1.6 rather than telnet
10.0.1.6.
A). The best way to restrict telnet access is by applying an outbound
access list via the access class command (or equivalently, via the
"acl" avpair). The NAS configuration command "access-class <n> out"
for example applies a pre-defined standard IP access list (where n is
a number from 1 through 99) that governs telnet access from a NAS.
E.g. the following configuration commands permit outgoing Telnet
access from line 1 on the NAS *only* to hosts on network 192.85.55.0:
access-list 12 permit 192.85.55.0 0.0.0.255
line 1
access-class 12 out
Note: you must define "access-list 12 permit 192.85.55.0 0.0.0.255" on
the NAS. Only then can you use the acl avpair to apply it to a line
that a user dials in on.
Alternatively, you can try configuring "transport preferred none" on
the lines in question. This will force a user to always type "telnet
10.0.1.6" in order to telnet out from the NAS. Then you can apply
command authorization to this command to restrict it.
Q). I have an autocommand configured in the NAS-local database and I'm
using "aaa authentication local-override". The autocommand doesn't
work, but the username/password does. Why?
A). The "local-override" only applies to the authentication portion of
the local database, so if you want an autocommand for this user, you
need to also do:
aaa authorization exec local if-authenticated
This will use the local DB entry if one exists, allow authenticated
users otherwise, or fail.
We don't have a "aaa authorization local-override" like we do for
authentication. Unlike authentication, the local method for
authorization is sort of equivalent to a local-override.
Q). Can tacacs+ only be enabled on a global basis? I want to
selectively turn it on for, e.g. only modem-connected lines. How do I
do this?
A). You turn tacacs+ ON on a global basis, but you can then change the
behavior of individual lines to whatever you want, e.g.
aaa authentication login default tacacs+ none
aaa authentication login oldstyle line
aaa authentication login none none
line 1 16
login authentication default
line vty 0 4
login authentication oldstyle
line 0
login authentication none
Note that unfortunately, you can't (yet) apply authorization
differently to selected lines and interfaces.
Q). I have leased lines running PPP, and AAA authorization is also
configured, so the authorization on the leased lines fails. What should
I do?
A). Since you can't (yet) configure authorization on a per-line basis,
you have to turn on authentication on the leased lines running PPP and
configure your T+ server so that it will authorize these lines
correctly.
A more demanding alternative is to modify the TACACS+ server source code
to allow any authorizations coming in from the port "SerialXXX" to
succeed.
A third possibility is to not use PPP on those lines, e.g. use HDLC
instead. HDLC doesn't require authentication or authorization.
Q). What are the memory recommendations for TACACS+?
A). Unless you're using passwd style files, TACACS+ holds entries in
hash tables in memory. The overhead is modest e.g. each user entry
occupies 72 bytes, plus space for strings like username and password
etc. Access time should thus be pretty constant regardless of number
of users. On a sparc 2, a config file containing 2000 users requires
about 0.5M of swap.
Q). How many users will a TACACS+ server support? What happens when
the maximum is exceeded?
There are 2 issues. The first is that each entry in the config file
occupies memory (swap space) so you could run out of swap space either
starting up the daemon or when it forks to answer incoming requests
(see above). If this happens, the daemon will drop the connection
which should appear as an error to the NAS) and the logfile will
contain appropriate error messages. The solution is usually to add
more disk space for swapping.
The second issue is speed: Using config files containing 75,000 user
entries, I'm seeing about 3 authentications per second on a sparc 2
without noticeable performance impact, though I haven't benchmarked
this formally.
So more than about 3 authentications per second on this platform will
result in users seeing delays and having to wait for prompts. The
usual solution to this is to add more daemons to spread the load out.
Q). How many characters may a TACACS+ Username and Password contain?
A). The short answer is 31 bytes of username, with up to 254 bytes of
password if they are cleartext (8 bytes if passwords are des encrypted).
The long answer is that the Cisco NAS allocates a buffer of 1024
bytes, so this is the maximum you can type in, in response to a NAS
prompt.
But the protocol spec allows a username or password length field of
just one byte in an authentication packet, so only the first 255 of
these characters can be sent to the daemon.
Then, the API spec states that the username in the identity structure
on the daemon is 32 bytes long, so only the first 31 bytes of username
will be copied from the authentication packet into this structure,
which is then null-terminated.
The password, on the other hand, is copied into malloc'ed memory, so
it can still be up to 255 characters long.
Now if it's a des encrypted password, then only the first 8 bytes are
significant, per the common unix implementations of crypt.
Lastly, there is also the question of how long a username/password can
be configured in the daemon configuration file. The answer is given by
the value of MAX_INPUT_LINE_LEN, currently set to 255, which
determines the length of the longest string you can enter in the
configuration file.
Q). What is the format of accounting records?
A). Accounting records are text lines containing tab-separated fields. The
first 6 fields are always the same. These are:
timestamp, NAS name, username, port, address, record type.
Following these, a variable number of fields are written, depending on
the accounting record type. All are of the form attribute=value. There
will always be a task_id field.
Current attributes are:
"unknown"
"service"
"start_time"
"port"
"elapsed_time"
"status"
"priv_level"
"cmd"
"protocol"
"cmd-arg"
"bytes_in"
"bytes_out"
"paks_in"
"paks_out"
"address"
"task_id"
"callback-dialstring"
"nocallback-verify"
"callback-line"
"callback-rotary"
I expect more will be added over time.
Example records are thus:
Thu Jul 13 13:35:28 1995 cherub.cisco.com chein tty5 171.69.1.141 stop task_id=12028 service=exec port=5 elapsed_time=875
Thu Jul 13 13:37:04 1995 cherub.cisco.com lol tty18 171.69.1.129 stop task_id=11613 service=exec port=18 service=exec port=18 elapsed_time=909
Thu Jul 13 14:09:02 1995 cherub.cisco.com billw tty18 171.69.1.152 start task_id=17150 service=exec port=18
Thu Jul 13 14:09:02 1995 cherub.cisco.com billw tty18 171.69.1.152 start task_id=17150 service=exec port=18 service=exec port=18
Elapsed time is in seconds, and is the field most people are usually
interested in.
Q). How do I limit the number of sessions a user can have?
A). The TACACS+ daemon can enforce how many simultaneous sessions a
given user is allowed to have. You must compile the daemon with the
MAXSESS symbol defined (see the Makefile).
Maximum sessions are configured on the daemon for a user as follows:
user = joeslip {
login = cleartext XXX
# only allow two sessions max for joeslip
maxsess = 2
name = "Joe SLIP User"
...
}
It can also be configured under a group:
group = slip_users {
maxsess = 2
...
}
...
user = fred {
...
member = slip_users
...
}
The daemon keeps a count of how many sessions a given user owns by
monitoring START and STOP accounting records. Thus, exec and network
accounting must be configured for this feature to operate for exec and
ppp users.
As the restriction is enforced during the authorization phase of
login, exec and network authorization must be configured as well, viz:
aaa authentication login default tacacs+
aaa authentication ppp default tacacs+
aaa authorization exec tacacs+
aaa authorization network tacacs+
aaa accounting exec start-stop tacacs+
aaa accounting network start-stop tacacs+
Due to network outages (or other disruptions), it is possible for the
TACACS+ daemon's record of usage to become out of sync with reality,
so before denying access because it thinks a user is running too many
sessions, the TACACS+ daemon will use the finger service on the NAS to
verify how many sessions a user is running there.
If the result of finger indicates that the daemon should permit
access, access will be granted. Note that for this check to work via
finger, "service finger" must also be configured on the NAS.
Lastly, note that because finger output truncates usernames at 10
characters, you may encounter trouble if you have users whose names
are not unique within those first 10 characters.
Also recall that authorization works differently on the console. So
many people locked themselves out of their boxes after configuring
authorization, that we stopped requiring authorization on the console
for authenticated users. Since there's no authorization on the
console, MAXSESS is not enforced there.
Q). How can I configure time-outs on an interface via Tacacs+?
A). Certain per-user/per-interface timeouts may be set by Tacacs+
during authorization. As of 11.0, you can set an arap session timeout,
and an exec timeout. As of 11.1 you can also set an exec idle timeout.
There are currently no settable timeouts for PPP or SLIP sessions, but
there is a workaround which applies to ASYNC PPP/SLIP idle timeouts
started via exec sessions only: This workaround is to set an EXEC
(idletime) timeout on an exec session which is later used to start up
PPP or SLIP (either via a T+ autocommand or via the user explicitly
invoking PPP or SLIP). In this case, the exec idle timeout will
correctly terminate an idle PPP or SLIP session. Note that this
workaround cannot be used for sessions which autoselect PPP or SLIP.
An idle timeout terminates a connection when the interface is idle for
a given period of time (this is equivalent to the "session-timeout"
Cisco IOS configuration directive). The other timeouts are
absolute. Of course, any timeouts set by Tacacs+ apply only to the
current connection.
user = lol {
login = cleartext foobar
service = exec {
# disconnect lol if there is no traffic for 5 minutes
idletime = 5
# disconnect lol unconditionally after one hour
timeout = 60
}
}
You also need to configure exec authorization on the NAS for the above
timeouts, e.g.
aaa authorization exec tacacs+
Note that these timeouts only work for async lines, not for ISDN currently.
Note also that you cannot use the authorization "if-authenticated"
option with these parameters, since that skips authorization if the
user has successfully authenticated.
Q). How do I send VPDN forwarding decisions to an authorization server?
A). In 11.2 onwards, VPDN NASs can use T+ to allow an authorization
server to make the decision to forward users.
If VPDN forwarding is turned on, and the username is of the form
user@domain, and "domain" matches a vpdn outgoing configured domain,
then an authorization attempt is made for "domain" (see below).
When making an authorization call for VPDN, a service type of "ppp"
with a protocol type of "vpdn", with a username of "domain" will be
made e.g. when a PPP user comes up on a line with the username
foo@bar.com, if "vpdn enable" and "aaa authorization ...." is enabled
on the box, then a one-time authorization of the name "bar.com" is
attempted.
If this authorization is successful, no local authentication is
attempted on the NAS, and the connection is forwarded via VPDN
instead.
If no VPDN-specific information comes back from this authorization
call, the login proceeds as follows:
If tacacs-server directed-requests are configured (note: this is true
by default), then IOS will strip off the domain part of a name of the
form user@domain and use "domain" to try and select a T+ server. If
successful, the username portion "user", without the domain, will be
used for all subsequent authentication, authorization and accounting.
If directed requests are turned off, then the entire username
user@domain is treated as a username.
vpdn specific information includes the attributes "tunnel-id",
"source-ip" (deprecated) and "ip-addresses":
tunnel-id:
This AV pair specifies the username that will be used to
authenticate the tunnel over which the individual user MID
will be projected. This is analogous to the "NAS name" in the
"vpdn outgoing" command.
ip-addresses:
This is a list of possible IP addresses that can be used for
the end-point of the tunnel. Consult the text at the end of
this document for more details on how to configure this
attribute.
source-ip: (This is now deprecated. It began in release 11.2(1.4),
and was removed in 11.2(4.0.2)).
This ip address will be used as the source of all VPDN packets
generated as part of the VPDN tunnel (see the source-ip
keyword in the vpdn outgoing command).
Tacacs+ syntax
--------------
The following syntax is used on the public domain Tacacs+ server.
username = domain {
service = ppp protocol = vpdn {
tunnel-id = <name for tunnel authentication>
ip-addresses = <addr> [<addr> ...]
source-ip = <ip-address>
}
}
In addition the T+ server can be used to store the usernames for both
the NAS (the username specified by "tunnel-id" above) and the Home
Gateway. These will be used to authenticate the tunnel.
Example:
user = foobar.cisco.com {
service = ppp protocol = vpdn {
tunnel-id = my_nas
ip-addresses = "173.20.12.19 173.20.12.20"
source-ip = 173.5.10.1
}
}
user = my_nas {
global = cleartext egad
}
user = my_home_gateway {
global = cleartext wowser
}
IOS Configuration
-----------------
To enable AAA assisted VPDN forwarding on a NAS, the following minimum
configuration is required:
vpdn enable
aaa new-model
aaa authorization network tacacs+ ...
In addition, if the passwords for the home gateway and NAS are stored
on the T+ daemon, the command
aaa authentication login tacacs+ ....
should also be present.
Beginning with release 11.2(1.4), the additional configuration
vpdn outgoing cisco.com ip NAS [ source-ip X.X.X.X ]
can be used. This changes in 11.2(4.0.2) and becomes:
vpdn source-ip X.X.X.X
vpdn outgoing cisco.com ip NAS
Q). Can someone expand on the use of the "optional" keyword.
A). Most attributes are mandatory i.e. if the daemon sends them to the
NAS, the NAS must obey them or deny the authorization. This is the
default. It is possible to mark attributes as optional, in which case
a NAS which cannot support the attribute is free to simply ignore it
without causing the authorization to fail.
This was intended to be useful in cutover situations where you have
multiple NASes running different versions of IOS, some of which
support more attributes than others. If you make the new attributes
optional, older NASes could ignore the optional attributes while new
NASes could apply them. Note that this weakens your security a little,
since you are no longer guaranteed that attributes are always applied
on successful authorization, so it should be used judiciously.
Q). Can I do do address pooling on the T+ daemon?
A). Not really since nothing on the daemon tracks whether an address
is already in use. The best way to do manage address pools is to
define a non-overlapping pool of addresses on each NAS and return the
name of this pool during authorization whenever a user logs in e.g.
NAS:
ip local pool foo 1.0.0.1 1.0.0.10
Daemon:
user = lol {
service = ppp protocol = ip {
addr-pool = foo
}
}
Q). What about MSCHAP?
A). Version F4.X contains mschap support. Mschap is configured the
same way as chap, only using the "mschap" keyword in place of the
"chap" keyword.
Like ARAP, MSCHAP works best when you have a des library (see the note
at the beginning of this document), but this is optional, as the DES
calculation can be done by the NAS instead. It also optionally
requires a key from Microsoft which is not public domain, but this can
also be done on the NAS too, so you can live without it.
To compile the daemon with MSCHAP support, give configured the
--enable-mschap option. This will add the MSCHAP code to your daemon.
You can leave MSCHAP_DES undefined (see configure --enable-mschapdes),
in which case the MSCHAP DES calculation will be done by NAS, and no
special MSCHAP key will be required.
If want to use DES with MSCHAP (this is more efficient for
authentication), then you also give configure the --enable-mschapdes
option. This will ensure that the DES calculation is done in the daemon.
A key will need to be obtained from Microsoft and used to replace the
definition of MSCHAP_KEY in the file mschap.h. If you're thinking by now
that this is all too much trouble, you're right.
Q). Can I do wtmp-style logging like xtacacd used to do?
A). Wtmp file logging is supported. The "-u <wtmpfilename>" command
line flag can be used to specify a filename which will be used for
logging wtmp style records instead of the regular T+ accounting
records.
wtmp records are generated into wtmpfilename. Since file locking is
also used when writing to wtmpfilename, the usual provisos regarding
NFS and locking (see accounting above) should be observed.
To generate correct wtmp log records, the NAS needs to be configured
as follows:
aaa accounting exec stop-only tacacs+
aaa accounting network stop-only tacacs+
aaa accounting system start-stop tacacs+
Q) How does TACACS compare to RADIUS?
A) Cisco provided a good summary in general and somewhat specific to Cisco
products here:
http://www.cisco.com/en/US/tech/tk59/technologies_tech_note09186a0080094e99.shtml#comparing