ISP Администрирование

Rate this post

Задача: обеспечить регистрацию временного пользователя Интернет но узле, организовать отсчет времени его работы.

Условие: база временных пользователей должна быть отдельно от базы постоянных пользователей Интернет.

Оборудование: 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 поставляется хорошая дока, только немного путанная.

admin

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

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