如何将 RADIUS 与 Kerberos 集成?

如何将 RADIUS 与 Kerberos 集成?

我们已经在有线网络上正确配置了 LDAP+Kerberos。

现在我们希望用户使用他们的正常凭证登录我们的 WiFi 网络。我找到了很多关于 LDAP+RADIUS 的 HOWTOS,但没有一个在包中提到 Kerberos。有人能告诉我一个关于将 RADIUS 与 Kerberos 集成的好的 HOWTO 吗?我只找到了这篇短文以及 Usenet 上的一些无信息量的帖子。

编辑:系统是 Gentoo Linux,使用 OpenLDAP 和 Heimdal (Kerberos)。WiFi 硬件是几个带有 OpenWRT 的 Linksys WRT54GL。

答案1

这可以通过 802.1x - PEAP-MSCHAP 到 MIT 的 kerberos 来实现,借助韩国核能研究与开发协会. 最初开发的目的是允许 Samba 用户使用 NTLM 向 kerberos 进行身份验证,它的库可以在 freeradius 中使用,以执行所需的 NTLM 哈希验证。

此解决方案要求您能够熟练地运行和维护自定义软件。实施的大致步骤如下:

  1. arcfour-hmac:normal密码哈希添加到您的 KDB。用户必须更新其密码以创建 NTLM 所需的哈希。
  2. 构建并安装一个 kcrapd 守护进程,在 KDB 上运行以查找用户哈希。
  3. 在您的 RADIUS 服务器上构建、安装和配置 kcrap-libs。
  4. 为您的 radius 服务器构建一个身份验证模块,该模块与 kcrap-libs 交互以验证用户。

我们为整个校园运行此解决方案,其中 Windows 设备自动使用其本机 AD 凭据与我们同步的 KDB 进行身份验证。

答案2

以下是如何让 freeradius 根据 Kerberos 服务器检查用户/密码组合,并根据 LDAP 后端进行授权---将其粘贴到 radius.conf 中:

modules {
    krb5 {
            keytab = ${confdir}/radius.keytab
            service_principal = radius/radius.example.com
    }

    ldap {
            cache = no
            server = "ldap"
            identity = "uid=freeradius,ou=Accounts,dc=example,dc=com"
            password = secret
            basedn = "dc=com"
            filter = "(krbPrincipalName=%{User-Name})"
            base_filter = "(objectClass=radiusprofile)"

            tls {
                    start_tls = no
                    # tls_cacertfile        = /path/to/cacert.pem
                    # tls_cacertdir         = /path/to/ca/dir/
                    # tls_certfile          = /path/to/radius.crt
                    # tls_keyfile           = /path/to/radius.key
                    # tls_randfile          = /path/to/rnd
                    # tls_require_cert      = "demand"
            }

            default_profile = "uid=freeradius,ou=Accounts,dc=example,dc=com"
            profile_attribute = "radiusProfileDn"
            access_attr = "dialupAccess"

            dictionary_mapping = ${raddbdir}/ldap.attrmap

            ldap_connections_number = 5

            groupname_attribute = cn
            groupmembership_filter = "(|(&(objectClass=GroupOfNames)(member=%{Ldap-UserDn}))(&(objectClass=GroupOfUniqueNames)(uniquemember=%{Ldap-UserDn})))"
            #groupmembership_attribute = radiusGroupName
            timeout = 4
            timelimit = 3
            net_timeout = 1
            # compare_check_items = yes
            # do_xlat = yes
            # access_attr_used_for_allow = yes

            # set_auth_type = yes
    }
}

这假设您已将正确的 radius 模式(随 freeradius 一起提供,IIRC)添加到 LDAP 目录中,并且它应该为您指明正确的方向---我不使用 802.1X,但我确实使用此配置来处理其他通过 radius 的 kerberos 访问控制方案,并且它已在生产中运行了一段时间。显然,用户使用其完整的 kerberos 主体(而不仅仅是用户名)登录。

答案3

如果是微软,那么就有几篇文章。 科技网 以及此处的一份文档TechNet Word 文档

相关内容