TACACS Commands – Cisco

Aaa group server tacacs

To group different server hosts into distinct lists and distinct methods, use the aaa group server tacacs command in global configuration mode. To remove a server group from the configuration list, use the no form of this command.

aaa group server tacacs group-name

no aaa group server tacacs group-name

Callback (не проверял)

В
конфигурацию NAS
добавляем:═aaa new-model═tacacs-server host …═tacacs-server key …═aaa authentication login execckeck tacacs ═aaa authentication ppp pppcheck tacacs ═aaa authorization network tacacs ═service exec-callback═line 4═login authentication execcheck═int async 6═ppp authentication chap pppcheck═ppp callback accept

Command default

If the command is not configured, the timeout interval is 5.

Command modes

TACACS group server configuration

Defaults

No default behavior or values.

Examples

The following example specifies a TACACS host named Sea_Change:

The following example specifies that, for authentication, authorization, and accounting (AAA) confirmation, the router consults the TACACS server host named Sea_Cure on port number 51. The timeout value for requests on this connection is three seconds; the encryption key is a_secret.

Ip tacacs source-interface

To use the IP address of a specified interface for all outgoing TACACS packets, use the ip tacacs source-interface command in global configuration mode. To disable use of the specified interface IP address, use the no form of this command.

ip tacacs source-interface subinterface-name

no ip tacacs source-interface

Server (tacacs )

To configure the IP address of the TACACS server for the group server, use the server command in TACACS group server configuration mode. To remove the IP address of the RADIUS server, use the no form of this command.

server ip-address

no server ip-address

Show tacacs

To display statistics for a TACACS server, use the show tacacs command in EXEC configuration mode.

show tacacs

Syntax description

This command has no arguments or keywords.

Systemd.service:

раз

man systemd.service

Systemd.unit:

раз

man systemd.unit

Table of contents

TACACS  Commands

aaa group server tacacs

ip tacacs source-interface

server (TACACS )

show tacacs

Tacacs с аутентификацией через ldap

А есть, значит, другой tacacs, тот что поддерживает аутентификацию через PAM, LDAP, Radius, списки доступа для NAC, NAS, гибкое управление группами, большое кол-во регулярок и возможность управлять авторизацией с помощью скриптов. Если ранее был установлен обычный tacacs , то теперь его можно смело удалить:

apt remove tacacs

Установим сперва библиотеку для работы с LDAP:

apt update && apt install libnet-ldap-perl

Заранее создадим дерево каталогов для логирования:

mkdir -p /var/log/tac_plus/{access,accounting,authentication}

Проверим:

tree /var/log/tac_plus

Теперь скачиваем пакет, вот этот – DEVEL.202208261951.tar.bz2

Теперь пара ссылок на официальную документацию.

Здесь общий список проектов от разработчика

Здесь Mini-HowTo, как установить и протестировать работу tac_plus

Продолжим, распакуем архив и установим необходимые пакеты:

Если возникнут какие-либо ошибки, либо вы хотите использовать PCRE-регулярки (а их можно использовать), то соберите пакет так:

./configure –with-pcre

и теперь повторно

Готово. Теперь немного поправим права на файл конфигурации (разрешим редактирование только из под root, остальным дадим права на выполнение):

chmod 755 /usr/local/etc/tac_plus.cfg

Перед тем, как начнем править конфиг, пара очень полезных ссылок по теме:

официальная документация. Здесь есть примеры простых конфигураций. Самая полезная ссылка.

habr – статья на хабре с примером конфигурации и комментариями.

пример настройки

Правим конфиг. Приведу пример файла конфигурации, в комментариях, что и как работает, а еще то, что включить лично у меня не получилось:

#!/usr/local/sbin/tac_plus
id = spawnd { # общее "тело" конфигурации
listen = {
# глобальный список nas и порт, который слушает tacacs (любые nas, 49 tcp port, можно выбрать любой другой)
  address = 0.0.0.0 port = 49
  }
spawn = {
# число инстансов для spawnd
  instances min = 1
  instances max = 10
  }
  background = yes
}
# здесь настроим backend для работы с LDAP
id = tac_plus {
# укажем, куда логировать. Любые логи нужно ротировать, позже настроим для этого logrotate
  access log = /var/log/tac_plus/access/access-%d-%m-%Y.txt
  accounting log = /var/log/tac_plus/accounting/accounting-%d-%m-%Y.txt
  authentication log = /var/log/tac_plus/authentication/authentication-%d-%m-%Y.txt
# mavis - backend для работы с LDAP
# все параметры хорошо описаны здесь - http://www.pro-bono-publico.de/projects/tac_plus.html#AEN2318
  mavis module = external {
  setenv LDAP_SERVER_TYPE = "microsoft"
# LDAP-сервер принимает запросы на порт 389, инкапсулированные в SSL - на порт 636. X.X.X.X - ip-адрес LDAP-сервера
  setenv LDAP_HOSTS = "X.X.X.X:389 X.X.X.X:636"
# указываем имя домена. Например, если ваш домен your.domain, то будет так
  setenv LDAP_BASE = "DC=your,DC=domain"
  setenv LDAP_SCOPE = sub
# парсим по всем пользователям в AD
  setenv LDAP_FILTER = "(&(objectClass=user)(objectClass=person)(sAMAccountName=%s))"
# техонологическая учетка в AD, которую будет использовать mavis. Саму учетку создадим чуть позже.
  setenv LDAP_USER = "[email protected]"
# пароль от технологической учетки
  setenv LDAP_PASSWD = "tacacsplus_password"
# снимаем ограничение с групп в AD
  setenv UNLIMIT_AD_GROUP_MEMBERSHIP = 1
  setenv EXPAND_AD_GROUP_MEMBERSHIP = 0
# важный параметр, благодаря которому можно будет опустить имя домена при аутентификации на устройстве
  setenv AD_GROUP_PREFIX = ""
  setenv REQUIRE_TACACS_GROUP_PREFIX = 0
# подключаем сам perl-модуль
  exec = /usr/local/lib/mavis/mavis_tacplus_ldap.pl
}

# указываем модуль для работы с LDAP. К слову, есть и другие модули
login backend = mavis
user backend = mavis
pap backend = mavis

# формируем список NAS-хостов
host = world {
# разрешим NAS с любыми ip
  address = ::/0
# различные баннеры при аутентификации на устройстве. Работают не в каждом клиенте. Например, работают в securecrt
  welcome banner = "Welcome. Today is %A. n"
  prompt = "Your actions are recording...n"
# ключ, который будем использовать при настройке tacacs на NAS-устройствах
  key = "your_key"
# не используем наследование конфигурации от стоящих выше списков
  inherit = no
# настроим дефалтную группу. Пользователи, которые не относятся ни к одной из существующих групп, будут попадать сюда. Для этой группы настрим acl и запретим аутентификацию
  default group = no_login

# если будут проблемы при подключении с одного и того же nac, то можно использовать (сейчас закомментировано):
# single-connection = yes
}

# сформируем еще один список NAS-хостов, для которых будут уникальные права авторизации
host = backbone {
# указываем список NAS ip вашего backbone. Пример:
  address = Y.Y.Y.Y/24,Z.Z.Z.Z
# можно указать в виде файла
# address file = ~/addresses.cidr
# дальше по аналогии со списком world
  welcome banner = "Welcome. Today is %A. n"
  prompt = "Your actions are recording...n"
  key = "your_key"
  inherit = no
  default group = no_login
# single-connection = yes
}

# очень полезный acl, которым можно разом закрыть доступ для всех NAC, за пределами этого списка
acl = nacacl {
  nac = X.X.X.X/24
  nac = Y.Y.Y.Y
}

# acl для default_group. Запрещаем аутентифицровать пользователей, которые не принадлежат никакой группе
acl script = no_login {
  deny
}

# применяем acl no_login для группы пользователей no_login
group = no_login {
  acl = no_login
}

# настроим права для групп, а затем добавим в них пользователей
group = TACACS_BACKBONE {
# сообщение при аутентификации на оборудовании
  message = "your text"
# запрещаем все типы сервисов по умолчанию
  default service = deny
# разрешаем аутентифицироваться на оборудовании только NAC из nacacl
  acl = nacacl
# настраиваем разрешения для доступа к определенным командам на NAS-устройствах
  service = shell {
# по умолчанию разрешим все команды
  default command = permit
# запретим передачу аттрибутов
  default attribute = deny
# установим уровень привелегий, по умолчанию
  set priv-lvl = 15
# допустим вам необходимо запретить определенные команды при нахождении в режиме интерфейса. Это делается так (только вот у меня, к сожалению, не заработало, поэтому скрипт закомментирован):
# script = {
#       if (cmd == "") permit
#
#       if (cmd =~ "^interface ") {
#           message = "Context has been set. All commands doesn't work for this interface."
#           context = GE
#           permit
#       }
#       else if (cmd =~ "^interface"){
#           message = "Context has been reset."
#           context = ""
#           permit
#       }
#       if (context == GE) {
#           if (cmd =~ "^shut") deny
#           if (cmd =~ "^undo shut") permit
#           deny
#        }
#       }

# команд на NAS много, поэтому запрещать их по отдельности не очень удобно, например, так:
cmd = undo {
    permit "^debbuging"
    permit "^packet-capture"
    deny .*
}

# можно использовать скрипты, например, так:
# запретим все команды, которые начинаются с символов в квадртаных скобках
  script = {
    if (cmd =~ "^[a,e,f,i,g,h,k,l,m]") {
    deny
    }
  }
# разрешим команды, начинающиеся на ba или br, запретим все остальные, начинающиеся на b:
script = {
    if (cmd =~ "^b[a,r]") {
    permit
    }
    else if (cmd =~ "^b") {
    deny
    }
  }
# разрешим команды, начинающиеся на deb, dir, всё, что входит в display, запретим остальные, начинающиеся на d
  script = {
    if (cmd =~ "^deb" || cmd =~ "^dir" || cmd =~ "^display") {
    permit
    }
    else if (cmd =~ "^d") {
    deny
    }
  }
 }
}
group = TACACS_HELPDESK {
# можно прикрутить права другой группы, просто в качестве примера:
# member = TACACS_ADMIN
  message = "your text"
  default service = deny
  acl = nacacl
  service = shell {
  default command = permit
  default attribute = deny
  set priv-lvl = 15
# для этой группы разрешим все команды на NAS-устройствах, но запретим bgp, ospf, isis
  script = {
    if (cmd =~ "^bgp" || cmd =~ "^ospf" || cmd =~ "^isis") {
    deny
    }
    else permit
  }
 }
}
# настроим группу администраторов, где разрешим всё
group = TACACS_ADMIN {
 message = "your text"
 default service = permit
 acl = nacacl
 service = shell {
 default command = permit
 default attribute = permit
 set priv-lvl = 15
 }
}

# добавим пользователей, которые будут аутентифицироваться через LDAP. В AD заведем этих пользователей чуть позже
user = user1 {
  member = TACACS_ADMIN
}

user = user2 {
# для хостов из списка backbone применяем права группы tacacs_backbone
 member = TACACS_BACKBONE@backbone
# для всех остальных хостов применяем права группы tacacs_helpdesk
 member = TACACS_HELPDESK
}

# не обязательно использовать LDAP для аутентификации. Можно использовать локальных пользователей
user = local_user {
 member = TACACS_ADMIN
# пароль, который дает утилита openssl passwd -crypt. Применение описано выше, в основном тексте
 login = crypt s8FHJQOEIWkqlzx
}
# manual - http://www.pro-bono-publico.de/projects/tac_plus.html#AEN1299

Теперь добавим учетки на LDAP-сервере. Средства администрирования – Пользователи и компьютеры.

Для начала создадим технологическую учетную запись для mavis: действие – создать – пользователь. На вкладке “Учетная запись” ставим галочки “Запретить смену пароля пользователем”, “Срок действия пароля не ограничен”

Tacacs-server dns-alias-lookup

To enable IP Domain Name System (DNS) alias lookup for TACACS servers, use the command in global configuration mode. To disable IP DNS alias lookup, use the no form of this command.

tacacs-server dns-alias-lookup

no tacacs-server dns-alias-lookup

Tacacs-server host

To specify a TACACS host, use the tacacs-server host command in global configuration mode. To delete the specified name or address, use the no form of this command.

tacacs-server host host-name [port integer] [timeoutinteger] [key string] [single-connection] [nat]

no tacacs-server host host-name

Tacacs-server key

To set the authentication encryption key used for all TACACS communications between the access server and the TACACS daemon, use the tacacs-server key command in global configuration mode. To disable the key, use the no form of this command.

tacacs-server key key

no tacacs-server key [key]

Tacacs-server packet

To modify TACACS packet options, use thetacacs-server packet command in global configuration mode. To disable the modified packet options, use the no form of this command.

tacacs-server packet maxsize

no tacacs-server packet

Tacacs-server timeout

To set the interval for which the server waits for a server host to reply, use the tacacs-server timeout command in global configuration mode. To restore the default, use the no form of this command.

tacacs-server timeout seconds

no tacacs-server timeout seconds

Update.rc.d для работы с автозагрузкой в sysv:

раз

Автозагрузка в linux:

раз

Аутентификация tacacs | juniper networks

Junos OS могут соотоставить RADIUS- и TACACS -authenticated пользователей с локально определенной учетной записью пользователя или учетной записью шаблона пользователя, которая определяет права доступа пользователя. Можно также дополнительно настроить пользовательские привилегии доступа, определив атрибуты Juniper Networks RADIUS и TACACS для поставщика (VSAs) на соответствующем сервере аутентификации.

Класс входа пользователя определяет набор разрешений, которые определяют, какой режим работы и команды режима конфигурации пользователь может выполнять, а какие области конфигурации пользователь может просматривать и изменять. Класс входа также может определять регулярные выражения, которые позволяют или запретить пользователю возможность выполнять определенные команды или просматривать и изменять определенные области конфигурации, в дополнение к тем разрешениям, которые авторизируют флаги разрешений. Класс входа может включать в себя следующие утверждения для определения авторизации пользователя:

Аналогичным образом конфигурация RADIUS или сервера TACACS может использовать Juniper Networks VSAs для определения определенных разрешений или регулярных выражений, определяя права доступа пользователя. Список поддерживаемых RADIUS TACACS VSAS см. в следующем:

На сервере RADIUS TACACS можно определить пользовательские разрешения как список значений, разделенных пространством.

Сервер RADIUS или TACACS также может определить Juniper Networks VSAs, которые используют одно расширенное регулярное выражение (как определено в POSIX 1003.2), чтобы разрешить или запретить пользователю возможность выполнения определенных команд или просматривать и изменять области конфигурации. Несколько команд или иерархий конфигурации заключены в скобки и разделяют их с помощью символа канала. Если регулярное выражение содержит пробелы, операторы или поддиамые символы, занося их в кавычках. При настройке параметров авторизации как локально, так и удаленно, устройство объединяет регулярные выражения, полученные во время TACACS или RADIUS авторизации с любыми регулярными выражениями, определенными на локальном устройстве.

RADIUS серверы TACACS также поддерживают настройку атрибутов, соответствующих тем же утверждениям, что можно настроить на *-regexps локальном устройстве. Атрибуты TACACS и атрибуты RADIUS используют тот же синтаксис регулярных выражений, что и предыдущие атрибуты, но они позволяют настраивать регулярные выражения с *-regexps*-Regexps переменными.

На сервере RADIUS TACACS можно также определить атрибуты с помощью упрощенного синтаксиса, в котором каждое отдельное выражение указывается на отдельной строке.

Для сервера RADIUS регулярные выражения, используя следующий синтаксис:

Juniper-User-Permissions  = "permission-flag1",
Juniper-User-Permissions  = "permission-flag2",
Juniper-User-Permissions  = "permission-flagn",
Juniper-Allow-Commands  = "cmd1",
Juniper-Allow-Commands  = "cmd2",
Juniper-Allow-Commands  = "cmdn",
Juniper-Deny-Commands  = "cmd1",
Juniper-Deny-Commands  = "cmd2",
Juniper-Deny-Commands  = "cmdn",
Juniper-Allow-Configuration  = "config1",
Juniper-Allow-Configuration  = "config2",
Juniper-Allow-Configuration  = "confign",
Juniper-Deny-Configuration  = "config1",
Juniper-Deny-Configuration  = "config2",
Juniper-Deny-Configuration  = "confign",

Для сервера TACACS укажите регулярные выражения, используя следующий синтаксис:

user-permissions1 = "permission-flag1"
user-permissions2 = "permission-flag2"
user-permissionsn = "permission-flagn"
allow-commands1 = "cmd1"
allow-commands2 = "cmd2"
allow-commandsn = "cmdn"
deny-commands1 = "cmd1"
deny-commands2 = "cmd2"
deny-commandsn = "cmdn"
allow-configuration1 = "config1"
allow-configuration2 = "config2"
allow-configurationn = "confign"
deny-configuration1 = "config1"
deny-configuration2 = "config2"
deny-configurationn = "confign"

Пользователи могут проверить свои класс, разрешения, а также команду и авторизацию конфигурации, выдав show cli authorization команду operational mode.

user@host> show cli authorization

Базовые понятия

TACACS – протокол между
клиентами и сервером (49/tcp): Authentification
(проверка тот ли
пользователь за кого он себя выдает), Authorization
(права выполнять то или иное
действие) и Accounting (учет
затраченных ресурсов).
Используется Cisco в
IOS для
расширения внутренних средств
контроля за
пользователями
(невозможно каждый раз
переконфигурировать киску, если
появился новый клиент) с помощью
внешнего сервера.

Имеет три
модификации: tacacs, xtacacs, tacacs . Первые две
имеют
историческое значение. Фирма Cisco дарит
исходники тестового tacacs демона всем
желающим (если знаешь, где искать ;). К
сожалению, он несмотря на
развитие
перманентно остается в
состоянии
альфа-версии.

Версии

IOS 12.0(5). Tac_plus F4.0.2/3.alpha. TACACS protocol 1.78.

Дебаг

Проверим, что сервис слушает 49 порт:

netstat -nlp | grep tac_plus

Всегда можно снять дамп и посмотреть, есть ли какие-то пакеты:

Дебаг запросов, которые обрабатывает сервер:

/usr/local/sbin/tac_plus -d 4088 -fp /var/run/tac_plus.pid /usr/local/etc/tac_plus.cfg

Дебагу посвящен отдельный раздел в документации:

Debugging

Делаем systemd-unit:

раз

два

три

четыре

Еще немного

Настроим history и время на сервере, чтобы было удобнее работать:

  • Открываем файл с настройками работы в терминале:

nano ~/.bashrc

  • Добавляем в конец файла строчки:
  • Перечитываем конфигурацию bash:

exec bash

Синхронизируем время по сети. Сперва найдем нужный часовой пояс:

timedatectl list-timezones | grep Moscow

Теперь установим

sudo timedatectl set-timezone ‘Europe/Moscow’

Проверим время:

date

Запуск tacacs
сервера

crontab пользователя содержит строчку, каждый час запускающую
tacacs_reload.sh, которая либо запускает tacacs_сервер (если он не был
запущен ранее) с конфигурационным файлом или извещает
запущенный ранее сервер о необходимости заново прочитать конфигурационный файл.

Ключи запуска

tac_plus

  • -C
    имя-конфигурационного-файла
  • -t (выдавать журнал на консоль)
  • -P (проверить
    правильность
    синтаксиса файла
    конфигурации)
  • -g (отладочный режим – без
    порождения подзадач)
  • -p tcp-порт (по умолчанию – 49)
  • -d
    уровень-отладки (в /var/tmp/tac_plus.log)
  • -v (напечатать версию и выйти)
  • -s (не отвечать на sendpass – старый менее
    безопасный протокол -, а только sendauth)
  • -L (получать имена по DNS)
  • -l файл-журнал
  • -w
    файл-для-записи-who-журнала (для maxsess, по
    умолчанию – /var/tmp/tac.who_log)
  • -u wtmp-файл
    (регистрация
    пользователей с помощью wtmp вместо
    стандартного учетного файла tacacs )
  • -i (запуск через inetd)


Сигналы:

  • USR1 – перечитать
    конфигурационный файл (ошибка в новой
    конфигурации убъет демон)

Использует syslog (LOG_LOCAL6).
Отладочная печать в него не
выдается.

Конфигурирование tacacs

Подробное описание
синтаксиса есть в
документации, так что я его опущу. В начале файла
должен задаваться ключ (им
шифруются все
передаваемый пакеты, так что его
необходимо тщательно скрывать, знание ключа
позволяет извлечь пароли
пользователей – для борьбы с этим
надо включить
поддержку DES в tac_plus). key = ключтот же ключ д.б. задан в
конфигурации IOStacacs-server key ключ


Всю, что начнается с # до конца строки
считается
комментарием. Если # нужен сам по себе (в
паролях, например), то он д.б.
заключен в кавычки.

Общее

В ААА последняя буква – это accounting. Лучше заранее подумать, куда будем складывать информацию о том, кто, когда и куда получил доступ и какие действия на оборудовании были выполнены. Если разворачиваете новый сервер, то лучше использовать LVM для распределения места на диске, сможете быстро менять размер томов при нехватке места. Вообще, для серверов, которые постоянно создают какие-то данные, лучше держать LVM и предусмотреть ротацию этих данных.

Мы будем складывать данные аккаунтинга на наш локальный сервер (хотя можно, например, в syslog, а можно в базу данных, а затем на мониторинг, но об этом попозже). Используем обычные разделы, выделим и примонтируем отдельный раздел для аккаунтинга и настроим ротацию создаваемых логов:

  • Выделим место (например, в вашей vmware)
  • Проверим на сервере (далее все команды будем выполнять из по root):

fdisk -l

смотрим на строчку, где видим общее кол-во Gb на диске:

Disk /dev/sda: 50 GiB, 53687091200 bytes, 104857600 sectors

(я выделил 16Gb для / и 34Gb для остального)

m – вызвать справку по командам fdisk

n – создать новый раздел (создаем sda3 на все 34Gb) Раздел создали, теперь форматируем в ext4:

mkfs.ext4 /dev/sda3

Отформатировали, теперь примонтируем: создаем директорию для аккаунтинга:

добавляем строчку:

/dev/sda3 /var/log/tac_plus ext4 defaults 1 2

mount -a

Теперь настроим ротацию с помощью logrotate:

1) установим утилиту:

apt update && apt install logrotate

2) создадем новый конфигурационный файл для ротации в /etc/logrotate.d/. Этот файл уже будет выполняться ежедневно по cron:

touch tacacs

Внесем настройки:

nano /etc/logrotate.d/tacacs

daily – выполнять ротацию ежедневно.

missingok – не выдавать ошибки, если отсутствуют файлы для ротации

rotate – кол-во логов, которые оставляем после каждой ротации

Т.е. будем ежедневно проверять содержимое директорий, оставлять последние 365 файлов, остальные удалять. У Logrotate много параметров, и утилиту можно использовать не только для логов:

man logrotate

Обычный tacacs

Развернем tacacs из стандартных репозиториев. Здесь не будет аутентификации через LDAP (если нужен LDAP, то пропускаем этот раздел и переходим к следующему. Для работы с LDAP потребуется установить другой пакет). Обновляем индекс и устанавливаем пакет:

apt update && apt install tacacs

Демон должен запуститься, проверим любой из команд:

systemctl status tac_plus

service tac_plus status

ps -e | grep tac

Прежде чем открыть конфиг, пара основных терминов:

NAS (network access server) – сетевое устройство, к которому мы будем подключаться через tacacs

NAC (network access client) – хосты, с которых мы будем подключаться к сетевому оборудованию

AV (attribute-value) – пара аттрибут – значение, которые передаются между клиентом и сервером tacacs. Например, privilege level или default ftp-directory.

Теперь откроем конфиг:

nano /etc/tacacs /tac_plus.conf

Сейчас пара полезных ссылок с примерами конфигураций:

раз

два

И, конечно же, если какие-то вопросы решить не получается, всегда читайте man:

man tac_plus.conf

Простой пример конфига:

accounting file = /var/log/tac_plus.acct # файл, где будут храниться все действия, выполняемые пользователем на оборудовании

key = SoMe_KeY_1234 # ключ, который будет использовать NAS для подключения к серверу

user = admin {
     member = admin
     login = des v4FH4KSkwkqy # зашифрованный пароль, о том, как создать - ниже
}

user = test {
     member = guest
     login = des CAjOONkQeROwy
}
# по умолчанию, для группы guest запретим всё, кроме отдельно взятых команд
group = guest {
     default service = deny
     service = exec {
     priv-lvl = 15
     }
     cmd = system-view {
           permit .*
     }
     cmd = display {
           permit .*
     }
     cmd = stelnet {
           permit .*
     }
     cmd = telnet {
           permit .*
     }
     cmd = quit {
           permit .*
     }
     cmd = ping {
           permit ,*
     }
# по умолчанию, разрешим всё для группы admin
group = admin {
	default service = permit
    service = exec {
    priv-lvl = 15
    }
}

Здесь стоит обратить внимание на создание юзеров. Поскольку этот вариант без LDAP, то все юзеры должны быть созданы локально, на сервере. Создадим юзера и зашифруем пароль:

Отладка

Проверка синтаксиса
конфигурационного файла: tac_plus -P

tac_plus -d
уровень-отладкидолжен
сбрасывать отладочную печать в /var/tmp/tac_plus.log. К
сожалению, в этот файл попадают только
сообщения о запуске tac_plus и все.
Отладочную печать мне удалось
получить только на консоль, что в моей
конфигурации (а/ц терминал)
невозможно
использовать. Или на stdout при запуске в
отладочном режиме (-g).

Подсчет времени, который затратил каждый
пользователь на ppp


TACACS сервер заносит в свою (account.tacacs) базу
данных (при нынешней
конфигурации) запись о каждом конце сеанса PPP
пользователя:

  1. время (5 полей);
  2. имя
    терминального сервера;
  3. имя
    пользователя;
  4. номер порта на
    терминальном сервере;
  5. async;
  6. stop (это и есть признак конца сеанса);
  7. ключевые параметры, среди которых есть:

    • service=PPP
    • elapsed_time=

    • количество
      входных/выходных
      байт/пакетов

(tacacs/ppp_elapsed.sh) процедура извлекает из этой базы данных все записи за
последние 86400 секунд (сутки) и суммирует потраченное каждым пользователем
время.

Предусмотрим автозагрузку

Конечно, можно стартовать сервис классическими /etc/init.d/tac_plus start и /etc/init.d/tac_plus stop, но, подразумевается, что после рестарта системы сервис поднимется автоматически. Начнем с того, что Ubuntu 19.04, как и большинство современных дистрибутивов Linux, используют подсистему инициализации systemd, которая очень неплохо работает с init-скриптами, написанными для более старой подсистемы sysv.

Итак, для инициализации сервиса tac_plus, который мы будем использовать, увы, написан не systemd unit, а sysv init-скрипт. Найти такой скрипт можно здесь (мы его сами туда скопировали) – /etc/init.d, наш – /etc/init.d/tac_plus (этот для варианта с ldap, а для варианта без ldap будет tacacs_plus).

Чтобы добавить наш tac_plus сервер в автозагрузку (а скорее всего его там нет, т.е. после рестарта он не запустится) можно изучить документацию по systemd и написать для него собственный unit, либо можно воспользоваться уже написанным sysv init-скриптом (ниже будет пара ссылок о написании systemd unit’ов). Выберем второй вариант:

1) В systemd предусмотрена совместимость со скриптами sysv из коробки. Для этого используется systemd-sysv-generator. Попробуем воспользоваться просто запустив sysv-скрипт не с помощью service, а с помощью systemctl:

systemctl start tac_plus # стартуем сервис

systemctl enable tac_plus # добавляем сервис в автозагрузку

Если все прошло успешно, то можем проверить статус:

systemctl status tac_plus

Должны увидеть такое сообщение:

В выводе видно, что systemd запустил systemd-sysv-generator и преобразовал sysv-скрипт /etc/init.d/tac_plus в systemd unit. Теперь можем взглянуть на полученный systemd unit:

cat /run/systemd/generator.late/tac_plus.service

Выглядит это как-то так:

Перезагружаем сервер, проверяем, все ли хорошо(в выводе должны увидеть процесс tac_plus):

ps -e | grep tac

2) Вообще, чтобы systemd-sysv-generator отработал корректно, sysv-скрипт должен иметь LSB заголовок одними из первых строчек, хотя это не совсем верно, и он вполне неплохо распознает более ограниченные старые заголовки комментариев RedHat (description:, pidfile: и т. д.), которые есть в /etc/init.d/tac_plus. Однако, если systemd-sysv-generator все же подвел, попробуйте добавить LSB в начало файла tac_plus и повторить попытку:

Цифрами здесь указаны runlevel для sysv, на которых будет стартовать и останавливаться init-скрипт. Они, кстати, находятся там же (/etc/rc3.d, /etc/rc4.d, /etc/rc5.d и т.д), а скрипты с буквами S и K в начале стартуют и останавливаются скрипты (подробнее о sysv по ссылкам ниже).

Еще стоит сказать, что стандартными способами добавления сервиса в автозагрузку в sysv были использование файла /etc/rc.local (в systemd он остался для совместимости, но не включен в автозагрузку, по умолчанию) и использование утилиты update-rc.d, которая раскидывает ваш init-скрипт по нужным runlevel.

3) Если добавление LSB заголовка не помогло (это мы делали в пункте 2), то давайте напишем свой systemd unit и добавим его в автозагрузку. Ну как свой, в существующем коде tacacs копаться мы не будем, а немного считерим и воспользуемся нашим /etc/init.d/tac_plus (добавим команды запуска, остановки и рестарта).

  • */lib/systemd/system/ *# здесь хранятся копии всех unit’ов. Эти файлы могут быть запущены или остановлены самим сервисов во время его работы. Вносить изменения в эти файлы очень нежелательно. Для этого есть другая директория:
  • */etc/systemd/system/ *# именно здесь и следует создавать systemd unit. К тому же эта директория имеет приоритет над остальными
  • /run/systemd/system/ # файлы в этом каталоге имеют приоритет между /etc/systemd/system и/lib/systemd/system. К тому же systemd использует эту директорию для создания временных файлов в процессе работы. Рестарт сервера очищает каталог.

Создадим наш unit в /etc/systemd/system/

nano /etc/systemd/system/tac_unit.service

Добавим следующее:

Дадим unit-файлу права на выполнение:

chmod x /etc/systemd/system/tac_unit.service

Теперь запустим наш unit:

systemctl start tac_unit.service

Добавим unit в автозагрузку:

systemctl enable tac_unit.service

Проверим, что unit-файл в автозагрузке:

Если вносите какие-то изменения в unit-файл, то systemd должен его снова изучить:

systemctl daemon-reload

  • Обязательно рестартуем сервер и проверяем, работает ли автозагрузка для нашего tac_plus:

ps -e | grep tac # после рестарта

Кстати systemctl неплохо логирует в journalctl. Посмотреть логи автозагрузки для сервиса/unit’а можно так:

Проверка прав (authorization).

По умолчанию, NAS разрешает
вошедшему
пользователю все, если ее не
сконфигурировать
передавать запросы к демону. Демон, уж если
запрос попал к нему, наоборот
запрещает все по умолчанию. Демон может
запретить выполнение команды или
использование сервиса или
модифицировать их
параметры.

Авторизация команд
конфигурируется заданием
регулярных выражений в качестве
шаблонов для сравнения
запрошенной
пользователем команды
(синтаксис аналогичен egrep) и
действия “deny” или “permit”:cmd =
имя-команды═{═deny/permit шаблон═…}

Используется первый
подошедший шаблон. Если не подошел ни один, то
команда
запрещается. Все имена команд
предварительно
расширяются до их полного
вида.Если нужно разрешить все или почти все, то
используются строки:

  • default authorization = permit # на самом
    внешнем уровне, разрешает все по
    умолчанию
  • default service = permit # на уровне
    пользователя, разрешить все по
    умолчанию для данного
    пользователя (д.б. первой)
  • default attribut = permit # на уровне
    описания сервиса (д.б. первой)

Если
разрешается
выполнение хотя бы одной команды, то неявно
разрешается запуск EXEC, но можно
поменять параметры СЕРВИСА execservice = exec {═acl = 4═autocmd = “ppp default”}

Авторизация сервисов. При
попытке
пользователя запустить сервис, NAS
посылает демону запрос
состоящий из набора AV-пар (attribut=value или attribut*value,
если значение
необязательно). Например,
авторизация PPP/IP состоит из
следующих запросов:

  1. service=ppp
    protocol=ip
  2. service=ppp
    protocol=lcp # здесь можно задать
    параметры LCP (callback,
    например)
  3. service = ppp
    protocol = ipcp
  4. если клиент требует адрес, не
    возвращенный демоном ранее, то
    делается запрос(ы) на проверку
    допустомости адреса

Каждый запрос
обрабатывается так: ищется в
описании
пользователя или группы часть
соответствующая сервису и
протоколу. Затем для каждой
обязательной AV пары,
пришедшей с NAS, ищется значение
атрибута из списка
обязательных. Если нашли, AV пара
передаются на выход.

Если не нашли, ищем
первое
соответствие среди списка
необязательных. Если нашли,
передаем на выход. Если не нашли ни там ни там, то в
зависимости от
авторизации по умолчанию: deny –
запретить команду (сервис?), permit –
пропустить AV пару на выход.

Для
опциональной AV пары,
пришедшей с NAS, ищется значение
атрибута из списка
обязательных. Если нашли, AV пара с демона – на
выход. Если не нашли, ищем первое
соответствие среди списка
необязательных. Если нашли,
передаем на выход AV пару с демона (при обоих
поисках приоритет имеет точное
соответствие).

Если не нашли ни там ни там, то в
зависимости от
авторизации по умолчанию: deny –
удалить AV пару, permit –
пропустить AV пару с NAS на выход. После всего
этого, для каждой
обязательной AV пары на демоне,
проверятся есть ли
соответствующая ей пара на выходе, и если нет, то
добавляем AV пару с демона на выход.
Необязательность AV пары на демоне
задается словом optional перед именем
атрибута.

Проверка
подлинности клиента (authentification)

В описании группы задаются
параметры общие для всех членов группы. В
описании
пользователя
указываются
специфичные для данного
пользователя параметры
(перекрывают значения
параметров в описании группы). Группы могут
входить в состав других групп (число
уровней иерархии не
ограничено). Внутри фигурных скобок могут быть
команды:

  • arap = cleartext “пароль для arap”
  • chap = cleartext “пароль для chap” #
    заметьте, что в этом случае пароль нельзя
    шифровать
  • ms-chap = cleartext “пароль для chap” #
    заметьте, что в этом случае пароль нельзя
    шифровать
  • pap = cleartext “inbound pap password”
  • pap = des
    “шифрованный как Unix пароль”
  • opap = cleartext “outbound pap password”
  • login = cleartext “пароль для
    текстового диалога useername/password”
  • login = des
    “шифрованный как Unix пароль для
    диалога”
  • login = file /etc/passwd
  • login = nopassword
  • login = skey
  • global ═= cleartext “единый пароль на все
    случаи жизни”
  • expires = “MMM DD YYYY” # дата
    протухания пароля,
    пользователь получает
    предупреждение за 14 дней

Специальные
пользователи: $enabуровень$, где
уровень – это уровень
привилегий в EXEC IOS.
Позволяет задать
внешне-управляемый пароль для
перехода на другой уровень
привилегий.
Задействуется командой: “aaa auth enable default tacacs “.


Специальный
пользователь DEFAULT
позволяет задавать
параметры
авторизации по умолчанию.

Структура
нашего
конфигурационного файла

наш конфигурационный файл (config.tacacs) изготавливается из базы
пользователей WorldGroup и состоит из трех частей:

  1. заголовка, в котором указан ключ
    шифрования, имя
    (account.tacacs) файла
    статистики и описание
    пользователя bbs из группы telnet с
    паролем bbs (для demo
    пользователей).
  2. для каждого платного
    пользователя два имени входа (, -ppp
    ) с паролем, взятым из базы
    пользователей WorldGroup. Первое имя из
    группы telnet, второе из группы ppp.

  3. Описание групп:
    telnet
    (автокоманда telnet 194.84.39.28 23 и с
    правами только на эту команду) и
    ppp
    (автокоманда ppp default и
    соответствующие права).

Управление службами linux в systemd:

раз

Учет времени использования каждого модема.

С помощью tacacs/modem_monitoring.sh процедуры
из учетной базы данных TACACS сервера извлекаются данные за последние сутки,
сортируются и суммируется траффик (в КБ) ═и время (в
минутах) по ключу <имя терм. сервера, номер линии>.

Делаем sysv init-скрипт:

раз

Похожее:  НОУ ИНТУИТ | Лекция | Процедурный уровень информационной безопасности

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *