Я думаю, про tacacs+ его настройку, политики, ACL и прочее сказано, а уж тем более написано более чем достаточно. Но, что меня всегда напрягало в tacas+ — постоянно чего-то не хватает. Некая недоработанность что ли...
Например, нельзя задать баннер на вход группе хостов, можно только по отделенности. Нельзя применить идентичные настройки к группе хостов, можно только по отдельности. И наберется ещё с пяток таких придирок. Возможно, я чего-то не знаю, но пока для меня всё обстоит именно так.
На прошлой работе, видел необычный tacacs+, который в корне отличался от стандартного. И вот, спустя какое-то время, я его нашел. И не просто нашел, а внедрил в небольшую конторку.
Речь пойдёт о проекте: www.pro-bono-publico.de/projects/tac_plus.html. Статья будет несколько в духе «How-to», надеюсь кому-то она окажется полезной.
Исходные данные:
Сервер, с debian wheezy на борту, на котором уже стоит tacacs+ и tftp, установленные мной же из репозиториев.
Приступаем к установке и настройке нового tacacs+ (естественно, удаляем старый tacacs+).
Собирать его мы будем с помощью checkinstall. Нам понадобятся некоторые библиотеки и gcc-multilib. Ставим:
Подготавливаем к сборке:
И собираем:
По окончанию мы получим пакет, который благополучно установится в систему икотята будут живы не испортит никакие зависимости.
Далее, самая интересная часть — конфигурирование.
На сети, я использовал tacacs+ для cisco, juniper, zelax, qutech.
Но, приступим к конфигурации самого tacacs+:
Для начала, стоит создать каталог, где будет храниться файл конфигурации, у меня это /etc/tacacs+/. Далее, создадим сам файл конфигурации, у меня — tacacs.conf. Выставляем права 600 на папку и файл, чтобы никто посторонний не смог подсмотреть конфиг.
Далее, приведу простенький пример конфигурационного файла с комментариями:
Пользовательские пароли храним зашифрованным в md5 либо DES. Согласно документации это можно сделать так:
Как вы заметили, всем пользователям по умолчанию даются привилегии 15 уровня (cisco). Однако, пользователи группы noob всё равно смогут выполнить только явно разрешенные им команды. Мне кажется это удобным, не надо постоянно вводить пароль на привилегированный режим.
Возможности ACL тут шире, чем в стандартном tacacs+, но и синтаксис здорово отличается. Для более детального изучение стоит покурить man. В рамках этой статьи останавливаться на ACL я не буду.
И так, мы получили вполне рабочий tacas+. Попробуем его запустить:
В процессах мы увидим нечто такое:
Правда удобно видеть сколько пользователей в данный момент пользуются системой (особенно, когда хочешь её остановить)?
На сайте www.pro-bono-publico.de. Есть пример init скрипта, я его немного изменил под свои нужды:
Даем скрипту права на исполнение (chmod +x). Обзываем его например tac_plus и кидаем в /etc/init.d. Все. Теперь можно стопарить, запускать, рестартовать tacas+ с помощью service tac_plus start/stop/restart.
И для полного феншую добавим tacacs+ в автозагрузку:
Серверная часть готова. Перейдем к настройке активного оборудования. На самом деле, тут все просто, отличился лишь juniper. Для cisco конфиг думаю смысла приводить нет (для zelax и qutech он практически идентичен), а вот для juniper приведу. Кстати, в документации описано, как подружить juniper и tacacs+. В свое время, мне пришлось здорово с этим повозиться.
Конфиг для juniper:
Так же, настоятельно рекомендую выделять подсеть управления и навешивать на все устройства ACL, с доступом только с этой подсети.
А сейчас, приведу несколько скриншотов:
З.Ы. К вопросу стабильности. На прошлой работе систему юзало куча администраторов и было несколько тысяч устройств. Все было, в принципе, хорошо.
На текущем месте — это несколько десятков устройств и пяток пользователей, все прекрасно.
Например, нельзя задать баннер на вход группе хостов, можно только по отделенности. Нельзя применить идентичные настройки к группе хостов, можно только по отдельности. И наберется ещё с пяток таких придирок. Возможно, я чего-то не знаю, но пока для меня всё обстоит именно так.
На прошлой работе, видел необычный tacacs+, который в корне отличался от стандартного. И вот, спустя какое-то время, я его нашел. И не просто нашел, а внедрил в небольшую конторку.
Речь пойдёт о проекте: www.pro-bono-publico.de/projects/tac_plus.html. Статья будет несколько в духе «How-to», надеюсь кому-то она окажется полезной.
Исходные данные:
Сервер, с debian wheezy на борту, на котором уже стоит tacacs+ и tftp, установленные мной же из репозиториев.
Приступаем к установке и настройке нового tacacs+ (естественно, удаляем старый tacacs+).
Собирать его мы будем с помощью checkinstall. Нам понадобятся некоторые библиотеки и gcc-multilib. Ставим:
apt-get install flex bison libtool gcc-multilib checkinstall
Подготавливаем к сборке:
./configure
И собираем:
checkinstall
С первого раза собрать не выйдет, так как компилятор будет ругаться на отсутствующие каталоги. Посему, создадим их сразу:
mkdir /home/USER/tacacs-sourse/PROJECTS/build/linux-3.2.0-4-amd64-x86_64 mkdir /home/USER/tacacs-sourse/PROJECTS/build/linux-3.2.0-4-amd64-x86_64/mavis mkdir /usr/local/etc/mavis
tacacs-sourse — каталог, куда мы распаковали исходники.
По окончанию мы получим пакет, который благополучно установится в систему и
Далее, самая интересная часть — конфигурирование.
На сети, я использовал tacacs+ для cisco, juniper, zelax, qutech.
Но, приступим к конфигурации самого tacacs+:
Для начала, стоит создать каталог, где будет храниться файл конфигурации, у меня это /etc/tacacs+/. Далее, создадим сам файл конфигурации, у меня — tacacs.conf. Выставляем права 600 на папку и файл, чтобы никто посторонний не смог подсмотреть конфиг.
Далее, приведу простенький пример конфигурационного файла с комментариями:
#!/usr/local/sbin/tac_plus
id = spawnd
{
listen = { port = 49 } ## tacacs работает на 49 порту
}
id = tac_plus
{
accounting log = /var/log/tacacs/tac_plus.log ## Сюда складываем логи (кто, что, где и когда делал), неплохо бы задать права 600 и настроить logrotate
mavis module = external ##Подключаем mavis модуль (подробнее можно прочитать в документации). К слову, можно подключить другой модуль и использовать ldap.
{
exec = /usr/local/lib//mavis/mavis_tacplus_passwd.pl
}
login backend = mavis
### Выставляю идентичный баннер для всех хостов
host = world
{
welcome banner = "\nWe are watching you! We know your ip: %%c\n"
failed authentication banner ="\nYou are the %%u?\n"
motd banner = "\nHello %%u. Today is %A!"
key = WeryLongAndSequreKey ## Мегапароль
address = 0.0.0.0/0
}
### Создаю две группы юзеров - админы и... неадмины
#Полный доступ
group = admin
{
default service = permit
service = exec { set priv-lvl = 15 }
service = junos-exec { set local-user-name = remote-super-users } #Классы для juniper, читаем ниже
}
#Доступ только к определенным командам
group = noob
{
default service = deny
service = exec { set priv-lvl = 15 }
service = junos-exec { set local-user-name = remote-read-only }
service = shell
{
cmd = show { permit .* }
cmd = ping { permit .* }
cmd = traceroute { permit .* }
}
}
### ACL тут здорово отличаются от того, что было в обычном tacacs+. В данном случае, сей ACL разрешает пользователю доступ только к устройству 192.168.0.5. На всех прочих мы получим bad password.
acl = noobilo
{
nas = 192.168.0.5
}
### Создаем пользователей
user = prootik
{
member = admin
login = crypt bla-bla-bla
service = shell
{
set priv-lvl = 15
}
}
user = noob
{
acl = noobilo
member = noob
login = crypt la-la-la
service = shell
{
set priv-lvl = 15
}
}
}
Пользовательские пароли храним зашифрованным в md5 либо DES. Согласно документации это можно сделать так:
openssl passwd -1 <clear_text_password>
openssl passwd -crypt
Как вы заметили, всем пользователям по умолчанию даются привилегии 15 уровня (cisco). Однако, пользователи группы noob всё равно смогут выполнить только явно разрешенные им команды. Мне кажется это удобным, не надо постоянно вводить пароль на привилегированный режим.
Возможности ACL тут шире, чем в стандартном tacacs+, но и синтаксис здорово отличается. Для более детального изучение стоит покурить man. В рамках этой статьи останавливаться на ACL я не буду.
И так, мы получили вполне рабочий tacas+. Попробуем его запустить:
tac_plus /etc/tacacs+/tacacs.conf &
В процессах мы увидим нечто такое:
71745 ? Ss 0:00 tac_plus: 0 connections, accepting up to 480 more
71746 ? Ss 0:00 tac_plus: 0 connections
71747 ? Ss 0:00 tac_plus: 0 connection
Правда удобно видеть сколько пользователей в данный момент пользуются системой (особенно, когда хочешь её остановить)?
На сайте www.pro-bono-publico.de. Есть пример init скрипта, я его немного изменил под свои нужды:
#!/bin/sh
#
# Start-stop script for tac_plus
#
# (C)2001-2010 by Marc Huber <Marc.Huber@web.de>
# $Id: etc_init.d_tac_plus,v 1.1 2011/07/22 17:04:03 marc Exp $
#
# chkconfig: 2345 99 99
# description: Starts and stops the tac_plus server process.
#
<code>PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/sbin/
export PATH
DEFAULT=/etc/default/tacplus-tac_plus
PROG=/usr/local/sbin/tac_plus
CONF=/etc/tacacs+/tacacs.conf
PIDFILE=/var/run/tac_plus.pid
NAME=tac_plus
[ -f "$DEFAULT" ] && . "$DEFAULT"
for FILE in $PROG $CONF ; do
if ! [ -f "$FILE" ] ; then
echo $FILE does not exist.
DIE=1
fi
done
if [ "$DIE" != "" ] ; then
echo Exiting.
exit 1
fi
start () {
/bin/echo -n "Starting $NAME: "
if $PROG -bp $PIDFILE $CONF
then
echo "done."
else
echo "failed."
fi
}
restart () {
PID=`cat $PIDFILE 2>/dev/null`
/bin/echo -n "Restarting $NAME: "
if [ "x$PID" = "x" ]
then
echo "failed (service not running)"
else
kill -1 $PID 2>/dev/null
echo "initiated."
fi
}
stop () {
PID=`cat $PIDFILE 2>/dev/null`
/bin/echo -n "Stopping $NAME: "
if [ "x$PID" = "x" ]
then
echo "failed ($NAME is not running)"
else
kill -9 $PID 2>/dev/null
rm -f $PIDFILE
echo "done."
fi
}
case "$1" in
stop)
stop
;;
status)
PID=`cat $PIDFILE 2>/dev/null`
if [ "x$PID" = "x" ]
then
echo "$NAME is not running."
exit 1
fi
if ps -p $PID 2>/dev/null >&2
then
echo "$NAME ($PID) is running."
exit 0
fi
echo "$NAME ($PID) is not running but pid file exists."
;;
start|restart|force-reload|reload)
if $PROG -P $CONF ;then
if [ "$1" = "start" ]
then
stop 2>/dev/null >&2
start
else
restart
fi
else
cat <<EOT
********************************************************************************
* Unable to $1 $NAME ... please fix the configuration problem
* indicated above.
********************************************************************************
EOT
exit 1
fi
;;
*)
echo "Usage: $0 {start|stop|restart|force-reload|reload|status}"
exit 1
;;
esac
exit 0
Даем скрипту права на исполнение (chmod +x). Обзываем его например tac_plus и кидаем в /etc/init.d. Все. Теперь можно стопарить, запускать, рестартовать tacas+ с помощью service tac_plus start/stop/restart.
И для полного феншую добавим tacacs+ в автозагрузку:
update-rc.d tac_plus defaults
.Серверная часть готова. Перейдем к настройке активного оборудования. На самом деле, тут все просто, отличился лишь juniper. Для cisco конфиг думаю смысла приводить нет (для zelax и qutech он практически идентичен), а вот для juniper приведу. Кстати, в документации описано, как подружить juniper и tacacs+. В свое время, мне пришлось здорово с этим повозиться.
Конфиг для juniper:
set system authentication-order tacplus
set system authentication-order password
set system tacplus-server <ip сервера> port 49
set system tacplus-server <ip сервера> secret WeryLongAndSequreKey
set system tacplus-server <ip сервера> timeout 10
set system accounting events login
set system accounting events change-log
set system accounting events interactive-commands
set system accounting destination tacplus server <ip сервера> secret WeryLongAndSequreKey
# А вот тут и зарыта собака, на самом juniper мы должны создать классы пользователей и распределить им права/
set system login user remote-super-users full-name "User template for remote super-users" uid 2013 class super-user
set system login user remote-read-only full-name "User template for remote read-only" uid 2014 class read-only
#Права можно настроить более гибко чем в примере, например:
set system login class remote-getconf permissions [ view-configuration configure ]
set system login user remote-getconfig full-name "User template for remote getconf" uid 2015 class remote-getconf
Даже с включенным tacacs+, вы сможете попасть на juniper под учетной записью root. Это делается для того, чтобы вы могли попасть в shell. По учеткам tacacs+ вы попадаете сразу в cli.
Так же, настоятельно рекомендую выделять подсеть управления и навешивать на все устройства ACL, с доступом только с этой подсети.
А сейчас, приведу несколько скриншотов:
З.Ы. К вопросу стабильности. На прошлой работе систему юзало куча администраторов и было несколько тысяч устройств. Все было, в принципе, хорошо.
На текущем месте — это несколько десятков устройств и пяток пользователей, все прекрасно.