Tacacs - AAA-сервер. Используется для авторизации пользователей и разграничения прав доступа. На операционной системе FreeBSD достаточно просто устанавливается из портов. К сожалению, в некоторых репозиториях линуксов его больше нет.
После установки необходимо изучить скрипт запуска. Станет понятно, что в /etc/rc.conf следует добавить строку
Далее необходимо написать конфигурационный файл /usr/local/etc/tac_plus.conf
Я решил, что пароль enable будет браться из tacacs, а так же пользователи с максимальным уровнем привилегий 15 (в cisco ios) будут заведены там же. Для начала следует зашифровать DES'ом пароли. Это можно сделать имеющейся в составе сервера утилитой tac_pwd.
Разумеется, для разных пользователей должны быть разные пароли, но в примере я буду использовать только один.
Очевидно, что на оборудовании тоже необходимо сделать изменения. Пусть это будет коммутатор.
Проверка. Вводятся пароли, указаные в tacacs'е
В конфигурационный файл следует добавить строку с указанием файла, в который будет сохраняться аккаунтинговая инофрмация. В моем случае, настройки по-умолчанию не подходят, так как не использую Syslog, через который осуществляет логирование событий процесс tac_plus. Итак:
Проверка логирования.
Таким образом, логируется:
Хочу отметить несколько важных вещей.
1. Можно enable хранить/менять в tacacs'e
Пока оборудование будет подключено к сети - пароль будет браться с сервера, а не с конфигурационного файла. Для того, чтобы использовать цисковский enable необходимо выключить tacacs или отключить оборудование от сети.
2. Можно задать уровень, на котором будут отсылаться пакеты с командами.
3. Можно создать группы пользователей, которым можно разрешить доступ только на определенное оборудование.
Для реализации п.3 используются списки доступа в конфигурационном файле tacacs. Например:
После установки необходимо изучить скрипт запуска. Станет понятно, что в /etc/rc.conf следует добавить строку
tac_plus_enable="YES"
Далее необходимо написать конфигурационный файл /usr/local/etc/tac_plus.conf
Я решил, что пароль enable будет браться из tacacs, а так же пользователи с максимальным уровнем привилегий 15 (в cisco ios) будут заведены там же. Для начала следует зашифровать DES'ом пароли. Это можно сделать имеющейся в составе сервера утилитой tac_pwd.
#tac_pwd
Password to be encrypted: mypassword
EEC7t7Q9w8Ggs
Разумеется, для разных пользователей должны быть разные пароли, но в примере я буду использовать только один.
user = $enable$ {
login = des EEC7t7Q9w8Ggs
}
user = admin {
login = des EEC7t7Q9w8Ggs
service = exec {
default attribute = permit
priv-lvl = 15
}
}
user = operator {
login = des EEC7t7Q9w8Ggs
service = exec {
default attribute = permit
priv-lvl = 1
}
}
Очевидно, что на оборудовании тоже необходимо сделать изменения. Пусть это будет коммутатор.
tacacs-server host 10.0.0.254
aaa new-model
aaa authentication login default group tacacs+ local
aaa authentication enable default group tacacs+ enable none
aaa authorization exec default group tacacs+ local
aaa accounting exec default start-stop group tacacs+
aaa accounting commands 15 default start-stop group tacacs+
aaa accounting network default start-stop group tacacs+
aaa accounting connection default start-stop group tacacs+
aaa accounting system default start-stop group tacacs+
Проверка. Вводятся пароли, указаные в tacacs'е
$ telnet 10.0.0.250
Trying 10.0.0.250...
Connected to 10.0.0.250.
Escape character is '^]'.
User Access Verification
Username: admin
Password:
Switch#
..
$ telnet 10.0.0.250
Trying 10.0.0.250...
Connected to 10.0.0.250.
Escape character is '^]'.
User Access Verification
Username: operator
Password:
Switch>en
Password:
Switch#
В конфигурационный файл следует добавить строку с указанием файла, в который будет сохраняться аккаунтинговая инофрмация. В моем случае, настройки по-умолчанию не подходят, так как не использую Syslog, через который осуществляет логирование событий процесс tac_plus. Итак:
accounting file = /log/tac.acct
Проверка логирования.
Mon Jul 20 14:23:56 2009 10.0.0.250 admin tty1 10.10.10.11 start task_id=12 timezone=UTC service=shell
Mon Jul 20 14:24:21 2009 10.0.0.250 admin tty1 10.10.10.11 stop task_id=12 timezone=UTC service=shell priv-lvl=15 cmd=show running-config
Mon Jul 20 14:25:36 2009 10.0.0.250 admin tty1 10.10.10.11 stop task_id=13 timezone=UTC service=shell priv-lvl=15 cmd=ping 10.0.0.250
Mon Jul 20 14:26:38 2009 10.0.0.250 admin tty1 10.10.10.11 stop task_id=14 timezone=UTC service=shell priv-lvl=15 cmd=configure terminal
Mon Jul 20 14:26:40 2009 10.0.0.250 admin tty1 10.10.10.11 stop task_id=15 timezone=UTC service=shell priv-lvl=15 cmd=interface FastEthernet 2/0/10
Mon Jul 20 14:26:41 2009 10.0.0.250 admin tty1 10.10.10.11 stop task_id=16 timezone=UTC service=shell priv-lvl=15 cmd=shutdown
Mon Jul 20 14:26:43 2009 10.0.0.250 admin tty1 10.10.10.11 stop task_id=17 timezone=UTC service=shell priv-lvl=15 cmd=no shutdown
Mon Jul 20 14:26:52 2009 10.0.0.250 admin tty1 10.10.10.11 stop task_id=18 timezone=UTC service=shell priv-lvl=15 cmd=hostname SWitch-1
Mon Jul 20 14:27:24 2009 10.0.0.250 admin tty1 10.10.10.11 stop task_id=12 timezone=UTC service=shell disc-cause=9 disc-cause-ext=2 pre-session-time=6 elapsed_time=208
Таким образом, логируется:
- подключение
- отключение
- команды, выполненые в конфигурационом режиме
- команды, выполненные в командном(?) режиме
Хочу отметить несколько важных вещей.
1. Можно enable хранить/менять в tacacs'e
aaa authentication enable default group tacacs+ enable none
Пока оборудование будет подключено к сети - пароль будет браться с сервера, а не с конфигурационного файла. Для того, чтобы использовать цисковский enable необходимо выключить tacacs или отключить оборудование от сети.
2. Можно задать уровень, на котором будут отсылаться пакеты с командами.
aaa accounting commands 15 default start-stop group tacacs+
3. Можно создать группы пользователей, которым можно разрешить доступ только на определенное оборудование.
Для реализации п.3 используются списки доступа в конфигурационном файле tacacs. Например:
acl = USSR {
permit =^10.112.112.112$
deny =^10.
}
group = USSR {
default service = permit
service = exec {
default attribute = permit
priv-lvl = 15
}
acl = USSR
}
user = comrade {
login = des EEC7t7Q9w8Ggs
member = USSR
}