自由半径、2FA

自由半径、2FA

帮助我解决在 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

相关内容