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 -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 命令。
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 操作案例。
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)
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
Printed by Atlassian Confluence 7.10.2