TACACS + на Linux з аутентифікацією через Active Directory

У мережі присутня безліч різних гайдів на цю тему, але підняти сервіс на Linux і пов'язати його з Active Directory в перебігу 30-60 хвилин не вдалося. Пропоную свій шлях вирішення задачі, з докладними коментарями.
 
Приступимо до встановлення сервісу. Як вісь використовується CentOS.
 
 Встановлюємо необхідні службові пакети
 
# yum install gcc
# yum install perl-LDAP
# yum install bind-utils

Всі операції виробляємо під «root»
(Відповідно домашня директорія / root)
 
 Установка Tac Plus
 
# yum install wget
# wget http://www.pro-bono-publico.de/projects/src/DEVEL.tar.bz2
# tar xvfj ./DEVEL.tar.bz2
# cd ./PROJECTS
# ./configure
# make
# make install

 Додаємо директорії для файлів аккаунтинга
 
# mkdir /var/log/tac_plus
# mkdir /var/log/tac_plus/access
# mkdir /var/log/tac_plus/acct
# chmod 760 -R /var/log/tac_plus/

 Додаємо Tac Plus в автозавантаження
 
# cp /root/PROJECTS/tac_plus/extra/etc_init.d_tac_plus /etc/init.d/tac_plus
# chmod 755 /etc/init.d/tac_plus
# chkconfig --add tac_plus
# chkconfig --level 2345 tac_plus on

 Перевірка включення в автозавантаження
 
# chkconfig --list | grep tac_plus

 Правимо конфігураційний файл
 
# cp /root/PROJECTS/tac_plus/extra/tac_plus.cfg-ads /usr/local/etc/tac_plus.cfg
# chmod 660 /usr/local/etc/tac_plus.cfg

 ! Після кожної зміни конфіга сервіс має бути перезапущений (service tac_plus restart)
Приклад робочого конфігураційного файлу (потрібно замінити вміст tac_plus.cfg, попередньо внісши корективи в прокоментовані поля)
 
 
#!/usr/local/sbin/tac_plus
id = spawnd {
        listen = { port = 49 } #порт, используемый сервисом TACACS
        spawn = {
                instances min = 1
                instances max = 10
        }
        background = yes
}

id = tac_plus {
		# лог файлы
        access log = ">/var/log/tac_plus/access/%Y%m%d.log"
        accounting log = ">/var/log/tac_plus/acct/%Y%m%d.log"
		
		# блок настройки подключения к Active Directory
        mavis module = external {
                setenv LDAP_SERVER_TYPE = "microsoft"
                setenv LDAP_HOSTS = "ldaps://domain.name:636" # имя домена должно разрешаться DNS-сервером (проверить с помощью nslookup). Вместо имени можно использовать IP адрес
                setenv LDAP_SCOPE = sub
                setenv LDAP_BASE = "dc=domain,dc=name" # где искать пользователей
                setenv LDAP_FILTER = "(&(objectclass=user)(sAMAccountName=%s))"
                setenv LDAP_USER = "aduser@domain.name" # служебный юзер для интеграции с AD
                setenv LDAP_PASSWD = "passw0rd" # пароль юзера
                #setenv AD_GROUP_PREFIX = tacacs
                #setenv REQUIRE_TACACS_GROUP_PREFIX = 1
                #setenv USE_TLS = 0
                setenv FLAG_USE_MEMBEROF = 1
                exec = /usr/local/lib/mavis/mavis_tacplus_ldap.pl
        }

        login backend = mavis
        user backend = mavis
        #pap backend = mavis

        host = world {
                address = ::/0
                welcome banner = ""
                #Crypt password generate by "openssl passwd -1 clear_text_password"
                enable 15 = crypt $1$eqIkg6p0$jzhK5.
                key = "TACACSPASSWORD" #пароль для связки с TACACS-клиентом
        }
		# группу администрирования наделяем правами суперадмина
        group = ADMIN {
            message = "[Admin privileges]"
            default service = permit
            service = shell {
                default command = permit
                default attribute = permit
                set priv-lvl = 15
            }
        }
		# группе голосовых админов даем полный набор привелегий и запрещаем конкретные команды
        group = VOIP {
            message = "[VoIP-admin privileges]"
            default service = permit
            service = shell {
                default command = permit
                default attribute = permit
                set priv-lvl = 15
                cmd = interface {
                    permit "Lo*"
                    permit "Se*"
                    deny .*
                }
                cmd = aaa { deny .* }
                cmd = username { deny .* }
                cmd = line { deny .* }
                cmd = delete { deny .* }
                #cmd = reload { deny .* }
                cmd = boot { deny .* }
                cmd = enable { deny .* }
                cmd = archive { deny .* }
                cmd = router { deny .* }
                cmd = ip {
                    permit "address *"
                    deny .*
                }
                cmd = tacacs-server { deny .* }
                cmd = radius-server { deny .* }
                cmd = privilege { deny .* }
                cmd = erase { deny .* }
                cmd = write {
                    permit "memory"
                    deny .*
                }
                cmd = format { deny .* }
            }
        }
}

 Перевіряємо правильність конфіга (якщо все ОК, то нічого не виведе)
 
# /usr/local/sbin/tac_plus -P /usr/local/etc/tac_plus.cfg

 Створюємо групи в AD
У Active Directory необхідно створити 2 групи (виходячи з нашого конфіга): tacacsadmin і tacacsvoip.
Tac Plus відрізає префікс «tacacs» при співвідношенні групи, зазначеної в AD, групі в конфіги і переводить залишилися символи у верхній регістр.
Таким чином tacacsadmin соответвствует ADMIN, а tacacsvoip відповідає VOIP (змінити дану поведінку можна погравшись атрибутами: AD_GROUP_PREFIX і REQUIRE_TACACS_GROUP_PREFIX в конфіги).
Групи вказані в конфіги великими буквами не випадково!
Додаємо користувачів у створені групи.
 
 Запуск і зупинка сервісу TACACS
 
# service tac_plus start
# service tac_plus stop
# service tac_plus restart

 Конфігурація сервісу AAA на обладнанні Cisco
 
tacacs server TACSRV1
	!IP-адрес tacacs-сервера
	address ipv4 172.16.2.2
	!ключ должен совпадать с тем, что указан в конфиге на сервере
	key TACACSPASSWORD
	timeout 2
!
aaa new-model
aaa group server tacacs+ TACSERVICE
	server name TACSRV1
aaa authentication login default group TACSERVICE local
aaa authentication login CONSOLE local
aaa authentication enable default group TACSERVICE enable
aaa authorization config-commands
aaa authorization exec default group TACSERVICE local
aaa authorization exec CONSOLE local
aaa authorization commands 15 default group TACSERVICE local
aaa accounting commands 15 default start-stop group TACSERVICE
!
line con 0
	login authentication CONSOLE
line vty 0 15

 Методика дебагом
1. Перевірка роботи модулів LDAP (повинно повернути порожній рядок без помилок). Помилки в разі не встановленого пакета perl-LDAP.
 
# env LDAP_HOSTS="172.16.1.1" LDAP_SERVER_TYPE="microsoft" /usr/local/lib/mavis/mavis_tacplus_ldap.pl
2. Проверка связки TACACS - LDAP. Должно вернуть в поле RESULT - ACK. В случае ошибки проверить блок конфига, ответственный за интеграцию с AD.
<source lang="bash">
# /usr/local/bin/mavistest /usr/local/etc/tac_plus.cfg tac_plus TACPLUS <login> <password>

3. Перевірка, що сервіс запущений і слухає порт tcp 49
 
# netstat -nlp | grep tac_plus

4. Для того, щоб побачити звернення до сервісу
 
# tcpdump -nn port 49

5. Дебагом запитів оброблюваних сервісом
 
# /usr/local/sbin/tac_plus -d 4088 -fp /var/run/tac_plus.pid /usr/local/etc/tac_plus.cfg

Дякую за увагу!
 
 Джерела інформації та допоміжні посилання:
 http://packetroute.wordpress.com/2012/12/12/tacacs-ad-centos-free/
 http://www.pro-bono-publico.de/projects/howto-tac_plus-ads.html
 http://habrahabr.ru/post/194750/

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.