Мне нужно настроить сервер RADIUS для аутентификации с помощью адаптивного портала pfSense. К сожалению, все пароли в базе данных RADIUS хешируются по определенному алгоритму. Я использую MySQL-базу данных.
Поскольку пользователь отправляет свои пароли в виде открытого текста на RADIUS-сервер, мне интересно, могу ли я хэшировать отправленный пароль на RADIUS-сервере, а затем проверить наличие имени пользователя и хешированного пароля.
Если этого можно избежать, я не хочу хешировать пароль на стороне клиента. Адаптивный портал pfSense в настоящее время является единственным приложением, использующим RADIUS-сервер. Но если я хочу расширить свою инфраструктуру, мне придется реализовать алгоритм хеширования на каждом клиенте.
Есть ли вообще возможность таким образом модифицировать RADIUS-сервер? Может с доработкой ядра? К сожалению, я не знаю, в каком файле отправленные данные ищутся в базе данных.
У кого-нибудь есть подсказка, где мне нужно искать?
(Я использую Ubuntu Server 12.04 x86, freeradius, freeradius-mysql)
Настройте экземпляр модуля rlm_sql.
Добавить запрос в authorize {}
для получения хешированного пароля.
update control {
<password-attribute> := "%{sql:SELECT password FROM foo_table WHERE user=%{User-Name}}"
}
Атрибут пароля может быть одним из следующих: Открытый текст-Пароль MD5-Пароль SMD5-Пароль Шифрованный пароль SHA2-Пароль SHA-Пароль SSHA-Пароль LM-Пароль NT-Пароль.
Затем позвоните в pap
модуль. Модуль pap должен установить Auth-Type как pap
и будет хешировать значение User-Password в соответствии со схемой, используемой для значения атрибута password, и сравнивать их.
В качестве альтернативы, если вы хотите использовать внешний скрипт PHP, вы можете поместить в авторизацию следующее:
authorize {
update {
Tmp-String-0 := `/usr/bin/php5 -f /path/to/cpauth.php '%{User-Name}' '%{User-Password}'`
}
if (Tmp-String-0 == 'Accept') {
update control {
Auth-type := Accept
}
}
else {
reject
}
}
Затем повторите «Принять» или «Отклонить».