freeradius 3.0使用ldap bind windows ad 來認證用戶

         需求是要使用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]


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章