介绍
如果您不了解 LDAP 所需的工具以及信息和方法,则 LDAP 系统可能难以管理,本指南将展示如何使用 OpenLDAP 团队开发的 LDAP 工具与 LDAP 目录服务器进行交互。
前提条件
要开始,你应该可以访问安装和配置了 OpenLDAP 的系统. 你可以学习如何设置 OpenLDAP 服务器(https://andsky.com/tech/tutorials/how-to-install-and-configure-openldap-and-phpldapadmin-on-an-ubuntu-14-04-server)。你应该熟悉使用 LDAP 目录服务时使用的基本术语。
安装工具
上述前提假定您已经可以访问 LDAP 系统,但您可能还没有安装本指南中讨论的 OpenLDAP 工具。
在 Ubuntu 或 Debian 系统上,您可以通过apt
存储库来安装这些工具。
1sudo apt-get update
2sudo apt-get install ldap-utils
在CentOS或Fedora上,您可以通过使用yum
来获取相应的文件。
1sudo yum install openldap-clients
一旦您安装了正确的包,请继续下方。
连接到 LDAP 实例
大多数OpenLDAP工具是非常灵活的,牺牲一个简洁的命令结构,以便能够与系统在几个不同的角色进行互动. 由于这个原因,用户必须选择各种参数来表达连接到LDAP服务器所需的最低限度。
在本节中,我们将专注于构建与服务器联系所需的论点,取决于您想要执行的操作类型。
指定服务器
OpenLDAP 工具要求您为每个操作指定一个身份验证方法和服务器位置. 要指定服务器,请使用-H
旗帜,然后是服务器的协议和网络位置。
对于基本的,未加密的通信,协议方案将是ldap://
,如下:
1ldapsearch -H ldap://server_domain_or_IP . . .
如果您正在与本地服务器进行通信,您可以放弃服务器域名或IP地址(您仍然需要指定方案)。
如果您使用 LDAP 通过 SSL 连接到您的 LDAP 服务器,您会更愿意使用ldaps://
方案(请注意,这是一个贬值的方法。
1ldapsearch -H ldaps://server_domain_or_IP . . .
这些协议假设默认端口(传统LDAP 的 389
和 LDAP 的 `636' 通过 SSL)。
要连接到您正在查询的服务器上的 LDAP 目录,您可以使用ldapi://
协议,这对于某些管理任务更为安全和必要:
1ldapsearch -H ldapi:// . . .
由于ldapi
方案需要本地连接,我们将永远不需要在这里指定服务器名称,但是,如果您在LDAP服务器配置中更改了接口文件的位置,则需要指定新的接口位置作为地址的一部分。
匿名连接
LDAP 要求客户端自我识别,以便服务器可以确定获得授权请求的访问级别。这通过使用称为绑定
的 LDAP 机制来工作,这基本上只是将您的请求与已知的安全实体关联的一个术语。
客户端可以使用的最通用的身份验证类型是匿名
连接,这相当于没有身份验证。LDAP服务器可以将某些操作归类为任何人可访问的(通常,默认情况下,面向公众的DIT配置为仅限匿名用户阅读)。
OpenLDAP 工具默认地假定 SASL 身份验证(我们会暂时讨论这个),因此,为了允许匿名绑定,我们必须给出 -x
参数。
1ldapsearch -H ldap://server_domain_or_IP -x
如果您在不提供额外的论点的情况下输入,您应该得到这样的东西:
1[label Output for ldapsearch with an anonymous bind]
2# extended LDIF
3#
4# LDAPv3
5# base <> (default) with scope subtree
6# filter: (objectclass=*)
7# requesting: ALL
8#
9
10# search result
11search: 2
12result: 32 No such object
13
14# numResponses: 1
由于我们没有提供查询参数,这是预期的,但它确实向我们展示了我们的匿名连接被服务器接受。
简单身份验证
对 LDAP 服务器进行身份验证的第二种方法是使用一个简单的 bind. 一个简单的 bind 使用 LDAP 服务器内部的输入来验证请求. 输入的 DN (区别名称) 作为身份验证的用户名。
查找DIT根输入和RootDN绑定
若要使用简单的身份验证进行身份验证,您需要知道 DIT 等级层顶部的母体元素,称为根、基础或附件输入,其下放置了所有其他条目。
通常,在安装 LDAP 服务器时,一个初始 DIT 会被设置和配置,其中包含一个名为 rootDN 的管理输入和密码。
如果您不知道您正在连接的 LDAP 服务器的根输入,您可以查询正常 LDAP DIT 以外的特殊元
输入,以获取有关 DIT 根输入的信息(这称为根 DSE)。
1ldapsearch -H ldap://server_domain_or_IP -x -LLL -s base -b "" namingContexts
LDAP 服务器应该返回它知道的根条目,这将看起来像这样:
1[label LDAP root entry results]
2dn:
3namingContexts: dc=example,dc=com
突出的区域是DIT的根源,我们可以用此来搜索要绑定的条目。 管理员条目通常使用simpleSecurityObject
对象类,以获得在条目中设置密码的能力。
1ldapsearch -H ldap://server_domain_or_IP -x -LLL -b "dc=example,dc=com" "(objectClass=simpleSecurityObject)" dn
这将为您提供使用此类别的条目列表. 通常只有一条:
1[label simpleSecurityObject search results]
2dn: cn=admin,dc=example,dc=com
您应该在服务器的安装过程中为此帐户配置了密码. 如果您不知道密码,您可以遵循此指南(https://andsky.com/tech/tutorials/how-to-change-account-passwords-in-an-ldap-server)来重置密码。
执行链接
一旦你有一个输入和密码,你可以在你的请求中执行一个简单的绑定,以验证自己到LDAP服务器。
再次,我们将不得不指定LDAP服务器的位置,并提供-x
标志,表示我们不希望使用SASL身份验证。为了执行实际的绑定,我们将需要使用-D
标志来指定DN要绑定,并使用-w
或-W
命令提供密码。
对 rootDN 进行绑定的示例请求将看起来如下:
1ldapsearch -H ldap://server_domain_or_IP -x -D "cn=admin,dc=example,dc=com" -W
我們應該得到與我們的匿名結合相同的結果,表明我們的認證已被接受。 結合到一個項目通常會給你額外的權利,而不是通過匿名結合可用。
SASL 认证
SASL 是简单的身份验证和安全层的缩写,它是一个连接身份验证方法与协议的框架,以便提供一个灵活的身份验证系统,而不是与特定的实现相关联。
您的 LDAP 服务器可能只支持一小组可能的 SASL 机制. 要了解它允许哪些机制,您可以键入:
1ldapsearch -H ldap:// -x -LLL -s base -b "" supportedSASLMechanisms
您看到的结果将取决于您使用的连接方案。对于未加密的ldap://
方案,大多数系统将默认允许:
1[label ldap:// supportedSASLMechanisms]
2dn:
3supportedSASLMechanisms: DIGEST-MD5
4supportedSASLMechanisms: NTLM
5supportedSASLMechanisms: CRAM-MD5
如果您正在使用使用ldapi://
方案,该方案使用安全的跨进程通信,您可能会有一个扩展的选项列表:
1ldapsearch -H ldapi:// -x -LLL -s base -b "" supportedSASLMechanisms
1[label ldapi:// supportedSASLMechanisms]
2dn:
3supportedSASLMechanisms: DIGEST-MD5
4supportedSASLMechanisms: EXTERNAL
5supportedSASLMechanisms: NTLM
6supportedSASLMechanisms: CRAM-MD5
7supportedSASLMechanisms: LOGIN
8supportedSASLMechanisms: PLAIN
配置大多数SASL身份验证方法可能需要一些时间,所以我们不会在这里涵盖很多细节,虽然SASL身份验证通常不在本文的范围内,我们应该谈论我们看到可用于ldapi://
方案的外部
方法。
外部
机制表明,通过与连接相关的某些其他手段来处理身份验证和安全,例如,它可以与SSL一起使用,以提供加密和身份验证。
最常见的是,你会看到它与ldapi://
接口与根或sudo
用户一起使用。因为ldapi://
使用Unix接口,可以获得发起请求的用户,并用于验证某些操作。
1sudo ldapsearch -H ldapi:// -Y EXTERNAL . . .
这被用来修改LDAP配置,该配置通常保存在DIT中,从一个cn=config
根输入开始。
设置一个.ldaprc 文件
到目前为止,我们一直在指示连接信息,主要是在命令行,但是,你可以通过在配置文件中输入一些常见的连接值来节省自己的一些输入。
全球客户端配置文件位于 /etc/ldap/ldap.conf
,但您主要要将更改添加到位于您主目录中的用户配置文件中,在 ~ld/.aprc
。
1nano ~/.ldaprc
内部,您可能想要配置的基本设置是BASE
,URI
和BINDDN
:
BASE
: 默认基础 DN 用于指定搜索应该开始的入口。如果在命令行提供另一个搜索基础(我们将在下一节中看到更多)。URI
: LDAP 服务器可以访问的地址。 这应该包括一个方案(ldap
对于常规 LDAP,ldaps
对于 LDAP 通过 SSL,和ldapi
对于 LDAP 通过 IPC 接口),然后是服务器的名称和端口。 如果服务器位于同一台机器上,该地址可以被关闭,如果服务器在选择的系统的默认端口上运行,则该地址可以被关闭。
如果您正在使用 SASL 身份验证,请查看 man ldap.conf
查看配置 SASL 身份验证的选项。
如果我们的LDAP的基本输入是 dc=example,dc=com
,服务器位于本地计算机上,我们正在使用 cn=admin,dc=example,dc=com
来绑定,我们可能有一个 ~/.ldaprc
文件,看起来像这样:
1[label ~/.ldaprc]
2BASE dc=example,dc=com
3URI ldap://
4BINDDN cn=admin,dc=example,dc=com
使用此方法,我们可以通过简单地指定非SASL身份验证并提供与管理员输入相关的密码来进行基本搜索,这将为我们指定的默认数据库DN提供完整的子树搜索:
1ldapsearch -x -w password
通过本指南,我们将包括连接信息在命令中,以便明确,但在运行命令时,您可以删除您在配置文件中指定的任何部分。
使用 ldapsearch 查询 DIT 和 Lookup 条目
现在我们已经掌握了如何对LDAP服务器进行身份验证和指定的方法,我们可以开始更多地谈论您可用的实际工具。对于我们大多数例子来说,我们将假定我们正在在托管LDAP服务器的同一服务器上执行这些操作。
我们将从ldapsearch
开始,因为我们迄今为止在我们的示例中一直使用它。LDAP系统被优化为搜索,阅读和搜索操作. 如果您正在使用LDAP目录,您的大部分操作可能是搜索或搜索。
我们已经涵盖了负责命名和连接到服务器的语法的一部分,它看起来像这样:
1ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -W
这给了我们连接和验证在服务器上运行的LDAP实例所需的最低限度,但是,我们并不真正寻找任何东西。
搜索基础和范围
在LDAP中,搜索开始的地方被称为 search base. 这是一个 DIT 内部的条目,该条目将开始操作,并作为一个子。
例如,要从我们的 dc=example,dc=com
DIT 的根开始,我们可以使用它作为搜索基础,如下:
1ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com"
这个命令应该产生你所约定的用户可以访问的 dc=example,dc=com
条目下面的每个条目。如果我们使用不同的条目,就会得到树上的另一个部分。
1ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "cn=admin,dc=example,dc=com"
1[label search base at cn=admin,dc=example,dc=com]
2# extended LDIF
3#
4# LDAPv3
5# base <cn=admin,dc=example,dc=com> with scope subtree
6# filter: (objectclass=*)
7# requesting: ALL
8#
9
10# admin, example.com
11dn: cn=admin,dc=example,dc=com
12objectClass: simpleSecurityObject
13objectClass: organizationalRole
14cn: admin
15description: LDAP administrator
16userPassword:: e1NTSEF9ejN2UmHoRjdha09tQY96TC9IN0kxYUVCSjhLeXBsc3A=
17
18# search result
19search: 2
20result: 0 Success
21
22# numResponses: 2
23# numEntries: 1
我们已经在这些示例中指定了基础,但我们可以通过指定搜索范围来进一步塑造工具寻找结果的方式。
sub
:默认的搜索范围,如果没有另一个指示,这会搜索基础条目本身和任何后代在树下。这是最大的范围。base
:这只搜索搜索搜索基础本身。它被用来返回搜索基础中指定的条目,比搜索更为定义。one
:这只搜索搜索搜索基础的直接后代/子女(搜索基础底下的单个层次)。这不包括搜索基础本身,也不包括这些条目底下的子树。children
:这与搜索范围相同,但不包括搜索结果中的搜索基础本身(搜索底下的每个条目,但不包括搜索基础)。
使用-s
旗和-b
旗,我们可以开始塑造我们希望工具查看的DIT区域,例如,我们可以通过使用一
范围来看到我们基准入口的所有第一级孩子,如下:
1ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -s one -LLL dn
我们在文章中进一步讨论了这一点,如果我们在树上添加了几条更多条目,这可能会返回这样的结果:
1[label output]
2dn: cn=admin,dc=example,dc=com
3
4dn: ou=groups,dc=example,dc=com
5
6dn: ou=people,dc=example,dc=com
如果我们想在ou=people
条目下查看所有内容,我们可以将其设置为搜索基础,并使用children
范围:
1ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "ou=people,dc=example,dc=com" -s children -LLL dn
通过调整搜索基础和搜索范围,您可以只对您感兴趣的 DIT 部分进行操作. 这将使您的查询通过仅搜索树的一部分来更好地执行,它只会返回您感兴趣的条目。
消除外部输出
在继续前,让我们谈谈如何删除ldapsearch
产生的部分额外输出。
大多数额外的输出都是用L
旗控制的。你可以使用零到三个L
旗,取决于你想要看到的输出水平。你添加的L
旗越多,信息就越多。
如果您正在使用 SASL 身份验证,例如,当您修改cn=config
DIT 时,您还可以使用-Q
旗帜。这将启用 SASL 安静模式,这将删除任何与 SASL 相关的输出。
搜索过滤器和输出属性过滤器
要实际执行搜索,而不是简单地输出整个搜索范围,您需要指定搜索过滤器。
这些可以放在行的尽头,以属性类型,比较运算器和值的形式。 通常,它们被指定在引文标记中,以防止壳的解释。 附件被用来表示一个过滤器的边界。 这些在简单的单属性搜索中是可选的,但在更复杂的复合过滤器中是必需的。 我们在这里将使用它们来更好地说明搜索过滤器的位置。
举个例子,我们可以看到DIT中是否有dc=example,dc=com
的条目,其用户名属性(uid
)设置为jsmith
。
1ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -LLL "(uid=jsmith)"
我们在上面的示例中使用了平等运算器,它测试了属性值的准确匹配。还有其他各种运算器,这些运算器就像你预期的那样运作。例如,要搜索包含属性的条目,而不必关心值集,你可以使用存在
运算器,它只是比较右侧有野卡的等同符号。
1ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -LLL "(userPassword=*)"
一些有用的搜索过滤器是:
- Equality: 使用
=
运算符匹配准确的属性值。 - Presence: 使用 `=*' 检查属性是否存在而不顾其值。
- 大于或等于: 使用
=
运算符来查找大于或等于给定值的值。 - ** 少于或等于**: 使用
=
运算符查找与给定值小于或等于值的值。
您还可以通过将搜索过滤器包装到附加一组带有!!
否定符号的窗口中来否定大多数搜索,例如,要搜索所有组织单元,我们可以使用此过滤器:
1"(ou=*)"
要搜索所有不是组织单元的条目,我们可以使用此过滤器:
1"(!(ou=*)"
否定修改器会扭转以下搜索过滤器的含义。
根据过滤器规格,我们还可以添加属性输出过滤器。这只是您希望从每个匹配的输入中显示的属性列表。 默认情况下,您的凭证读取访问的每个属性为每个匹配的输入显示。
例如,我们可以搜索具有用户 ID 的所有条目,但只通过键入显示每个条目相关的 common name:
1ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -LLL "(uid=*)" cn
这可能会产生一个看起来像这样的列表:
1[label Output]
2dn: uid=bwright,ou=People,dc=example,dc=com
3cn: Brian Wright
4
5dn: uid=jsmith1,ou=People,dc=example,dc=com
6cn: Johnny Smith
7
8dn: uid=sbrown2,ou=People,dc=example,dc=com
9cn: Sally Brown
如果我们也想看到他们的入口描述,我们可以将其添加到显示的属性列表中:
1ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -LLL "(uid=*)" cn description
相反,它会显示这样的东西:
1[label Output]
2dn: uid=bwright,ou=People,dc=example,dc=com
3cn: Brian Wright
4description: Brian Wright from Marketing. Brian takes care of marketing, pres
5 s, and community. Ask him for help if you need any help with outreach.
6
7dn: uid=jsmith1,ou=People,dc=example,dc=com
8cn: Johnny Smith
9description: Johnny Smith from Accounting. Johnny is in charge of the company
10 books and hiring within the Accounting department.
11
12dn: uid=sbrown2,ou=People,dc=example,dc=com
13cn: Sally Brown
14description: Sally Brown from engineering. Sally is responsible for designing
15 the blue prints and testing the structural integrity of the design.
如果没有指定属性过滤器,则返回所有属性。这可以用*
字符来明确。 要返回操作属性(每个输入的背景中管理的特殊元数据属性),您可以使用特殊的+
符号。
1ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -b "dc=example,dc=com" -LLL "(cn=admin)" "+"
结果将看起来像这样的东西:
1[label Output]
2dn: cn=admin,dc=example,dc=com
3structuralObjectClass: organizationalRole
4entryUUID: cdc718a0-8c3c-1034-8646-e30b83a2e38d
5creatorsName: cn=admin,dc=example,dc=com
6createTimestamp: 20150511151904Z
7entryCSN: 20150514191233.782384Z#000000#000#000000
8modifiersName: cn=admin,dc=example,dc=com
9modifyTimestamp: 20150514191233Z
10entryDN: cn=admin,dc=example,dc=com
11subschemaSubentry: cn=Subschema
12hasSubordinates: FALSE
组合搜索
复合搜索涉及将两个或多个单独的搜索过滤器结合起来以获得更准确的结果。
关系运算符是作为逻辑 AND 运作的&
字符,以及表示逻辑 OR 的``字符,这些字符先于它们在外部一组中定义关系的过滤器。
因此,要在我们的域中搜索具有描述和电子邮件地址的条目,我们可以构建这样的过滤器:
1"(&(description=*)(mail=*@example.com))"
要返回一个条目,它必须有这两个属性定义。
如果我们想要输出我们有联系信息的条目,我们可以尝试这样的过滤器:
1"(|(telephoneNumber=*)(mail=*)(street=*))"
在这里,我们看到操作员可以应用于两个以上的子过滤器,我们也可以根据需要将这些逻辑构造嵌入到创建相当复杂的模式中。
使用 ldapmodify 和变量来更改或创建 LDAP 条目
到目前为止,我们专注于ldapsearch
命令,用于搜索、搜索和显示 LDAP DIT 中的条目和输入部分,这将满足大多数用户只读的要求,但如果我们想要更改 DIT 中的对象,我们需要一个不同的工具。
「ldapmodify」命令通过使用LDIF文件来操纵DIT,您可以了解更多有关LDIF文件以及如何使用这些文件来修改或添加条目的细节,请参阅此指南(https://andsky.com/tech/tutorials/how-to-use-ldif-files-to-make-changes-to-an-openldap-system)。
ldapmodify
的基本格式与我们在本指南中使用的ldapsearch
语法密切相匹配,例如,您仍然需要用-H
旗号指定服务器,使用-Y
旗号用于SASL身份验证或-x
、-D
和-W
旗号进行简单身份验证。
从 LDIF 文件中应用更改
提供这些锅炉板选项后,最常见的操作是读一个LDIF文件并将其应用到DIT. 此可以通过 -f
选项完成(如果你不使用 -f
选项,你将不得不使用命令行上的LDIF格式输入一个更改)。
1ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -f /path/to/file.ldif
这会读取LDIF文件并应用内部规定的更改.对于ldapmodify
命令,每个LDIF更改都应该有changetype
规定的。
如果您的 LDIF 文件正在添加新的条目,而 does not 包含每个条目的changetype: add
,您可以使用ldapmodify
的-a
旗帜,或者简单地使用ldapadd
命令,这基本上是这种行为的代名词。
1[label LDIF with changetype]
2dn: ou=newgroup,dc=example,dc=com
3changetype: add
4objectClass: organizationalUnit
5ou: newgroup
要处理此文件,您可以简单地使用ldapmodify
:
1ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -f /path/to/file.ldif
但是,该文件也可以构建 _without_的changetype
,如下:
1[label LDIF without changetype]
2dn: ou=newgroup,dc=example,dc=com
3objectClass: organizationalUnit
4ou: newgroup
在这种情况下,要将该条目添加到DIT中,您要么需要使用ldapmodify
的-a
旗帜,要么使用ldapadd
命令。
1ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -a -f /path/to/file.ldif
或者这个:
1ldapadd -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -f /path/to/file.ldif
类似的命令可用于输入删除(‘ldapdelete’)和移动LDAP条目(‘ldapmodrdn’)。使用这些命令将消除在文件中明确指定‘changetype: delete’和‘changetype: modrdn’的必要性。
测试变化和处理错误
如果你想做任何LDIF文件的干运行,你可以使用-n
和-v
旗帜,这会告诉你没有修改实际DIT的情况下会发生什么变化:
1ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -n -v -f /path/to/file.ldif
通常情况下,如果在处理 LDIF 文件时出现错误,该操作会立即停止. 这是最安全的做法,因为通常,文件中的更改请求会更改 DIT,假设以前的更改被正确应用。
但是,如果您希望命令继续通过文件,跳过导致错误的更改,您可以使用-c
旗帜. 您可能还希望使用-S
旗帜指向可以写错误的文件,以便您可以修复违规的请求并重新运行它们:
1ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -c -S /path/to/error_file -f /path/to/file.ldif
这样,你会有一个日志(完整的评论指示侵权条目)来评估操作后。
其他 LDAP 命令
我们已经涵盖的命令执行最常见的LDAP操作,您将每天使用。
如果您的 LDAP 条目中有密码,则可以使用ldappasswd
命令来修改该条目,通过使用该帐户或管理帐户进行身份验证,然后提供新的密码(以及可选的旧密码)。
旧密码应该使用-a
旗(旧密码作为下一个项目提供在线),-A
旗(旧密码被提示),或t
旗(旧密码从作为下一个项目的文件中读取)。
新的密码应该使用-s
旗(新密码作为下一个项目列出),-S
旗(新密码被提示),或-T
旗(新密码从作为下一个项目的文件中读取)。
因此,典型的变化可能看起来像这样:
1ldappasswd -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w oldpassword -a oldpassword -s newpassword
如果未提供任何条目,则将更改用于绑定的条目;如果您对管理条目具有约束力,则可以通过在命令后提供这些条目来更改您可以访问的其他条目。
1ldappasswd -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w adminpassword -a oldpassword -s newpassword "uid=user,dc=example,dc=com"
要了解有关更改和重置密码的更多信息,请参阅 此指南。
ldapwhoami
命令可以告诉你LDAP服务器在身份验证后如何看待你。
如果您正在使用匿名或简单的身份验证,结果可能不会太有用(匿名
或恰恰是您所关联的条目)。
例如,如果我们使用-Y EXTERNAL
SASL 机制与sudo
来执行在cn=config
DIT 上的操作,我们可以用ldapwhoami
检查身份验证 DN:
1sudo ldapwhoami -H ldapi:// -Y EXTERNAL -Q
1[label ldapwhoami output]
2dn:gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
这不是我们DIT的实际条目,它只是如何将SASL身份验证翻译成LDAP可以理解的格式。看到身份验证DN可以用来创建地图和访问限制,所以知道如何获取这些信息是很好的。
ldapurl
工具允许您通过指定查询中涉及的各种组件来构建 LDAP URL. LDAP URL 是您可以通过标准化的 URL 向 LDAP 服务器请求资源的一种方式。
标准的 LDAP URL 是使用以下语法格式的:
1ldap://host:port/base_dn?attr_to_return?search_scope?filter?extension
组件如下:
base_dn
: 基于 DN 开始搜索.attr_to_return
: 您感兴趣的匹配实体的属性. 这些都应该分开。search_scope
: 搜索范围. 或基,子,一个,或孩子.filter
: 用于选择应该返回的条目的搜索过滤器.扩展:
您想要指定的LDAP扩展。
您不需要提供您不使用的项目,但由于项目类型是通过其在字符串中的位置来识别的,您必须为该项目留下插槽
空,这将使您连接多个问题标记。
例如,一个URL可能看起来像这样:
1ldap://localhost:389/dc=example,dc=com?dn,ou?sub?(ou=*)
如果你要将此信息输入到ldapurl
工具中,你会使用-H
旗帜并在引用中放置URL:
1ldapurl -H "ldap://localhost:389/dc=example,dc=com?dn,ou?sub?(ou=*)"
命令会把它分开这样:
1[label ldapurl output]
2scheme: ldap
3host: localhost
4port: 389
5dn: dc=chilidonuts,dc=tk
6selector: dn
7selector: ou
8scope: sub
9filter: (ou=*)
您还可以使用这些旗帜来扭转流程并将LDAP URL合并在一起,这些旗帜反映了LDAP URL的不同组成部分:
S
: URL 方案(ldap
,ldaps
,或ldapi
)。ldap
方案是默认的。-h
: LDAP 服务器名称或地址-p
: LDAP 服务器端口。默认值将取决于方案。-b
: 基于 DN 启动查询-a
: 返回- `-s 的属性单元列表: 要使用的搜索范围(基,子,儿童或一个)
-f
: 选择返回- `-e 的条目的 LDAP 过滤器: 指定
使用这些,你可以输入这样的东西:
1ldapurl -h localhost -b "dc=example,dc=com" -a dn,ou -s sub -f "(ou=*)"
该命令将返回构建的 URL,它将看起来像这样:
1[label ldapurl output]
2ldap://localhost:389/dc=example,dc=com?dn,ou?sub?(ou=*)
您可以使用此方法来构建可以与能够使用此格式进行通信的LDAP客户端使用的URL。
相比较
ldapcompare
工具可用于将输入的属性与值进行比较,用于执行简单的声明检查,以验证数据。
该过程涉及强制性,通常会取决于被查询的数据,提供输入DN和声明来检查。声明是通过指定属性,然后是值,分隔一个或两个列给出的。
所以你可以声称约翰是powerusers
组的一员,有这样的东西:
1ldapcompare -H ldap:// -x "ou=powerusers,ou=groups,dc=example,dc=com" "member:uid=john,ou=people,dc=example,dc=com"
如果它在组中,它会返回True
,否则命令会返回FALSE
。如果用于绑定的DN没有足够的权限来读取该属性,它会返回未定义
。
这可以用作授权系统的基础,在执行所请求的操作之前检查组成员。
结论
您现在应该有一个很好的想法,如何使用一些LDAP实用程序连接,管理和使用您的LDAP服务器. 其他客户端可能为您的LDAP系统提供一个更易于使用的界面,用于日常管理,但这些工具可以帮助您学习绳索,并提供良好的低级别访问您的DIT的数据和结构。