如何利用OpenLDAP工具管理并使用LDAP Server

openldap(一):简介和安装 LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是一种用于访问分布式目录服务的网络协议。它提供了一种标准化的方法来查询和操作目录中的信息,这些信息通常以树状结构组织,用于存储用户、组织和其他实体的数据。OpenLDAP 是 LDAP 协议的一个开源实现,由 OpenLDAP 项目提供。它包括服务器、客户端库、工具和示例应用程序,用于构建和操作 LDAP 目录服务。 阅读详情

提供:ZStack云计算

内容介绍

如果对于相关工具以及LDAP所要求的信息及方法不太熟悉,LDAP系统的管理工作往往难度较高。在本教程中,我们将探讨如何利用由OpenLDAP团队开发的相关工具与LDAP目录服务器进行交互。

先决条件

在开始之前,大家首先需要拥有一套安装并配置了OpenLDAP的系统,具体方法参阅此文。另外,大家还应当参阅此篇教程以掌握LDAP目录服务的各基本术语及概念。

安装工具

在满足以上条件后,接下来安装本教程中需要用到的各类工具。

在Ubuntu或Debian系统当中,大家可以通过apt库安装这些工具。利用以下命令更新本地软件包目录并安装:

  • sudo apt-get update

  • sudo apt-get install ldap-utils

在CentOS或Fedora当中,大家可以使用yum命令获取对应文件:

  • sudo yum install openldap-clients

安装完成后,继续下一步内容。

接入LDAP实例

大多数OpenLDAP工具都非常灵活,拥有简洁的命令结构以实现不同角色与系统间的交互。正因为如此,用户必须选定各类参数以实现与LDAP服务器的对接。

下面,我们将着重探讨如何根据需要执行的操作类型设定参数。这里提及的参数可用于多种工具,但我们将立足于管理工作所必需的ldapsearch工具进行讨论。

指定服务器

OpenLDAP工具要求我们为每项操作指定验证方法与服务器位置,具体方法为在协议后添加-H标记,之后输入目标服务器的网络位置:

举例来说,对于基础性非加密通信且协议scheme为ldap://的场景,具体命令如下:

  • ldapsearch -H ldap://server_domain_or_IP …

如果大家与本地服务器进行通信,则可不必填写服务器域名或IP地址(但仍然需要指定scheme)。

如果大家通过SSL使用LDAP以接入LDAP服务器,则应使用ldaps:// scheme(请注意,这是一种已经过时的处理方法。OpenLDAP项目建议大家在LDAP端口上使用STARTTLS。具体方法请参阅此文):

  • ldapsearch -H ldaps://server_domain_or_IP …

这些协议使用默认端口(常规LDAP为389,LDAP over SSL则为636)。如果大家使用非标准端口,则需要在末尾处添加逗号与端口数。

要对经由Linux IPC(即进程间通信)所查询的服务器上LDAP目录进行接入,大家可以使用ldapi://协议。这种作法更安全且在某些管理任务中属于必要选项:

  • ldapsearch -H ldapi:// …

由于ldapi scheme需要使用本地位置,因此我们在这里无需指定服务器名称。不过如果大家在LDAP服务器配置内变更了socket-file位置,则需要在地址中指定新的socket位置。

匿名绑定

LDAP要求客户声明自己的身份,从而识别其请求权限等级。LDAP利用“binding”机制实现这一效果,其负责将用户与已知安全条目进行关联。LDAP能够理解的身份类型分为三种。

最为常见的身份类型就是“匿名”绑定。这是一种松散的验证身份,LDAP服务器能够将任意类型的操作分配给任意用户(不过在默认情况下,公开的DIT只供匿名用户读取)。如果大家使用匿名绑定,则可实现各常见操作。

OpenLDAP工具会默认使用SASL验证(我们稍后再进行深入讨论),因此我们需要添加-x参数以允许匿名绑定:

  • ldapsearch -H ldap://server_domain_or_IP -x

以上命令的运行结果为:

Output for ldapsearch with an anonymous bind

# extended LDIF
#
# LDAPv3
# base <> (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# search result
search: 2
result: 32 No such object

# numResponses: 1

这意味着该工具找不到我们希望搜索的结果。由于我们没有提供任何查询参数,因此找不到结果也很正常。不过其会显示我们的匿名绑定已经被服务器所接受。

简单验证

LDAP服务器的第二种验证方法为简单绑定。所谓简单绑定,是利用LDAP服务器内的一个条目进行请求验证。条目的DN(即专有名称)作为验证用户名,该条目中的一项属性则被定义为密码,并在请求过程中一并交付。

找到DIT Root条目与RootDN绑定

为了利用简单验证机制实现验证,大家需要了解DIT结构之上的父元素,即root、base或者suffix条目。另外,大家还需要知晓要绑定的目标DN。

一般来讲,在LDAP服务器的安装过程中,系统会设置一个初始DIT并利用管理条目进行配置,也就是rootDN。在系统启动完成后,其将成为惟一一个面向绑定配置的DN。

如果大家不了解所接入LDAP服务器的root条目,则可在普通LDAP DIT之外查询一条特殊的“meta”条目以获取DIT root条目相关信息(其被称为root DSE)。具体命令如下:

  • ldapsearch -H ldap://server_domain_or_IP -x -LLL -s base -b “” namingContexts

LDAP服务器会返回以下结果:

LDAP root entry results

dn:
namingContexts: dc=example,dc=com

其中高亮部分即为DIT的root。我们可以利用它搜索要绑定到的条目。其中admin条目通常会使用simpleSecurityObject objectClass以获得在条目内设置密码的能力。我们可以借此对条目进行搜索:

  • ldapsearch -H ldap://server_domain_or_IP -x -LLL -b “dc=example,dc=com” “(objectClass=simpleSecurityObject)” dn

返回结果为一份条目列表:

simpleSecurityObject search results

dn: cn=admin,dc=example,dc=com

这正是我们能够绑定到的目标rootDN账户。大家应当在服务器安装过程中为此账户配置密码。如果不知道密码,请参阅本教程了解密码重置方法。

执行绑定

在拥有了条目与密码后,接下来就可以在请求中执行简单绑定以向LDAP服务器证明身份了。

再次强调 ,我们首先需要指定LDAP服务器位置,而后使用-x标记声明我们不希望使用SASL验证。要执行实际绑定,我们需要使用-D来指定作为绑定目标的DN,利用-w或者-W命令提供密码。其中-w选项允许大家将密码作为命令的一部分,而-W选项则要求我们单独输入密码内容。

以下为绑定至rootDN的请求示例:

  • ldapsearch -H ldap://server_domain_or_IP -x -D “cn=admin,dc=example,dc=com” -W

我们应当我们得到的结果应该与匿名绑定相同,这意味着凭证已经通过了验证。绑定至条目往往能够提供更多权限,而绑定至rootDN允许大家对整个DIT进行读取/写入,而不受访问控制的影响。

SASL验证

SASL意为简单验证与安全层。这套框架用于将验证方法同协议相结合,从而提供一套独立于特定实现体系之外的灵活验证系统。大家可以参阅维基百科页面以了解各可用方法。

我们的LDAP服务器可能只支持SASL机制中的一套子集。要了解其具体支持范围,可使用以下命令:

  • ldapsearch -H ldap:// -x -LLL -s base -b “” supportedSASLMechanisms

返回的结果取决于大家用于连接的scheme。对于未加密ldap:// scheme,大多数系统默认允许:

ldap:// supportedSASLMechanisms

dn:
supportedSASLMechanisms: DIGEST-MD5
supportedSASLMechanisms: NTLM
supportedSASLMechanisms: CRAM-MD5

如果大家使用ldapi:// scheme,即使用安全进程间通信,返回的列表可能如下所示:

  • ldapsearch -H ldapi:// -x -LLL -s base -b “” supportedSASLMechanisms

    ldapi:// supportedSASLMechanisms

    dn:
    supportedSASLMechanisms: DIGEST-MD5
    supportedSASLMechanisms: EXTERNAL
    supportedSASLMechanisms: NTLM
    supportedSASLMechanisms: CRAM-MD5
    supportedSASLMechanisms: LOGIN
    supportedSASLMechanisms: PLAIN

大多数SASL验证方法的配置工作都很耗时间,因此我们这里就不做细节说明了。虽然SASL验证并非本文的主要内容,但接下来我们仍然会在ldapi:// scheme中用到EXTERNAL方法。

EXTERNAL机制表示验证与安全由其它机制负责处理。例如,我们可以利用SSL提供加密与验证机制。

通常来讲,我们会利用root或sudo用户使用ldapi://接口。由于ldapi://使用Unix socket,因此其能够获取到初始请求用户并借此验证特定操作。LDAP用于配置的DIT利用这一机制验证root用户对LDAP的读取及变更操作。这些请求如下所示:

  • sudo ldapsearch -H ldapi:// -Y EXTERNAL …

我们可以利用以上命令修改LDAP配置,这部分配置通常处于DIT当中并以cn=config root条目作为开头。

设置.ldaprc文件

到这里,我们已经在命令行中指定了大部分连接信息。然而,大家也可以在将部分常用连接值添加到配置文件内以节省时间。

全局客户端配置文件位于/etc/ldap/ldap.conf,不过大家要变更的主要是主目录下~/.ldaprc用户配置文件。在文本编辑器中创建并打开此文件:

  • nano ~/.ldaprc

其中我们需要配置的设定主要有BASE、URI与BINDDN:

  • BASE: (用于指定搜索起始条目的默认DN。在命令行中设定其它范围基础即可将其覆盖(我们将在下一节中具体说明)。
  • URI: LDAP服务器所能使用的地址。其中应包含一条scheme(普通LDAP为ldap,LDAP over SSL为ldaps,LDAP over IPC socket则为ldapi),其后为该服务器的名称与端口。如果服务器位于同一设备则名称部分可留空,如果服务器运行于scheme所选定的默认端口,则端口部分可留空。
  • BINDDN: 用于指定作为绑定目标的默认LDAP条目。其负责提供大家希望使用的“账户”信息。大家需要在命令行中为其指定密码内容。

如果大家使用SASL验证,则可检查man ldap.conf以查看SASL证书的配置选项。

如果我们的LDAP基础条目为dc=example,dc=com,该服务器位于本地计算机,而且我们使用cn=admin,dc=example,dc=com进行绑定,那么~/.ldaprc文件应如下所示:

~/.ldaprc

BASE    dc=example,dc=com
URI     ldap://
BINDDN  cn=admin,dc=example,dc=com

如此一来,我们就能够仅指定非SASL验证并提供admin条目相关密码以执行基础搜索了。以下命令将提供次层级搜索结果,范围则为我们之前指定的默认基础DN:

  • ldapsearch -x -w password

这一方式能够帮助我们在使用LDAP工具时缩短“样板”连接选项。另外,其中的各组成部分皆可根据实际需求进行增删。

使用ldapsearch查询DIT并查看条目

现在我们已经了解了如何声明身份并指定LDAP服务器。接下来将目光转向具体工具。在大多数示例中,我们假定立足于托管LDAP服务器的同一设备进行命令执行。这意味着我们可以将主机指定部分留空。我们还DIT的基础条目为dc=example,dc=com。其rootDn则为cn=admin,dc=example,dc=com。下面正式开始。

首先是ldapsearch,因为我们已经在之前的示例中使用过该工具。LDAP系统针对搜索、读取与查找操作进行了优化。如果大家使用LDAP目录,则日常操作应该主要为搜索或查找。

我们先来看看用于命名及接入服务器的语法表达:

  • ldapsearch -H ldap:// -x -D “cn=admin,dc=example,dc=com” -W

这样我们就能够以最低限度接入并通过服务器上LDAP实例的验证,不过还没有真正进行搜索操作。

搜索基础与范围

在LDAP当中,搜索的起始位置被称为搜索基础。这一条目存在于DIT当中,并作为锚点存在。我们利用-b标记提交条目名称以指定搜索基础。

例如根据dc=example,dc=com DIT,我们可以使用以下搜索基础:

  • ldapsearch -H ldap:// -x -D “cn=admin,dc=example,dc=com” -w password -b “dc=example,dc=com”

这条命令会显示dc=example,dc=com条目下的每个条目。如果大家使用其它条目,则可获得对应的内容结构。例如,如果我们以admin条目为起始,则命令如下:

  • ldapsearch -H ldap:// -x -D “cn=admin,dc=example,dc=com” -w password -b “cn=admin,dc=example,dc=com”

    search base at cn=admin,dc=example,dc=com

    extended LDIF

    #

    LDAPv3

    base <cn=admin,dc=example,dc=com> with scope subtree

    filter: (objectclass=*)

    requesting: ALL

    #

    admin, example.com

    dn: cn=admin,dc=example,dc=com
    objectClass: simpleSecurityObject
    objectClass: organizationalRole
    cn: admin
    description: LDAP administrator
    userPassword:: e1NTSEF9ejN2UmHoRjdha09tQY96TC9IN0kxYUVCSjhLeXBsc3A=

    search result

    search: 2
    result: 0 Success

    numResponses: 2

    numEntries: 1

我们已经为这些示例指定了基础,但还可以指定搜索范围以提高结果精度。这一选项由-s实现,请提供以下几种选项:

  • sub: 若不指定则作为默认搜索范围。其会对基础条目本身及其下各分支进行搜索。这是最大的搜索范围选项。
  • base: 只对搜索基础本身进行搜索。其用于返回搜索基础中指定的条目,且更应用于查找而非搜索操作。
  • one: 只搜索当前搜索基础的分支/子层级。其中不包含搜索基础本身,且不包含更为深层的层级。
  • children: 与sub范围功能一致,但在结果中不包含搜索基础本身。

使用-s与-b可以调整我们所要搜索的DIT内对应区域。例如,我们可以使用one范围查看基础条目内的所有一级子分支:

  • ldapsearch -H ldap:// -x -D “cn=admin,dc=example,dc=com” -w password -b “dc=example,dc=com” -s one -LLL dn

这里,我们添加了-LLL以过滤输出结果。我们将在稍后对其进行探讨。总之,输出结果如下:

output

dn: cn=admin,dc=example,dc=com

dn: ou=groups,dc=example,dc=com

dn: ou=people,dc=example,dc=com

如果我们希望查看ou=people条目下的全部内容,则应将其设定为搜索基础并使用children范围:

  • ldapsearch -H ldap:// -x -D “cn=admin,dc=example,dc=com” -w password -b “ou=people,dc=example,dc=com” -s children -LLL dn

通过调整搜索基础与搜索范围,大家可以查看DIT中的任何部分。

删除无关输出结果

现在我们聊聊如何删除无关的输出结果。

大部分额外输出结果可由-L标记进行控制。根据实际查看需求,大家可以使用0到3级-L标记,添加的-L标记越多,被过滤掉的信息也就越多。在普通操作情况下,使用3级过滤往往会带来更好的搜索体验。

如果大家使用SASL验证机制,那么在修改cn=config DIT时则可额外使用-Q标记。其将启用SASL的静默模式,即删除任何与SASL相关的输出结果。但请注意,如果大家使用的机制需要验证凭证,则可能因此也被一同移除在外(导致验证错误)。

搜索过滤与输出属性过滤

为了实际执行更为复杂的搜索,大家还需要指定搜索过滤。

一般来讲,我们需要在命令行末尾添加过滤,其结构为一条属性类型、一个比较运算符外加一个值。我们大多将其添加在引号内以防止被shell当成注释。另外,使用括号以指示不同过滤条件之间的边界。下面来看具体示例。

我们可以查看dc=example,dc=com DIT当中是否存在一条被设定为“jsmith”的用户名(即uid)属性。以下命令会搜索每个条目以查看是否有属性被设定为该值:

  • ldapsearch -H ldap:// -x -D “cn=admin,dc=example,dc=com” -w password -b “dc=example,dc=com” -LLL “(uid=jsmith)”

我们使用等号运算符来测试属于值匹配情况。当然还有其它运算符可供选择,例如搜索各条目内是否包含一条属性时,则使用星号运算符,其作为通配符实现比较效果。以下命令能够搜索条目内是否包含密码属性:

  • ldapsearch -H ldap:// -x -D “cn=admin,dc=example,dc=com” -w password -b “dc=example,dc=com” -LLL “(userPassword=*)”

其它搜索过滤条件还包括:

  • Equality: 使用等号(=)运算符匹配精确属性值。
  • Presence: 使用等于星号(=*)以检查是否存在属性,而无论其具体值为何。
  • Greater than or equal: 使用大于等于(>=)运算符检查比给定值大或相等的值。
  • Less than or equal: 使用小于等于(<=)运算符检查比给定值小或相等的值。
  • Substring: 使用=字符串加*通配符的方式查找包含特定组成部分的值。
  • Proximity: 使用约等于(~=)运算符查找基本匹配的值。这一操作在某些情况下并不能实现良好支持(这时应使用equality或substring搜索机制)。

大家也可以利用“!”否定符号作为前缀来设置搜索过滤条件,从而反向查找大部分搜索结果。例如,要查找全部操作性单元条目:

"(ou=*)"

要搜索全部非操作性单元条目,则:

"(!(ou=*)"

否定符号负责反转其后过滤条件的含义。

在过滤条件之后,我们还可以添加属性输出过滤。这其实就是一份各匹配条目所需显示属性的列表。默认情况下,每项属性都会被显示出来。设定属性输出过滤则能够帮助我们更精确地查看希望了解的内容。

例如,我们可以搜索全部使用用户ID的条目,但仅显示各条目的相关常规名称:

  • ldapsearch -H ldap:// -x -D “cn=admin,dc=example,dc=com” -w password -b “dc=example,dc=com” -LLL “(uid=*)” cn

输出结果如下:

Output

dn: uid=bwright,ou=People,dc=example,dc=com
cn: Brian Wright

dn: uid=jsmith1,ou=People,dc=example,dc=com
cn: Johnny Smith

dn: uid=sbrown2,ou=People,dc=example,dc=com
cn: Sally Brown

若要查看其条目描述,则可将其添加至属性显示列表:

  • ldapsearch -H ldap:// -x -D “cn=admin,dc=example,dc=com” -w password -b “dc=example,dc=com” -LLL “(uid=*)” cn description

输出结果如下:

Output

dn: uid=bwright,ou=People,dc=example,dc=com
cn: Brian Wright
description: Brian Wright from Marketing.  Brian takes care of marketing, pres
s, and community.  Ask him for help if you need any help with outreach.

dn: uid=jsmith1,ou=People,dc=example,dc=com
cn: Johnny Smith
description: Johnny Smith from Accounting.  Johnny is in charge of the company
books and hiring within the Accounting department.

dn: uid=sbrown2,ou=People,dc=example,dc=com
cn: Sally Brown
description: Sally Brown from engineering.  Sally is responsible for designing
the blue prints and testing the structural integrity of the design.

如果不提供属性过滤,则返回全部属性。我们可以使用“*”字符进行确认。要返回各操作性属性(特别是各条目后台中的元数据属性),大家可以使用“+”进行指定。例如,要查看rootDN中的操作性属性:

  • ldapsearch -H ldap:// -x -D “cn=admin,dc=example,dc=com” -b “dc=example,dc=com” -LLL “(cn=admin)” “+”

输出结果为:

Output

dn: cn=admin,dc=example,dc=com
structuralObjectClass: organizationalRole
entryUUID: cdc718a0-8c3c-1034-8646-e30b83a2e38d
creatorsName: cn=admin,dc=example,dc=com
createTimestamp: 20150511151904Z
entryCSN: 20150514191233.782384Z#000000#000#000000
modifiersName: cn=admin,dc=example,dc=com
modifyTimestamp: 20150514191233Z
entryDN: cn=admin,dc=example,dc=com
subschemaSubentry: cn=Subschema
hasSubordinates: FALSE
复合搜索

复合搜索能够将两种甚至多种独立搜索过滤条件结合起来以实现精确搜索。各搜索条件之间以一组括号及关联运算符衔接。

这里提到的关联运算符为“&”符号,相当于逻辑关系上的“和(AND)”,而“|”符号则相当于“或(OR)”。它们通过一组外部括号定义前面提到的各过滤条件。

因此要对域内同样拥有描述及邮箱地址的条目进行搜索,则:

"(&(description=*)(mail=*@example.com))"

返回的结果必须同样拥有这两项秘。

OR符号则返回与任意一项过滤条件相匹配的结果。如果要获取具备联系人信息的条目,我们可以使用以下过滤条件:

"(|(telephoneNumber=*)(mail=*)(street=*))"

通过这两种逻辑关系,我们能够实现各种更为复杂的搜索模式。

使用ldapmodify与变更修改或创建LDAP条目

除了读取需求之外,我们还需要使用其它工具对DIT中的对象进行变更。

这里我们可使用ldapmodify命令对LDIF文件修改以操作DIT。感兴趣的朋友可以参阅此文了解与LDIF文件及条目修改或添加相关的信息。

ldapmodify的基本格式与ldapsearch语法基本一致。例如,我们需要使用-H指定服务器,-Y利用SASL进行验证或者选择-x、-D与-W|w使用其它验证方式。

利用LDIF文件应用变更

最常见的变更方式就是修改LDIF文件并将其应用于DIT。大家可以使用-f选项(如果不使用-f选项,则需要在命令行中直接使用LDIF格式输入变更)。利用之前提到的语法通过以下命令创建LDIF文件:

  • ldapmodify -H ldap:// -x -D “cn=admin,dc=example,dc=com” -w password -f /path/to/file.ldif

这条命令将读取LDIF文件并应用其中指定的变更。对于ldapmodify命令,每一项LDIF变更都应该指定一条changetype,即变更类型。

如果大家的LDIF文件用于添加新条目且不包含changetype,则在添加每一条目时可以使用-a标记或者直接使用ldapadd命令。下面来看包含有changetype的LDIF文件内容示例:

LDIF with changetype

dn: ou=newgroup,dc=example,dc=com
changetype: add
objectClass: organizationalUnit
ou: newgroup

直接使用ldapmodify处理该文件:

  • ldapmodify -H ldap:// -x -D “cn=admin,dc=example,dc=com” -w password -f /path/to/file.ldif

不过某些文件中可能不包含changetype,例如:

LDIF without changetype

dn: ou=newgroup,dc=example,dc=com
objectClass: organizationalUnit
ou: newgroup

在这种情况下,需要使用-a与ldapmodify的组合进行条目添加,或者直接使用ldapadd命令:

  • ldapmodify -H ldap:// -x -D “cn=admin,dc=example,dc=com” -w password-a -f /path/to/file.ldif

或者:

  • ldapadd -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文件内做出变更,抑或是直接进行命令行操作。

测试变更与处理错误

如果大家希望以尝试的方式运行LDIF文件,则可使用-n与-v标记。这样无需对DIT进行实际变更,大家就能了解变更的执行效果:

  • ldapmodify -H ldap:// -x -D “cn=admin,dc=example,dc=com” -w password-n -v -f /path/to/file.ldif

一般来讲,如果LDIF文件的处理引发错误,操作会立即中止。

不过如果大家希望命令继续执行完成并跳过错误变更,则可使用-c标记。另外,使用-S标记则可指明将错误信息写入哪个文件以备修复:

  • ldapmodify -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中的其它一些常见操作命令。

ldappasswd

如果LDAP条目包含密码,则可使用ldappasswd命令修改这些条目。其适用于验证那些存在问题的账户或者为管理账户提供新密码(可同时选择保留旧密码)。

使用-a、-A或者-t指定旧密码,三者的作用分别为旧密码在行内作为下一条目、提示输入旧密码以及从该文件中读取旧密码并作为下一条目。

新密码则可通过-s、-S或-T指定,三者分别代表新密码在行内作为下一条目、提示输入新密码以及从该文件中读取新密码并作为下一条目。因此通常变更命令如下:

  • ldappasswd -H ldap:// -x -D “cn=admin,dc=example,dc=com” -w oldpassword -a oldpassword -s newpassword

如果未指定条目,则正被用于绑定的条目则将作为变更目标。如果大家正在绑定至某管理条目,则可在命令之后添加其它拥有写入权限的条目进行直接变更。

  • ldappasswd -H ldap:// -x -D “cn=admin,dc=example,dc=com” -w adminpassword -a oldpassword -s newpassword “uid=user,dc=example,dc=com”

要了解更多与密码变更及重置相关的内容,请参阅此篇教程。

ldapwhoami

ldapwhoami命令用于查看LDAP服务器验证完成后的当前用户身份。

如果大家使用匿名或者简单验证,则结果可能无甚作用。然而对于SASL验证来说,其能够帮助大家了解验证机制的识别结果。

例如,如果我们使用-Y EXTERNAL SASL机制通过sudo对cn=config DIT执行操作,则可利用ldapwhoami查看验证DN:

  • sudo ldapwhoami -H ldapi:// -Y EXTERNAL -Q

    ldapwhoami output

    dn:gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth

这显然并非DIT中的条目,而是SASL验证如何被翻译为LDAP能够理解的内容。通过验证DN,我们就能够创建映射与访问限制。

ldapurl

ldapurl工具允许大家在查询中指定多种组件以建立LDAP URL。LDAP URL允许大家利用标准化URL对LDAP服务器中的资源进行访问。这些属于未授权连接且处于只读模式。很多LDAP解决方案都已经不再支持LDAP URL,因此这一工具的适用范围可能比较有限。

标准DLAP URL采用以下语法:

ldap://host:port/base_dn?attr_to_return?search_scope?filter?extension

各组成部分的作用为:

  • base_dn: 指定开始搜索的基础DN。
  • attr_to_return: 来自匹配条件的对应属性,各属性间以逗号隔开。
  • search_scope: The search scope. Either base, sub, one, or children.基础范围,分为base、sub、one或children。
  • filter: 用于选定返回条目的搜索过滤条件。
  • extension: 需要指定的LDAP扩展,这部分内容我们今天暂不讨论。

URL中的各部分以问号相隔。大家无需提供用不上的条目,但由于条目类型是由其在字符串中的位置决定的,因此必须适当留空。

例如,一条URL可能如下所示:

ldap://localhost:389/dc=example,dc=com?dn,ou?sub?(ou=*)

如果大家希望在ldapurl工具中引用,则可使用-H标记并将URL纳入引号内:

  • ldapurl -H “ldap://localhost:389/dc=example,dc=com?dn,ou?sub?(ou=*)”

输出结果如下:

ldapurl output

scheme: ldap
host: localhost
port: 389
dn: dc=chilidonuts,dc=tk
selector: dn
selector: ou
scope: sub
filter: (ou=*)

大家也可以使用以下标记来反向处理并生成LDAP URL。其作用与LDAP URL中的各组成部分正好相反:

  • -S: URL scheme (ldap, ldaps或者ldapi)。默认为ldap scheme。
  • -h: LDAP服务器名称或地址。
  • -p: LDAP服务器端口。默认值根据scheme而定。
  • -b: 作为查询起点的基础DN。
  • -a: 一份以逗号分隔的返回属性列表。
  • -s: 所使用的搜索基础(base, sub, children或者one)。
  • -f: 用于返回条目的LDAP过滤条件。
  • -e: 所指定的LDAP扩展。

因此,我们可以构建以下命令:

  • ldapurl -h localhost -b “dc=example,dc=com” -a dn,ou -s sub -f “(ou=*)”

其返回结果为一条构建完成的URL:

ldapurl output

ldap://localhost:389/dc=example,dc=com?dn,ou?sub?(ou=*)

大家可以利用这种格式构建起可供LDAP客户端作为通信之用的URL。

ldapcompare

ldapcompare工具可用于将条目中的某项属性与给定值进行比对。

在绑定过程中,我们往往需要根据查询到的实际数据进行设置,包括提供条目DN及声明。其声明格式为先指定一项属性,而后是值,二者间由一个或两个冒号隔开。对于简单的字符串值,使用单冒号即可。双冒号通常用于base64编码值。

因此在声明John为“powerusers”群组的成员时,使用以下命令:

  • ldapcompare -H ldap:// -x “ou=powerusers,ou=groups,dc=example,dc=com” “member:uid=john,ou=people,dc=example,dc=com”

如果他在群组当中,则返回TRUE。如果不在,则返回FALSE。如果用于绑定的DN不具备读取该属性的权限,则返回UNDEFINED。

通过这种方式,我们能够检查群组成员顺序来执行请求操作,从而达到验证系统的目的。

总结

到这里,大家应该已经了解了如何利用各LDAP工具接入、管理并使用LDAP服务器。其它客户端亦可提供用于LDAP系统日常管理的操作界面,但今天我们提到的工具能够帮助大家深入理解DIT中的数据访问与结构体系,从而立足于底层掌握其使用方式。

本文来源自DigitalOcean Community。英文原文:How To Manage and Use LDAP Servers with OpenLDAP Utilities By Justin Ellingwood

翻译:diradw

gentoo安装实践-openlap用户管理(失败) 1:以为很简单的事,所有就想不明白就弄。结果就配置没有成功 要让 PAM 身份验证服务使用 OpenLDAP 服务器,请将 pam_ldap 行加入到 /etc/pam.d/system-auth 中,位置在对应的标准 pam_unix.so 条目之后。尽管其他设置也可以实现相同的结果,但是我使用下面的文件设置: saturn MigrationTools-47 # ldapa 阅读详情

相关推荐

【DevOps工具篇】LDAP GUI管理工具

OpenLDAP附带的LDAP管理命令非常灵活和方便。但是,为了进行注册或更改,您需要创建一个特殊格式(LDIF文件)的文件,这非常繁琐。因此,推荐使用适用于不同用途的GUI管理工具。在这里,我们将介绍通用的LDAP管理工具“phpLDAPadmin”以及其他LDAP管理工具。

欧阳天涵的专栏 1033

两款推荐的Windows LDAP 客户端工具

Windows 系统的LDAP客户端工具很多,选起来也是眼花缭乱。这里推荐两款: 绿色版LdapBrowser, 一个老牌也是比较老旧的LDAP客户端,使用Java开发。不用安装,解压就可以使用。 安装版 LDAP Browser,LDAPSoft公司出品的。界面效果类似Eclipse, 软件一直在更新维护。需要安装使用。 绿色版LdapBrowser 该工具简单,轻量。所有文件加起来不到1M。 不过目前已经在网络上找不到其官网地址了。 下载 可以到以下网盘地址下载: 链接:https://pan.ba

oscar999的专栏 3万+

16、开源存储区域网络(SAN)搭建与OpenLDAP配置指南

本文详细介绍了如何在Ubuntu Server上搭建开源存储区域网络(SAN),并通过OpenLDAP实现集中用户管理。内容涵盖开源SAN的搭建与配置、集群环境下的高可用解决方案、OpenLDAP的基本配置及其模式扩展、安全设置和高可用架构。通过Heartbeat、DRBD和STONITH等技术,构建高可用存储系统;通过LDAP模式扩展、SSL/TLS加密、访问控制及主从复制,提升LDAP的安全性和可用性。适用于企业级信息化建设,提高系统可靠性与管理效率。

desk3的博客 110

LDAP数据构建工具(LdapDataTool)

LDAP数据构建工具实现

bossfriday - 个人博客 1842

71、DNS与单点登录(SSO)技术解析

本文深入解析了DNS中的跛脚委派问题及其识别方法,并介绍了BIND相关学习资源。文章重点探讨了单点登录(SSO)的核心概念与实现要素,包括集中式目录存储、认证机制及PAM和SSSD的集成应用。同时详细讲解了LDAP的用途、数据结构、OpenLDAP与389 Directory Server的配置,以及ldapsearch查询操作。此外,还阐述了DNS与LDAP的关联、SSO与LDAP的结合应用,并提出了在DNS、SSO和LDAP部署中的安全建议,帮助提升网络环境的安全性与管理效率。

zz67890的博客 61

phpldapadmin 1.2.3 部署与配置实战:从压缩包到可登录管理界面

LDAP(轻量级目录访问协议)是一种用于访问和维护分布式目录信息服务的开放协议,其核心原理是通过目录信息树(DIT)组织数据,每个条目由DN唯一标识,并由objectClass定义属性结构。在运维场景中,LDAP常被用于统一账号管理,但命令行操作门槛较高。phpldapadmin作为一款基于PHP的Web前端工具,通过可视化界面将LDAP目录树映射为树形结构和表单,降低了管理复杂度。其技术价值在于提供轻量级的目录管理入口,适用于需要快速为团队开通账号增删改查权限的运维或HR场景。本文以phpldapadmi

weixin_32382335的博客 48

Python-LDAP 使用指南

Python-LDAP 使用指南 1. 项目介绍 Python-LDAP 是一个为 Python 程序提供 LDAP 目录服务器访问的库。它主要封装了 OpenLDAP 客户端库,用于与 LDAP 服务器进行交互。此外,该包还包含了处理其他 LDAP 相关内容(如 LDIF、LDAPURLs、LDAPv3 子架构等)的模块。 2. 项目快速启动 以下是一个快速启动 Python-LDAP 的示例:...

gitblog_00669的博客 556

非常好用的ldap连接工具

连接ldap工具试了好多,知道遇到她,ApacheDirectoryStudio~ 界面类似开发工具eclipse;目录结构清晰,图标也做了分类;好用!

ubuntu12.04下OpenLDAP的安装部署

环境: 1、ldap server OS:ubuntu server 12.04 2、ldap 软件: OpenLDAP 2.4.28 [size=large]一、ldap服务的配置与使用[/size] 1、修改主机域名 [code="java"]vi /etc/hosts 127.0.1.1 ldapserver.my.com.cn ldapserver[/code] ...

灰烬之灵 183

别再死磕GAN了!用PyTorch从零实现DDPM图像生成(附CIFAR-10完整代码)

本文详细介绍了如何使用PyTorch从零实现DDPM(Denoising Diffusion Probabilistic Models)图像生成模型,并在CIFAR-10数据集上进行训练和测试。通过对比GAN,DDPM展现出更稳定的训练过程和更高质量的生成效果。文章包含完整的代码实现、训练技巧和优化建议,帮助开发者快速掌握这一前沿的生成模型技术。

weixin_33720078的博客 631

四足机器人机械结构设计:从腿型到驱动的全面解析

本文全面解析了四足机器人机械结构设计的核心要点。资深工程师老张深入探讨了并联腿与串联腿的选型策略、不同腿型布局对稳定性的影响,并详细对比了皮带轮与连杆驱动方式的优劣。文章结合实战经验,强调了足端设计、材料选择及整体结构轻量化等关键细节,为机器人开发者提供了从理论到实践的宝贵指导。

assembly8low的博客 634

ArcGIS for Server安全与LDAP配置

ArcGIS for Server安全与LDAP配置 1、安全性概述 ArcGIS Server使用基于角色的访问控制来管理对受保护资源的访问。访问GIS资源的权限只能分配给角色。单独的用户只能通过从其角色继承来获取权限。对GIS资源访问权限的身份验证一般有两种方式:基于ArcGIS令牌的身份验证;Web服务器身份验证。 (1)ArcGIS Server账号 安装ArcG...

weixin_30814223的博客 154

保姆级教程:用Ansys Workbench找出BGA焊点最容易坏的位置(附热循环+振动分析)

本文提供了一份详细的Ansys Workbench教程,指导如何通过热循环和振动分析找出BGA焊点最容易失效的位置。从模型搭建、材料定义到网格划分和载荷设置,全面解析了BGA焊点可靠性分析的全流程,帮助工程师提前预防焊点开裂问题,提升电子封装设计的可靠性。

weixin_30983965的博客 420

the Ulr of openldap research

<br />openldap costemplate cosattribute<br /> <br />http://docs.redhat.com/docs/en-US/Red_Hat_Directory_Server/8.1/html-single/Schema_Reference/index.html#cosSpecifier<br /> <br /> <br />http://www.opendocs.net/redhat/dir-server/ag/7.1/password.html

dsdio7115的专栏 354

DEV-C++调试设置

       昨天用C/C++去考了CSP,结果用DEV-C++调试总是闪退,按照我的记忆打开了调试参数,迷迷糊糊搞了一通,还是没办法调试,难受了几个小时。所以今天痛下决心,一定要写下DEV-C++设置调试的过程,警示自己! 解决步骤 1.打开DevC++找到上方工具栏 2.点击选择编译选项,再按下图所示设置即可

懒羊羊的快乐小屋 1029

闲人闲谈PS之一项目库存跨公司业务STO解决方案--SAP闲人的开篇

写这篇文章之前,简单说一下发这篇文章的动机。也算是在SAP这一行干了快10多年,在对一个模块了解越来越深入,越发觉自己的SAP知识浅薄。总的来说,和多数顾问一样,对于**标准功能**的应用业务场景理解还是存在或多或少的知识盲区。 因为一个偶然,看到SAP团子君的文章,分享了很多干货文章。这也是自己一直想做的时候,不管水平高低与否,分享本身就意味着提升。好了废话不多说,先在优快云上发一篇吧,困惑自己将近10年的问题的解决方案。 业务场景:在项目型企业中,通常会有这样的业务,母公司和客...

SAP闲人的博客 9269

Ubuntu Server 20.04上安装OpenLDAP和phpLDAPadmin

文章目录一、 参考: https://www.techrepublic.com/article/how-to-install-openldap-and-phpldapadmin-on-ubuntu-server-20-04/ https://blog.youkuaiyun.com/lodianm/article/details/105386314 https://www.jianshu.com/p/e6de94d15d47 一、

beeworkshop的博客 6585

学习Ultralytics (下载)

Ultralytics由创立,最初是为了简化目标检测模型的开发和应用,专注于构建高效、易用、性能卓越的深度学习框架。其主要产品之一是 YOLO 系列模型,尤其是最新的YOLOv5和YOLOv8,因其在精度、速度和可扩展性方面的出色表现而广受欢迎。

2301_76846375的博客 2868

phpLDAPadmin支持哪些LDAP服务器?389 Directory/OpenLDAP等6大平台实测

phpLDAPadmin是一款功能强大的Web基础LDAP管理工具,能够帮助管理员通过直观的界面轻松管理各种LDAP服务器。对于新手和普通用户来说,了解它所支持的LDAP服务器平台至关重要,这有助于他们选择合适的服务器并顺利进行配置与管理。 [![phpLDAPadmin标志](https://raw.gitcode.com/gh_mirrors/ph/phpLDAPadmin/raw/1982

gitblog_00657的博客 414

dify1.3.1应用服务与数据服务分离,附件及插件包迁移至minio,实现离线部署,保证插件正常运行

dify1.3.1应用服务与数据服务分离,附件及插件包迁移至minio,实现离线部署,保证插件正常运行

Time_1023的博客 1874

Mac新手必看:用Homebrew安装wget的保姆级教程,附常见报错一键修复

本文为Mac新手提供使用Homebrew安装wget的详细教程,涵盖从Homebrew安装到wget基础使用的全流程,并附常见报错一键修复方案。通过本指南,用户可轻松掌握命令行下载工具wget的安装与使用技巧,解决Mac环境下资源下载的各种问题。

weixin_30635053的博客 368

使用 PAM 集成 OpenLDAP 实现 Linux 统一管理系统用户

Linux-PAM 是一种可插拔式认证模块,是 Linux 操作系统首选的用户身份认证方式。OpenLDAP 是轻量级目录访问协议的实现,是企业广泛使用的用户管理工具。本文详细讲述了 Linux-PAM 集成 LDAP 实现企业用户的统一管理的方法,以及该类认证模式在企业中的应用。 1 评论: 刘 兰哲, 高级软件工程师, IBM 关闭 [x]

zhulianhai0927的专栏 3822

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

LDAP概念和原理介绍

相信对于许多的朋友来说,可能听说过LDAP,但是实际中对LDAP的了解和具体的原理可能还比较模糊,今天就从“什么是LDAP”、“LDAP的主要产品”、“LDAP的基本模型”、“LDAP的使用案例”四个方面来做一个介绍。 我们在开始介绍之前先来看几个问题: 1.我们日常的办公系统是不是有多个? 2.每个系统之间是不是都有独立的账号密码? 3.密码多了,有时候半天想不起来哪个密码对应哪个系统? 4.每次新项目的开发,都需要重新开发和维护一套用户密码? 5.维护多套系统的用户是不是非常头疼?...

日薪灬越亿的博客 7583

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Linux下LDAP统一认证解决方案

Linux下LDAP统一认证解决方案 --http://www.cangfengzhe.com/wangluoanquan/3.html 企业内部需要认证的服务很多,员工需要记住很多的密码, 即使对这些服务进行相同的密码设置,也存在很大的安全隐患。笔者目前工作的企业就是如此,每一个新员工的到来管理员都要初始化很多密码,而这些密码都被设置成了“888888”等弱密码,由于各种软件的认...

weixin_30684743的博客 118

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

上一篇: 了解LDAP协议、数据结构与条目组件
下一篇: 如何在Ubuntu 14.04上备份、恢复及迁移MongoDB数据库
普通网友
博客等级 码龄10年 769粉丝 269原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值