
Мне нужно настроить сервер RADIUS для аутентификации с помощью портала захвата pfSense. К сожалению, все пароли в базе данных RADIUS хэшируются с помощью определенного алгоритма. Я использую базу данных MySQL.
Поскольку пользователи отправляют свои пароли на RADIUS-сервер в открытом виде, мне интересно, могу ли я хешировать отправленный пароль на RADIUS-сервере и впоследствии проверить существование имени пользователя и хешированного пароля.
Если этого можно избежать, я не хочу хэшировать пароль на стороне клиента. Captive portal pfSense в настоящее время является единственным приложением, использующим RADIUS-сервер. Но если я хочу расширить свою инфраструктуру, мне придется реализовать алгоритм хэширования на каждом клиенте.
Есть ли вообще возможность модифицировать RADIUS-сервер таким образом? Может быть с модификацией ядра? К сожалению, я не знаю, в каком файле в базе данных ищутся отправленные данные.
Есть ли у кого-нибудь совет, куда мне следует обратиться?
(Я использую Ubuntu Server 12.04 x86, freeradius, freeradius-mysql)
решение1
В качестве альтернативы, если вы хотите использовать внешний PHP-скрипт, вы можете поместить в authorize следующее:
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
}
}
Затем повторите «Принять» или «Отклонить».
решение2
Настройте экземпляр модуля rlm_sql.
Добавьте запрос authorize {}
для получения хешированного пароля.
update control {
<password-attribute> := "%{sql:SELECT password FROM foo_table WHERE user=%{User-Name}}"
}
Атрибут пароля может быть одним из следующих: Открытый текстовый пароль MD5-пароль SMD5-пароль Crypt-пароль SHA2-пароль SHA-пароль SSHA-пароль LM-пароль NT-пароль.
Затем вызовите pap
модуль. Модуль pap должен установить Auth-Type на pap
и будет хэшировать значение User-Password, чтобы оно соответствовало схеме, используемой для значения password-attribute, и сравнивать их.