Cisco Tacacs+ Shell Command Authorization

具体怎么做shell command authorization不写了,遍地都是文档,记录一个经常被忽略的问题。

其实在cisco关于ACS的文档上写的很清楚,我们输入到设备上的命令并不一定是按照原样吐给ACS服务器去进行命令授权验证的。

Cisco文档中的例子,用户输入“interface FASTETHERNET 0/1”,吐给ACS服务器的命令和参数实际上是“interface FastEthernet 0 1”。实际上并不只是大小写变化和去掉"/"这么简单,如果打开"debug aaa authorization",我们可以看到设备吐出的实际命令。

几个有意思的实验:

1.执行copy startup flash:
输出入下:
时间: AAA: parse name=tty66 idb type=-1 tty=-1
时间: AAA: name=tty66 flags=0x11 type=5 shelf=0 slot=0 adapter=0 port=66 channel=0
时间: AAA/MEMORY: create_user (0x83CE97C0) user=’sec’ ruser=’Router’ ds0=0 port=’tty66′ rem_addr=’10.0.1.2′ authen_type=ASCII service=NONE priv=15 initial_task_id=’0′, vrf= (id=0)
时间: tty66 AAA/AUTHOR/CMD(712228085): Port=’tty66′ list=’acs’ service=CMD
时间: AAA/AUTHOR/CMD: tty66(712228085) user=’sec’
时间: tty66 AAA/AUTHOR/CMD(712228085): send AV service=shell
时间: tty66 AAA/AUTHOR/CMD(712228085): send AV cmd=copy
时间: tty66 AAA/AUTHOR/CMD(712228085): send AV cmd-arg=startup-config
时间: tty66 AAA/AUTHOR/CMD(712228085): send AV cmd-arg=flash:c2600-jk9o3s-mz.123-22.bin
时间: tty66 AAA/AUTHOR/CMD(712228085): send AV cmd-arg=flash:123
时间: tty66 AAA/AUTHOR/CMD(712228085): send AV cmd-arg=<cr>
时间: tty66 AAA/AUTHOR/CMD(712228085): found list "acs"
时间: tty66 AAA/AUTHOR/CMD(712228085): Method=tacacs+ (tacacs+)
时间: AAA/AUTHOR/TAC+: (712228085): user=sec
时间: AAA/AUTHOR/TAC+: (712228085): send AV service=shell
时间: AAA/AUTHOR/TAC+: (712228085): send AV cmd=copy
时间: AAA/AUTHOR/TAC+: (712228085): send AV cmd-arg=startup-config
时间: AAA/AUTHOR/TAC+: (712228085): send AV cmd-arg=flash:c2600-jk9o3s-mz.123-22.bin
时间: AAA/AUTHOR/TAC+: (712228085): send AV cmd-arg=flash:123
时间: AAA/AUTHOR/TAC+: (712228085): send AV cmd-arg=<cr>
可以注意要送到ACS上进行授权的命令是copy,命令参数有3个,分别是startup-config(自动补齐)、flash:(2个flash中已经有的文件自动列出都作为参数送出)、<cr>(换行)
如果用ACS授权允许,则可以将命令参数写为"permit ^startup-config flash:"

2.执行copy start tftp:
过程如下:
Router#copy startup-config tftp://1.1.1.1
时间: AAA: parse name=tty66 idb type=-1 tty=-1
时间: AAA: name=tty66 flags=0x11 type=5 shelf=0 slot=0 adapter=0 port=66 channel=0
时间: AAA/MEMORY: create_user (0x8392F428) user=’sec’ ruser=’Router’ ds0=0 port=’tty66′ rem_addr=’10.0.1.2′ authen_type=ASCII service=NONE priv=15 initial_task_id=’0′, vrf= (id=0)
时间: tty66 AAA/AUTHOR/CMD(3197202628): Port=’tty66′ list=’acs’ service=CMD
时间: AAA/AUTHOR/CMD: tty66(3197202628) user=’sec’
时间: tty66 AAA/AUTHOR/CMD(3197202628): send AV service=shell
时间: tty66 AAA/AUTHOR/CMD(3197202628): send AV cmd=copy
时间: tty66 AAA/AUTHOR/CMD(3197202628): send AV cmd-arg=startup-config
时间: tty66 AAA/AUTHOR/CMD(3197202628): send AV cmd-arg=<cr>
时间: tty66 AAA/AUTHOR/CMD(3197202628): found list "acs"
时间: tty66 AAA/AUTHOR/CMD(3197202628): Method=tacacs+ (tacacs+)
时间: AAA/AUTHOR/TAC+: (3197202628): user=sec
时间: AAA/AUTHOR/TAC+: (3197202628): send AV service=shell
时间: AAA/AUTHOR/TAC+: (3197202628): send AV cmd=copy
时间: AAA/AUTHOR/TAC+: (3197202628): send AV cmd-arg=startup-config
时间: AAA/AUTHOR/TAC+: (3197202628): send AV cmd-arg=<cr>
比较有意思的是tftp及后面url中所带的内容都没有被送到ACS上,而仅仅送了一个<cr>过去。我对此的理解是路由器无法事先登录到远端的服务器(tftp)上来列出更多的参数,因此直接送出<cr>替代。

3.执行copy tftp: null:
命令的含义是从tftp服务器上复制一个文件直接送到null文件系统(实际上是直接丢弃),可以用来测试tftp服务器是否能连接上。
过程如下:
Router#copy tftp: null:
时间: AAA: parse name=tty66 idb type=-1 tty=-1
时间: AAA: name=tty66 flags=0x11 type=5 shelf=0 slot=0 adapter=0 port=66 channel=0
时间: AAA/MEMORY: create_user (0x83973290) user=’sec’ ruser=’Router’ ds0=0 port=’tty66′ rem_addr=’10.0.1.2′ authen_type=ASCII service=NONE priv=15 initial_task_id=’0′, vrf= (id=0)
时间: tty66 AAA/AUTHOR/CMD(674610135): Port=’tty66′ list=’acs’ service=CMD
时间: AAA/AUTHOR/CMD: tty66(674610135) user=’sec’
时间: tty66 AAA/AUTHOR/CMD(674610135): send AV service=shell
时间: tty66 AAA/AUTHOR/CMD(674610135): send AV cmd=copy
时间: tty66 AAA/AUTHOR/CMD(674610135): send AV cmd-arg=<cr>
时间: tty66 AAA/AUTHOR/CMD(674610135): found list "acs"
时间: tty66 AAA/AUTHOR/CMD(674610135): Method=tacacs+ (tacacs+)
时间: AAA/AUTHOR/TAC+: (674610135): user=sec
时间: AAA/AUTHOR/TAC+: (674610135): send AV service=shell
时间: AAA/AUTHOR/TAC+: (674610135): send AV cmd=copy
时间: AAA/AUTHOR/TAC+: (674610135): send AV cmd-arg=<cr>
可以看到由于tftp和null都没有办法直接通过设备访问到,没法列出更具体的参数,即无法补齐,因此送到ACS的命令仅仅是命令copy和参数<cr>。

4.是否所有的带有":"的都会被当作<cr>直接送给ACS呢?在2600系列路由器上测试之后的结论是nvram: system: flash: 会将所有的文件作为参数的一部分自动补齐送给ACS作授权。我推测在其他的设备上类似的disk0: disk1:之类实际上可以被直接访问到的存储设备也都会将设备内的文件作为参数补齐自动送到ACS上参数授权过程。

《Cisco Tacacs+ Shell Command Authorization》上的4个想法

  1. 谢谢,你的回答。这是表示^ $之间的字符完全匹配,呵呵,这好像是编程的东西,其实我也不太明白,我想问一下如果要授权“copy running-config startup-config” 和“copy scp:xxx” 这2条命令 ACS该如何写?且这条命令可以使用TAB键补齐。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据