mirror of
				https://github.com/CiscoDevNet/cml-community.git
				synced 2025-11-04 14:03:23 +00:00 
			
		
		
		
	Add new AAA - TACACS Lab topology (#48)
* Add new AAA - TACACS Lab topology This is a sample topology for exploring AAA TACACS.
This commit is contained in:
		
							
								
								
									
										183
									
								
								lab-topologies/aaa-tacacs-exploration/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										183
									
								
								lab-topologies/aaa-tacacs-exploration/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,183 @@
 | 
				
			|||||||
 | 
					# Exploring AAA / TACACS Configuration for IOS 
 | 
				
			||||||
 | 
					Simple topology for practicing AAA TACACS configuration in IOS.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Starting Configuration 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					`rtr1` has the following configuration applied as startup configuration to enable inbound SSH from `desktop` that is locally authenticated. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					ip domain name lab.intra 
 | 
				
			||||||
 | 
					crypto key generate rsa general-keys modulus 2048
 | 
				
			||||||
 | 
					! 
 | 
				
			||||||
 | 
					aaa new-model
 | 
				
			||||||
 | 
					! 
 | 
				
			||||||
 | 
					username cisco priv 15 secret cisco
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Ensuring the serial / console leverages local authentication 
 | 
				
			||||||
 | 
					To provide safety and fallback access to devices, we will force the console line to only use local admin accounts. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					aaa authentication login CONSOLE local
 | 
				
			||||||
 | 
					aaa authorization console
 | 
				
			||||||
 | 
					aaa authorization exec CONSOLE local 
 | 
				
			||||||
 | 
					!
 | 
				
			||||||
 | 
					line con 0
 | 
				
			||||||
 | 
					 login authentication CONSOLE
 | 
				
			||||||
 | 
					 authorization exec CONSOLE
 | 
				
			||||||
 | 
					!
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Configuring TACACS server as default AAA 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Start by identitying the interface that TACACS packets should be sourced from. This is often important because TACACS servers typically only respond to known hosts/addresses. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					ip tacacs source-interface Ethernet0/0 
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Now create the TACACS server entry for the server. Be sure to double check the "key" (secret) used for communications. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					> Note: Be careful to NOT add an extra "space" after the key. This can cause problems on some platforms. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					tacacs server aaa-server
 | 
				
			||||||
 | 
					 address ipv4 192.168.0.10
 | 
				
			||||||
 | 
					 key tacacs123
 | 
				
			||||||
 | 
					!
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Create a `aaa group` that includes the TACACS server. In a production environment, you would typically have at least 2 TACASC servers configured for fallback.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					aaa group server tacacs+ AAA-TACACS
 | 
				
			||||||
 | 
					 server name aaa-server
 | 
				
			||||||
 | 
					!
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Test that the TACACS server is responding successfully. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					test aaa group tacacs+ tacadmin admin123 legacy
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Configure the authentication, authorization, and accounting policies.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					aaa authentication login default group AAA-TACACS local
 | 
				
			||||||
 | 
					aaa authorization exec default group AAA-TACACS local 
 | 
				
			||||||
 | 
					!
 | 
				
			||||||
 | 
					aaa accounting exec default start-stop group ISE-TACACS
 | 
				
			||||||
 | 
					aaa accounting commands 1 default start-stop group AAA-TACACS
 | 
				
			||||||
 | 
					aaa accounting commands 15 default start-stop group AAA-TACACS
 | 
				
			||||||
 | 
					!
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Testing the configuration 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Open the console for the `tacacs-server` and monitor the service "journal"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					journalctl -fu tac_plus
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Open the console for the `desktop` and attempt to connect to `rtr1` with SSH as the `tacadmin` user. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					ssh tacadmin@192.168.0.1
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					After you log in, run a command to verify access. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					show ip interface brief 
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Check the output on the `tacacs-server`. You should see messages for both the `authentication` and `authorization`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					# Examples
 | 
				
			||||||
 | 
					Oct 07 21:30:36 tacacs-server tac_plus[5704]: login query for 'tacadmin' port tty2 from 192.168.0.1 accepted
 | 
				
			||||||
 | 
					Oct 07 21:30:36 tacacs-server tac_plus[5705]: connect from 192.168.0.1 [192.168.0.1]
 | 
				
			||||||
 | 
					Oct 07 21:30:36 tacacs-server tac_plus[5705]: Start authorization request
 | 
				
			||||||
 | 
					Oct 07 21:30:36 tacacs-server tac_plus[5705]: do_author: user='tacadmin'
 | 
				
			||||||
 | 
					Oct 07 21:30:36 tacacs-server tac_plus[5705]: user 'tacadmin' found
 | 
				
			||||||
 | 
					Oct 07 21:30:36 tacacs-server tac_plus[5705]: exec authorization request for tacadmin
 | 
				
			||||||
 | 
					Oct 07 21:30:36 tacacs-server tac_plus[5705]: exec is explicitly permitted by line 4
 | 
				
			||||||
 | 
					Oct 07 21:30:36 tacacs-server tac_plus[5705]: nas:service=shell (passed thru)
 | 
				
			||||||
 | 
					Oct 07 21:30:36 tacacs-server tac_plus[5705]: nas:cmd* (passed thru)
 | 
				
			||||||
 | 
					Oct 07 21:30:36 tacacs-server tac_plus[5705]: nas:absent, server:priv-lvl=15 -> add priv-lvl=15 (k)
 | 
				
			||||||
 | 
					Oct 07 21:30:36 tacacs-server tac_plus[5705]: added 1 args
 | 
				
			||||||
 | 
					Oct 07 21:30:36 tacacs-server tac_plus[5705]: out_args[0] = service=shell input copy discarded
 | 
				
			||||||
 | 
					Oct 07 21:30:36 tacacs-server tac_plus[5705]: out_args[1] = cmd* input copy discarded
 | 
				
			||||||
 | 
					Oct 07 21:30:36 tacacs-server tac_plus[5705]: out_args[2] = priv-lvl=15 compacted to out_args[0]
 | 
				
			||||||
 | 
					Oct 07 21:30:36 tacacs-server tac_plus[5705]: 1 output args
 | 
				
			||||||
 | 
					Oct 07 21:30:36 tacacs-server tac_plus[5705]: authorization query for 'tacadmin' tty2 from 192.168.0.1 accepted
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Stop the journalctl monitor (`Cntrl-c`), and open the accounting log. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					tail -f /var/log/tac_plus.acct
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					> Note: If the command fails and the file isn't found, return to the SSH session to the router and run a couple commands.  The file isn't created until an accounting message is sent to the server. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Run some more commands on `rtr1`. Try some that are `priv 15` as well as `priv 1` 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					! Priv 1
 | 
				
			||||||
 | 
					show ip route 
 | 
				
			||||||
 | 
					! Priv 15 
 | 
				
			||||||
 | 
					write mem
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Verify the accounting logs were received. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Logout from the router, and log in as `tacoper`. Verify through the same logs that the user is given the correct access.  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Other useful commands
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Debugs on the router 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					debug aaa authentication
 | 
				
			||||||
 | 
					debug aaa authorization 
 | 
				
			||||||
 | 
					debug aaa accounting 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					debug tacacs authentication
 | 
				
			||||||
 | 
					debug tacacs authorization
 | 
				
			||||||
 | 
					debug tacacs accounting 
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Show commands on router 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					show tacacs
 | 
				
			||||||
 | 
					show aaa sessions 
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Test AAA 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					test aaa group tacacs+ tacadmin admin123 legacy
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### tacacs-server logs 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					journalctl -fu tac_plus 
 | 
				
			||||||
 | 
					tail -f /var/log/tac_plus.acct 
 | 
				
			||||||
 | 
					tail -f /var/log/tac_plus.log
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### tac_plus server maintenance 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					systemctl status tac_plus 
 | 
				
			||||||
 | 
					sudo systemctl stop tac_plus 
 | 
				
			||||||
 | 
					sudo systemctl start tac_plus 
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
@@ -0,0 +1,663 @@
 | 
				
			|||||||
 | 
					annotations:
 | 
				
			||||||
 | 
					  - border_color: '#00000000'
 | 
				
			||||||
 | 
					    border_style: ''
 | 
				
			||||||
 | 
					    color: '#808080FF'
 | 
				
			||||||
 | 
					    rotation: 0
 | 
				
			||||||
 | 
					    text_bold: false
 | 
				
			||||||
 | 
					    text_content: 192.168.0.10
 | 
				
			||||||
 | 
					    text_font: monospace
 | 
				
			||||||
 | 
					    text_italic: false
 | 
				
			||||||
 | 
					    text_size: 10
 | 
				
			||||||
 | 
					    text_unit: pt
 | 
				
			||||||
 | 
					    thickness: 1
 | 
				
			||||||
 | 
					    type: text
 | 
				
			||||||
 | 
					    x1: -565.0
 | 
				
			||||||
 | 
					    y1: -74.0
 | 
				
			||||||
 | 
					    z_index: 0
 | 
				
			||||||
 | 
					  - border_color: '#00000000'
 | 
				
			||||||
 | 
					    border_style: ''
 | 
				
			||||||
 | 
					    color: '#808080FF'
 | 
				
			||||||
 | 
					    rotation: 0
 | 
				
			||||||
 | 
					    text_bold: false
 | 
				
			||||||
 | 
					    text_content: 192.168.0.11
 | 
				
			||||||
 | 
					    text_font: monospace
 | 
				
			||||||
 | 
					    text_italic: false
 | 
				
			||||||
 | 
					    text_size: 10
 | 
				
			||||||
 | 
					    text_unit: pt
 | 
				
			||||||
 | 
					    thickness: 1
 | 
				
			||||||
 | 
					    type: text
 | 
				
			||||||
 | 
					    x1: -325.0
 | 
				
			||||||
 | 
					    y1: -73.0
 | 
				
			||||||
 | 
					    z_index: 0
 | 
				
			||||||
 | 
					  - border_color: '#00000000'
 | 
				
			||||||
 | 
					    border_style: ''
 | 
				
			||||||
 | 
					    color: '#808080FF'
 | 
				
			||||||
 | 
					    rotation: 0
 | 
				
			||||||
 | 
					    text_bold: false
 | 
				
			||||||
 | 
					    text_content: 192.168.0.1
 | 
				
			||||||
 | 
					    text_font: monospace
 | 
				
			||||||
 | 
					    text_italic: false
 | 
				
			||||||
 | 
					    text_size: 10
 | 
				
			||||||
 | 
					    text_unit: pt
 | 
				
			||||||
 | 
					    thickness: 1
 | 
				
			||||||
 | 
					    type: text
 | 
				
			||||||
 | 
					    x1: -446.3066108896985
 | 
				
			||||||
 | 
					    y1: 47.653305444849266
 | 
				
			||||||
 | 
					    z_index: 0
 | 
				
			||||||
 | 
					  - border_color: '#00000000'
 | 
				
			||||||
 | 
					    border_style: ''
 | 
				
			||||||
 | 
					    color: '#808080FF'
 | 
				
			||||||
 | 
					    rotation: 0
 | 
				
			||||||
 | 
					    text_bold: false
 | 
				
			||||||
 | 
					    text_content: cisco / cisco
 | 
				
			||||||
 | 
					    text_font: monospace
 | 
				
			||||||
 | 
					    text_italic: false
 | 
				
			||||||
 | 
					    text_size: 8
 | 
				
			||||||
 | 
					    text_unit: pt
 | 
				
			||||||
 | 
					    thickness: 1
 | 
				
			||||||
 | 
					    type: text
 | 
				
			||||||
 | 
					    x1: -559.75
 | 
				
			||||||
 | 
					    y1: -55.5
 | 
				
			||||||
 | 
					    z_index: 1
 | 
				
			||||||
 | 
					  - border_color: '#00000000'
 | 
				
			||||||
 | 
					    border_style: ''
 | 
				
			||||||
 | 
					    color: '#808080FF'
 | 
				
			||||||
 | 
					    rotation: 0
 | 
				
			||||||
 | 
					    text_bold: false
 | 
				
			||||||
 | 
					    text_content: cisco / cisco
 | 
				
			||||||
 | 
					    text_font: monospace
 | 
				
			||||||
 | 
					    text_italic: false
 | 
				
			||||||
 | 
					    text_size: 8
 | 
				
			||||||
 | 
					    text_unit: pt
 | 
				
			||||||
 | 
					    thickness: 1
 | 
				
			||||||
 | 
					    type: text
 | 
				
			||||||
 | 
					    x1: -318.75
 | 
				
			||||||
 | 
					    y1: -53.5
 | 
				
			||||||
 | 
					    z_index: 1
 | 
				
			||||||
 | 
					  - border_color: '#00000000'
 | 
				
			||||||
 | 
					    border_style: ''
 | 
				
			||||||
 | 
					    color: '#808080FF'
 | 
				
			||||||
 | 
					    rotation: 0
 | 
				
			||||||
 | 
					    text_bold: false
 | 
				
			||||||
 | 
					    text_content: |-
 | 
				
			||||||
 | 
					      TACACS Accounts
 | 
				
			||||||
 | 
					      tacadmin / admin123 (priv 15)
 | 
				
			||||||
 | 
					      tacoper  / oper123  (priv 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      TACACS Secret
 | 
				
			||||||
 | 
					      tacacs123
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      TACACS Log Files
 | 
				
			||||||
 | 
					      journalctl -fu tac_plus
 | 
				
			||||||
 | 
					      tail -f /var/log/tac_plus.acct
 | 
				
			||||||
 | 
					    text_font: monospace
 | 
				
			||||||
 | 
					    text_italic: false
 | 
				
			||||||
 | 
					    text_size: 10
 | 
				
			||||||
 | 
					    text_unit: pt
 | 
				
			||||||
 | 
					    thickness: 1
 | 
				
			||||||
 | 
					    type: text
 | 
				
			||||||
 | 
					    x1: -960.4378534132434
 | 
				
			||||||
 | 
					    y1: -244.7193548844158
 | 
				
			||||||
 | 
					    z_index: 2
 | 
				
			||||||
 | 
					  - border_color: '#00000000'
 | 
				
			||||||
 | 
					    border_style: ''
 | 
				
			||||||
 | 
					    color: '#808080FF'
 | 
				
			||||||
 | 
					    rotation: 0
 | 
				
			||||||
 | 
					    text_bold: false
 | 
				
			||||||
 | 
					    text_content: cisco / cisco
 | 
				
			||||||
 | 
					    text_font: monospace
 | 
				
			||||||
 | 
					    text_italic: false
 | 
				
			||||||
 | 
					    text_size: 8
 | 
				
			||||||
 | 
					    text_unit: pt
 | 
				
			||||||
 | 
					    thickness: 1
 | 
				
			||||||
 | 
					    type: text
 | 
				
			||||||
 | 
					    x1: -443.7290720829766
 | 
				
			||||||
 | 
					    y1: 67.39536041488296
 | 
				
			||||||
 | 
					    z_index: 1
 | 
				
			||||||
 | 
					  - border_color: '#00000000'
 | 
				
			||||||
 | 
					    border_style: ''
 | 
				
			||||||
 | 
					    color: '#0C0C0C'
 | 
				
			||||||
 | 
					    rotation: 0
 | 
				
			||||||
 | 
					    text_bold: true
 | 
				
			||||||
 | 
					    text_content: Exploring AAA / TACACS Configuration for IOS
 | 
				
			||||||
 | 
					    text_font: monospace
 | 
				
			||||||
 | 
					    text_italic: false
 | 
				
			||||||
 | 
					    text_size: 13
 | 
				
			||||||
 | 
					    text_unit: pt
 | 
				
			||||||
 | 
					    thickness: 1
 | 
				
			||||||
 | 
					    type: text
 | 
				
			||||||
 | 
					    x1: -962.0997946295324
 | 
				
			||||||
 | 
					    y1: -292.6838112360871
 | 
				
			||||||
 | 
					    z_index: 3
 | 
				
			||||||
 | 
					nodes:
 | 
				
			||||||
 | 
					  - boot_disk_size: null
 | 
				
			||||||
 | 
					    configuration: []
 | 
				
			||||||
 | 
					    cpu_limit: null
 | 
				
			||||||
 | 
					    cpus: null
 | 
				
			||||||
 | 
					    data_volume: null
 | 
				
			||||||
 | 
					    hide_links: false
 | 
				
			||||||
 | 
					    id: n0
 | 
				
			||||||
 | 
					    image_definition: null
 | 
				
			||||||
 | 
					    label: internet
 | 
				
			||||||
 | 
					    node_definition: external_connector
 | 
				
			||||||
 | 
					    parameters: {}
 | 
				
			||||||
 | 
					    ram: null
 | 
				
			||||||
 | 
					    tags: []
 | 
				
			||||||
 | 
					    x: -640
 | 
				
			||||||
 | 
					    y: -240
 | 
				
			||||||
 | 
					    interfaces:
 | 
				
			||||||
 | 
					      - id: i0
 | 
				
			||||||
 | 
					        label: port
 | 
				
			||||||
 | 
					        slot: 0
 | 
				
			||||||
 | 
					        type: physical
 | 
				
			||||||
 | 
					  - boot_disk_size: null
 | 
				
			||||||
 | 
					    configuration: []
 | 
				
			||||||
 | 
					    cpu_limit: null
 | 
				
			||||||
 | 
					    cpus: null
 | 
				
			||||||
 | 
					    data_volume: null
 | 
				
			||||||
 | 
					    hide_links: false
 | 
				
			||||||
 | 
					    id: n1
 | 
				
			||||||
 | 
					    image_definition: null
 | 
				
			||||||
 | 
					    label: internet-sw
 | 
				
			||||||
 | 
					    node_definition: unmanaged_switch
 | 
				
			||||||
 | 
					    parameters: {}
 | 
				
			||||||
 | 
					    ram: null
 | 
				
			||||||
 | 
					    tags: []
 | 
				
			||||||
 | 
					    x: -640
 | 
				
			||||||
 | 
					    y: -120
 | 
				
			||||||
 | 
					    interfaces:
 | 
				
			||||||
 | 
					      - id: i0
 | 
				
			||||||
 | 
					        label: port0
 | 
				
			||||||
 | 
					        slot: 0
 | 
				
			||||||
 | 
					        type: physical
 | 
				
			||||||
 | 
					      - id: i1
 | 
				
			||||||
 | 
					        label: port1
 | 
				
			||||||
 | 
					        slot: 1
 | 
				
			||||||
 | 
					        type: physical
 | 
				
			||||||
 | 
					      - id: i2
 | 
				
			||||||
 | 
					        label: port2
 | 
				
			||||||
 | 
					        slot: 2
 | 
				
			||||||
 | 
					        type: physical
 | 
				
			||||||
 | 
					      - id: i3
 | 
				
			||||||
 | 
					        label: port3
 | 
				
			||||||
 | 
					        slot: 3
 | 
				
			||||||
 | 
					        type: physical
 | 
				
			||||||
 | 
					      - id: i4
 | 
				
			||||||
 | 
					        label: port4
 | 
				
			||||||
 | 
					        slot: 4
 | 
				
			||||||
 | 
					        type: physical
 | 
				
			||||||
 | 
					      - id: i5
 | 
				
			||||||
 | 
					        label: port5
 | 
				
			||||||
 | 
					        slot: 5
 | 
				
			||||||
 | 
					        type: physical
 | 
				
			||||||
 | 
					      - id: i6
 | 
				
			||||||
 | 
					        label: port6
 | 
				
			||||||
 | 
					        slot: 6
 | 
				
			||||||
 | 
					        type: physical
 | 
				
			||||||
 | 
					      - id: i7
 | 
				
			||||||
 | 
					        label: port7
 | 
				
			||||||
 | 
					        slot: 7
 | 
				
			||||||
 | 
					        type: physical
 | 
				
			||||||
 | 
					  - boot_disk_size: null
 | 
				
			||||||
 | 
					    configuration:
 | 
				
			||||||
 | 
					      - name: user-data
 | 
				
			||||||
 | 
					        content: |-
 | 
				
			||||||
 | 
					          #cloud-config
 | 
				
			||||||
 | 
					          hostname: tacacs-server
 | 
				
			||||||
 | 
					          manage_etc_hosts: True
 | 
				
			||||||
 | 
					          system_info:
 | 
				
			||||||
 | 
					            default_user:
 | 
				
			||||||
 | 
					              name: cisco
 | 
				
			||||||
 | 
					          password: cisco
 | 
				
			||||||
 | 
					          chpasswd: { expire: False }
 | 
				
			||||||
 | 
					          ssh_pwauth: True
 | 
				
			||||||
 | 
					          ssh_authorized_keys:
 | 
				
			||||||
 | 
					            - your-ssh-pubkey-line-goes-here
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          # Install requirements for tac_plus
 | 
				
			||||||
 | 
					          package_update: true
 | 
				
			||||||
 | 
					          packages:
 | 
				
			||||||
 | 
					            - wget
 | 
				
			||||||
 | 
					            - make
 | 
				
			||||||
 | 
					            - gcc
 | 
				
			||||||
 | 
					            - flex
 | 
				
			||||||
 | 
					            - bison
 | 
				
			||||||
 | 
					            - libwrap0-dev
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          write_files:
 | 
				
			||||||
 | 
					            # Create the tac_plus configuration file
 | 
				
			||||||
 | 
					            - path: /etc/tacacs/tac_plus.conf
 | 
				
			||||||
 | 
					              content: |
 | 
				
			||||||
 | 
					                key = tacacs123
 | 
				
			||||||
 | 
					                group = netadmin {
 | 
				
			||||||
 | 
					                  default service = permit
 | 
				
			||||||
 | 
					                  service = exec {
 | 
				
			||||||
 | 
					                          priv-lvl = 15
 | 
				
			||||||
 | 
					                          }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                group = netoper {
 | 
				
			||||||
 | 
					                  default service = permit
 | 
				
			||||||
 | 
					                  service = exec {
 | 
				
			||||||
 | 
					                          priv-lvl = 1
 | 
				
			||||||
 | 
					                          }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                user = tacadmin {
 | 
				
			||||||
 | 
					                  login = cleartext admin123
 | 
				
			||||||
 | 
					                  member = netadmin
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                user = tacoper {
 | 
				
			||||||
 | 
					                  login = cleartext oper123
 | 
				
			||||||
 | 
					                  member = netoper
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            # Create a systemd service to manage tac_plus
 | 
				
			||||||
 | 
					            - path: /etc/systemd/system/tac_plus.service
 | 
				
			||||||
 | 
					              content: |
 | 
				
			||||||
 | 
					                [Unit]
 | 
				
			||||||
 | 
					                Description=tac_plus Service
 | 
				
			||||||
 | 
					                After=network.target
 | 
				
			||||||
 | 
					                [Service]
 | 
				
			||||||
 | 
					                Type=simple
 | 
				
			||||||
 | 
					                ExecStart=/tacacs/sbin/tac_plus -G -C /etc/tacacs/tac_plus.conf -d 8 -d 16 -l /var/log/tac_plus.log
 | 
				
			||||||
 | 
					                [Install]
 | 
				
			||||||
 | 
					                WantedBy=multi-user.target
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          runcmd:
 | 
				
			||||||
 | 
					            # Download tac_plus source code and un-tar it
 | 
				
			||||||
 | 
					            - wget https://shrubbery.net/pub/tac_plus/tacacs-F4.0.4.28.tar.gz -O /opt/tacacs-F4.0.4.28.tar.gz
 | 
				
			||||||
 | 
					            - cd /opt && tar -xzf tacacs-F4.0.4.28.tar.gz
 | 
				
			||||||
 | 
					            # Compile and install tac_plus
 | 
				
			||||||
 | 
					            - cd /opt/tacacs-F4.0.4.28 && ./configure --prefix=/tacacs && make && make install
 | 
				
			||||||
 | 
					            # Enable and start the systemd service
 | 
				
			||||||
 | 
					            - systemctl enable tac_plus
 | 
				
			||||||
 | 
					            - systemctl start tac_plus
 | 
				
			||||||
 | 
					            # Configure "inside" network adapter
 | 
				
			||||||
 | 
					            #  Note: ens2 is connected to internet through NAT ext-con and
 | 
				
			||||||
 | 
					            #        required to download the software
 | 
				
			||||||
 | 
					            - ip address add 192.168.0.10/24 dev ens3
 | 
				
			||||||
 | 
					            - ip link set up dev ens3
 | 
				
			||||||
 | 
					    cpu_limit: null
 | 
				
			||||||
 | 
					    cpus: null
 | 
				
			||||||
 | 
					    data_volume: null
 | 
				
			||||||
 | 
					    hide_links: false
 | 
				
			||||||
 | 
					    id: n2
 | 
				
			||||||
 | 
					    image_definition: ubuntu-22-04-20240126
 | 
				
			||||||
 | 
					    label: tacacs-server
 | 
				
			||||||
 | 
					    node_definition: ubuntu
 | 
				
			||||||
 | 
					    parameters: {}
 | 
				
			||||||
 | 
					    ram: null
 | 
				
			||||||
 | 
					    tags: []
 | 
				
			||||||
 | 
					    x: -520
 | 
				
			||||||
 | 
					    y: -120
 | 
				
			||||||
 | 
					    interfaces:
 | 
				
			||||||
 | 
					      - id: i0
 | 
				
			||||||
 | 
					        label: ens2
 | 
				
			||||||
 | 
					        slot: 0
 | 
				
			||||||
 | 
					        type: physical
 | 
				
			||||||
 | 
					      - id: i1
 | 
				
			||||||
 | 
					        label: ens3
 | 
				
			||||||
 | 
					        slot: 1
 | 
				
			||||||
 | 
					        type: physical
 | 
				
			||||||
 | 
					  - boot_disk_size: null
 | 
				
			||||||
 | 
					    configuration: []
 | 
				
			||||||
 | 
					    cpu_limit: null
 | 
				
			||||||
 | 
					    cpus: null
 | 
				
			||||||
 | 
					    data_volume: null
 | 
				
			||||||
 | 
					    hide_links: false
 | 
				
			||||||
 | 
					    id: n3
 | 
				
			||||||
 | 
					    image_definition: null
 | 
				
			||||||
 | 
					    label: lab-sw
 | 
				
			||||||
 | 
					    node_definition: unmanaged_switch
 | 
				
			||||||
 | 
					    parameters: {}
 | 
				
			||||||
 | 
					    ram: null
 | 
				
			||||||
 | 
					    tags: []
 | 
				
			||||||
 | 
					    x: -400
 | 
				
			||||||
 | 
					    y: -120
 | 
				
			||||||
 | 
					    interfaces:
 | 
				
			||||||
 | 
					      - id: i0
 | 
				
			||||||
 | 
					        label: port0
 | 
				
			||||||
 | 
					        slot: 0
 | 
				
			||||||
 | 
					        type: physical
 | 
				
			||||||
 | 
					      - id: i1
 | 
				
			||||||
 | 
					        label: port1
 | 
				
			||||||
 | 
					        slot: 1
 | 
				
			||||||
 | 
					        type: physical
 | 
				
			||||||
 | 
					      - id: i2
 | 
				
			||||||
 | 
					        label: port2
 | 
				
			||||||
 | 
					        slot: 2
 | 
				
			||||||
 | 
					        type: physical
 | 
				
			||||||
 | 
					      - id: i3
 | 
				
			||||||
 | 
					        label: port3
 | 
				
			||||||
 | 
					        slot: 3
 | 
				
			||||||
 | 
					        type: physical
 | 
				
			||||||
 | 
					      - id: i4
 | 
				
			||||||
 | 
					        label: port4
 | 
				
			||||||
 | 
					        slot: 4
 | 
				
			||||||
 | 
					        type: physical
 | 
				
			||||||
 | 
					      - id: i5
 | 
				
			||||||
 | 
					        label: port5
 | 
				
			||||||
 | 
					        slot: 5
 | 
				
			||||||
 | 
					        type: physical
 | 
				
			||||||
 | 
					      - id: i6
 | 
				
			||||||
 | 
					        label: port6
 | 
				
			||||||
 | 
					        slot: 6
 | 
				
			||||||
 | 
					        type: physical
 | 
				
			||||||
 | 
					      - id: i7
 | 
				
			||||||
 | 
					        label: port7
 | 
				
			||||||
 | 
					        slot: 7
 | 
				
			||||||
 | 
					        type: physical
 | 
				
			||||||
 | 
					  - boot_disk_size: null
 | 
				
			||||||
 | 
					    configuration:
 | 
				
			||||||
 | 
					      - name: ios_config.txt
 | 
				
			||||||
 | 
					        content: |-
 | 
				
			||||||
 | 
					          hostname rtr1
 | 
				
			||||||
 | 
					          !
 | 
				
			||||||
 | 
					          ! In order to avoid entering a configuration dialog
 | 
				
			||||||
 | 
					          ! on boot, please ensure that all ethernet interfaces
 | 
				
			||||||
 | 
					          ! have some ip configuration present here such as the
 | 
				
			||||||
 | 
					          ! example below:
 | 
				
			||||||
 | 
					          !
 | 
				
			||||||
 | 
					          interface range Ethernet 0/0 - 3
 | 
				
			||||||
 | 
					           no ip address
 | 
				
			||||||
 | 
					           shutdown
 | 
				
			||||||
 | 
					          !
 | 
				
			||||||
 | 
					          no ip domain lookup
 | 
				
			||||||
 | 
					          ip domain name lab.intra
 | 
				
			||||||
 | 
					          crypto key generate rsa general-keys modulus 2048
 | 
				
			||||||
 | 
					          !
 | 
				
			||||||
 | 
					          aaa new-model
 | 
				
			||||||
 | 
					          !
 | 
				
			||||||
 | 
					          username cisco priv 15 secret cisco
 | 
				
			||||||
 | 
					          !
 | 
				
			||||||
 | 
					          interface Eth0/0
 | 
				
			||||||
 | 
					           no shutdown
 | 
				
			||||||
 | 
					           ip address 192.168.0.1 255.255.255.0
 | 
				
			||||||
 | 
					           exit
 | 
				
			||||||
 | 
					          !
 | 
				
			||||||
 | 
					          end
 | 
				
			||||||
 | 
					    cpu_limit: null
 | 
				
			||||||
 | 
					    cpus: null
 | 
				
			||||||
 | 
					    data_volume: null
 | 
				
			||||||
 | 
					    hide_links: false
 | 
				
			||||||
 | 
					    id: n4
 | 
				
			||||||
 | 
					    image_definition: null
 | 
				
			||||||
 | 
					    label: rtr1
 | 
				
			||||||
 | 
					    node_definition: iol-xe
 | 
				
			||||||
 | 
					    parameters: {}
 | 
				
			||||||
 | 
					    ram: null
 | 
				
			||||||
 | 
					    tags: []
 | 
				
			||||||
 | 
					    x: -400
 | 
				
			||||||
 | 
					    y: 0
 | 
				
			||||||
 | 
					    interfaces:
 | 
				
			||||||
 | 
					      - id: i0
 | 
				
			||||||
 | 
					        label: Loopback0
 | 
				
			||||||
 | 
					        type: loopback
 | 
				
			||||||
 | 
					      - id: i1
 | 
				
			||||||
 | 
					        label: Ethernet0/0
 | 
				
			||||||
 | 
					        slot: 0
 | 
				
			||||||
 | 
					        type: physical
 | 
				
			||||||
 | 
					      - id: i2
 | 
				
			||||||
 | 
					        label: Ethernet0/1
 | 
				
			||||||
 | 
					        slot: 1
 | 
				
			||||||
 | 
					        type: physical
 | 
				
			||||||
 | 
					      - id: i3
 | 
				
			||||||
 | 
					        label: Ethernet0/2
 | 
				
			||||||
 | 
					        slot: 2
 | 
				
			||||||
 | 
					        type: physical
 | 
				
			||||||
 | 
					      - id: i4
 | 
				
			||||||
 | 
					        label: Ethernet0/3
 | 
				
			||||||
 | 
					        slot: 3
 | 
				
			||||||
 | 
					        type: physical
 | 
				
			||||||
 | 
					  - boot_disk_size: null
 | 
				
			||||||
 | 
					    configuration:
 | 
				
			||||||
 | 
					      - name: node.cfg
 | 
				
			||||||
 | 
					        content: |
 | 
				
			||||||
 | 
					          # this is a shell script which will be sourced at boot
 | 
				
			||||||
 | 
					          hostname desktop
 | 
				
			||||||
 | 
					          # configurable user account
 | 
				
			||||||
 | 
					          USERNAME=cisco
 | 
				
			||||||
 | 
					          PASSWORD=cisco
 | 
				
			||||||
 | 
					          # Network Settings
 | 
				
			||||||
 | 
					          ip address add 192.168.0.11/24 dev eth0
 | 
				
			||||||
 | 
					    cpu_limit: null
 | 
				
			||||||
 | 
					    cpus: null
 | 
				
			||||||
 | 
					    data_volume: null
 | 
				
			||||||
 | 
					    hide_links: false
 | 
				
			||||||
 | 
					    id: n5
 | 
				
			||||||
 | 
					    image_definition: null
 | 
				
			||||||
 | 
					    label: desktop
 | 
				
			||||||
 | 
					    node_definition: desktop
 | 
				
			||||||
 | 
					    parameters: {}
 | 
				
			||||||
 | 
					    ram: null
 | 
				
			||||||
 | 
					    tags: []
 | 
				
			||||||
 | 
					    x: -280
 | 
				
			||||||
 | 
					    y: -120
 | 
				
			||||||
 | 
					    interfaces:
 | 
				
			||||||
 | 
					      - id: i0
 | 
				
			||||||
 | 
					        label: eth0
 | 
				
			||||||
 | 
					        slot: 0
 | 
				
			||||||
 | 
					        type: physical
 | 
				
			||||||
 | 
					      - id: i1
 | 
				
			||||||
 | 
					        label: eth1
 | 
				
			||||||
 | 
					        slot: 1
 | 
				
			||||||
 | 
					        type: physical
 | 
				
			||||||
 | 
					links:
 | 
				
			||||||
 | 
					  - id: l0
 | 
				
			||||||
 | 
					    n1: n1
 | 
				
			||||||
 | 
					    n2: n0
 | 
				
			||||||
 | 
					    i1: i0
 | 
				
			||||||
 | 
					    i2: i0
 | 
				
			||||||
 | 
					    conditioning: {}
 | 
				
			||||||
 | 
					    label: ext-sw-port0<->ext-conn-0-port
 | 
				
			||||||
 | 
					  - id: l1
 | 
				
			||||||
 | 
					    n1: n2
 | 
				
			||||||
 | 
					    n2: n1
 | 
				
			||||||
 | 
					    i1: i0
 | 
				
			||||||
 | 
					    i2: i3
 | 
				
			||||||
 | 
					    conditioning: {}
 | 
				
			||||||
 | 
					    label: aaa-server_0-ens2<->ext-sw-port3
 | 
				
			||||||
 | 
					  - id: l2
 | 
				
			||||||
 | 
					    n1: n2
 | 
				
			||||||
 | 
					    n2: n3
 | 
				
			||||||
 | 
					    i1: i1
 | 
				
			||||||
 | 
					    i2: i0
 | 
				
			||||||
 | 
					    conditioning: {}
 | 
				
			||||||
 | 
					    label: aaa-server_0-ens3<->ext-sw_0-port0
 | 
				
			||||||
 | 
					  - id: l3
 | 
				
			||||||
 | 
					    n1: n4
 | 
				
			||||||
 | 
					    n2: n3
 | 
				
			||||||
 | 
					    i1: i1
 | 
				
			||||||
 | 
					    i2: i1
 | 
				
			||||||
 | 
					    conditioning: {}
 | 
				
			||||||
 | 
					    label: router1_0-Ethernet0/0<->ext-sw_0-port1
 | 
				
			||||||
 | 
					  - id: l4
 | 
				
			||||||
 | 
					    n1: n5
 | 
				
			||||||
 | 
					    n2: n3
 | 
				
			||||||
 | 
					    i1: i0
 | 
				
			||||||
 | 
					    i2: i2
 | 
				
			||||||
 | 
					    conditioning: {}
 | 
				
			||||||
 | 
					    label: desktop-0-eth0<->ext-sw_0-port2
 | 
				
			||||||
 | 
					lab:
 | 
				
			||||||
 | 
					  description: Simple topology for practicing AAA TACACS configuration in IOS.
 | 
				
			||||||
 | 
					  notes: |-
 | 
				
			||||||
 | 
					    # Exploring AAA / TACACS Configuration for IOS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ## Starting Configuration
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    `rtr1` has the following configuration applied as startup configuration to enable inbound SSH from `desktop` that is locally authenticated.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					    ip domain name lab.intra
 | 
				
			||||||
 | 
					    crypto key generate rsa general-keys modulus 2048
 | 
				
			||||||
 | 
					    !
 | 
				
			||||||
 | 
					    aaa new-model
 | 
				
			||||||
 | 
					    !
 | 
				
			||||||
 | 
					    username cisco priv 15 secret cisco
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ## Ensuring the serial / console leverages local authentication
 | 
				
			||||||
 | 
					    To provide safety and fallback access to devices, we will force the console line to only use local admin accounts.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					    aaa authentication login CONSOLE local
 | 
				
			||||||
 | 
					    aaa authorization console
 | 
				
			||||||
 | 
					    aaa authorization exec CONSOLE local
 | 
				
			||||||
 | 
					    !
 | 
				
			||||||
 | 
					    line con 0
 | 
				
			||||||
 | 
					     login authentication CONSOLE
 | 
				
			||||||
 | 
					     authorization exec CONSOLE
 | 
				
			||||||
 | 
					    !
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ## Configuring TACACS server as default AAA
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Start by identitying the interface that TACACS packets should be sourced from. This is often important because TACACS servers typically only respond to known hosts/addresses.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					    ip tacacs source-interface Ethernet0/0
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Now create the TACACS server entry for the server. Be sure to double check the "key" (secret) used for communications.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    > Note: Be careful to NOT add an extra "space" after the key. This can cause problems on some platforms.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					    tacacs server aaa-server
 | 
				
			||||||
 | 
					     address ipv4 192.168.0.10
 | 
				
			||||||
 | 
					     key tacacs123
 | 
				
			||||||
 | 
					    !
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Create a `aaa group` that includes the TACACS server. In a production environment, you would typically have at least 2 TACASC servers configured for fallback.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					    aaa group server tacacs+ AAA-TACACS
 | 
				
			||||||
 | 
					     server name aaa-server
 | 
				
			||||||
 | 
					    !
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Test that the TACACS server is responding successfully.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					    test aaa group tacacs+ tacadmin admin123 legacy
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Configure the authentication, authorization, and accounting policies.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					    aaa authentication login default group AAA-TACACS local
 | 
				
			||||||
 | 
					    aaa authorization exec default group AAA-TACACS local
 | 
				
			||||||
 | 
					    !
 | 
				
			||||||
 | 
					    aaa accounting exec default start-stop group ISE-TACACS
 | 
				
			||||||
 | 
					    aaa accounting commands 1 default start-stop group AAA-TACACS
 | 
				
			||||||
 | 
					    aaa accounting commands 15 default start-stop group AAA-TACACS
 | 
				
			||||||
 | 
					    !
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ## Testing the configuration
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Open the console for the `tacacs-server` and monitor the service "journal"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					    journalctl -fu tac_plus
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Open the console for the `desktop` and attempt to connect to `rtr1` with SSH as the `tacadmin` user.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					    ssh tacadmin@192.168.0.1
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    After you log in, run a command to verify access.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					    show ip interface brief
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Check the output on the `tacacs-server`. You should see messages for both the `authentication` and `authorization`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					    # Examples
 | 
				
			||||||
 | 
					    Oct 07 21:30:36 tacacs-server tac_plus[5704]: login query for 'tacadmin' port tty2 from 192.168.0.1 accepted
 | 
				
			||||||
 | 
					    Oct 07 21:30:36 tacacs-server tac_plus[5705]: connect from 192.168.0.1 [192.168.0.1]
 | 
				
			||||||
 | 
					    Oct 07 21:30:36 tacacs-server tac_plus[5705]: Start authorization request
 | 
				
			||||||
 | 
					    Oct 07 21:30:36 tacacs-server tac_plus[5705]: do_author: user='tacadmin'
 | 
				
			||||||
 | 
					    Oct 07 21:30:36 tacacs-server tac_plus[5705]: user 'tacadmin' found
 | 
				
			||||||
 | 
					    Oct 07 21:30:36 tacacs-server tac_plus[5705]: exec authorization request for tacadmin
 | 
				
			||||||
 | 
					    Oct 07 21:30:36 tacacs-server tac_plus[5705]: exec is explicitly permitted by line 4
 | 
				
			||||||
 | 
					    Oct 07 21:30:36 tacacs-server tac_plus[5705]: nas:service=shell (passed thru)
 | 
				
			||||||
 | 
					    Oct 07 21:30:36 tacacs-server tac_plus[5705]: nas:cmd* (passed thru)
 | 
				
			||||||
 | 
					    Oct 07 21:30:36 tacacs-server tac_plus[5705]: nas:absent, server:priv-lvl=15 -> add priv-lvl=15 (k)
 | 
				
			||||||
 | 
					    Oct 07 21:30:36 tacacs-server tac_plus[5705]: added 1 args
 | 
				
			||||||
 | 
					    Oct 07 21:30:36 tacacs-server tac_plus[5705]: out_args[0] = service=shell input copy discarded
 | 
				
			||||||
 | 
					    Oct 07 21:30:36 tacacs-server tac_plus[5705]: out_args[1] = cmd* input copy discarded
 | 
				
			||||||
 | 
					    Oct 07 21:30:36 tacacs-server tac_plus[5705]: out_args[2] = priv-lvl=15 compacted to out_args[0]
 | 
				
			||||||
 | 
					    Oct 07 21:30:36 tacacs-server tac_plus[5705]: 1 output args
 | 
				
			||||||
 | 
					    Oct 07 21:30:36 tacacs-server tac_plus[5705]: authorization query for 'tacadmin' tty2 from 192.168.0.1 accepted
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Stop the journalctl monitor (`Cntrl-c`), and open the accounting log.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					    tail -f /var/log/tac_plus.acct
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    > Note: If the command fails and the file isn't found, return to the SSH session to the router and run a couple commands.  The file isn't created until an accounting message is sent to the server.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Run some more commands on `rtr1`. Try some that are `priv 15` as well as `priv 1`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					    ! Priv 1
 | 
				
			||||||
 | 
					    show ip route
 | 
				
			||||||
 | 
					    ! Priv 15
 | 
				
			||||||
 | 
					    write mem
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Verify the accounting logs were received.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Logout from the router, and log in as `tacoper`. Verify through the same logs that the user is given the correct access.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ## Other useful commands
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ### Debugs on the router
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					    debug aaa authentication
 | 
				
			||||||
 | 
					    debug aaa authorization
 | 
				
			||||||
 | 
					    debug aaa accounting
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    debug tacacs authentication
 | 
				
			||||||
 | 
					    debug tacacs authorization
 | 
				
			||||||
 | 
					    debug tacacs accounting
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ### Show commands on router
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					    show tacacs
 | 
				
			||||||
 | 
					    show aaa sessions
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ### Test AAA
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					    test aaa group tacacs+ tacadmin admin123 legacy
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ### tacacs-server logs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					    journalctl -fu tac_plus
 | 
				
			||||||
 | 
					    tail -f /var/log/tac_plus.acct
 | 
				
			||||||
 | 
					    tail -f /var/log/tac_plus.log
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ### tac_plus server maintenance
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					    systemctl status tac_plus
 | 
				
			||||||
 | 
					    sudo systemctl stop tac_plus
 | 
				
			||||||
 | 
					    sudo systemctl start tac_plus
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					  title: Snack Minute AAA TACACS Exploration
 | 
				
			||||||
 | 
					  version: 0.2.2
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								lab-topologies/aaa-tacacs-exploration/topology.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								lab-topologies/aaa-tacacs-exploration/topology.jpg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 76 KiB  | 
		Reference in New Issue
	
	Block a user