添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

OpenLDAP 命令介绍

OpenLDAP 管理命令总汇

OpenLDAP 管理命令如下所示。

  • ldapsearch:搜索 OpenLDAP 目录树条目。
  • ldapadd:通过 LDIF 格式,添加目录树条目。
  • ldapdelete:删除 OpenLDAP 目录树条目。
  • ldapmodify:修改 OpenLDAP 目录树条目。
  • ldapwhoami:效验 OpenLDAP 用户的身份。
  • ldapmodrdn:判断 OpenLDAP 目录树 DN 条目。
  • ldapcompare:判断 DN 值和指定参数值是否属于同一个条目。
  • ldappasswd:修改 OpenLDAP 目录树用户条目实现密码重置。
  • slaptest:验证 slapd.conf 文件或 cn=配置目录。
  • slapindex:创建 OpenLDAP 目录树索引,提供查询效率。
  • slapcat:将数据小牧转换为 OpenLDAP 的 LDIF 文件。

OpenLDAP 命令讲解案例分析

ldapsearch 命令

ldapsearch 命令可根据用户定义的查询条件,对 OpenLDAP 目录树进行查找以及检索目录树相关条目。后期维护 OpenLDAP 服务器,会经常用到此命令获取详细信息。

同样可以通过过滤查询,定位符合条件的条目。例如,可以通过 =、>=、<=、~= 进行匹配。也可以通过指定条目的查询精确或模糊的条目,例如,uid、ou 或者 objectClass 等都可以进行精确匹配。

常用参数介绍:

-b <searchbase>:指定查找的节点。

-D <binddn>:指定查找的 DN,DN 是整个 OpenLDAP 树的唯一识别名称,类似于系统中根的概念。

-v:输出详细信息。

-x:使用简单的认证,不使用任何加密的算法,例如,TLS、SASL 等相关加密算法。

-W:在查询时,会提示输入密码,如果不想输入密码,使用 -w password 即可。

-h(OpenLDAP 主机):使用指定的 ldaphost,可以使用 FQDN 或 IP 地址。

-H(LDAP-URL):使用 LDAP 服务器的 URL 地址进行操作。

-p(port):指定 OpenLDAP 监听的端口(默认端口为 389,加速端口为 636)。

下面给出了一个 ldapsearch 操作案例。

$ ldapsearch -x -D "cn=admin,dc=shileizcc,dc=com" -H ldap://shileizcc.com -b "ou=people,dc=shileizcc,dc=com" -W
Enter LDAP Password:
Expand source
# extended LDIF
# LDAPv3
# base <ou=people,dc=shileizcc,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
# people, shileizcc.com
dn: ou=people,dc=shileizcc,dc=com
ou: people
objectClass: top
objectClass: organizationalUnit
# user1, people, shileizcc.com
dn: uid=user1,ou=people,dc=shileizcc,dc=com
uid: user1
cn: user1
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSQ2JHB1d0FBSUlEJGZwUWpZOURmdVRTWG42dzJXLzhmbXBXd1lSQld
 qczZwdEhoVFNTYlNCeUlJVjRIUHRYUXB3djk2aFdxaFdneWRwZ0FrZ3lHR205V0lBUXJRcUttdUIu
shadowLastChange: 17654
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/user1
# user2, people, shileizcc.com
dn: uid=user2,ou=people,dc=shileizcc,dc=com
uid: user2
cn: user2
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSQ2JEo3OHRlRkwzJDNyaHBzczBCcW1rR1MvRDUzVVpLRm9DZFdUS0V
 tQnZRc2NDSnRwN2xSSWdLem5QUjJmU0x1cFVsaWZRblhFVmVZZm1yOXdvcHpNSm5JeWNDZ3d6Qjkw
shadowLastChange: 17654
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/user2
# user3, people, shileizcc.com
dn: uid=user3,ou=people,dc=shileizcc,dc=com
uid: user3
cn: user3
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSQ2JG8xNWQvbkVwJGVGNlZyb0p1WU5LUDdEUUVGbGlnZi4wTVo2aWJ
 1ZTdLYkZUL2xSL0FlOEFDdFVnd1JNUkZYZktNclkzNHFBNUZrU3AwWmRESlk5S0VWQ0RHek96QXcw
shadowLastChange: 17654
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1002
gidNumber: 1002
homeDirectory: /home/user3
# user4, people, shileizcc.com
dn: uid=user4,ou=people,dc=shileizcc,dc=com
uid: user4
cn: user4
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSQ2JGtDd2NDa1lDJFlxcmZaZ1FKYnJCTEJqRnRRTmJ6OTBGRHU0LnR
 mUjlSTnVxMjBYem9iNkh1SHg4aS9ZczEzM210eG0uTHlLRW1yLzRzL0NqbjBvOXV1WUduNHIvUkwv
shadowLastChange: 17654
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1003
gidNumber: 1003
homeDirectory: /home/user4
# user5, people, shileizcc.com
dn: uid=user5,ou=people,dc=shileizcc,dc=com
uid: user5
cn: user5
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSQ2JHRGa0p6L1A0JE5IcmJCSEYzVUVsRWhkZ2dESi5DNm0weXcwcGp
 TTnRNTlB3eXVwb2R0R0xWVzZXSEFUcEdra0tIWjRKSFBrMElDdG10Z3JkQzdpLmtOVi5Yamw2N0cw
shadowLastChange: 17654
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1004
gidNumber: 1004
homeDirectory: /home/user5
# shilei, people, shileizcc.com
dn: uid=shilei,ou=people,dc=shileizcc,dc=com
uid: shilei
cn: System
sn: shi
givenName: lei
displayName: shilei
objectClass: posixAccount
objectClass: top
objectClass: person
objectClass: shadowAccount
objectClass: inetOrgPerson
uidNumber: 1009
gidNumber: 1009
gecos: System Manager
loginShell: /bin/bash
homeDirectory: /home/user1
userPassword:: c2hpbGVp
shadowLastChange: 17654
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
shadowExpire: -1
employeeNumber: OPS
homePhone: 0531-xxxxxxxx
mobile: 152xxxxxxxxx
mail: [email protected]
postalAddress: BeiJing
initials: Test
# search result
search: 2
result: 0 Success
# numResponses: 8
# numEntries: 7

通过 ldapsearch 配合一些参数以及过滤条件查看用户信息。例如:查看当前 OpenLDAP 目录树关于 shilei 用户的信息(cn 以及 gidNumber)。

$ ldapsearch -x -LLL -b dc=shileizcc,dc=com 'uid=shilei' cn gidNumber
dn: uid=shilei,ou=people,dc=shileizcc,dc=com
cn: System
gidNumber: 1009

其中,参数的含义如下所示:

-x:简单认证模式,不使用默认的 SASL 认证方式。

-LLL:禁止输出与过滤条件不匹配的信息。

-b:目录树的基准目录树信息。

uid:过滤条件,找到包含 shilei 的用户。

cn、gidNumber:将 shilei 用户的信息再次进行过滤,显示出相关 cn 及 gidNumber 信息。

ldapadd 命令

ldapadd 命令用于通过 LDIF 格式添加目录树条目。通过 man 文件查看帮助文档可发现,ldapadd 实际上是 ldapmodify 的软连接,两条命令的相关参数几乎没有多大区别,ldapadd 在功能上等同于 ldapmodify -a 命令。

base.ldif
dn: dc=shileizcc,dc=com
dc: shileizcc
objectClass: top
objectClass: domain
dn: ou=people,dc=shileizcc,dc=com
ou: people
objectClass: top
objectClass: organizationalUnit
dn: ou=group,dc=shileizcc,dc=com
ou: group
objectClass: top
objectClass: organizationalUnit
$ ldapadd -x -D "cn=admin,dc=shileizcc,dc=com" -W -h 172.17.76.205 -f base.ldif

下面在给出一个 ldapadd 操作案例,指定更改类型。

$ cat << EOF | ldapadd -x -D "cn=admin,dc=shileizcc,dc=com" -W -H ldap://shileizcc.com
dn: uid=shilei,ou=people,dc=shileizcc,dc=com
changetype: delete
Enter LDAP Password:
deleting entry "uid=shilei,ou=people,dc=shileizcc,dc=com"

这样就删除了一个用户。

ldapdelete 命令

ldapdelete 命令用于从目录树中删除指定条目,并根据 DN 条目删除一个或多个条目,但必须提供所要删除指定条目的权限所绑定的 DN(整个目录树的唯一标识名称)。

下面介绍 ldapdelete 常用参数:

-c:持续操作模式,例如,在操作过程中出现错误,也会进行后续相关操作。

-D <binddn>:指定查找的 DN,DN 是整个 OpenLDAP 树的唯一识别名称。

-n:显示正在进行的相关操作,但不实际修改数据,一般用于测试。

-x:使用简单的认证,不使用任何加密的算法,例如,TLS、SASL 等相关加密算法。

-f:使用目标文件名作为命令的输入。

-W:显示输入密码。

-w passwd:可以再 -w 后面加入 password。

-y passwdifile:可以通过将密码写入文件进行验证。

-r:递归删除,这个操作会从目录树删除指定的 DN 的所有子条目。

-h(OpenLDAP 主机):使用指定的 ldaphost,可以使用 FQDN 或 IP 地址。

-H(LDAP-URL):使用 LDAP 服务器的 URL 地址进行操作。

-p(port):指定 OpenLDAP 监听的端口(默认端口为 389,加速端口为 636)。

下面给出一个 ldapdelete 案例。

从当前目录树中删除 uid 为 shilei 的用户,删除前需要使用 ldapsearch 查看 shilei 的 DN 名称。

$ ldapdelete -D "cn=admin,dc=shileizcc,dc=com" -W -H ldap://shileizcc.com -x
Enter LDAP Password:
uid=shilei,ou=People,dc=shileizcc,dc=com  # 输入要删除的条目信息,这里是交互式的形式存在,如果需要退出则按 Ctrl+D 组合键结束即可。

通过 ldapdelete 删除用户和用户组的另一种方式如下:

$ ldapdelete -x -w 123456 -D cn=admin,dc=shileizcc,dc=com "uid=shilei,ou=People,dc=shileizcc,dc=com"
$ ldapdelete -x -w 123456 -D cn=admin,dc=shileizcc,dc=com "cn=user1,ou=Group,dc=shileizcc,dc=com"

ldapmodify 命令

ldapmodify 命令可以对 OpenLDAP 数据库中的条目进行删除操作,它可以理解为编辑器。也可以通过设置 chanagetype 属性的值为 delete 关键字来进行条目的删除。

下面介绍 ldapmodify 常用参数:

-a:增加条目。

-D <binddn>:指定查找的 DN,DN 是整个 OpenLDAP 树的唯一识别名称。

-n:显示正在进行的相关操作,但不实际修改数据,一般用于测试。

-v:显示输出结果。

-x:使用简单的认证,不使用任何加密的算法,例如,TLS、SASL 等相关加密算法。

-f(文件名 .ldif):根据指定的文件,对数据库进行操作。

-W:显示输入密码。

-w passwd:可以再 -w 后面加入 password。

-y passwdifile:可以通过将密码写入文件进行验证。

-r:递归删除,这个操作会从目录树删除指定的 DN 的所有子条目。

-h(OpenLDAP 主机):使用指定的 ldaphost,可以使用 FQDN 或 IP 地址。

-H(LDAP-URL):使用 LDAP 服务器的 URL 地址进行操作。

-p(port):指定 OpenLDAP 监听的端口(默认端口为 389,加速端口为 636)。

下面给出一个 ldapmodify 操作案例。

modify.ldif
dn: uid=shilei,ou=People,dc=shileizcc,dc=com
changetype: modify
replace: pwdReset
pwdReset: TRUE
$ ldapmodify -x -D cn=admin,dc=shileizcc,dc=com -w 123456 -H ldap://shileizcc.com -f modify.ldif

下面再给出一个 ldapmodify 操作案例。

当 OpenLDAP 用户尝试输入的次数超出服务器规定的次数后,此账户会被服务器锁定,无法登入系统。例如,系统用户密码输入次数超过系统定义次数后,可以通过 pam_tally2 命令对其账户实现解锁。OpenLDAP 找回被锁之后,可以通过 ldapmodify 命令进行解锁。要解锁账户,删除 uid 所对应用户账户的 pwdAccountLockedTime 属性即可。

$ cat << EOF | ldapmodify -x -H ldap://shileizcc.com -D cn=config -w 123456
dn: uid=shilei,ou=People,dc=shileizcc,dc=com
changetype: modify
delete: pwdAccountLockedTime

下面给出第三个操作案例。

$ cat << EOF | ldapmodify -x -H ldap://shileizcc.com -D cn=config -w 123456
dn: uid=shilei,ou=People,dc=shileizcc,dc=com
changetype: modify
replace: pwdMustChange
pwdMustChange: TRUE

此 ldif 文件主要结合 pwdMustChange 让用户登入机器时必须修改初始密码,保证账号安全性,否则无法通过身份验证登入系统。

ldapwhoami 命令

ldapwhoami 命令用于验证 OpenLDAP 服务器的身份。

相关参数和 ldapadd、ldapmodify、ldaosearch 基本相似。下面是操作案例

$ ldapwhoami -x -D uid=shilei,ou=People,dc=shileizcc,dc=com -H ldap://shileizcc.com -w shilei # 密码为 shilei 用户的密码
dn:uid=shilei,ou=people,dc=shileizcc,dc=com

用户输入正确密码后,会显示 shilei 用户在 OpenLDAP 目录树中的 DN,否则会显示 ldap_bind: Invalid credentials (49) 错误,这一般由于密码错误造成,输入正确密码即可。

ldapmodrdn 命令

ldapmodrdn 命令用于对 OpenLDAP 目录树中 RDN 条目的修改,可以从标准的条目信息输入或者使用 -f 指定 LDIF 文件的格式输入。

案例如下:

$ ldapmodrdn -x -D cn=admin,dc=shileizcc,dc=com -w 123456 -H ldap://shileizcc.com "uid=shilei,ou=People,dc=shileizcc,dc=com" uid=slzcc

ldapmodrdn 指定后,由于没有使用 -r 选项,原来的 uid 条目不会被删除。如果后期需要将老的 uid:shilei 删除,可以通过 ldapmodify 来实现删除 uid: shilei 条目。

$ cat << EOF | ldapmodify -x -H ldap://shileizcc.com -D cn=admin,dc=shileizcc,dc=com -w 123456
dn: uid=slzcc,ou=People,dc=shileizcc,dc=com
changetype: modify
delete: uid
uid: shilei

ldapcompare 命令

ldapcompare 命令用于判断 OpenLDAP 目录树中 DN 值和条目值是否属于同一个条目。案例介绍:

$ ldapcompare -x -D cn=admin,dc=shileizcc,dc=com -w 123456 -H ldap://shileizcc.com "uid=slzcc,ou=People,dc=shileizcc,dc=com" "uid:shilei"
FALSE

ldappasswd 命令

ldappasswd 命令用于判断 OpenLDAP 目录树中 DN 值和指定条目是否属于同一个条目。

当系统用户遗忘密码时,可通过 root 管理员重置密码。对与 OpenLDAP 用户而言,可以通过 OpenLDAP 服务器管理员(cn=admin)进行重置,此时需要使用 ldappasswd 指令重设密码。命令如下:

$ ldappasswd -x -D cn=admin,dc=shileizcc,dc=com -w 123456 -H ldap://shileizcc.com  "uid=slzcc,ou=People,dc=shileizcc,dc=com" -S
New password:
Re-enter new password: # 输入两次新密码

对旧密码进行设置:

$ ldappasswd -x -D cn=admin,dc=shileizcc,dc=com -w 123456 -H ldap://shileizcc.com  -A "uid=slzcc,ou=People,dc=shileizcc,dc=com" -S
Old password:
Re-enter old password:
New password:
Re-enter new password:

slaptest 命令

slaptest 命令用于检测配置文件,及数据库文件的可用性。

$ slaptest -f /etc/openldap/slapd.conf

要检测配置文件的可用性,可设置输出级别:

$ slapdtest -d 3 -F /etc/openldap/slapd.d

slapindex 命令

slapindex 用于创建 OpenLDAP 数据库条目索引,用于提高查询速度,减轻服务器相应压力,前提是 slapd 进程停止,否则会提示错误。

-a filter:添加过滤选项。

-b suffix:指定 suffix 路径,如 dc=shilei,dc=com。

-d sumber:指定 debug 输出级别。

-f:指定 OpenLDAP 的配置文件。

-F:指定 OpenLDAP 的数据库文件目录。

-c:出现错误时,继续输出条目。

-H:使用 LDAP 服务器的 URL 地址进行操作。

-v:输出详细信息。

下面通过slapcat 备份 OpenLDAP 所有目录树条目:

$ slapcat -v -l openldap.ldif
5aeabfc8 The first database does not allow slapcat; using the first available one (2)
# id=00000001
# id=00000002
# id=00000003
# id=00000004
# id=00000005
# id=00000006
# id=00000007
# id=00000008
# id=00000009
# id=0000000a
# id=0000000b
# id=0000000c
# id=0000000d
# id=0000000f
# id=00000010
# id=00000011
# id=00000012
# id=00000016

Hey Jones Shi , can you run it successfully?

ldapsearch -x -LLL -b dc=shileizcc,dc=com 'uid=shilei' cn gidNumber

I am getting the error response from my local (Ubuntu cmd)

No such object (32)

  • Aug 01, 2018
  • Make sure you have this object?

    $ cat << EOF | ldapadd -x -D "cn=admin,dc=shileizcc,dc=com" -w shileizcc  -H ldap://shileizcc.com
    > dn: ou=IT,dc=shileizcc,dc=com
    > ou: IT
    > objectClass: top
    > objectClass: organizationalUnit
    > dn: cn=Ops,ou=IT,dc=shileizcc,dc=com
    > cn: Ops
    > gidNumber: 500
    > objectClass: posixGroup
    > objectClass: top
    > dn: cn=shilei,cn=ops,ou=IT,dc=shileizcc,dc=com
    > uid: shilei
    > cn: shilei
    > sn: shi
    > givenName: lei
    > displayName: shilei
    > objectClass: posixAccount
    > objectClass: top
    > objectClass: person
    > objectClass: shadowAccount
    > objectClass: inetOrgPerson
    > uidNumber: 1009
    > gidNumber: 1009
    > gecos: System Manager
    > loginShell: /bin/bash
    > homeDirectory: /home/shilei
    > userPassword: shilei
    > shadowLastChange: 17654
    > shadowMin: 0
    > shadowMax: 99999
    > shadowWarning: 7
    > shadowExpire: -1
    > employeeNumber: 18002
    > homePhone: 0531-xxxxxxxx
    > mobile: 152xxxxxxxxx
    > mail: [email protected]
    > postalAddress: BeiJing
    > initials: Test
    adding new entry "ou=IT,dc=shileizcc,dc=com"
    adding new entry "cn=Ops,ou=IT,dc=shileizcc,dc=com"
    adding new entry "cn=shilei,cn=ops,ou=IT,dc=shileizcc,dc=com"
    $ ldapsearch -x -LLL -b dc=shileizcc,dc=com 'uid=shilei' cn gidNumber -H ldap://shileizcc.com
    dn: cn=shilei,cn=Ops,ou=IT,dc=shileizcc,dc=com
    cn: shilei
    gidNumber: 1009
  • Powered by Atlassian Confluence 7.10.2
  • Report a bug
  • Atlassian News
  •