<ServerTACACSPLUS> clause handles
TACACS+ AAA requests in the following way:<ServerTACACSPLUS> clause. The
search function looks for a matching Client using this order of
preference:
TACACSPLUSKey
is defined, it is used as the key.<ServerTACACSPLUS>
Key is defined, it is used as the key.Secret is
defined, it is used as the key.action,
priv_lvl, authen_type, and
service values in the TACACS+ authentication
request are converted to OSC-TACACS-Action,
OSC-TACACS-Privilege-Level,
OSC-TACACS-Authen-Type, and
OSC-TACACS-Service RADIUS attributes. The RADIUS
Access-Request is dispatched to a matching
<Realm> or
<Handler> clause, which serve the request
locally using any of the Radiator AuthBy clauses or proxy the request to
another RADIUS server.AuthorizeGroupAttr reply items from the previous
RADIUS Access-Accept and AuthorizeGroup parameters
from the configuration file. In addition, any cisco-avpair reply items
from the previous RADIUS Access-Accept are used as authorisation
attribute-value pairs. TACACS+ authorisation requests can optionally be
converted to RADIUS Access-Requests.RewriteUsername rules are applied. For
more information, see Section 3.7.29. RewriteUsername.
Client RewriteUsername can also be used. See below
for more information about how
<ServerTACASCSPLUS> uses Client clauses.%{Client:name} format and
Client-Identifier check item are made available.
The values are from a matching Client clause or ServerTACACSPLUS clause
when no Client clause matched.<Realm> or
<Handler> clause, using the same rules as
RADIUS requests.AllowAuthorizeOnly is enabled, Radiator requests
authorisation information even if the user has not previously
authenticated with this Radiator instance. For more information, see Section 3.120.13. AllowAuthorizeOnly.<ServerTACACSPLUS> is used
to authenticate administrator access to a Cisco device, you need to add
specific authorisation attributes to allow administrative access. For
example, to get administrative access to a Cisco Aironet wireless Access
Point requires that the authorisation include a TACACS+ attribute-value
pair like:
aironet:admin-capability=ident+admin
ciscouser User-Password=fred
cisco-avpair="aironet:admin-capability=ident+admin"
<ServerTACACSPLUS> clause:AuthorizationAdd aironet:admin-capability=ident+admin
<ServerTACACSPLUS> can be used with any
Radiator authentication method that understands plain text passwords, such
as FILE, SQL, LDAP2, DBFILE, and also with any method that challenge the
user for additional authentication data,such as DIGIPASS, ACE, OTP,
INTERNAL.goodies/tacacsplustest in your distribution to send
test TACACS+ requests.<Server
TACACSPLUS> looks for a Client clause that matches the
origin of the TACACS+ request, as described above. If found, a number of
parameters from the Client clause are used during processing:TACACSPLUSKeySecretRewriteUsernameStripFromRequestAddToRequestAddToRequestIfNotExistPreHandlerHookDefaultRealm (overrides
DefaultRealm in
<ServerTACACSPLUS>)<ServerTACACSPLUS> tries to find a
key to use for decrypting that connection. It first looks for a matching
Client and then for a key until it finds one that has been defined:EncryptedTACACSPLUSKey parameter is preferred
over TACACSPLUSKey parameterEncryptedKeyKey parameterEncryptedSecret parameter is preferred over
Secret parameterEncryptedTACACSPLUSKey and
EncryptedSecret are currently experimental and will
be documented later.Key parameter. If some or
all of your TACACS+ devices use different keys, define a Client and
TACACSPLUSKey for each differing one and set this
Key as the default for the rest. If some TACACS+
clients are also RADIUS clients, define a Client clause for each one,
specifying the RADIUS secret in Secret, and the
TACACS+ key in TACACSPLUSKey.Key mysecret
Port 1024
# Only listen on one IPv4 address and the IPv6 loopback BindAddress 203.63.154.1, ::1
AuthorizationReplace parameters as you wish, one for
each Tacacs+ authorisation attribute-value pair:AuthorizationReplace service=aironet AuthorizationReplace protocol=shell AuthorizationReplace aironet:admin-capability=ident+admin
AuthorizationAdd parameters as you wish, one for each
Tacacs+ authorisation attribute-value pair:AuthorizationAdd aironet:admin-capability=ident+admin
AddToRequest NAS-Identifier=TACACS
# Realmless logins to this NAS will be treated
# as if they are for realm open.com.au
<ServerTACACSPLUS>
Key ....
DefaultRealm open.com.au
</ServerTACACSPLUS>
<Realm open.com.au>
.....
</Realm>
# Name of the pseudo attribute containing the TACACS group name # in RADIUS Access-Accepts: GroupMemberAttr tacacsgroup
AuthorizeGroup parameters can be used to specify
privilege levels, permitted TACACS commands, and TACACS restrictions for
various TACACS+ privilege groups. If no
AuthorizeGroup parameters are specified in the
Radiator configuration file, all TACACS+ commands are authorised by
<Server TACSCPLUS>.AuthorizeGroup.
AuthorizeGroup parameter is this:# Note: Whitespace is not allowed after and before {}
AuthorizeGroup <groupname> <permit|permitreplace|deny> pattern1
pattern2 ... {attr1=val attr2=val ...} {extra_check1=val extra_check2="val 2" ...}
peeraddrAuthorizeGroup parameter specifies a
privilege rule for a TACACS+ privilege group. You can specify zero or more
AuthorizeGroup parameters for each privilege group
that is used in your organisation. The AuthorizeGroup
parameters are considered for a group in the order in which they are given
in the Radiator configuration file.AuthorizeGroup rules
is searched for rules matching the group name identified by the
GroupMemberAttr attribute. For more information, see
Section 3.120.10. GroupMemberAttr. Each
rule is examined in order until a matching rule is found. The patterns are
used to do the matching. Each pattern is a Perl Regular Expression
(regexp). Pattern1 is matched against the first TACACS+ request argument
(usually service=xyz), pattern2 is matched against
the second TACACS+ request argument and so on. If every pattern matches
its TACACS+ argument, then the rule matches.service=shell is a single request argument.
The pattern to match two values for service is
service=(shell|exec).
deny, the authorisation is denied.permit, the request is authorised,
and the list of reply attr=val entries are sent back
to the TACACS+ client to be added to the user's command
arguments.permitreplace, the request is authorised, and the
list of reply attr=val entries are sent back to the
TACACS+ client and are used to replace the user's requested command
arguments.shell:contextname in the authorisation request. Only
the set of roles corresponding to the requested
contextname is returned.
AuthorizeGroup group1 permit service=shell \
{shell:contextname1*"role1 role2 role3" \
shell:contextname2*role2}
AuthorizeGroup replaces the old
CommandAuth parameter. Support for
CommandAuth will be removed some time in the
future.GroupMemberAttr.AuthorizeGroup parameters
specifying the privileges for all of the possible group names from
step 1 above.AuthorizeGroup group1 permit service=shell cmd=show cmd-arg=.*
AuthorizeGroup group1 permit service=ppp protocol=ip {inacl=101 outacl=102}
AuthorizeGroup group1 deny .*
AuthorizeGroup group2 permit .*
show commands for group1. Users
coming from client that connects from 127.0.0.1 are explicitly permitted.
Users coming from client that has identifier
Some-TACACSPLUS-client are explicitly denied. The
rest of the users are permitted.AuthorizeGroup group1 permit service=shell cmd=show cmd-arg=.* {} \
{peeraddr=127.0.0.1}
AuthorizeGroup group1 deny service=shell cmd=show cmd-arg=.* {} \
{Client-Identifier="Some-TACACSPLUS-client"}
AuthorizeGroup group1 permit service=shell cmd=show cmd-arg=.*
AuthorizeGroup.AuthorizeGroup group3 permit service=shell cmd=logout \
cmd-arg=subscribers cmd-arg=username
AuthorizeGroup group3 permit service=shell cmd\* {priv-lvl=15}
goodies/tacacsplusserver.cfg.AuthorizeGroup parameter
above excluding the group name. These patterns are processed before any
configured-in AuthorizeGroup parameters.GroupMemberAttr OSC-Group-Identifier and
AuthorizeGroupAttr
OSC-Authorize-Group.mikem User-Password=fred
OSC-Group-Identifier = group1,
OSC-Authorize-Group = "permit service=shell cmd=ping"
AuthorizationTimeout has expired. This is disabled
by default.AllowAuthorizeOnly is enabled, an existing
authorisation context is not required.TacacsplusConnection
object$Radius::Tacacsplus::TAC_PLUS_- AUTHEN_*.$Radius::Tacacsplus::TAC_PLUS_- AUTHEN_TYPE_*.$Radius::Tacacsplus:: TAC_PLUS_PRIV_LVL_*.$Radius::Tacacsplus::TAC_PLUS_AUTHEN_SVC_*.TacacsplusConnection
objectcreate-cisco-cmd.pl and
createavpairs.pl for sample hooks.PreHandlerHook is called for
each request after per-Client user name rewriting and duplicate
rejection, and before the request is passed to a Realm or Handler
clause.PreHandlerHook
specifies a Perl hook to be called before the inner request is
re-dispatched to a matching Realm or Handler.EAP_LEAP_MSCHAP_Convert flag is
set, PreHandlerHook specifies a Perl hook to
be called before the converted request is re-dispatched to a
matching Realm or Handler.EAP_PEAP_MSCHAP_Convert
flag is set, PreHandlerHook specifies a Perl
hook to be called before the converted request is re-dispatched to
a matching Realm or Handler.EAP_GTC_PAP_Convert flag is
set, PreHandlerHook specifies a Perl hook to
be called before the converted request is re-dispatched to a
matching Realm or Handler.PreHandlerHook is
called for each request created by the clause before the request is
passed to a Realm or Handler clause.PreHandlerHook is
called for each request after global and per-ServerRADSEC user name
rewriting and before the request is passed to a Realm or Handler
clause.PreHandlerHook is
called for each request received by ServerDIAMETER before the request
is passed to a Realm or Handler clause.PreHandlerHook is
called for each request before it is passed to a Realm or Handler
clause. If a Client is found for the request, Client's
PrehandlerHook is run before ServerTACASPLUS's
PreHandlerHook. Global and per-Client user name
rewriting and other processing is done before the hooks are
run.PreHandlerHook
can be an arbitrarily complicated Perl function, that might run external
processes, consult databases, change the contents of the current request
or many other things. Here is an example of using
PreHandlerHook:# Fake a new attribute into the request
PreHandlerHook sub { ${$_[0]}->add_attr('test-attr', \
'test-value');}
PacketTrace set off or
0.PacketTrace is available
for the following clauses:ClientHandlerRealmAuthByServerDIAMETERServerRADSECServerTACACSPLUSPacketTrace:# Debug any packets that pass through here PacketTrace
0. When connections are known to be short-lived, a
non-default value may be useful. This parameter is available for all
Stream based modules, such as <ServerDIAMETER>
and <AuthBy RADSEC>.# Debug logging is enough for peer disconnects DisconnectTraceLevel 4
Radius::Stream derived type.
Examples of derived types are Radius::RadsecHost
and Radius::DiameterConnection.$Radius::Stream::STREAM_STATE::CONNECTED$Radius::Stream::STREAM_STATE::DISCONNECTEDStreamStateChangeHook can be an arbitrarily
complicated Perl function, that might run external processes, consult
databases, change the contents of the current request or many other
things. IP address and other specific information is not passed to the
hook. Their format and type depends on the derived type. For example, SCTP
streams may have multiple source and destination addresses. The following
example shows how to log information from the hook no matter what the type
of the stream object is.StreamStateChangeHook sub { \
my ($self, $new_state) = @_; \
my $state = ($new_state == $Radius::Stream::STREAM_STATE::CONNECTED) ? \
'connected' : 'disconnected'; \
main::log($main::LOG_INFO, "StreamStateChangeHook: State change to $state"); \
return; }
AuthBy returns IGNORE message
because of an authentication backend database failure,
DisconnectWhenIgnore flag parameter defines the
server behaviour. When this is set, the server disconnects the client
without returning TACACS+ error message before disconnecting. This may
cause the client to continue with local authentication after the
authentication backend failure.%2:%0.# Base context lookup only on username ContextId %2
# Only accept connections from some addresses Clients 127.0.0.1, 203.63.154.29 Clients 203.63.154.27