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

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

从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或者域名

举例:我在学校有一台实验用的主机troy配置为"osdnzztieducn"主域控制器假如我在我装有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 troyosdnzztieducn

这样就回返回用户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, osdnzztieducn

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: 200408201456280Z

whenChanged: 200408201517440Z

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

我要着重指出,LDAP是一个数据库,但是又不是一个数据库。说他是数据库,因为他是一个数据存储的东西。但是说他不是数据库,是因为他的作用没有数据库这么强大,而是一个目录。为了理解,给一个例子就是电话簿(黄页)。我们用电话簿的目的是为了查找某个公司的电话,在这个电话簿中附带了一些这个公司的基本信息,比如地址,经营范围,****等。其实这个例子就是一个LDAP在现实生活中的表现。电话簿的组织结构是一条一条的信息组成,信息按照行业,类比进行了分类。每条记录都分成了若干的区域,其中涵盖了我们要的信息。这就是一个Directory。一个树状的结构,每个叶子都是由一条一条的分成若干区域的记录。LDAP就是这么一个东西。从概念上说,LDAP分成了DN, OU等。OU就是一个树,DN就可以理解为是叶子,叶子还可以有更小的叶子。但是LDAP最大的分层按照IBM的文档是4层。还是上面这个例子,电话簿由电话公司进行维护,因此写是由他们去写,去组织。写完了,组织好了,就完成了,以后再写,再组织的次数是有限的。而其作用是为了查找。LDAP也是类似,目的不是为了写,主要是为了查找。这就回答了有同志问,有人要写有人要读的并发怎么解决的问题。LDAP的用途不是针对这个来设计的,如果你有这样的需求,解决办法就应该是数据库,而不是LDAP。这就是另外一个例子,Access和SQL Server。Access就是一个数据库产品,但是主要用于家庭,功能和性能都比较弱。SQL Server就是一个专业的数据库系统,功能强大。LDAP是一个轻量级的产品,主要目的是为了查,因此在架构和优化主要是针对读,而不是写。但并不是说LDAP不能满足,只是说强项不在这里。LDAP作为一个统一认证的解决方案,主要的优点就在能够快速响应用户的查找需求。比如用户的认证,这可能会有大量的并发。如果用数据库来实现,由于数据库结构分成了各个表,要满足认证这个非常简单的需求,每次都需要去搜索数据库,合成过滤,效率慢也没有好处。虽然可以有Cache,但是还是有点浪费。LDAP就是一张表,只需要用户名和口令,加上一些其他的东西,非常简单。从效率和结构上都可以满足认证的需求。这就是为什么LDAP成为现在很人们的统一认证的解决方案的优势所在。当然LDAP也有数据写入的借口,是可以满足录入的要求的。这里就不多说了。我认为现在最大的LDAP Server,应该还是Microsoft的AD。虽然不一定是标准的,但是的确是用的最多的一个LDAP Server。每个公司只要用到域,就肯定会用到了。

irectory Access Protocol )轻量级目录访问协议已经为一般的标准

邮件服务器所支持的协议。LDAP 是更复杂的目录访问协议X500 Directory Access

Protocol 的一个子集。作为Windows NT 的服务程序,LDAP 服务可以完全的在后台运

行或者是有部分交互的得运行。在你登出Windows NT 系统以后,LDAP 服务将会继续运

行。想了解更多的有关于LDAP 的信息,请参考Internet Requests for

Comments (RFCs)。IMail 服务器是依据RFC-2251 实现LDAP 服务。

Imail 的LDAP 的实现

IMail 服务器为IMail 用户数据库提供了一个LDAP 借口。IMail 用户数据库已经被扩

展包含了标准的LDAP属性(例如名字,地址,组织名字,电话号码)和其他的自定义的属

性。用户数据库不支持树状结构的组织形式。每一个Imail 系统中的用户有一个LDAP

纪录。当一个用户被加入到Imail 用户数据库中以后,LDAP 的属性有以下得属性:

ObjectClass 记录类型。该值应该是“Person”

CN CommonName 用户的全名。

Mail 该用户的Imail 服务器上的邮件地址。该;邮件地址由用户账号和主机名构成。

UID Imail 服务器中的用户的帐号。

利用LDAP 客户端, 用户可以在他自己的LDAP 记录中增加,删除,修改信息。用户不可

以修改其它的用户的LDAP 信息。下面描述了用户可以增加的一些属性。

在LDAP 记录中这些属性实最常用的。其他的一些属性可以由系统管理员或者用户自己定

义。

系统管理员可以增加,删除用户,增加LDAP 属性,修改LDAP 属性:

• IMail Administrator — 想了解更多的相关信息,请参考第四章。

• A web browser 想了解更多的相关得信息,请参考第六章。

注意

你可以用LDAP 客户端增加/修改属性(但不能增加/删除用户)。

SurName 用户名字的最后一个名字。

Organization 用户所在的公司的名字。

OrgUnit 用户所在的公司部门。

Street 用户的地址信息。

City 用户所在得城市。

ST 用户所在的省市。

Postal 用户所在区域的邮政编码。

C 用户的国籍。

Telephone 用户的联络电话号码。

对LDAP 目录服务的完整的支持

IMail 服务器支持LDAP 版本3, 该版本有以下得性能:

• 允许用户使用LDAP 客户端比如Netscape Communicator to:

• 确定LDAP 目录信息包括名字,电话号码,邮件地址,组织名称,部门和地址。

• 列出一台主机上的所有的用户。

• 根据给定的条件搜索用户。

• 在LDAP 目录中修改用户自己的信息。

• 主机管理员和系统管理员可以利用LDAP 客户端增加,删除,修改用户账号,包括

LDAP 目录信息.

• 你可以监视LDAP 服务器的运行状况.在服务器当机的时候可以收到警告.更具体得信

息可以参考第16章.

为没有登记的用户提供LDAP 信息

LDAP 的用户必须同时是Imail 邮件服务器中的用户.必须在邮件主机中有相应得邮件账

号.如果你想为没有邮件账号的用户提供LDAP 信息,你必须为他们创建账号然后在账号

的属性中选择Account Access Disabled .

从Microsoft 的邮件客户端访问LDAP 信息

如果你有客户使用Outlook Express 作为邮件客户端,无法从Imail 邮件服务器上访问

LDAP 信息, 用户可以更改Outlook Express 的设置. 如果该用户还没有建立IMail

LDAP 记录, 需要以下得步骤创建:

1 在Outlook Express 中, 在Tools 菜单中选择Accounts --> Directory Service -

->Add --> Directory Service .

2 在文本框Internet directory (LDAP) server 中,输入Imail 服务器的名字或者是

IP 地址和其他的信息.

3 完成以后单击按钮Finish

一旦用户建立了LDAP 记录,用户必须编辑以下得LDAP 属性:

1 在Outlook Express 中, 选择Accounts -> Directory Service

2 选择LDAP account

3 选择Properties, 然后单击Advanced 标签

4 在文本框Search Base 中, 输入:

objectclass=Person

5 单击Apply, 然后单击OK, 接着单击Close

Populating the LDAP Database

如果你需要一次加入大量的用户,你可能希望能够批处理的完成.请参考

“Populating the LDAP Database (ldaperexe)”.

登入

缺省的,LDAP 服务用系统账号登入。你可以在用Windows NT/2000 控制面板中的

Services applet小程序更改这个设定。

1 在控制面板中,双击小程序Services 。

2 选择IMail LDAP Server 然后单击Startup

3 (可选)选择希望的Startup Type

4 在Log On As 下,选择正确的账号:

System Account 如果您有邮件主机使用Windows NT 用户数据库作为主机用户数据库,

请采用该账号。

Allow Service to Interact with Desktop选在该方式在服务启动以后将会在桌面上创

建一个Imail 的图标。任何帐号都可以看到该图标。

This Account Select如果你没有邮件主机采用Windows NT 用户数据库作为主机数据

库,你可以指定一个用户账号登入。请确认,该账号是某一邮件主机的管理员。

注意

如果你有某个邮件主机的用户数据库是基于外部数据库的,请确认该用户账号有权限访问

外部数据库。

配置LDAP 服务器

1 在IMail Administrator 中, 在左边的面板中选择“localhost”.

2 选择目录“Services”, 然后单击按钮LDAP LDAP 标签出现.

3 输入在后面描述的选项配置LDAP 服务器.

4 单击按钮Apply 保存你得设置.

5 更改设置以后,停止服务,等待5-10 秒然后重新启动服务以确保设置生效.设置将会

被自动的保留.

日志选项

在框Log To 中,选择你希望使用得日志记录方式。

• sysMMDDTXT 改选项会把事件信息记录到一个纯文本文件中。mm 代表月份, dd 代表日

期。改文件存在于目录Spool

• No Log 该选项关闭日志功能。

• App Log 该选项利用Windows NT 应用程序日志记录事件日志。

• Log Server 该选项利用日志服务器文件记录日志。文件由标签Log Files 中指定,存

在于目录Spool 中。

Allow queries only 当选中该选项时,LDAP 客户端向LDAP 服务器查询LDAP 信息,

得到查询结果。但是不能输入或者修改LDAP 信息。

Allow “Search All” requests 你可以关闭该选项以强迫LDAP 客户端在进行查询时

提供查询的条件。

Maximum number of matches returned per request 设置该数值为一个较低的数字,以

限制因为LDAP 请求产生的服务数目。

Referrals 设置对其他的LDAP 数据库的引用 该功能可以在LDAP 客户端无法在本地

的LDAP 服务器上找到需要的信息时,可以在其它的哪些LDAP 服务器寻找:

Mode 决定了对于LDAP 客户端的查询的反馈。

• Send data only 只反馈Imail LDAP 服务器上的数据,不返回引用。

• Send referral only 只反馈其他的LDAP 服务器的主机名的引用。

• Send both 反馈Imail LDAP 服务器上的数据,同时也反馈其他的LDAP 服务器的主机

名的引用。

Hosts 输入其他的远端的LDAP 服务器的主机名。你可以输入多个主机名,之间用逗号

隔开。

Server Status 在按钮Start/Stop 左边出现的显示当前服务器状态的信息。包括版本

信息,服务是否正在运行。

Start/Stop Service 该按钮用来启动/停止服务

这就需要说说LDAP的主要优势是什么:

1、查询速度快,贼快,特别是在大数据量的情况下

2、分布式部署方便,远不是数据库所能比的

最大缺点是修改速度慢、不支持事务。

所以需要用数据库做日常管理和存储,用ldap做查询认证

public static void main(String[] args) {

String url = "ldap://100010:389/";

String domain = "dc=dtas,dc=com";

String user = "cn=administrator,cn=users";

String password = "111111";

Hashtable<String, String> env = new Hashtable<String, String>();

envput(ContextINITIAL_CONTEXT_FACTORY, "comsunjndildapLdapCtxFactory"); // LDAP 工厂

envput(ContextSECURITY_AUTHENTICATION, "simple"); // LDAP访问安全级别

envput(ContextPROVIDER_URL, url);

envput(ContextSECURITY_PRINCIPAL, user+","+domain); // 填DN

envput(ContextSECURITY_CREDENTIALS, password); // AD Password

envput("javanamingldapattributesbinary", "objectSid objectGUID");

LdapContext ldapCtx = null;

try {

ldapCtx = new InitialLdapContext(env , null);

queryGroup(ldapCtx);

//queryUser(ldapCtx);

} catch (NamingException e) {

eprintStackTrace();

} finally {

if(ldapCtx != null) {

try {

ldapCtxclose();

} catch (NamingException e) {

}

}

}

}

private static void queryGroup(LdapContext ldapCtx) throws NamingException {

SearchControls searchCtls = new SearchControls();

searchCtlssetSearchScope(SearchControlsSUBTREE_SCOPE);

String searchFilter = "objectClass=organizationalUnit";

String searchBase = "ou=myDeptSubDept,ou=myDept,dc=DS-66,dc=com";

String returnedAtts[] = {"distinguishedName", "objectGUID", "name"};

searchCtlssetReturningAttributes(returnedAtts);

NamingEnumeration<SearchResult> answer = ldapCtxsearch(searchBase, searchFilter, searchCtls);

while (answerhasMoreElements()) {

SearchResult sr = answernext();

Attributes Attrs = srgetAttributes();

if (Attrs != null) {

NamingEnumeration<> ne = AttrsgetAll();

while(nehasMore()) {

Attribute Attr = (Attribute)nenext();

String name = AttrgetID();

Enumeration<> values = AttrgetAll();

if (values != null) { // 迭代

while (valueshasMoreElements()) {

String value = "";

if("objectGUID"equals(name)) {

value = UUIDnameUUIDFromBytes((byte[]) valuesnextElement())toString();

} else {

value = (String)valuesnextElement();

}

Systemoutprintln(name + " " + value);

}

}

}

Systemoutprintln("=====================");

}

}

}

你好,OpenLDAP是维客的意思

维客的原名为wiki(也译为维基),据说WikiWiki一词来源于夏威夷语的“wee kee wee kee”,原意为“快点快点”。它其实是一种新技术,一种超文本系统。这种超文本系统支持面向社群的协作式写作,同时也包括一组支持这种写作的辅助工具。也就是说,这是多人协作的写作工具。而参与创作的人,也被称为维客。

在维客页面上,每个人都可浏览、创建、更改文本,系统可以对不同版本内容进行有效控制管理,所有的修改记录都保存下来,不但可事后查验,也能追踪、回复至本来面目。这也就意味着每个人都可以方便地对共同的主题进行写作、修改、扩展或者探讨。同一维客网站的写作者自然构成了一个社群,维客系统为这个社群提供简单的交流工具。

维客的概念始于1995年,当时在PUCC(Purdue University Computing Center)工作的沃德·坎宁安(Ward Cunningham)建立了一个叫波特兰模式知识库(Portland Pattern Repository)的工具,其目的是方便社群的交流,他也因此提出了wiki这一概念。从1996年至2000年间,波特兰模式知识库得到不断的发展,维客的概念也得到丰富和传播,网上又出现了许多类似的网站和软件系统,其中最有名的就是维基百科(Wikipedia)。维基百科是一个国际性的百科全书协作计划,与传统百科全书不同的地方,它力图通过大众的参与,创作一个包含人类所有知识领域的百科全书。它还是一部内容开放的百科全书,允许任何第三方不受限制地复制、修改及再发布材料的任何部分或全部。

目前国内著名的维客(wiki)网站有:

维客网 >

/ 获得LDAP连接(不通过连接池,直接获得连接) @return @throws Exception / private javaxnamingdirectoryDirContext getDirContext() throws Exception { DirContext ctx = null; javautilHashtable env = new javautilHashtable(); envput(ContextINITIAL_CONTEXT_FACTORY, "comsunjndildapLdapCtxFactory"); envput(ContextPROVIDER_URL, "ldap://localhost:389"); envput(ContextSECURITY_AUTHENTICATION, "simple"); envput(ContextSECURITY_PRINCIPAL, user); envput(ContextSECURITY_CREDENTIALS, pwd); ctx = new InitialDirContext(env); return ctx; } / 返回用户查询接口 @param DN 查找范围 ou=test,dc=abcd,dc=com @param filter 过滤条件 cn= @param myserach 搜索范围 @return LDAP标准接口 @throws Exception / public javaxnamingNamingEnumeration getFilter(String DN,String filter,int myserach) throws Exception { DirContext ctx = getDirContext(); try { NamingEnumeration em; SearchControls con = new SearchControls(); consetSearchScope(myserach); em = ctxsearch(DN, filter, con); return em; } finally { // } } / 设置条件查找 @param dn 查找的根结点 @param filter 查找条件 @param level 查找范围 @return 返回一个由DN组成的JAVA STRING 列表 @throws Exception / public javautilVector getfilterNodes(String dn,String filter,int level) throws Exception { javautilVector ve=new javautilVector(); NamingEnumeration em=getFilter(dn,filter,level); while(em!=null && emhasMoreElements()) { SearchResult rs=(SearchResult)emnextElement(); String db=rsgetName(); if (dbtrim()equals("")) veadd(dn); else veadd(db+","+dn); } return ve; }

应该叫做LDAP服务器吧。

LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。LDAP是一个比关系数据库抽象层次更高的存贮概念,与关系数据库的查询语言SQL属同一级别。LDAP最基本的形式是一个连接数据库的标准方式。LDAP对查询进行了优化,与写性能相比LDAP的读性能要优秀很多。LDAP最大的优势是:可以在任何计算机平台上,用很容易获得的而且数目不断增加的LDAP的客户端程序访问LDAP目录。

LDAP服务器,可以说是安装了LDAP软件,并提供LDAP支持和服务的服务器。

以上就是关于如何在Linux下通过ldapsearch查询活动目录的内容全部的内容,包括:如何在Linux下通过ldapsearch查询活动目录的内容、LDAP是什么、LADP如何查uid等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9476061.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存