Freeradius 按组过滤 ldap

Freeradius 按组过滤 ldap

我希望 freeradius 检查组成员身份并根据组成员身份允许访问:

我当前的配置:

ldap {
        identity = 'cn=radius,ou=bindings,dc=company,dc=com'
        password = 'secret'
        server = 'ldap://openldap'
        base_dn = 'dc=company,dc=com'
        user {
                base_dn = "ou=users,${..base_dn}"
                filter = "(uid=%{%{Stripped-User-Name}:-%{User-Name}})"
        }
        group {
                base_dn = "ou=network-admins,ou=groups,${..base_dn}"
                filter = "(objectClass=groupOfNames)"
                name_attribute = "cn"
                membership_filter = "(member=%{control:Ldap-UserDn})"
                cacheable_name = yes
        }
        update {
                control:NT-Password := sambaNTPassword
        }
}

我希望只有network-adminsOU 成员才能得到Access-Accept答复。其他人将被拒绝。

network-adminsOU 包含两个组 (groupOfNames),这是存储成员的地方。根据实际组,我还想设置一些应发送到 radius 客户端的属性。

这怎么可能?

答案1

因此我尝试将这些属性放在此处的ldapmod 文件中,但是它不起作用。

如果我修改了default服务器配置,post-auth部分属性在响应中可见:

...
update reply {
      Mikrotik-Group := "%{control:LDAP-Group}"
}

答案2

使用常规if{}作为“授权”块的一部分(文档中说“后授权”,但似乎太晚了)。模块会自动将比较转换==为“任何值相等”检查,因此您不需要“foreach”。

if (!(LDAP-Group == "network-admins")) {
    reject
}

rlm_ldap 文档在“小组支持”部分有更详细的示例。

相关内容