您的位置:首页 > 运维架构 > Linux

如何在Linux下通过ldapsearch查询活动目录的内容

2013-04-10 16:58 288 查看
如何在Linux下通过ldapsearch查询活动目录的内容 2010-09-26 11:31:50
http://blog.chinaunix.net/uid-393131-id-2410065.html
 

分类: LINUX

 

从Win2000开始.微软抛弃NT域而采用活动目录来管理Windows域.而活动目录就是微软基于遵守LDAP协议的目录服务.如果用扫描器扫描的话 可以发现活动目录的389端口是打开的.而且微软虽然对这个协议都擅自作了些改动.但都集中在Replication等同步的部分.其他的部分是基本和其 他产品兼容的.所以ldapsearch工具可以顺利的搜索AD中的记录.其实AD最大的客户就是微软自己.所以在服务器配置向导中才用DC作为正式的名 称.AD这个名称反而次要.AD在配置好之后就有了健全的目录树结构.AD的用户的objectclass为User,默认的用户记录位于Users下,
而Users的objectclass就是Container.这样一个AD用户的DN可能 是"cn=username,cn=users,dc=domain-suffix".AD默认的安全策略不允许"空"绑定(既bind(""等DN为空的一系列绑定函数).所以必需要有合法验证的绑定才行:

ldapsearch -x -W -D "cn=username,cn=users,dc=domain-suffix" -b "basedn" -h host

或者是

ldap search -x -w cred -D "cn=username,cn=users,dc=domain-suffix" -b "basedn" -h host

其中-x对应API中的smiple_bind*().-w/-W 表示需要密码 -D "绑定的DN" -b "开始搜索的DN" -h 接主机的IP或者域名.这里的密码是username 的密码, -h host  是  LDAP server

举例:我在学校有一台实验用的主机troy配置为"osdn.zzti.edu.cn"主域控制器.假如我在我装有fedora的笔记本osiris上执行ldapsearch,命令如下:

ldapsearch -x -W -D "cn=administrator,cn=users,dc=osdn,dc=zzti,dc=edu,dc=cn" -b "cn=administrator,cn=users,dc=osdn,dc=zzti,dc=edu,dc=cn" -h troy.osdn.zzti.edu.cn

这样就回返回用户administrator的信息:

# extended LDIF

#

# LDAPv3

# base <cn=administrator,cn=users,dc=osdn,dc=zzti,dc=edu,dc=cn>; with scope sub

# filter: (objectclass=*)

# requesting: ALL

#

 

# Administrator, Users, osdn.zzti.edu.cn

dn: CN=Administrator,CN=Users,DC=osdn,DC=zzti,DC=edu,DC=cn

objectClass: top

objectClass: person

objectClass: organizationalPerson

objectClass: user

cn: Administrator

description:: 566h55CG6K6h566X5py6KOWfnynnmoTlhoXnva7luJDmiLc=

distinguishedName: CN=Administrator,CN=Users,DC=osdn,DC=zzti,DC=edu,DC=cn

instanceType: 4

whenCreated: 20040820145628.0Z

whenChanged: 20040820151744.0Z

uSNCreated: 8194

memberOf: CN=Group Policy Creator Owners,CN=Users,DC=osdn,DC=zzti,DC=edu,DC=cn

memberOf: CN=Domain Admins,CN=Users,DC=osdn,DC=zzti,DC=edu,DC=cn

memberOf: CN=Enterprise Admins,CN=Users,DC=osdn,DC=zzti,DC=edu,DC=cn

memberOf: CN=Schema Admins,CN=Users,DC=osdn,DC=zzti,DC=edu,DC=cn

memberOf: CN=Administrators,CN=Builtin,DC=osdn,DC=zzti,DC=edu,DC=cn

uSNChanged: 13895

name: Administrator

objectGUID:: z44SriNF40SGBgQson8RtA==

userAccountControl: 66048

badPwdCount: 0

codePage: 0

countryCode: 0

badPasswordTime: 127375629853437500

lastLogoff: 0

lastLogon: 127375630164843750

pwdLastSet: 127374851807500000

primaryGroupID: 513

objectSid:: AQUAAAAAAAUVAAAAfA5HVz/NVF7R0u429AEAAA==

adminCount: 1

accountExpires: 9223372036854775807

logonCount: 17

sAMAccountName: Administrator

sAMAccountType: 805306368

objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=osdn,DC=zzti,DC=edu,DC

=cn

isCriticalSystemObject: TRUE

 

# search result

search: 2

result: 0 Success

 

# numResponses: 2

# numEntries: 1

大家不妨试试从"dc=domain-suffix"开始搜索.这样可以访问整个的活动目录结构.

可以借此分析一下活动目录的目录结构.然后借鉴到自己的目录中.平时很难找到模仿学习的对象.这下可以拿活动目录开刀.何乐不为呢?

 

ldapsearch 参数表

下表描述可以用于 ldapsearch 的区分大小写的参数。

参数     用途

-?     打印关于使用 ldapsearch 的帮助。

-a deref     指定别名反向引用。请输入 never、always、search 或 find。如果不使用此参数,缺省为 never。

-A     只检索属性的名称,而不检索属性的值。

-b base dn     指定用作搜索起始点的专有名称。使用引号来指定该值,例如:"ou=West,o=Acme,c=US"

 

如果要搜索的服务器需要指定搜索起点,则必须使用此参数。否则此参数是可选的。

 

也可以同时使用 -b 和 -s 来确定搜索范围。没有 –s,-b 就会搜索指定为起始点的项以及该项的所有子项。

-B     允许打印非 ASCII 值

-D bind dn     指定服务器用于验证您的专有名称。该名称必须与目录中的项相符,并且必须拥有搜索目录所需的权限。

 

请使用引号来指定该名称,例如:"cn=Directory Manager,o=Acme,c=US"

 

如果不使用此参数,则与服务器的连接是匿名的。如果服务器不允许匿名连接,则必须使用 -D。

 

除了 -D,还必须使用 -w 参数来指定与专有名称相关联的口令。

-f file     指定包含要使用的搜索过滤器的文件。如 -f filters。请将每个搜索过滤器置于单独的一行。Ldapsearch 会对每一行执行一次搜索。可选择指定过滤模式。例如,指定 -f 过滤 "cn=%s",并在文件的每一行中输入公用名称的值。

-F sep     在属性名称和值之间打印 sep 而不是等号 (=)。例如,如果读取 ldapsearch 输出的工具希望使用其他的分隔符时,可以使用此参数。

-h host name     指定要连接的服务器主机名,如 -h server.acme.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 参数指定的项

    onelevel -- 仅搜索 -b 参数指定项的直接子项,而不搜索该项本身

    subtree -- 搜索 -b 参数指定的项以及它的所有子项。这是不带 -s 时使用 -b 的缺省行为。

 

指定 -b 和 -s 的顺序并不重要。

-S attribute     按指定的属性排序结果。

-z sizelimit     指定返回项的最大数目。如果没有指定此参数或指定的限制为 0,那么返回的项没有数量限制。但是,ldapsearch 返回的项决不会多于服务器允许的数量。

-u     指定 ldapsearch 以用户友好格式返回专有名称。

-v     指定 ldapsearch 以详尽模式运行。

-w password     指定与 -D 参数一起使用的与专有名称关联的口令。

x     与 -S 一起使用时可指定 LDAP 服务器在将结果返回之前就对它们进行排序。如果使用 -S 而不使用 –x,ldapsearch 将对结果排序。

 

使用 ldapsearch 的搜索过滤器

必须使用搜索过滤器指定要搜索的属性。搜索过滤器的语法为:

 

 

    "<attribute> <operator> <value>"

 

 

例如,下面的搜索过滤器可以找到所有的特定项,只要该项中以 Smith 作为 sn(别称)属性的值:

 

 

    "sn=Smith"

 

 

可以在搜索过滤器中指定存储在目录中的任意属性。以下是用来搜索个人项的公用属性:

 

    cn -- 个人的公用名称

    sn -- 个人的姓

    telephonenumber -- 个人的电话号码

    l -- 个人的地理位置

 

 

可以在 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)))"

 

 

 

ldapsearch 搜索过滤器中使用的运算符表

下表描述了可以在搜索过滤器中使用的运算符。

运算符     用途     样例

=     查找所包含的属性值与指定值相同的项     "cn=John Browning"

= <string>*<string>     查找所包含的属性值与指定的子字符串相同的项     "cn=John*"

 

"cn=J*Brown"

>=     查找特定项,该项中包含的属性的数字或字母值大于或等于指定的值。     "cn>=D"

<=     查找特定项,该项中包含的属性的数字或字母值小于或等于指定的值。     "roomNumber<=300"

=*     查找包含特定属性的值的项,而不用管属性的值是什么。     "sn=*"

~=     查找特定项,该项中所含属性的值约等于指定的值。     "sn~=Brning" 可能返回 sn=Browning

&     查找与所有搜索过滤器中指定的条件相匹配的项     "(&(cn=John Browning)(l=Dallas))"

|     查找与至少一个搜索过滤器中指定的条件相匹配的项     "(|(cn=John Browning)(l=Dallas))"

!     查找与任何搜索过滤器中指定的条件都不匹配的项     "(!(cn=John Browning)(l=Dallas))"

 

使用 ldapsearch 返回操作属性

可以将加号 (+) 用于 ldapsearch 以返回各项的所有操作属性。操作属性是用于目录管理的属性,只有当请求它们时,目录服务器才会返回。

 

例如,要返回公用名称为 John Brown 的项的所有操作属性,请指定:

 

 

    ldapsearch -h host "cn=John Brown" +

 

 

只能对支持 + 语法的目录服务器(如 Domino LDAP 服务)使用该语法。

 

要仅返回特定的操作属性,请指定该属性。

 

使用 ldapsearch 的样例

下表提供使用 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

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐