LDAP基礎功能(重點爲搜索:ldapsearch)
bash
主目錄http://407711169.blog.51cto.com/6616996/1439944服務器
1、基本操做
網絡
鏈接 | 鏈接操做做用於應用程序與LDAP服務器之間的鏈接和斷開。 |
查詢 | 查詢操做一般指的是搜索search和比較compare。也就是利用屬性值查找相應條目。 |
更改 | 包括add/delete/modify/modifyDN |
2、搜索參數dom
(這裏只介紹一下搜索參數的搜索層次,爲下文作鋪墊)
ide
base | 表示把基準DN做爲搜索對象。例如:cn=yanzong,ou=Ops,dc=shuyun,dc=com 的基準DN是dc=shuyun,dc=com |
one | 表示把基準DN的第一層做爲搜索對象,如上個例子中的ou=Ops爲搜索對象。 |
sub | 表示把基準DN及如下的整棵樹都做爲搜索對象。 |
3、ldapsearch 參數表工具
參數 |
用途 |
-a deref | 指定別名反向引用。請輸入 never、always、search 或 find。若是不使用此參數,缺省爲 never。 |
-A | 只檢索屬性的名稱,而不檢索屬性的值。 |
-b base dn | 指定用做搜索起始點的專有名稱。使用引號來指定該值,如:"ou=Ops,dc=shuyun,dc=com".若是要搜索的服務器須要指定搜索起點,則必須使用此參數。不然此參數是可選的。也能夠同時使用 -b 和 -s 來肯定搜索範圍。沒有 –s,-b 就會搜索指定爲起始點的項以及該項的全部子項。 |
-B | 容許打印非 ASCII 值 |
-D bind dn | 指定服務器用於驗證您的專有名稱。名稱必須與目錄中的項相符,而且必須擁有搜索目錄所需的權限。請使用引號來指定該名稱,例如:"cn=Manager,dc=shuyun,dc=com"。若是不使用此參數,則與服務器的鏈接是匿名的。若是服務器不容許匿名鏈接,則必須使用 -D。除了 -D,還必須使用 -w 參數來指定與專有名稱相關聯的口令。 |
-f file | 指定包含要使用的搜索過濾器的文件,如 -f 過濾器。請將每一個搜索過濾器置於單獨的一行。Ldapsearch 會對每一行執行一次搜索。可選擇指定過濾模式。例如,指定 -f 過濾 "cn=%s",並在文件的每一行中輸入公用名稱的值。 |
-F sep | 在屬性名稱和值之間打印 sep 而不是等號 (=)。例如,若是讀取 ldapsearch 輸出的工具但願使用其餘的分隔符時,可使用此參數。 |
-h host name | 指定要鏈接的服務器主機名,如 -h ldap.shuyun.com。 |
-l timelimit | 指定完成搜索的時間限制(秒)。若是沒有指定此參數或指定的限制爲 0,那麼搜索就沒有時間限制。可是,ldapsearch 的等待時間決不會超過服務器上設置的搜索時間限制。 |
-L | 指定以 LDIF 格式輸出。LDIF 格式使用冒號 (:) 而不是等號 (=) 做爲屬性描述符。LDIF 對一次性添加或修改大量目錄項頗有幫助。例如,能夠將輸出內容引入兼容 LDAP 的目錄中。 |
-M | 將參考對象做爲普通項進行管理,以使 ldapsearch 可返回參考項自己的屬性,而不是所參考的項的屬性。 |
-n | 顯示如何執行搜索,但不實際執行搜索 |
-p port | 指定服務器使用的端口。若是沒有使用此參數,缺省狀況下 ldapsearch 使用 389 端口。 |
-R | 不自動遵循服務器返回的搜索引用。請注意,Netscape 目錄服務器將術語 referrals 用於搜索引用。 |
-s scope | 指定使用 -b 參數時的搜索範圍: base -- 僅搜索 -b 參數指定的項spa onelevel -- 僅搜索 -b 參數指定項的直接子項,而不搜索該項自己命令行 subtree -- 搜索 -b 參數指定的項以及它的全部子項。這是不帶 -s 時使用 -b 的缺省行爲。對象 指定 -b 和 -s 的順序並不重要。blog |
-S attribute | 按指定的屬性排序結果。 |
-z sizelimit | 指定返回項的最大數目。若是沒有指定此參數或指定的限制爲 0,那麼返回的項沒有數量限制。可是,ldapsearch 返回的項決不會多於服務器容許的數量。 |
-u | 指定 ldapsearch 以用戶友好格式返回專有名稱。 |
-v | 指定 ldapsearch 以詳盡模式運行。 |
-w password | 指定與 -D 參數一塊兒使用的與專有名稱關聯的口令。 |
x | 與 -S 一塊兒使用時可指定 LDAP 服務器在將結果返回以前就對它們進行排序。若是使用 -S 而不使用 –x,ldapsearch 將對結果排序。 |
4、匹配語法
運算符 | 用途 | 例子 |
= |
查找所包含的屬性值與指定值相同的項 |
"cn=yanzong" |
>= | 查找特定項,該項中包含的屬性的數字或字母值大於或等於指定的值。 | "cn>=D" |
<= | 查找特定項,該項中包含的屬性的數字或字母值小於或等於指定的值。 | "roomNumber<=300" |
=* | 查找包含特定屬性的值的項,而不用管屬性的值是什麼。 | "sn=*" |
~= | 查找特定項,該項中所含屬性的值約等於指定的值。 | "sn~=Brning" 可能返回 sn=Browning |
& | 查找與全部搜索過濾器中指定的條件相匹配的項 | "(&(cn=John Browning)(l=Dallas))" |
| | 查找與至少一個搜索過濾器中指定的條件相匹配的項 | "(|(cn=John Browning)(l=Dallas))" |
! | 查找與任何搜索過濾器中指定的條件都不匹配的項 | "(!(cn=John Browning)(l=Dallas))" |
= <string>*<string> | 查找所包含的屬性值與指定值相同的項(模糊匹配) | "cn=y*zong" "cn=yan*" |
必須使用搜索過濾器指定要搜索的屬性。搜索過濾器的語法爲: "<attribute> <operator> <value>" 例如,下面的搜索過濾器能夠找到全部的特定項,只要該項中以 Smith 做爲 sn(別稱)屬性的值: "sn=Smith" 能夠在搜索過濾器中指定存儲在目錄中的任意屬性。如下是用來搜索我的項的公用屬性: cn -- 我的的公用名稱 sn -- 我的的姓 telephonenumber -- 我的的電話號碼 l -- 我的的地理位置 若是這裏不是太清楚能夠參考:http://407711169.blog.51cto.com/6616996/1439623 能夠在 ldapsearch 命令行中指定搜索過濾器,或在文件中指定它們,並使用 lsearch 參數 -f 引用此文件。若是使用文件,請在單獨的行中指定每一個搜索過濾器。 請注意:若是 LDAP 目錄(如 Domino LDAP 目錄)支持語言標記,則可在搜索過濾器中包含它們。例如: "givenName;lang-fr=Etienne" 使用布爾運算符的多個搜索過濾器 您可使用多個搜索過濾器以及布爾運算符。使用下列語法: "(operator(filter)(filter))" 例如,使用下面的搜索過濾器查找別稱爲 Browning、位置爲 Dallas 的項。 "(&(sn=Browning)(l=Dallas))" 布爾運算符能夠嵌套。例如,使用下面的搜索過濾器在郵件網絡域 MDN 中查找 surname 爲 caneel 或 givenname 爲 alfred 的項: "(&(maildomain=MDN)(|(sn=caneel)(givenname=alfred)))"
5、使用 ldapsearch 的樣例
搜索 | 命令 |
使用端口 389 的主機 ldap.acme.com 上的全部項,並返回全部屬性和值 同上,但僅返回屬性名稱 |
ldapsearch -h ldap.acme.com "objectClass=*" ldapsearch -A -h ldap.acme.com" objectClass=*" |
使用端口 389 的主機 ldap.acme.com 上的全部項,而且反向引用找到的全部別名 | ldapsearch -a always -h ldap.acme.com "objectClass=*" |
使用端口 389 的主機 ldap.acme.com 上的全部項,並返回 mail、cn、sn 和 givenname 等屬性 | ldapsearch -h ldap.acme.com "objectClass=*" mail cn sn givenname |
在使用端口 389 的主機 ldap.acme.com 上,在 」ou=West,o=Acme,c=US」 基準下搜索 (cn=Mike*),並返回全部屬性和值 | ldapsearch -b "ou=West,o=Acme,c=US" -h ldap.acme.com "(cn=Mike*)" |
使用端口 389 的主機 ldap.acme.com 上的一個級別,並返回全部屬性和值 同上,但限制基準的範圍 |
ldapsearch -s onelevel -h ldap.acme.com "objectClass=*" ldapsearch -s base -h ldap.acme.com "objectClass=*" |
使用端口 389 的主機 ldap.acme.com 上的全部項,並返回全部的屬性和值;搜索時間限制爲五秒 | ldapsearch -l 5 -h ldap.acme.com "objectClass=*" |
使用端口 389 的主機 ldap.acme.com 上的全部項,並返回全部的屬性和值;大小限制爲五 | ldapsearch -z 5 -h ldap.acme.com "objectClass=*" |
使用端口 389 的主機 ldap.acme.com 上的全部項,捆綁爲:用戶「cn=John Doe,o=Acme」,口令「password」,並以 LDIF 格式返回全部的屬性和值 | ldapsearch -h ldap.acme.com -D "cn=john doe,o=acme" -w password -L "objectClass=*" |
使用端口 389 的主機 ldap.acme.com。對「cn=John Doe,o=Acme」項,返回其容許匿名查看的全部屬性 | ldapsearch -h ldap.acme.com" -s base -b "cn=john doe,o=acme" objectClass=*" |
配置爲在端口 391 上偵聽 LDAP 請求的另外一臺主機 bluepages.ibm.com 上的全部項 | ldapsearch -h bluepages.ibm.com -p 391 "objectClass=*" |
端口 391 上的 bluepages.ibm.com。對還有與 OR 過濾器中任意一個屬性相匹配的屬性的任何「我的」對象類型進行子樹搜索(缺省),從組織「o=ibm」開始。超時值爲 300 秒,返回的最大項數設爲 1000。且僅返回 DN(缺省)和 CN(這是 Web 應用程序的公用過濾器)。 | ldapsearch -h bluepages.ibm.com -p 391 -b "o=ibm" -l 300 -z 1000 "(&(objectclass=Person)(|(cn=jerry seinfeld*)(givenname=jerry seinfeld*)(sn=jerry seinfeld*)(mail=jerry seinfeld*)))" cn |
端口 391 上的 bluepages.ibm.com。以基準項「cn=HR Group,ou=Asia,o=IBM」爲起始,時間限制爲 300 秒,查詢此項的全部成員。(Web 應用程序中用以肯定羣組成員的另外一個公用過濾器)。 | ldapsearch -h bluepages.ibm.com -p 391 -b "cn=HR Group,ou=Asia,o=IBM" -s base -l 300 "(objectclass=*)" member |