Внешние процедуры 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
не отправляются на авторизацию и доступны всем пользователям из любого режима, это позволяет избежать ситуаций, когда пользователь может “застрять” в одном из режимов.