<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>TACACS+ stuff</title>
	<atom:link href="http://tacacs.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://tacacs.org</link>
	<description>Casting Light on the Dark Art of TACACS+</description>
	<lastBuildDate>Fri, 26 Feb 2010 22:14:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>do_auth &amp; IOS-XR</title>
		<link>http://tacacs.org/2009/11/09/do_auth-ios-xr/</link>
		<comments>http://tacacs.org/2009/11/09/do_auth-ios-xr/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 19:56:27 +0000</pubDate>
		<dc:creator>helpdeskdan</dc:creator>
				<category><![CDATA[Cisco]]></category>

		<guid isPermaLink="false">http://blogs.sackheads.org/tacacsplus/2009/11/09/do_auth-ios-xr/</guid>
		<description><![CDATA[ios-xr bug: sends blank ip in conf t.  tac_plus really should send an &#8220;unknown&#8221; for this.  I&#8217;d submit a patch, but I&#8217;m no good at C.  job == networker, job != programmer.  Heasley strongly disagrees with me on this though.  Even though I&#8217;m obviously right, I suppose someday I&#8217;ll have [...]]]></description>
			<content:encoded><![CDATA[<p>ios-xr bug: sends blank ip in conf t.  tac_plus really should send an &#8220;unknown&#8221; for this.  I&#8217;d submit a patch, but I&#8217;m no good at C.  job == networker, job != programmer.  Heasley strongly disagrees with me on this though.  Even though I&#8217;m obviously right, I suppose someday I&#8217;ll have fix the parsing to ignore any options not sent.  <img src='http://tacacs.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />   Till then:</p>
<p>v1.4:<br />
<a href="http://www.pastie.org/685729">http://www.pastie.org/685729</a></p>
<p>Simple workaround: <strong>-i $address -fix_crs_bug</strong>.  I advise you use it even if you don&#8217;t use ios-xr.</p>
]]></content:encoded>
			<wfw:commentRss>http://tacacs.org/2009/11/09/do_auth-ios-xr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Easier Tacacs Configurations with do_auth</title>
		<link>http://tacacs.org/2009/09/26/easy-tacacs-control-with-do_auth/</link>
		<comments>http://tacacs.org/2009/09/26/easy-tacacs-control-with-do_auth/#comments</comments>
		<pubDate>Sat, 26 Sep 2009 23:05:52 +0000</pubDate>
		<dc:creator>helpdeskdan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.sackheads.org/tacacsplus/?p=60</guid>
		<description><![CDATA[We&#8217;ve gone over how you can make your tacacs configuration really secure but complicated.  Let&#8217;s show how do_auth can actually make configuration easier.  It&#8217;s much easier to edit the do_auth.ini file than the tac_plus.conf file.  In fact, we can make adding a default user as easy as typing &#8220;adduser&#8221;.  
First, the [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve gone over how you can make your tacacs configuration really secure but complicated.  Let&#8217;s show how do_auth can actually make configuration easier.  It&#8217;s much easier to edit the do_auth.ini file than the tac_plus.conf file.  In fact, we can make adding a default user as easy as typing &#8220;adduser&#8221;.  </p>
<p>First, the code has been updated:</p>
<p><a href="http://www.pastie.org/631935">http://www.pastie.org/631935</a></p>
<p>I would post the compiled code, but it&#8217;s too difficult to get a hold of John these days.  (Something about a baby, I dunno)  It&#8217;s trivial to compile:<br />
<code>dan@dan-desktop:~$ python<br />
Python 2.5.2 (r252:60911, Jul 22 2009, 15:35:03)<br />
[GCC 4.2.4 (Ubuntu 4.2.4-1ubuntu3)] on linux2<br />
Type "help", "copyright", "credits" or "license" for more information.<br />
&gt;&gt;&gt; import py_compile<br />
&gt;&gt;&gt; py_compile.compile("do_auth.py")<br />
&gt;&gt;&gt; quit()</code><br />
First, a starting tac_plus.conf file.  Which, we&#8217;ll never have to edit again:</p>
<p><code># My simple tac_plus config that never needs to change<br />
key = my_key<br />
accounting file = /var/log/tac_plus.acct<br />
default authentication = file /etc/passwd<br />
user = DEFAULT {<br />
member = do_auth_access<br />
}<br />
group = do_auth_access {<br />
default service = permit<br />
service = exec { priv-lvl = 15<br />
		idletime = 10 }<br />
enable = file /etc/passwd<br />
after authorization "/usr/bin/python /root/do_auth.pyc -i $address -u $user -d $name -l /root/log.txt -f /root/do_auth.ini"<br />
}</code></p>
<p>Hum&#8230; some extra returns &amp; tabs in there would make it more readable, but it doesn&#8217;t look right when I post it. Also, most important &#8211; after authorizaion line is <strong>one line, not two.</strong></p>
<p>Now, we add homer and give him access to some show commands.  Fist, we do a adduser homer on linux to add the user.  This way, when the user wants to change is password, he can any time he wants to with passwd.   Next, we edit the do_auth.ini file</p>
<p><code>[users]<br />
homer =<br />
few_commands<br />
[few_commands]<br />
host_allow =<br />
	.*<br />
device_permit =<br />
	.*<br />
command_permit =<br />
	show users<br />
	show int.*<br />
	show ip int.*<br />
	show controllers.*</code></p>
<p>And, you&#8217;re done.  Well, I&#8217;d add some tabs to each command that got stripped above(blogs/wiki&#8217;s can be annoying), but that&#8217;s about it. </p>
<p>Let&#8217;s compare that to the tac_plus.conf config:</p>
<p><code>user = homer {<br />
member = limited_access<br />
}<br />
group = limited_access {<br />
default service = deny<br />
acl = limited_acl<br />
service = exec {<br />
priv-lvl = 15<br />
idletime = 10<br />
}<br />
cmd = show {<br />
permit "running-config.*"<br />
permit "ip int*"<br />
permit "inter.*"<br />
permit "controllers.*"<br />
}</code></p>
<p>In my small do_auth python program, we have no permits, no “”, and no {}.  Much easier and the no need to restart the daemon.  To add an admin user is even easier.  Adduser admin in linux, then add:</p>
<p><code>admin =<br />
	admin_user<br />
[admin_user]<br />
host_allow =<br />
	.*<br />
device_permit =<br />
	.*<br />
command_permit =<br />
	.*</code></p>
<p>So, our final config is very easy:</p>
<p><code>[users]<br />
homer =<br />
	few_commands<br />
admin =<br />
	admin_user<br />
[few_commands]<br />
host_allow =<br />
	.*<br />
device_permit =<br />
	.*<br />
command_permit =<br />
	show users<br />
	show int.*<br />
	show ip int.*<br />
	show controllers.*<br />
[admin_user]<br />
host_allow =<br />
	.*<br />
device_permit =<br />
	.*<br />
command_permit =<br />
	.*</code></p>
<p>As if this weren&#8217;t easy enough, let&#8217;s say 99% of your users are these limited access users.  Wouldn&#8217;t it be nice to just do an adduser and be done without any config modification?  All we need is a default user.  In our example above we would change to this:</p>
<p><code>[users]<br />
default =<br />
few_commands<br />
[few_commands]<br />
host_allow =<br />
	.*<br />
device_permit =<br />
	.*<br />
command_permit =<br />
	show users<br />
	show int.*<br />
	show ip int.*<br />
	show controllers.*</code></p>
<p>Now, whenever we do an adduser, it automatically gets this level of access. </p>
<p>From here, we can make it as simple or as complicated as we want.  Restrict them to certain device, make them connect from connect from certain IP&#8217;s, ect.  We can maybe even begin to work on a web front end.  (Maybe someday when I get time&#8230;..)</p>
<p>-Dan Schmidt</p>
]]></content:encoded>
			<wfw:commentRss>http://tacacs.org/2009/09/26/easy-tacacs-control-with-do_auth/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Granular Tacacs Control</title>
		<link>http://tacacs.org/2009/05/08/granular-tacacs-control/</link>
		<comments>http://tacacs.org/2009/05/08/granular-tacacs-control/#comments</comments>
		<pubDate>Fri, 08 May 2009 23:17:45 +0000</pubDate>
		<dc:creator>helpdeskdan</dc:creator>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.sackheads.org/tacacsplus/?p=34</guid>
		<description><![CDATA[By using an authorization script, we can make tac_plus to do very granular authentication, having different permissions granted to different switches defined by user, source IP and device IP.  However, writing/editing a script to change access can be difficult.  Hard coded authorization scripts are not very flexible, hence, I decided to implement a python program [...]]]></description>
			<content:encoded><![CDATA[<p>By using an authorization script, we can make tac_plus to do very granular authentication, having different permissions granted to different switches defined by user, source IP and device IP.  However, writing/editing a script to change access can be difficult.  Hard coded authorization scripts are not very flexible, hence, I decided to implement a python program to facilitate flexibility.  I believe it may be included in the next tac_plus.</p>
<p>Configuration is fairly simple; as an example, let&#8217;s say I wanted to have user Homer have full access to 192.168.1.1 and 10.1.1.0/24, but only do show commands for everything else in 10.0.0.0/8.  For the heck of it, let&#8217;s say we only want Homer to connect from 192.168.1.0/24, but never 192.168.1.4, which host can only do the show commands.   The config file would simply be as follows:</p>
<p>[users]<br />
homer =<br />
simpson_group<br />
television_group<br />
[simpson_group]<br />
host_deny =<br />
192.168.1.4<br />
host_allow =<br />
192.168.1.*<br />
device_permit =<br />
192.168.1.1<br />
10.1.1.*<br />
command_permit =<br />
.*<br />
[television_group]<br />
host_allow =<br />
192.168.1.*<br />
device_permit =<br />
10.*<br />
command_permit =<br />
show.*</p>
<p>Example line to put in tac_plus user or group:<br />
after authorization &#8220;/usr/bin/python /root/do_auth.pyc -i $address -u $user -d $name -l /root/log.txt -f /root/do_auth.ini&#8221;<br />
(that&#8217;s all ONE line)</p>
<p>On my server, I set homer&#8217;s password file to /etc/passwd and enable cracklib.  Homer can change his password any time he wants just by logging to Linux and typing passwd – he does not need root access.  Homer is also forced to pick a secure password, and has different access based on different devices.  Given these abilities, combined with the quick administration, tac_plus makes purchasing Cisco&#8217;s tacacs server seem like a waste of money.</p>
<p>In the future, I may alter the program to have the ability to send back additional av-pairs, and/or completely new av-pairs.   However, currently I simply don&#8217;t need this feature as I pass these pairs back to tac_plus.  The source code is very simple and is GPL&#8217;ed for all to see at: <a href="http://pastie.org/506002">http://pastie.org/506002</a> and is available in compiled/ready to use form <a href="http://tacacs.org/files/2009/05/do_auth.pyc">here</a>.   For more instructions, you can download this compiled pyc and type “python do_auth.pyc” If I ever get time, I may consider a gui or web interface.</p>
<p>Update: New version 1.2<br />
Fixed pix.  Also, apparently there is a bug in the pix that makes it necessary to add a 0.0.0.0 to your allowed hosts.</p>
<p>-Dan Schmidt<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://tacacs.org/2009/05/08/granular-tacacs-control/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aruba Airwave Management Platform</title>
		<link>http://tacacs.org/2008/11/05/aruba-airwave-management-platform/</link>
		<comments>http://tacacs.org/2008/11/05/aruba-airwave-management-platform/#comments</comments>
		<pubDate>Wed, 05 Nov 2008 12:51:53 +0000</pubDate>
		<dc:creator>jpayne</dc:creator>
				<category><![CDATA[AMP]]></category>
		<category><![CDATA[Airwave]]></category>
		<category><![CDATA[Aruba]]></category>
		<category><![CDATA[Airwave Management Platform]]></category>

		<guid isPermaLink="false">http://blogs.sackheads.org/tacacsplus/?p=30</guid>
		<description><![CDATA[Yet another new service definition (in a group or user stanza).  role should be set to the role definition name you created on the AMP.
service = AMP {
role = "AMP Administration"
}

]]></description>
			<content:encoded><![CDATA[<p>Yet another new service definition (in a group or user stanza).  role should be set to the role definition name you created on the AMP.</p>
<pre>service = AMP {
role = "AMP Administration"
}</pre>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://tacacs.org/2008/11/05/aruba-airwave-management-platform/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cisco Wireless Control System</title>
		<link>http://tacacs.org/2008/11/04/cisco-wireless-control-system/</link>
		<comments>http://tacacs.org/2008/11/04/cisco-wireless-control-system/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 18:55:27 +0000</pubDate>
		<dc:creator>jpayne</dc:creator>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[WCS]]></category>
		<category><![CDATA[Cisco WCS WLC Wireless Control System]]></category>

		<guid isPermaLink="false">http://blogs.sackheads.org/tacacsplus/?p=23</guid>
		<description><![CDATA[Guy Morrell at the University of Oxford provides this snippet for Cisco WCS
 

service = ciscowlc {
role1 = ALL
}


]]></description>
			<content:encoded><![CDATA[<p>Guy Morrell at the University of Oxford provides this snippet for Cisco WCS</p>
<p> </p>
<pre>
service = ciscowlc {
role1 = ALL
}
</pre>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://tacacs.org/2008/11/04/cisco-wireless-control-system/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Managing Cisco ACE (Application Control Engine) modules with TACACS+</title>
		<link>http://tacacs.org/2008/10/16/managing-cisco-ace-application-control-engine-modules-with-tacacs/</link>
		<comments>http://tacacs.org/2008/10/16/managing-cisco-ace-application-control-engine-modules-with-tacacs/#comments</comments>
		<pubDate>Thu, 16 Oct 2008 16:07:05 +0000</pubDate>
		<dc:creator>jpayne</dc:creator>
				<category><![CDATA[ACE]]></category>
		<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Application Control Engine]]></category>

		<guid isPermaLink="false">http://blogs.sackheads.org/jpayne/?p=33</guid>
		<description><![CDATA[This snippet is tested against &#8220;recent&#8221; Shrubbery tac_plus daemons as of the date of the post.
Searching for ACE and TACACS or similar gets confusing because of the RSA ACE server.  Good job Cisco  
Cisco Application Control Engine modules are really separate devices from the &#8220;mother&#8221; switch, only suckling power and connectivity.  These devices need [...]]]></description>
			<content:encoded><![CDATA[<div>

This snippet is tested against “recent” Shrubbery tac_plus daemons as of the date of the post.

Searching for ACE and TACACS or similar gets confusing because of the RSA ACE server.  Good job Cisco <img class="wp-smiley" src="http://blogs.sackheads.org/jpayne/wp-includes/images/smilies/icon_smile.gif" alt=")" />

Cisco Application Control Engine modules are really separate devices from the “mother” switch, only suckling power and connectivity.  These devices need their own authentication schemes.  It’s pretty easy to turn on TACACS+ authentication and accounting (no authorization again.  Why do vendors insist on only doing 1 or 2 As and not 3?).

ACE modules needs a specific <strong>optional </strong>av-pair in the “exec” service in TACACS+ to authenticate. You can put this in a group or user stanza:
<pre>service = exec {
optional shell:Admin = "Admin default-domain"
}</pre>
The format is: shell:&lt;Context&gt; = “&lt;Role&gt; &lt;domain&gt;”

I’m not all that into ACE modules yet, so I’ll assume that the reader knows what each of those should be set to in their environment.  For us, we simply want the equivalent of priv-lvl = 15, and that’s what we get above.

Note that without that av-pair, the defaults come through as Admin context, default-domain and “Network-Monitoring” role.

Also note that excluding the “optional” keyword will render you unable to log in to any IOS devices that use your TACACS+ server for authorization.

[ad#footer]</div>]]></content:encoded>
			<wfw:commentRss>http://tacacs.org/2008/10/16/managing-cisco-ace-application-control-engine-modules-with-tacacs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Managing ScreenOS firewalls with TACACS+</title>
		<link>http://tacacs.org/2008/10/16/managing-screenos-firewalls-with-tacacs/</link>
		<comments>http://tacacs.org/2008/10/16/managing-screenos-firewalls-with-tacacs/#comments</comments>
		<pubDate>Thu, 16 Oct 2008 15:25:44 +0000</pubDate>
		<dc:creator>jpayne</dc:creator>
				<category><![CDATA[Juniper]]></category>
		<category><![CDATA[ScreenOS]]></category>
		<category><![CDATA[ISG]]></category>
		<category><![CDATA[NetScreen]]></category>
		<category><![CDATA[SSG]]></category>

		<guid isPermaLink="false">http://blogs.sackheads.org/jpayne/?p=31</guid>
		<description><![CDATA[This snippet is tested against &#8220;recent&#8221; Shrubbery tac_plus daemons as of the date of the post.
 
ScreenOS 6.0+ users may have noticed that you can now configure TACACS+ servers to authenticate admin users.  I&#8217;ll skip over the details, except to say that as of 6.1.0r3, failover isn&#8217;t working to either of the backup servers that [...]]]></description>
			<content:encoded><![CDATA[<p>This snippet is tested against &#8220;recent&#8221; Shrubbery tac_plus daemons as of the date of the post.</p>
<p> </p>
<p>ScreenOS 6.0+ users may have noticed that you can now configure TACACS+ servers to authenticate admin users.  I&#8217;ll skip over the details, except to say that as of 6.1.0r3, failover isn&#8217;t working to either of the backup servers that you can configure, so use with care.<br />
Also note that this is authentication only, no accounting or authorization (except for privilege levels).</p>
<p>ScreenOS needs a specific service in TACACS+ to authenticate.  You can put this in a group or user stanza:</p>
<pre>service = netscreen {
vsys = root
privilege = read-write
}</pre>
<p>The vsys specifies which vsys that user is allowed to.  If you only have one, it&#8217;s &#8220;root&#8221;.<br />
privilege can be read-write, read-only or root.   As far as I can tell, root allows you to manage local users and mess with nsrp.  Otherwise read-write gets most things done.  If you&#8217;re specifying a non-root vsys, you can also assign vsys-read-write or vsys-read-only as privileges.</p>

[ad#footer]
]]></content:encoded>
			<wfw:commentRss>http://tacacs.org/2008/10/16/managing-screenos-firewalls-with-tacacs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
