Freeradius. Поддержка различных типов аутентификации пользователей одновременно

от автора

В данной статье хотелось бы поделиться своим опытом по настройке freeradius в части поддержки различных типов аутентификации пользователей.
К сожалению, столкнувшись с данной проблемой, я не смог найти готового решения на просторах гуглов и прочих яндексов и, поэтому раскуривал маны самостоятельно.
Итак, задача и ее решение:

ДАНО:

1) Сервер под управлением CentOS 6.6 с установленным пакетом freeradius (версия 2.1.12).
2) Сервер SAS (Safenet Authentication Service) для обеспечения двухфакторной аутентификации пользователей для radius.
3) Учетные записи пользователей хранятся на SAS сервере и в БД MySQL, развернутой на radius сервере.
4) Интеграция freeradius и SAS уже выполнена согласно инструкции и успешно работает, об этом писать в статье не буду.
5) Интеграция freeradius с MySQL также настроена.

ПРОБЛЕМА:

При включении модуля аутентификации SAS, radius прекращает аутентифицировать пользователей, учетки которых хранятся в MySQL (самого RADIUS).
Для интеграции freeradius и SAS используется дополнительный модуль challAvecAuth, который прописывается в раздел authorize и authenticate файла /etc/raddb/sites-enabled/default. И хотя все инструкции по freeradius утверждают, что читая секцию authorize радиус пытается аутентифицировать пользователя всеми перечисленными модулями по-очереди, на практике столкнулся с тем, что если в секции authorize появляется модуль challAvecAuth не зависимо от его места (в начале, в конце, в середине), он «заставляет» freeradius использовать только себя. ВСЕ остальные модули не срабатывают.

ЗАДАЧА:

Настроить аутентификацию пользователей user1 и user2 через SAS, а пользователей user3 и user4 через radius.

РЕШЕНИЕ:

Для решения данной задачи был использован встроенный в freeradius язык unlang. С помощью него было описано условие, согласно которому пользователи user1 и user2, состоящие в группе operators аутентифицируются через SAS, а пользователи user3 и user4, состоящие в группе admins – через сам radius. Информация о принадлежности пользователей группам хранится в БД MySQL равно как и логин – пароль пары пользователей user3 и user4.
Структура таблиц MySQL:

select * from radusergroup;

username	groupname	priority user1	operators	0 user2	operators	0 user3	admins	0 user4	admins	0 

Select * from radcheck;

Id	username	attribute	op	Value 1	user3	Cleartext-Password	:=	User3pwd 2	user4	Cleartext-Password	:=	User4pwd

В файл /etc/raddb/sites-enabled/default в секцию authorize вносим правки:
1) Раскомментируем модуль sql (если еще не раскомментирован)
2) ПОСЛЕ модуля sql добавляем следующее условие проверки:

if (Sql-Group == admins) {                 pap                 }         else {                 challAvecAuth                 }

3) И закомментируем отдельную строку
pap
В итоге секция authorize выглядит следующим образом:

authorize {         preprocess         chap         mschap         digest                 suffix         eap {                 ok = return         }         sql               expiration         logintime         if (Sql-Group == admins) {                 pap                 }         else {                 challAvecAuth                 }         }

4) Перезапускаем radius и получаем PROFIT!

ссылка на оригинал статьи http://habrahabr.ru/post/270631/


Комментарии

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

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