В данной статье хотелось бы поделиться своим опытом по настройке 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/
Добавить комментарий