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

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

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是如何認證的apache

客戶端(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和用戶輸入的密碼進行登錄驗證,成功則成功,失敗則失敗。bash

總結一下LDAP的認證過程分爲兩部:服務器

  1. 搜索用戶是否存在LDAP服務器中:配置文件中配置的AuthLDAPBindDN和AuthLDAPBindPassword兩個屬性主要目的就是爲了登錄LDAP服務器搜索屬性(uid)是否只有一條,若是服務器容許匿名訪問則這兩個配置能夠不須要,但通常爲了安全性都會關閉LDAP的匿名訪問,新建一個只讀權限的帳號配置到這裏便可
  2. 使用用戶輸入的屬性值(uid)和密碼進行登錄驗證

參考文檔

掃碼關注公衆號查看更多原創文章
相關文章
相關標籤/搜索