在用户通过EAP-TLS认证后,我需要为用户分配与活动目录中的组相对应的vlan。我创建了在/policy.d.d/ vlan _赋值中处理vlan分配的脚本:
vlan_assignment {
if (LDAP-Group == "CN=radiusClient,CN=Users,DC=myGroup,DC=dom") {
update reply {
[...]
}
}在启用mods的情况下,只有一个ldap服务器可以很好地工作。我想使用自由人提供的冗余负载平衡功能。
在radius.conf模块部分中,我将创建两个ldap服务器的配置:
modules {
ldap server1 {
server = 'SRVAD01'
port = 389
[...]
}
ldap server2 {
server = 'SRVAD02'
port = 389
[...]
}
}在实例化部分中
instantiate {
redundant-load-balance rlb_ldap {
server1
server2
}
}到ldap服务器的连接只发生在我站点外部隧道的post_auth部分。
server outer-tunnel {
listen {
[...]
}
authorize {
filter_username
preprocess
auth_log
suffix
eap {
ok = return
updated = return
}
sql
expiration
logintime
pap
}
authenticate {
Auth-Type PAP {
pap
}
pam
eap
}
preacct {
preprocess
acct_unique
suffix
}
accounting {
detail
unix
sql
exec
attr_filter.accounting_response
}
session {
sql
}
post-auth {
update {
&reply: += &session-state:
}
#*****edit ****
rlb_ldap.authorize
if (ok || updated) {
update session-state {
&LDAP-Group += &LDAP-Group[*]
}
}
#********************
vlan_assignment
exec
[...]
}
[...]
}但是,在启动freeradius -X时,策略.d/vlan_转让人中有以下错误:
未知属性“LDAP-Group”
我阅读并寻找解决方案,但失败了。有谁可以帮我?
发布于 2019-10-01 20:12:59
这是因为您已经创建了LDAP模块的实例,因此LDAP-Group属性的名称已经更改。有几种方法可以解决这个问题,但最简单的方法是指示LDAP模块对其所有实例使用相同的属性,然后让它检索完整的成员资格列表。
对于每个LDAP模块,取消注释并将属性设置为相同。如果您愿意,只需将其设置为“LDAP-Group”即可。
然后,对于每个LDAP模块,取消注释并将dn设置为'yes‘。
您可能需要调用rlb_ldap预先填充组信息,在尝试任何组检查之前,否则组检查只会击中一个LDAP或另一个,您将不会得到冗余。
如果使用EAP,并在innter隧道中提取LDAP信息,则需要将组成员信息存储在会话状态列表中,并在再次检查成员信息之前进行还原。
要存储LDAP组信息:
ldap
if (ok || updated) {
update session-state {
&LDAP-Group += &LDAP-Group[*]
}
}为了恢复它:
update request {
update request {
&LDAP-Group += &session-state:LDAP-Group[*]
}
}如果要在内部服务器中提取组信息,则需要将update session-state更改为update outer.session-state。
另一个可能存在的问题是,您正在将rlb_ldap列在后期,但并没有覆盖该方法。这意味着当rlb_ldap被调用时,它将执行其正常的后任务,即修改LDAP目录中的用户对象以记录最后一次登录。
若要解决此问题,请将rlb_ldap调用更改为rlb_ldap.authorize,这将导致检索组成员信息。
https://stackoverflow.com/questions/58187426
复制相似问题