試驗了一天,網上各類文檔操做(基本上都是同樣的。。。),而後偶得一份英文的文檔,上手作了下,我了個擦,居然都調通了。可是最後的調試仍是不能作好(調試和部署)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。工具
這裏我使用的Apache爲yum安裝的(包括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的身份驗證語法,sorry,Google 能夠幫助人(不要怕,其實我寫這個的時候,我也不太懂)。
<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)),而後參照最開始yanzong的lidf記錄來配置相關(以下)。 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 處理(ID:10001)、」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 下面文檔已作適當修改