Книга: Документация NetAMS

[service login]

[service login]

Начиная с сентября 2002 года в дистрибутив программного комплекса NeTAMS был включен сервис weblogin и соответствующий набор скриптов для управления процедурами доступа пользователей через веб–интерфейс. Хотя подобный инструментарий и пользовался популярностью, он был далек от совершенства. Так, настройка этого средства для большой сети требовала значительный усилий и увеличению размера конфигурационного файла. В результате, благодаря многочисленным пожеланиям пользователей, механизм авторизации решено было изменить. При этом был написано новый сервис, а не переделан старый. Новый сервис называется login.

Основные свойства:

Хранение информации о доступе клиентов в базе SQL.

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

Наличие значений таймаутов по умолчанию, и установка граничных значений. Пользователь может иметь возможность менять значения самостоятельно (в то время как скрипт для того еще не написан)

Перенос блокировки из сферы системных политик на отдельный уровень, что позволит одновременно использовать сервисы login и quota

Поддержка типа юнита unit user, что дает возможность «роуминга» пользователей, т.е. авторизации с любой машины в сети при привязке статистики не к IP–адресу, а к пользователю.

Первоначальный запуск сервиса login при работающей программе невозможен. Вам необходимо вручную изменить конфигурационный файл и перезапустить NeTAMS. Допустим, что данные уже хранятся в базе данных MySQL, определенной в сервисе data–source с номером 2:

service data–source 2

type mysql

Для старта сервиса login необходимо будет указать номер сервиса–хранилища данных:

service login 0

storage 2

После этих операций запустите NeTAMS. Все остальные настройки можно выполнить при работающей программе. Проверить, работает ли сервис, можно:

Просмотром лог–файла программы

Просмотром списка таблиц SQL–базы NeTAMS: mysqlshow netams (должна появиться таблица `login')

Подключившись к программе через telnet–интерфейс и выполнив команду show config

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

+------------------+------------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+------------------+------------------+------+-----+---------+-------+

| unit_oid | int(10) unsigned | | PRI | 0 | |

| password | varchar(32) | YES | | NULL | |

| inact | int(10) unsigned | YES | | NULL | |

| abs | int(10) unsigned | YES | | NULL | |

| last_changed | int(10) unsigned | YES | | NULL | |

| last_opened_time | int(10) unsigned | YES | | NULL | |

| last_opened_ip | int(10) unsigned | YES | | NULL | |

| last_opened_mac | varchar(18) | YES | | NULL | |

| def_state | int(11) | YES | | NULL | |

| curr_state | int(11) | YES | | NULL | |

+------------------+------------------+------+-----+---------+-------+

• unit_oid — Идентификатор (OID) юнита, является уникальным ключом к базе данных

• password — Пароль пользователя. Никогда не пытайтесь поменять его извне программы путем прямой записи в SQL.

• inact — Величина таймаута неактивности для данного пользователя

• abs — Величина абсолютного таймаута для данного пользователя

• last_changed — Время (в формате UNIXTIME) последнего изменения записи

• last_opened_time — Время (в формате UNIXTIME), когда был в последний раз предоставлен доступ юниту

• last_opened_ip — IP–адрес, с которого был предоставлен доступ юниту

• last_opened_mac — MAC–адрес, с которого был предоставлен доступ юниту

• def_state — Режим доступа этого юнита по умолчанию (например, сразу после старта программы). 0 означает отсутствие доступа, 1 означает разрешения доступа.

• curr_state — Текущий режим доступа этого юнита. 0 означает отсутствие доступа, 1 означает разрешения доступа. К сожалению, по наступлении таймаута не сбрасывается (баг).

При старте сервиса происходит считывание всех доступных записей о юнитах из базы SQL/таблицы «login» в память программы и заполнение соответствующих полей в структурах, описывающих юниты. Если для какого–то юнита нет информации о таймаутах (т.е. соответствующей по индексу OID строки в таблице), то для данного юнита сервис login не будет работать и вопрос о доступе будет определяться работой других механизмов (fw–policy, sys–policy, quota и пр.). Это обеспечивает «прозрачную» работу уже настроенной системы.

Для случая, когда в базе данных есть запись о юните, информация о таймаутах и пароле копируется в соответствующие поля данных о юните. При этом текущее состояние доступа (u->logindata->c_state) становится равным значению по умолчанию (def_state из таблицы). Каждые delay секунд сервис проверяет возможность доступа, и при необходимости отключает юнит обнулением переменной u->logindata->c_state. Она проверяется при каждом прохождении пакета сервисом data–source.

Не пытайтесь редактировать SQL–таблицу login извне своими программами. Все записи должны вноситься скриптами или вручную через telnet–интерфейс программы. Для этого существует три команды сервиса login: set, login и logout. Их поведение и параметры описаны ниже.

Для полного контроля над процессом логинов и записи всей служебной информации в лог–файл и консоль служит новый параметр встроенного отладчика «debug login»

Для вывода информации о логинах служит команда (глобальная, НЕ сервиса login) «show login {name AAA | oid BBBB}»

Написание администраторского веб–интерфейса по привязке юнитов к сервису логинов и клиентского по управлению паролями и параметрами оставляется на потребителя программы NeTAMS. В настоящий момент реализован только примитивный скрипт веб–авторизации по паролю. Он идет в комплекте поставки NeTAMS в каталоге cgi–bin/ и называется login.cgi. Скрипт требует файлов logo–small.gif и netams_api.pl (последней версии), которые находятся в том же каталоге.

Для работы скрипта нужен веб–сервер, интерпретатор Perl и прямые руки администратора. Рекомендуется:

Использовать протокол HTTPS для доступа к скрипту авторизации

Настроить доступ к статистике и к скрипту «в обход» NeTAMS, чтобы не считался данный служебный трафик и работала возможность логина при предварительно отключенном пользователе.

Сделать простой URL и раздать его клиентам для выставления иконки на desktop, например https://loginserver/login.cgi

Необходимо исправить несколько первых строчек скрипта с указанием параметров подключения и путей до каталога со статистикой; можно также исправить его HTML–интерфейс.

Написание скрипта автоматического логина пользователя при входе в виндовс, или при авторизации в домене Windows (через скрипт профиля или групповую политику) оставляется на совести заинтересованных лиц.

default–inact N

Устанавливает значение времени неактивности клиента по умолчанию. Применяется, если при настройке параметров сервиса login для заданного юнита не было указано конкретное время неактивности. Задается в секундах. По умолчанию значение 0.

default–abs N

Устанавливает значение времени абсолютного таймаута клиента по умолчанию. Применяется, если при настройке параметров сервиса login для заданного юнита не было указано конкретное время абсолютного таймаута. Задается в секундах. По умолчанию значение 0.

max_inact N

Максимально допустимая величина времени таймаута неактивности, используется при проверке корректности введенного пользователем (оператором) значения. Задается в секундах. По умолчанию значение 43200 сек = 12*60*60.

min_inact N

Минимально допустимая величина времени таймаута неактивности, используется при проверке корректности введенного пользователем (оператором) значения. Задается в секундах. По умолчанию значение 60 сек.

max_abs N

Максимально допустимая величина времени абсолютного таймаута, используется при проверке корректности введенного пользователем (оператором) значения. Задается в секундах. По умолчанию значение 1036800 сек = 24*12*60*60.

min_abs N

Минимально допустимая величина времени абсолютного таймаута, используется при проверке корректности введенного пользователем (оператором) значения. Задается в секундах. По умолчанию значение 60 сек.

min_passwd_length N

Минимально допустимая длина пользовательского пароля. По умолчанию равно 3 символом, однако в настоящий момент проверки не производится.

delay N

Интервал времени между периодическими проверками всех юнитов на наступление таймаута. Задается в секундах. По умолчанию значение 10 сек.

relogin {yes|no}

Разрешать ли повторный логин для абонента, который считается уже залогиненным? По умолчанию «да».

set–user–ip

Указывает на необходимость в случае успешной авторизации перезаписать IP–адрес юнита (если он имеет тип user) на текущий; при наступлении таймаута или останове доступа адрес сбрасывается в 0.0.0.0. Принимает значения yes или 1 (делать перезаписывание) или no или 0 (не делать). По умолчанию равно 0.

set {name AAA | oid BBBB}

[password CCCC]

[inact DDDD]

[abs EEEE]

[mac 0a:0b:0c:0d:0e:0f]

[strict|nostrict]

Записывает в структуру данных юнита в памяти и одновременно в SQL–базу параметры юнита (определяется по имени или номеру OID):

• Пароль (password)

• Таймаут неактивности (inact)

• Абсолютный таймаут (abs)

• Установленный привязанный MAC–адрес юнита (mac)

• Параметр безусловной привязки (strict) или его отмена (nostrict)

Все значения таймаутов задаются в секундах. Они должны быть или равны нулю, или быть в рамках между минимальным и максимальным значением. Если какая–то из величин таймаутов (или обе) равны нулю, то проверка этого типа таймаута для данного юнита не производится. Если какая–то из величин не указана, будет взято значение по умолчанию (определенное соответственно или в заголовочном файле src/netams.h или параметрами управления сервисов default–inact или default–abs).

login {name AAA | oid BBBB}

password CCCC

[ip A.B.C.D]

[mac JJ:JJ:JJ:JJ:JJ:JJ]

Служит для авторизации юнита и открытия к нему доступа. Обязательно указывать имя или OID юнита, а также пароль. Значения IP–и MAC–адреса должны подставляться внешним скриптом авторизации.

В случае указания неправильного имени юнита получится:

login:0#login name r546–1a

parse: FAIL: unit with name= r546–1a is not exist

Неправильного пароля:

login:0#login name r546–1 password 123

parse: FAIL: password incorrect

Успешной авторизации:

login:0#login name r546–1 password 123456

parse: OK: login success from ip:0.0.0.0, mac:00:00:00:00:00:00

При этом в лог–файле сервера появится соответствующая запись.

logout {name AAA | oid BBBB}

password CCCC

[ip A.B.C.D]

[mac JJ:JJ:JJ:JJ:JJ:JJ]

Команда отключения пользователя, параметры такие же, как и у login.

Оглавление книги


Генерация: 0.710. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз