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 Value op
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
}
}

Умова тут описано саме просте: якщо користувач входить в групу admins, то його аутентифікує модуль pap, якщо у будь-яку іншу групу — то challAvecAuth (тобто SAS). Будь написати умови залежить тільки від завдання і Вашої фантазії.
4) Перезапускаємо radius і отримуємо PROFIT!

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.