ISP Администрирование
Задача: обеспечить регистрацию временного пользователя Интернет но узле, организовать отсчет времени его работы.
Условие: база временных пользователей должна быть отдельно от базы постоянных пользователей Интернет.
Оборудование: Cisco 2511, сервер авторизации (персоналка), сетевое оборудование.
Программное обеспечение: Cisco IOS 11.3(крутится на киске), Linux 2.2.18, tac+ia-0.96pre9.3
Решение:Подразумевается, что все действия будут выполняться от root или от имени пользователя с максимальными привилегиями (для кисок).
1. Настраиваем киску на второй сервер tacacs. Для этого в ее конфиг пишем
tacacs-server host xxx.xxx.xxx.xxx
tacacs-server attempts 1
tacacs-server directed-request restricted
где (здесь и далее) xxx.xxx.xxx.xxx — адрес второго сервер tacacs.
2. Скачиваем с ftp.vsu.ru/pub/hardware/cisco/tacacs/ файл tac+ia-0.96pre9.3.tar.gz распаковываем в любимый каталог и конфигурим его с опциями:
--enable-db
--enable-db-strict
--enable-denyppp
--enable-cronppp
--enable-strict-time-check
По умолчанию tacacs ложится в /usr/local/sbin, а рабочие файлы держит в каталоге /var/adm/tac_plus/ (у меня /var/adm — это ссылка на /var/log). Поэтому нужно позаботиться о наличии данных каталогов. Затем делаем
make
make install
3. В каталоге /var/adm/tac_plus/ создаем два файла ttys и aliases. Содержание первого примерно такое:
#
# /var/adm/tac_plus/ttys example
#
# line NAS_address/name/true flags tty_true1 ... n # comment
#
# ---------------- pool-1.provider.com (доменное имя киски)
#
1 pool-1 pacct=true Async1 # tty's port true accounting
2 pool-1 pacct=true Async2
и так далее по числу интерфейсов на киске.
Содержание файла aliases (yyy.yyy.yyy.yyy — адрес киски):
pool-1 pool-1.provider.com yyy.yyy.yyy.yyy
4. В каталоге /var/adm/tac_plus/ создаем еще два пустых файла utmp и wtmp.
5. Пишем конфигурационный файл tac_plus.conf (который может лежать вместе с tacacs-ом). Так подразумевается, что таких временных пользователей будет ОЧЕНЬ много, то я решил мне будет проще заводить их в /etc/passwd и соответственно убирать их оттуда. Посему конфиг tacacs такой:
default authentication = file /etc/passwd
accounting file = /var/adm/tac_plus/tac_plus.acct
key = "xxx"
group = ppp {
default service = permit
service = exec { autocmd = "ppp default" }
login = file /etc/passwd
cmd = ppp { permit .* }
service = ppp protocol = ip {
default attribute = permit
}
}
user = DEFAULT {
member = ppp
}
Скрипты, которыми я завожу и удаляю пользователя приведу позже.
6. Запускаем tacacs командой
/usr/local/sbin/tac_plus -C /usr/local/sbin/tac_plus.conf
Добавление опции -d[1-65535] приведет к созданию файла /var/adm/tac_plus/tac_plus.log в котором будет скапливаться отладочная инфа. Цифра — уровень отладки. Если конфиг нормальный, то tacasc демонизируется и прослушивает 49-й порт.
7. Заводим первого юзеря, вот пример скрипта:
#!/bin/sh
# add user to /etc/passwd and to /var/adm/tac_plus/user.db
# using: au <username> <time-to-work-in-minutes>
#Пользователь принадлежит группе 230 (пользователи ppp), без шелла.
adduser -g 230 -s /bin/false $1
#Почтового ящика вроде как нет
echo '/dev/null'> /home/$1/.forward
#Создаем запись в базе данных tacacs для этого пользователя. После первого срабатывания этой программы в /var/adm/tac_plus образуется файл user.db, затем будут просто добавляться записи.
macct -c $1 --tl $2 --tll $2 --dl off
#Назначаем пароль нашему пользователю
passwd $1
8. Запускаем демона, который будет отслеживать время нахождения пользователя на линии, изменять соответствующие поля в базе и отключать (и убивать) пользователя, если его время кончилось:
acctd -w /var/adm/tac_plus/utmp -u /var/adm/tac_plus/user.db
9. Для отключения пользователя от линии нужно на киске разрешить удаленный шелл конкретному пользователю:
username root
ip rcmd rsh-enable
ip rcmd remote-host root xxx.xxx.xxx.xxx root enable
10. Теперь нужно написать скрипт killuser, который будет вызван демоном acctd и отключит пользователя от линии (а в моем случае и прибьет его нафиг)
#!/bin/sh
# $1 - username $2 - port $3 - hostname
port=$2
(sleep 2; echo '') | rsh -l root <адрес_киски> "cle li tty $port"
# deleting user
# удаляем пользователя из базы
macct -d $1
# прибиваем его насмерть
userdel -r $1
Вот и все. Демоны запущены и работают. Мы можем заводить пользователей. Пользователи могут тратить отпущенное им время, когда им это вздумается, а демон acctd сам будет следить за тем, чтобы пользователь не переработал. По моим наблюдениям (а тестировал я звонив с модема, как обычный пользователь), если у пользователя истекло время и он повторно соединяется (при условии, что он не удален из базы), то проработает он не более 5 секунд. Время всегда можно добавить, но это уже RTFM по macct. Вообще-то с пакетом tac+ia поставляется хорошая дока, только немного путанная.