One of the root problems of administrative access to the ASA platform is there’s no easy way to bypass a broken AAA server
Cisco IOS has this:
aaa authentication enable default group radius none
But the ASA equivalent has no “none” option, so most people will configure this:
aaa authentication enable console RADIUS LOCAL
Now the problem here is if the user authenticates locally and the Radius server is still marked “up”, they’ll be forced to authenticate through it. This creates two problematic scenarios
- The Radius server is reachable, but the username does not exist
- The Radius server is marked up but is actually unreachable, misconfigured, or horked in some way
The latter case occurred during our last two ASA outages. It was especially frustrating because I had configured serial consoles to both ASAs, only to be unable to get to enable mode to force a reboot/failover and recover from the outage without having to drive to the data center.
A reddit user pointed me to this command:
aaa authorization exec LOCAL auto-enable
Which should in theory force accounts using local authentication to bypass the enable prompt assuming they’re set to priv 15. But after having no luck with it and escalating through Cisco I discovered this command does not work with serial console logins. So, I was back to square one.
The solution I settled on was to simply force local for both serial console authentication and enable mode:
aaa authentication serial console LOCAL aaa authentication enable console LOCAL
Unfortunately the catch 22 revealed itself again, as this broke enable mode for Radius users, since they did not have local accounts. So I added this line to try and bypass enable for Radius users:
aaa authentication ssh console RADIUS LOCAL aaa authorization exec authentication-server auto-enable
Now I see them passing authentication on the Radius server, but the ASA rejecting them with this error:
%ASA-3-113021: Attempted console login failed user 'bob' did NOT have appropriate Admin Rights.
I had already configured priv-lvl=15 in the Radius server’s policy, so not sure what else it could need. Turns out it also needed this attribute set:
After this, now everything is happy. SSH users get auto-enabled via RADIUS and can still fallback to local (in theory) if the server is down. But if that’s broken, I can console in with a local username/password and enter enable mode.