標籤:freeradius memberof ns-user-group 多屬性值 轉換
需求是要使用windows active directory上的現有帳號來認證freeradius的用戶端,freeradius使用ldap bind來串連windows ad, bind 成功則認證通過,過程中windows ad並不返回使用者的密碼給freeradius.
過程中碰到幾處容易出問題的地方:
1. 為了啟用ldap bind認證,需要編輯/usr/local/etc/raddb/sites-available/default檔案。
Authorize部分添加如下配置:
ldap
if ((ok || updated) && User-Password) {
update {
control:Auth-Type := ldap
}
}
authenticate部分uncomment如下配置:
Auth-Type LDAP {
ldap
}
2. 對ldap module的配置:
將mods-available 目錄下的ldap拷貝到mods-enabled目錄下,修改如下內容:
ldap {
.....
server = ‘1.2.3.4‘ #此處是自己要使用的windows AD的網域名稱或者ip
identity = "cn=zhangsan,ou=lab,dc=test,dc=com" #此處是查詢windows ad時所用的帳號名
password = zhangsan123 #此處是查詢windows ad所用帳號的密碼
base_dn = ‘ou=lab,dc=test,dc=com‘ #此處是待認證帳號在windows AD裡面的base DN,就是父目錄。
.......
}
user {
.....
filter = "(CN=%{%{Stripped-User-Name}:-%{User-Name}})" #修改查詢使用者時的filter,windows AD #一般改為CN=
......
}
3. 如果需要對windows AD 返回來的結果中的某些屬性值進行修改然後再返回給認證用戶端,可以在default檔案的post-auth部分進行配置,如下的執行個體:
post-auth {
........
foreach reply:My-Local-String {
if("%{Foreach-Variable-0}" =~ /CN=[lab]-[0-9 a-z A-Z]+/) {
update reply {
NS-User-Group += "%{0}"
}
}
}
..........
}
ldap檔案也需要稍作修改:
update {
......
reply:My-Local-String += ‘memberOf‘
........
}
以上的例子把freeradius本來要返回的My-Local-String屬性數群組轉換為NS-User-Group屬性返回給radius client,條件是該屬性是CN=lab-xxxxx的形式開頭的。實際上是返回使用者在windows AD裡的組屬性,但是不是所有的組都返回,只有那些以lab-xxxxxx形式命名的組才返回。
之所以要進行這種轉換,是因為例子中的這種radius client裝置能識別的組屬性的名字是NS-User-Group,但windows AD裡對應的組屬性的名字是memberOf,所以要轉換,否則client不認識。
=================================
contact author: [email protected]
freeradius 3.0使用ldap bind windows ad 來認證使用者