
Preciso configurar um servidor RADIUS para autenticação com um portal cativo do pfSense. Infelizmente, todas as senhas no banco de dados do RADIUS são criptografadas com um determinado algoritmo. Eu uso um banco de dados MySQL.
Como o usuário está enviando suas senhas em texto simples para o servidor RADIUS, gostaria de saber se posso fazer o hash da senha enviada no servidor RADIUS e verificar a existência do nome de usuário e da senha com hash posteriormente.
Se for evitável, não quero fazer o hash da senha no lado do cliente. O portal cativo do pfSense é atualmente o único aplicativo que usa o servidor RADIUS. Mas se eu quiser estender minha infraestrutura, terei que implementar o algoritmo de hashing em cada cliente.
Existe, em geral, a possibilidade de modificar o servidor RADIUS desta forma? Talvez modificando o núcleo? Infelizmente não sei em qual arquivo os dados enviados são consultados no banco de dados.
Alguém tem uma dica para mim onde devo procurar?
(Eu uso Ubuntu Server 12.04 x86, freeradius, freeradius-mysql)
Responder1
Alternativamente, se você quiser usar um script PHP externo, você pode colocar o seguinte em autorização:
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
}
}
Em seguida, ecoe 'Aceitar' ou 'Rejeitar'.
Responder2
Configure uma instância do módulo rlm_sql.
Adicione uma consulta para authorize {}
recuperar a senha com hash.
update control {
<password-attribute> := "%{sql:SELECT password FROM foo_table WHERE user=%{User-Name}}"
}
O atributo de senha pode ser Cleartext-Password MD5-Password SMD5-Password Crypt-Password SHA2-Password SHA-Password SSHA-Password LM-Pasword NT-Password.
Em seguida, chame o pap
módulo. O módulo pap deve definir Auth-Type como pap
e fará o hash do valor User-Password para corresponder ao esquema usado para o valor do atributo de senha e compará-los.