我使用Freeradius使用php代码从服务器验证用户
update control {
Reply-Message := `/usr/bin/php -f /etc/raddb/auth.php '%{User-Name}' '%{CHAP-Password}' '%{CHAP-Challenge}' auth`
}
返回CHAP-Password = 0xa2a421bf267fbffabe5696cf1c6d54f479
CHAP密码是哈希,但我在数据库中没有明文密码,密码是哈希的。
它与PAP协议配合使用很好,但我需要将CHAP用于其他服务器配置
因此,我的问题是:是否有解密CHAP密码的方法,或者如果无法告诉CHAP不要在配置中哈希密码
CHAP是质询响应。你看到的十六进制不是加密密码,也没有办法"解密"它来获得纯文本密码。
使用PAP,您可以在服务器上拥有加密密码或明文。您将收到一个可以测试的明文密码。
使用CHAP时,您需要服务器上的明文密码来检查对质询的响应是否正确。
所以你不能在当前表单中做你想做的事情。
经过无数个小时的搜索,我终于让chap使用我的数据库进行身份验证:
第一:我正在研究freeradius 3,因为radius 2和radius 3 有很多变化
第二:数据库配置
我使用mysql和2个类似的数据库:
-
会员
- 用户
- id
- 用户名
- 密码
- 用户
-
半径
- 雷达检查
- id
- 用户名
- 属性
- 操作
- 价值
- radpostauth
- 雷达检查
您需要在此根中配置sql文件
sudo nano mods-available/sql
并更改此值
driver = "rlm_sql_mysql"
dialect = "mysql"
server = "localhost"
login = "your_database_username"
password = "your_database_password"
然后通过以下方式保存并重新启动半径:
sudo service radiusd restart
如果半径重新启动没有错误,则配置是正确的
重新启动radius后,您需要将此文件复制到启用了的mods
因此radius运行此配置,因为mods中启用的中的所有文件都是运行的radius
sudo cp mods-available/sql mods-enabled/sql
检查是否运行正常
sudo radiusd -XC
此命令在radius上运行调试,并返回错误。
如果此调试的结束是
配置似乎正常
所以直到现在一切都很好
第三:数据库连接和身份验证
现在我们需要通过CHAP验证用户名,因此我们需要编写查询以从user表中选择用户名
这个查询将在这个根的querys.conf文件中
sudo nano mods-config/sql/main/mysql/queries.conf
并将authorize_check_query
更改为
authorize_check_query = "'
SELECT members.user.id as id, '
members.user.username as username, '
'Cleartext-Password' as attribute, '
members.user.password as value, '
':=' as op '
FROM members.user '
WHERE members.user.username = '%{SQL-User-Name}' '
ORDER BY members.user.id"
仅供参考,密码必须是纯文本的,因为正如您所看到的,属性是明文密码
现在,让我们在user表中添加username="ahmed"和password="test"行
并尝试测试身份验证
radtest -t chap ahmed test localhost 1812 testing123
如果您收到
接收到的访问接受Id 105从127.0.0.1:1812到127.0.0.1:38259长度20
所以你完成了,
我还要感谢@MatthewNewton对我的问题的回答和评论:D