Внешние процедуры AAA по протоколу TACACS+

TACACS+ (англ. Terminal Access Controller Access Control System plus) — сеансовый протокол, результат дальнейшего усовершенствования TACACS, предпринятого Cisco. Улучшена безопасность протокола (шифрование), а также введено разделение функций аутентификации, авторизации и учёта, которые теперь можно использовать по отдельности.

TACACS+ использует понятия сеансов. В рамках TACACS+ возможно установить три различных типа сеансов AAA (англ. authentication, authorization, accounting). Установление одного типа сеанса в общем случае не требует предварительного успешного установления какого-либо другого. Спецификация протокола не требует для открытия сеанса авторизации открыть сначала сеанс аутентификации. Сервер TACACS+ может потребовать аутентификацию, но протокол этого не оговаривает.

Для настройки TACACS-сервера используется команда aaa tacacs-server. Синтаксис команды: aaa tacacs-server <IP> [port <NUM>] [secret <PASS>] [vrf <NAME>] {account | auth} [cmd-authorize] [timeout <0-300>], где:

  • server <IP> — IP-адрес TACACS-сервера.
  • port <NUM> — номер порта на сервере.
  • secret <PASS> — пароль для соединения с TACACS-сервером (должен совпадать с установленным на TACACS).
  • vrf <NAME> — наименование VRF, в котором задан IP-адрес сервера (значение по умолчанию — VRF текущего виртуального маршрутизатора)
  • source <IP2> — исходящий адрес.
  • account | auth — выбор режима взаимодействия с сервером: account — только отправка учёта действий пользователя, auth — только аутентификация и авторизация. Для обеспечения всех функций AAA будет необходимо задать две команды aaa radius-server.
  • cmd-authorize — включить покомандную авторизацию.
  • timeout <0-300>— время в секундах в диапазоне от 0 до 300. Время ожидания до повторного запроса в случае отсутствия ответа от TACACS.

Пример:

ecorouter(config)#aaa tacacs-server 192.168.0.1 port 80 vrf management timeout 200 account auth

Если используется несколько серверов TACACS+, то по умолчанию запросы будут отправляться первому доступному серверу из списка. На все серверы отправляется только информация о моменте входа и выхода пользователя, учётные данные передаются только на первый сервер из списка.

Если ни к одному серверу TACACS+ или RADIUS доступа нет, включается режим локальной аутентификации и авторизации.

Команда aaa tacacs-config acct-all включает отправку всех введённых команд пользователей (accounting) на все доступные TACACS-серверы.

Конфигурирование TACACS+

Для конфигурирования сервера TACACS+ использована библиотека “tac_plus”. С полной документацией по “tac_plus” можно ознакомиться по ссылке https://projects.pro-bono-publico.de/event-driven-servers/doc/index.html?projects/tac_plus.html.

Для простоты, мы предполагаем, что маршрутизатор, сервер TACACS+ и устройство с которого производится SSH-подключение находятся в одной подсети.

Все настройки для аутентификации и авторизации пользователей сервера TACACS+ содержатся в файле /etc/tacacs+/tac_plus.conf.

Мы рассмотрим лишь несколько основных параметров групп group = groupname { ... } и пользователей user = username { ... }.

Действия на сервере TACACS+:

В файле /etc/tacacs+/tac_plus.conf создайте несколько групп и пользователей для дальнейшей работы:

# Создание группы с максимальными привилегиями
group = for_enable_group {
	default service = deny
	service = er-exec {
		priv-lvl = 15
		shell:roles=admin
	}
}
 
group = cool_user {
	default service = deny
	service = er-exec {
		priv-lvl = 15
		shell:roles=admin_test
	}
}
 
# Создание группы с минимальными привилегиями
group = operator {
	default service = deny
	service = er-exec {
		priv-lvl = 0
		shell:roles=noc
	}
}
 
user = ecouser {
	member = cool_user
	cmd = "show" {
		permit ".*"
	}
	login = cleartext ecopass
}
		
user = operator1 {
	member = operator
	login = cleartext justpass
}
 
user = for_enable_user {
	member = for_enable_group
	cmd = "show" {
		permit ".*"
	}
	cmd = "enable" {
		permit ".*"
	}
	login = cleartext for_enable_user_pass
}

Все роли заданные в группах пользователей должны присутствовать в локальной базе данных маршрутизатора.

group = operator — наименование группы.

  • default service = {permit | deny} — разрешить или запретить сервис, явно не указанный в профиле пользователя.
  • service = er-exec — командная строка ЭкоРоутера.
    • priv-lvl = 0 — соответствует режиму user-exec консоли ЭкоРоутера.
    • priv-lvl = 15 — соответствует режиму enable-exec консоли ЭкоРоутера.
    • shell:roles=admin_test — привязка роли настроенной на ЭкоРоутереа.

login = {cleartext | crypt} <PASSWORD>:

  • cleartext — параметр для нешифрованного текстового пароля.
  • crypt — параметр для шифрованного пароля (DES и MD5 - алгоритмы).
  • PASSWORD — пароль, зашифрованный или нешифрованный текст.

member — членство пользователя в группе. Может быть задано несколько групп к которым будет принадлежать пользователь.

cmd = "show" { permit ".*"} — авторизация команд, разрешает данному пользователю использование команды show с любыми последующими параметрами.

Задайте IP-адрес для TACACS-сервера: ip a a 10.10.10.10/24 dev eth0.

Проверьте конфигурацию, перезапустите и проверьте работу сервера.

service tacacs_plus check
service tacacs_plus --full-restart
service tacacs_plus status

Действия на маршрутизаторе:

  • Установите пароль “111” для входа в административный режим.
  • Настройте IP-адрес управляющего порта.
  • Задайте приоритет сервера TACACS+ над локальной авторизацией.
enable secret 111
hw mgmt ip 10.10.10.1/24
aaa precedence tacacs local
  • Настройте подключение к серверу TACACS+:
aaa tacacs-server 10.10.10.10 port 49 vrf management auth
  • Далее, создадим двух локальных пользователей и роль:
username operator1
password justpass
role admin
exit
 
username log
password log
role admin
exit
 
role admin_test
permit user-exec enable
permit user-exec show
permit enable-eenxec show
end

Проверка пользователя заданного на TACACS+:

  • Подключитесь к маршрутизатору ssh ecouser@10.10.10.1 и введите пароль ecopass.
  • Убедитесь что вы зашли как пользователь ecouser и вам присвоена роль admin_test командой show users connected.
  • Перейдите в административный режим командой enable, введите заданный выше пароль 111.
  • Введите команду configure и убедитесь что у данного пользователя нет доступа в конфигурационный режим.

Обратите внимание, что пользователь ecouser не задан локально в маршрутизаторе, но при этом ему присвоена локально заданная роль admin_test — всё как и описано в конфигурации на сервере TACACS+.

Проверка локального пользователя не заданного на TACACS+:

  • Подключитесь к маршрутизатору ssh admin@10.10.10.1 и введите пароль admin. Пароль не будет принят, поскольку на сервере TACACS+ не задан пользователь с таким именем.

Создание пользователя admin на TACACS+:

В конфигурационном файле /etc/tacacs+/tac_plus.conf создайте пользователя admin.

user = admin {
	member = cool_user
	login = cleartext admin
}

Проверьте конфигурацию, перезапустите и проверьте работу сервера.

service tacacs_plus check
service tacacs_plus --full-restart
service tacacs_plus status

Повторите вход ssh admin@10.10.10.1 с паролем admin. Теперь вход на маршрутизатор прошёл успешно.

Обратите внимание что права пользователя admin теперь отличаются (вход в конфигурационный режим закрыт) от локального пользователя с тем же именем, поскольку его права определяются ролью admin_test заданной в группе cool_user на сервере TACACS+.

Проверка приоритета пользователя:

Пользователь с именем operator1 задан как на сервере TACACS+ так и локально.

  • Подключитесь к маршрутизатору ssh operator1@10.10.10.1 и введите пароль justpass.
  • Войдите в административный режим командой enable с паролем 111, попытайтесь войти в конфигурационный режим командой configure на что будет получен отказ.

Следовательно пользователь настроенный на сервере TACACS+ получил приоритет и пользователю operator1 задана роль noc не позволяющая входить в конфигурационный режим.

Проверка пользователя с ролью администратора:

  • Подключитесь к маршрутизатору ssh for_enable_user@10.10.10.1 и введите пароль for_enable_user_pass.
  • Войдите в административный режим командой enable с паролем 111, войдите в конфигурационный режим командой configure.
  • Отключите пароль на вход в административный режим no enable secret.
  • Отмените заданный приоритет авторизации no aaa precedence tacacs local.
  • Задайте приоритет заново aaa precedence tacacs local.

Подобные действия доступны только для пользователя с ролью администратора, следовательно действует роль admin, заданная в группе for_enable_group в конфигурации севера TACACS+, к которой принадлежит пользователь for_enable_user.

Проверка покомандной авторизации:

  • На маршрутизатор задайте новое правило для связи с сервером:
no aaa tacacs-server 10.10.10.10 port 49 vrf management auth
aaa tacacs-server 10.10.10.10 port 49 vrf management auth cmd-authorize

Теперь пользователю будут доступны лишь те команды, которые авторизует сервер TACACS+.

  • Подключитесь к маршрутизатору ssh for_enable_user@10.10.10.1 и введите пароль for_enable_user_pass.
  • Введите команду sh users connecte | no — команда выдаёт нужные данные, при этом в слове connected пропущена последняя буква, т.е. TACACS+ готов авторизовать команды даже по неполному их написанию.
  • Введите команду enable, такая команда задана и будет авторизована TACACS+.
  • Введите команду configute, будет выдано сообщение ”% Authorization via: tacacs command deny”. Не смотря на то что роль пользователя for_enable_user = admin мы не можем войти в конфигурационный режим поскольку команда не авторизована.
  • Введите команду pin mgmt 1.1.1.1, снова сообщение об отказе в авторизации. Таким образом, мы подтвердили работу покомандной авторизации сервера TACACS+, в том числе по неполному написанию команды.

При этом команды end и exit не отправляются на авторизацию и доступны всем пользователям из любого режима, это позволяет избежать ситуаций, когда пользователь может “застрять” в одном из режимов.