Алгоритм вычисления лицевого счета при входе пользователя в систему
Данный алгоритм должна реализовывать программа, выполняющая аутентификацию пользователя (TACACS+ или pppd) на этапе подключения его к Интернету. В этот случае основную роль должен играть файл . current, который содержит уже вычисленное значение размера лицевого счета, т. к. в данный момент размер лицевого счета должен быть получен практически мгновенно. Если файл . refused присутствует в домашнем каталоге пользователя, то текущий размер лицевого счета принимается отрицательным. Переход к пункту 5; Если файл . time присутствует в домашнем каталоге пользователя, то текущий размер лицевого счета принимается положительным. Переход к пункту 5; Если файл . current присутствует в домашнем каталоге пользователя, то из него берется текущий размер лицевого счета (файл . current обновляется каждый раз после завершения работы демона). Переход к пункту 5; Текущий размер лицевого счета вычисляется по формуле : "общая сумма начислений из файла . pay минус общая сумма отчислений из файла . work минус общая сумма отчислений из файла . weekly"; Если текущий размер лицевого счета положителен, доступ в систему пользователю разрешатеся, в противном случае - запрещается. Алгоритм выбора прайс-листа (тарифной схемы) для пользователя при старте демона Если в домашнем каталоге пользователя находится файл . account. conf, то прайс-лист для данного пользователя читается из этого файла; Если в домашнем каталоге пользователя присутсвует файл . account, то из него читается первая строчка, которая добавляется в слову account, к полученной строке добавляется расширение . conf, и, таким образом файл c прайс-листом с полученным именем читается из каталога /var/statserv/etc; Если файлы . account. conf и . account отсутствуют в домашнем каталоге пользователя, то прайс-лист для данного пользователя читается из файла /var/statserv/etc/account. conf (прайс-лист по умолчанию) Действия, выполняемые демоном при старте
Анализирует командную строку. В качестве первого параметра ему передается имя пользователя, в качестве второго - NAS-порт (или устройство, например, /dev/cuaa2), в качестве третьего - адрес NAS-сервера (третий параметр нужен только в том случае когда у провайдера более одного NAS'a); Выбирает прайс-лист (тарифную схему) для пользователя (см. "Алгоритм выбора прайс-листа для пользователя при старте демона"); Проверяет присутствие в домашнем каталоге файла . time, если он там есть - взводит соответствующий флажок в переменную us. unoff=1; Проверяет присутствие в домашнем каталоге файла . refused, если он там есть - взводит соответствующий флажок в переменную us. refused=1; Вычисляет значение лицевого счета пользователя (см. пункт 4 "Алгоритма вычисления лицевого счета при входе пользователя в систему"). Даже если размер лицевого счета отрицателен, демон все равно продолжит свою работу, поскольку по истечении первого же кванта времени он, при необходимости, подаст сигнал на отключение этого пользователя; Демонизируется ; -);
Записывает свой PID в файл с именем NAS-порта в каталог /var/run (если у провайдера больше одного NAS'a - то необходимо модифицировать демон, чтобы избежать конфликтов в каталоге /var/run между NAS'ами); Программирует собственный таймер на заданный квант времени и входит в бесконечный цикл, вывести из которого может только SIGHUP. Действия, выполняемые демоном при истечении одного кванта времени Обновить счетчик (в секундах) продолжительности текущего соединения, в соответствии с действующим тарифом вычислить стоимость одного кванта времени, обновить переменную в которой накапливается стоимость текущей сессии; Проверить, присутствует ли пользователь все еще в системе - просмотреть файл /var/run/utmp. Если пользователя в системе нет, то вызвать процедуру, выполняемую при завершении сессии; Если пользователь не исчерпал свой лицевой счет, то ждать истечение следующего кванта времени. В противном случае описанные ниже действия возникают при исчерпывании средств на лицевом счете: Проверить, является ли этот пользовать "привелегированным". Для этого посмотреть на флажок us. unoff. Если us. unoff==1, то ждать истечение следующего кванта времени; Проверить, была ли вызвана программа /var/statserv/bin/killuser, если да - то ждать истечение следующего кванта времени. Дело в том, что из-за особенностей построения некоторых систем аутентификации, при исчерпывании средств на лицевом счете, фактически пользователь отключается не сразу после вызова программы /var/statserv/bin/killuser, а через некоторый интервал времени; Если файл . pay. next отсутствует в домашнем каталоге пользователя, значит, пользователя необходимо принудительно отключить. Переход к пункту 9; Прочитать сумму из файла . pay. next. Переписать ее в файл . pay. Удалить файл . pay. next. Вычислить текущий размер лицевого счета пользователя. Если он отрицателен, то переход к пункту 9; Перечитать новый прайс-лист из файла . account. next. Удалить файл . account. conf, если он присутствует. Переименовать файл . account. next в файл . account и ждать истечение следующего кванта времени. Вызвать программу /var/statserv/bin/killuser с параметрами имя_пользователя и NAS-порт, которая пошлет сигнал на отключение пользователя; Действия, выполняемые демоном при завершении сессии
При завершении сессии сервер аутентификации TACACS (или pppd) читает PID демона из каталога /var/run/ и посылает ему SIGHUP (возможен, также другой вариант, когда демон постоянно сканирует файл utmp и выполняет ниже описанные действия, если пользователь "изчез" из файла utmp). Демон удаляет файл со своим PID-ом из /var/run/, записывает сведения о только что завершенной сессии в файл . weekly, обновляет файл . current с текущим размером лицевого счета пользователя и вызывает скрипт /var/statserv/bin/close_session. с параметрами имя_пользователя, NAS-port, продолжительность_сессии, стоимость_сессии. Контрольный пример. Описание использования демона биллинга Описание использования демона биллинга
Демон billing является ядром предлагаемой системы учета пользователей для ISP. Он может работать в двух режимах - в "основном" режиме (т. е. режиме демона) для контроля лицевого счета пользователя в реальном масштабе времени и в "вспомогательном" режиме выдачи сведений о размере лицевого счета пользователя или контроля правильности задания тарифной схемы. Ниже приведены все возможные ключи запуска и параметры командной строки: /var/statserv/bin/billing
Usage error: billing [-vdeashtpPrRwW] [username] [port] [nas] -v show version and exit -d daemonize billing -e increase debug level in daemonize mode -a show current price -c show current account for sysadmin -s show current account -h show current account in HTML format -t total user account -p show pay -P show pay history -n show pay. next -N show pay. next history -r show work -R show work history -w show weekly -W show weekly history
Режим демона - запуск с ключом -d. Далее следуют обязательные параметры - имя пользователя, NAS-порт (порт модема) и имя NAS-сервера (если NAS-сервер у ISP один, то этот параметр выбирается произвольно, однако совсем опускать его нельзя). Пример: /var/statserv/bin/billing -d jackson Async2 access. provider. net Режим выдачи сведений о размере лицевого счета пользователя - запуск с ключом -s и единственным параметром - именем пользователя. Пример: /var/statserv/bin/billing -s jackson
В данном варианте на стандартный вывод ничего не выводится, а "знак" лицевого счета отражается в коде возврата. Если размер лицевого счета больше либо равен нулю, т. е. доступ пользователю в систему разрешен, то billing возвращает число 0, если меньше нуля, т. е. доступ пользователю в систему ограничен, то billing возвращает число 1. /var/statserv/bin/billing -st jackson
На стандартный вывод выводится общий размер лицевого счета пользователя в plain text. См. п. 4 алгоритма вычисления размера лицевого счета пользователя /var/statserv/bin/billing -spt jackson
На стандартный вывод выводится общий размер начислений на лицевой счет пользователя и его общий размер в plain text. Алгоритм вычисления лицевого счета тот же самый. Ключ -P задает вывод истории начислений. /var/statserv/bin/billing -c jackson Соответствует вызову /var/statserv/bin/billing -stpnrw jackson
т. е. наиболее "употребительному" использованию billing с точки зрения системного администратора. Вызов billing с ключом -h, например /var/statserv/bin/billing -shtpnrw jackson
выводит информацию о лицевом счете пользователя в HTML-формате для того, чтобы ее можно было предоставлять пользователю через www-интерфейс; Режим проверки алгоритма выбора прайс-листа для пользователя. Вызов: /var/statserv/bin/billing -a jackson
Предназначен исключительно для системного администратора чтобы контролировать правильность задания тарифной схемы для данного пользователя.
Страницы: 1, 2, 3