帮助我解决在 FreeRadius 上设置双因素身份验证的问题。
FreeRADIUS 版本 3.0.20
一般来说,我为所有连接用户配置了第二个因素,
但我无法配置它以便只有某些用户
应该测试第二个因素。
现在工作流程是这样的:
连接时将检查所有用户的 LDAP 和第二个因素。
如何:
所有用户都在 LDAP 服务器上进行验证,
在单独文件中定义的用户(仅其 LDAP 登录)也针对第二个因素进行了测试。
这是我的配置示例,适用于所有用户:
cat /etc/raddb/sites-enabled/default
authorize {
filter_username
filter_google_otp
preprocess
if ((ok || updated) && Google-Password && !control:Auth-Type) {
update control {
Auth-Type := `/path_to_script/auth_2fa.py %{User-Name} %{Google-Password}`
}
}
}
我的想法是在 filter_username 之后添加一个检查,以查看用户的用户名是否与文件中的用户匹配。如果找到匹配项,则执行因子 2 的测试。
如果没有,请继续。
我在互联网上确实找不到类似的东西。
filter_username
if (&User-Name) {
update control {
2FA_USERS := check-item {
filename = "/etc/raddb/users_2fa",
item-name = "%{User-Name}",
flags = case-sensitive
}
}
if (2FA_USERS) {
filter_google_otp
或许我的实现思路不太适合。
有人遇到过这样的问题吗?
答案1
问题解决:
authorize {
filter_username
if (`/path_to_script/check_user_2fa.sh %{User-Name}`) {
filter_google_otp
ldap
if ((ok || updated) && Google-Password && !control:Auth-Type) {
update control {
Auth-Type := `/path_to_script/google_2fa.py %{User-Name} %{Google-Password}`
}
}
} else {
update {
control:Auth-Type := ldap
}
}
preprocess
}
如果成功,脚本 check_user_2fa.sh 显示 ok