我正在发现 Freeradius 和密码散列机制。我建立了一个数据库(在 MySQL 中)来存储一些用户的密码。我有一个用户的密码是明文,另一个在 SHA256 中散列,没有加盐,最后一个在 SHA256 中散列并加盐。
我使用这个脚本来创建加盐哈希:https ://gist.github.com/bestrocker221/f506eee8ccadc60cab71d5f633b7cc07
当我测试与半径服务器的连接时(使用命令radtest
和另一台运行 ubuntu 的计算机),可以访问所有帐户。
这是数据库内容:(每个用户都有相同的密码,“passroot”)
mysql> select * from radcheck;
| id | username | attribute | op | value
| 1 | user1 |Cleartext-Password | := | passroot
| 2 | user2 |SHA2-Password | := | ef653cafdcaf5b3733c7c5aa24b781c5c952618642efd2abc04b9c6efccac8258bc84a881850d9ffa8e6c91953c8ca7613f49dea007ae6437ccf26b8f10fadfb
| 4 | toto |SSHA2-256-Password | := | /F8Bymi/qgL4rQHP9C+8jDciSLmr/PZEc5JJNoCwRelzZWxkZW1lcg==
使用 salt 方法对帐户进行身份验证是有效的:
root@Principale:"/share# radtest toto passroot 192.168.150.1 1812 passroot
Sent Access-Request Id 117 from 0.0.0.0:39617 to 192.168.150.1:1812 length 74
User-Name = "toto"
User-Password = "passroot"
NAS-IP-Address = 127.0.1.1
NAS-Port = 1812
Message-Authenticator = 0x00
Cleartext-Password = "passroot"
Received Access-Accept Id 117 from 192.168.150.1:1812 to 192.168.150.1:39617 length 20
root@Principale:"/share# tail /var/log/freeradius/radius.log
Tue May 4 16:32:07 2021 : Info: Need 7 more connections to reach 10 spares
Tue May 4 16:32:07 2021 : Info: rlm_sql (sql): Opening additional connection (42), 1 of 29 pending _slots used
Tue May 4 16:32:07 2021 : Auth: (164) Login OK: [toto/passroot] (from client test port 1812)
root@Principale:"/share#
我不明白当用户不知道我使用的盐时,freeradius 如何将用户提供的密码与存储在数据库中的加盐哈希相匹配。