FreeRadius(MySQL后端)重复用户名认证被拒的配置咨询
解决重复用户名的FreeRADIUS认证问题
问题根源
FreeRADIUS默认从radcheck表查询用户属性时,若同一username对应多条Cleartext-Password(或其他密码类型)记录,认证逻辑只会按顺序尝试第一条记录的密码,后续匹配项不会被校验,导致正确密码因不是第一条而认证失败。
配置调整方案
1. 修改FreeRADIUS SQL模块的认证查询逻辑
编辑FreeRADIUS的SQL配置文件(通常路径为/etc/freeradius/3.0/mods-available/sql),找到authenticate段,替换为直接匹配用户名和密码的查询逻辑:
authenticate { sql { query = "SELECT 1 FROM radcheck WHERE username = '%{SQL-User-Name}' AND attribute = 'Cleartext-Password' AND value = '%{User-Password}' AND op = ':='" } }
注:如果使用加密密码(如MD5、SHA256),需调整
value的匹配逻辑,比如用MySQL加密函数处理%{User-Password}后再匹配。以SHA256为例:SHA2('%{User-Password}', 256) = value
2. 适配DaloRADIUS的用户管理逻辑
默认DaloRADIUS可能限制同一用户名添加重复密码属性,可直接通过MySQL手动插入radcheck记录,或修改DaloRADIUS的用户添加页面逻辑,允许同一username存在多条Cleartext-Password记录。
3. 重启FreeRADIUS服务
配置修改后,重启服务使设置生效:
systemctl restart freeradius
替代方案:增加唯一标识字段
若需要更严谨的用户区分,可给radcheck表新增user_unique_id字段,应用请求认证时携带该标识,再修改FreeRADIUS查询语句同时匹配username和唯一标识:
query = "SELECT 1 FROM radcheck WHERE username = '%{SQL-User-Name}' AND user_unique_id = '%{request:User-Unique-ID}' AND attribute = 'Cleartext-Password' AND value = '%{User-Password}' AND op = ':='"
此方案需应用端配合传递额外标识,适合需要严格区分同名用户的场景。
内容的提问来源于stack exchange,提问作者Karim Prince
相关产品推荐
相关产品推荐

