LDAP落地實戰(二):SVN集成OpenLDAP認證


上一篇文章我們介紹了LDAP的部署以及管理維護,那么如何接入LDAP實現賬號統一認證呢?這篇文章將帶你完成svn的接入驗證

subversion集成OpenLDAP認證

  • 系統環境:debian8.4
  • svn部署環境:apache2.4 + Subversion
  1. apache開啟LDAP相關模塊
# a2enmod ldap
Enabling module ldap.
To activate the new configuration, you need to run:
  service apache2 restart
# a2enmod authnz_ldap
Considering dependency ldap for authnz_ldap:
Module ldap already enabled
Enabling module authnz_ldap.
To activate the new configuration, you need to run:
  service apache2 restart
  1. 修改vhost配置文件,添加對ldap的支持
<Virtualhost *:8088>
    DocumentRoot /home/svn/repos/
	ServerName svn.blz.netease.com
	
    <Location /ne/>
		DAV svn
        SVNListParentPath on
		SVNParentPath "/home/svn/repos"

        AuthType Basic
        AuthName "Netease&Blizzard Subversion Repository"
        
        #AuthUserFile "/etc/subversion/dav_svn.passwd"
        AuthzSVNAccessFile "/etc/subversion/dav_svn.authz"

        # use LDAP auth
        AuthBasicProvider ldap
        AuthLDAPBindAuthoritative on
        AuthLDAPURL "ldap://ldap.blz.netease.com/dc=blz,dc=internal?uid?sub?(objectclass=*)"
        AuthLDAPBindDN "uid=authz,ou=Public,dc=blz,dc=internal"
        AuthLDAPBindPassword "ImNVZODT884"

        Require ldap-user
		
	</Location>
</Virtualhost>

主要LDAP配置文件詳解:

  • AuthType:驗證類型,Basic使用賬號密碼驗證
  • AuthName:提示字符串
  • AuthBasicProvider:使用ldap驗證
  • AuthLDAPBindAuthoritative:on表示只要求驗證ldap用戶,別的不認,off則可以使用svn的賬號和ldap混合賬號登錄
    • apache2.2中配置是AuthzLDAPAuthoritative,到2.4中改為了AuthLDAPBindAuthoritative
    • 但在實際應用中發現並么有什么用,設置為off后ldap認證失敗也不會去找AuthzSVNAccessFile,或許是我姿勢不對,有知道原因的煩請告知
  • Require:ldap-user或valid-user
  • AuthLDAPURL | AuthLDAPBindDN | AuthLDAPBindPassword: 用於查找用戶的賬號密碼,一般設置個只讀賬號即可
    • AuthLDAPURL:[協議名稱]😕/[ip地址或者域名]:[端口號]/[baseDN]?[attr]?[scope]?[filter]
      • baseDN:指定開始搜索的節點的名稱
      • attr:就是用戶輸入的屬性鍵,默認是“uid”
      • scope: one,sub,base,默認是sub
      • filter:過濾器,默認是objectclass=*

LDAP服務器認證過程

可能只看配置文件不能了解LDAP認證的原理,接下來我們詳細討論下LDAP是如何認證的

客戶端(httpd)使用提供的URL(AuthLDAPURL)進行驗證的時候,並不是直接驗證輸入的賬號密碼,因為LDAP服務器在驗證的時候要使用DN(每個節點用戶的唯一標識)和密碼來進行登陸驗證的,但是DN一般來說比較長,諸如:“cn=xxx,ou=xxx,ou=xxx,dc=xxx,dc=xxx”,這種光輸入的時候就煩氣了,所以要想使用簡短的用戶名來登陸的時候,一般的做法是在某個節點用戶上添加一個屬性,比如mobile(手機號),Email(郵箱),user name或者uid(用戶名),然后使用這個屬性的值來登陸(大部分情況下都用uid,我們也是這么使用的)。

當用戶輸入這個屬性值(一般uid)和密碼的時候,客戶端(httpd服務器)先使用AuthLDAPBindDN和AuthLDAPBindPassword作為用戶名和密碼登陸,根據AuthLDAPURL指定的查詢規則來查找用戶輸入的屬性的值有沒有,如果查找的條數為0或者大於1,則返回錯誤,如果查找的條數等於1,則使用查找到的這個條目的DN和用戶輸入的密碼進行登陸驗證,成功則成功,失敗則失敗。

總結一下LDAP的認證過程分為兩部:

  1. 搜索用戶是否存在LDAP服務器中:配置文件中配置的AuthLDAPBindDN和AuthLDAPBindPassword兩個屬性主要目的就是為了登陸LDAP服務器搜索屬性(uid)是否只有一條,如果服務器允許匿名訪問則這兩個配置可以不需要,但一般為了安全性都會關閉LDAP的匿名訪問,新建一個只讀權限的賬號配置到這里即可
  2. 使用用戶輸入的屬性值(uid)和密碼進行登陸驗證

參考文檔


掃碼關注公眾號查看更多實用文章

相關文章推薦閱讀:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM