用LDAP實現Apache的受權與認證

試驗了一天,網上各類文檔操做(基本上都是同樣的。。。),而後偶得一份英文的文檔,上手作了下,我了個擦,居然都調通了。可是最後的調試仍是不能作好(調試和部署)php

本人openldap文檔首頁apache

下面是一條典型的LDAP用戶信息(ldif格式):bash

PS:該實驗環境爲yum所裝。服務器

                        

# yanzong chen,People, shuyun.com
dn: cn=yanzongchen,ou=People,dc=shuyun,dc=com
objectClass:posixAccount
objectClass: inetOrgPerson
objectClass:organizationalPerson
objectClass: person
homeDirectory:/home/yanzong.chen
loginShell: /bin/bash
uid: yanzong.chen
cn: yanzong chen
uidNumber: 10000
gidNumber: 10001
userPassword:: e1NTSEF9ampCT0JTc0d3d2llN1lySVdzMHZQZUlIREV4SU5sQTU=
sn: chen
givenName: yanzong


 

 

 

你可使用一些命令行工具(ldapsearch)來查詢LDAP數據,可是若是你和我同樣,剛入行,那麼可能你須要抽出點時間學習下LDAP搜索語法!架構

 

配置Apache 2.2ide


Apache 對於LDAP的相關模塊在1.3的時候已經出現。這裏用的是2.2版本的Apache工具

wKioL1PHdfPhk6WQAAKUfrP-1tk736.jpg


這裏我使用的Apacheyum安裝的(包括ldap),因此默認的模塊安裝、加載的都比較全,這裏就不在演示如何加載ldap模塊,你能夠查看httpd.conf file 來確認他們是否被加載:學習


LoadModuleldap_module /path/to/mod_ldap.so測試

LoadModuleauthnz_ldap_module /path/to/mod_authnz_ldap.soui


當模塊被加載,你能夠經過ldap驗證來訪問特定的目錄。 AuthLDAPUrl 指向LDAP服務器,它通常是這樣來寫的:


AuthLDAPUrl ldap://ldap.shuyun.com/ou=People,dc=shuyun,dc=com?uid


他定義了LDAP服務器的地址,其餘的不在着了說,複雜的定義策略、搜索策略能夠經過理解LDAP樹形結構來定義。。。

 

接下來的幾節如何配置各類APACHE的訪問策略(經過ldap),這些配置文件爲Apache.conf,放在你習慣放的位置。



容許任何有效用戶


這個配置首先會去查找是否爲ldap的有效用戶,若是經過則可訪問。當你訪問的時候,Apache會要求用戶輸入用戶名、密碼,而後去檢驗。若是你熟悉Apache的基自己份驗證,這裏很容易看懂。Or 你不太懂Apache的身份驗證語法,sorryGoogle 能夠幫助人(不要怕,其實我寫這個的時候,我也不太懂)。

<Location />
Order deny,allow
Deny from All
AuthName "Welcometo shuyun ldap . Use your info to pass in !"
AuthType Basic
AuthBasicProvider ldap
AuthzLDAPAuthoritative off
AuthLDAPUrlldap://ldap.shuyun.com/ou=People,dc=shuyun,dc=com?uid
Require valid-user
Satisfy any
</Location>



AuthBasicProvider ldap  是必須滴,以便讓Apache種地查詢的是其餘地址的LDAP服務器,而不是本地的。

AuthzLDAPAuthoritative off 必須在此處配置出來,由於這玩意兒默認是「開」。若是你要求驗證的用戶必須爲LDAP用戶,就設置此項爲「ON」。例如:Require ldap-user, 須要設置爲 "on." 設置爲 off 則可使用混合用戶驗證。

 Satisfy any off時,2套驗證機制)這個指令不在此處使用。


用戶列表(認證用戶)


Require ldap-user 這個指令做用是:ldap-user列表中的用戶能夠經過此認證



Order deny,allow
Deny from All
AuthName " Welcometo shuyun ldap . Use your info to pass in !"
AuthType Basic
AuthBasicProvider ldap
AuthzLDAPAuthoritative on
AuthLDAPUrlldap://ldap.shuyun.com/ou=People,dc=shuyun,dc=com?uid
Require ldap-user yanzong.chen
Satisfy any




AuthzLDAPAuthoritative on 默認爲」ON」,這裏寫出來是爲了更清晰。

注意: AuthLDAPUrl 沒有更改,和前邊例子同樣,他在目錄中搜索匹配到的UID


組成員


經過 Require ldap-group 來按照組劃分認證.

組配置多是由目錄的架構設計(從NIS轉換(as mine was)),而後參照最開始yanzonglidf記錄來配置相關(以下)。 gidNumber   memberUid 請仔細看


dn: cn=SysOps,ou=group,dc=shuyun,dc=com
objectClass:posixGroup
gidNumber: 10001
cn: SysOps
memberUid: yanzong.chen
memberUid: …
memberUid: …
...


咱們進行另外一個測試, Require ldap-attribute, 去匹配組中的用戶下面是Apache配置:


Order deny,allow
Deny from All
AuthName " Welcometo shuyun ldap . Use your info to pass in !"
AuthType Basic
AuthBasicProvider ldap
AuthzLDAPAuthoritative on
AuthLDAPUrlldap://ldap.shuyun.com/ou=People,dc=shuyun,dc=com?uid
AuthLDAPGroupAttribute memberUid
AuthLDAPGroupAttributeIsDN off
Require ldap-group cn=SysOps,ou=Group,dc=company,dc=com
Require ldap-attribute gidNumber=10001
Satisfy any



AuthzLDAPAuthoritative on 默認爲」ON」,這裏寫出來是爲了更清晰。

AuthLDAPGroupAttribute memberUid 表示LDAP組記錄有哪些屬性,以配合UID。在這種狀況下,一個memberUid 包含其組中每個成員。

AuthLDAPGroupAttributeIsDN off 告訴Apache驗證用戶時,使用客戶端的distinguished name標示名好比:cn=yanzong.chen,ou=SysOps,dc=shuyun,dc=com)。不然,用戶名會被使用。在個人LDAP目錄中,用戶名來自NIS,因此須要關閉(默認爲ON)。LDAP目錄中能夠存儲整個轉有名稱,所以你能夠根據你的需求更改此選項。

Require ldap-group 授予得到」SysOps」的組成員,對於多個組,添加一個額外的命令」each(也多是for each

Require ldap-attribute gidNumber=10001 處理(ID10001)」SysOps」組,若是沒有此選項,用戶訪問將被拒絕。對於多個組,添加額外命令「each」。

 Satisfy any 這個指令是必須的。由於咱們正在測試多個條件,並但願任何條件授予訪問權限都能成功。

用戶和組的結合

例子以下,各類選項你都能看懂的應該是,因此你看看吧而後測試測試。

Order deny,allow
Deny from All
AuthName " Welcometo shuyun ldap . Use your info to pass in !"
AuthType Basic
AuthBasicProvider ldap
AuthzLDAPAuthoritative on
AuthLDAPUrl ldap://ldap.shuyun.com/ou=People,dc=shuyun,dc=com?uid
AuthLDAPGroupAttribute memberUid
AuthLDAPGroupAttributeIsDN off
Require ldap-group cn=SysOps,ou=Group,dc=company,dc=com
Require ldap-attribute gidNumber=10001
Require ldap-user yanzong.chen
Satisfy any



調試和部署

Testing LDAP authentication from a Web browser can be frustrating, becausethe only thing you know is whether access was granted or not. You don't get anykind of feedback on why something did not work. For verbose information on eachstep in the process, set theLogLeveldebug option inApache. With debugging active, Apache will record the connection status to theLDAP server, what attributes and values were requested, what was returned, andwhy conditions were met or not met. This information can be invaluable infine-tuning LDAP access controls.

我保留了這段話,由於這段話我雖然看懂了,可是實話是不知道咋操做。由於個人LDAP目前爲止除了終端啓動模式,我並不知道如何輸出日誌到文件(我係統的緣由貌似。)我猜測多是要將apache日誌的loglevel調整下,而後觀察Apache的日誌吧。這個你們能夠試一下。也能夠留言給我。

 

 

 

 

 

 

PS:源英文地址:http://www.opendigest.org/article.php/490  下面文檔已作適當修改

相關文章
相關標籤/搜索