FreeRADIUS. rlm_sql - нет авторизации
Довелось тут разбираться с одной проблемой – у одного из заказчиков заглючила авторизация через rlm_sql на одном из серверов биллинга.
Сначала заказчик попросил сделать ему авторизацию по MAC-адресам. Сделали. Проверили. Отдали на тестирование. Через время заказчик пожаловался – перестала работать авторизация.
Начал разбираться. Сначала убрал авторизацию по MAC-ам. Вроде заработало, но через время опять поломалось. Похоже не в этом дело. Сервер новый, пока пользователей было мало, все работало. Теперь же число пользователей подросло и появилась эта проблема. После рестарта FreeRADIUS некоторое время все работает нормально, потом ломается. Вывод отладочной информации ничем не помог. Все идет по плану, как положено. Запросы к PostgreSQL, ответы. Только вот через некоторое время непонятно почему радиус перестает пускать клиентов.
Типовая настройка под FreeRADIUS 1.1.7, используется где-то на десятке серверов биллинга. Везде работает, а на этом сервере – нет. Правда здесь пока первая инсталляция под FreeBSD 7.2 и платформу amd64. Но дело похоже не в этом.
Методом тыка была найдена причина этой проблемы. Все дело оказалось в параметрах authorize_check_query
и authorize_reply_query
. Значения этих параметров – sql-запросы к БД и записаны были в несколько строк при помощи символа / (как в shell-скриптах). Примерно вот так:
authorize_check_query = "SELECT id,UserName,Attribute,Value,Op \
FROM ${authcheck_table} \
WHERE Username='%{SQL-User-Name}' \
ORDER BY id"
Стоило запросы записать одной строкой, как ПРОБЛЕМА исчезла. Работает как часики!
Виноватого не искал. Метод тыка измотал.