如何使用ldapearearch命令查询使用示例
在本文中,我们将考虑其中一个主LDAP实用程序LDAPSEARCH。
它是一个shell可访问的接口,它使用指定的可分辨名称和密码打开与指定的LDAP服务器的连接,并在特定的搜索过滤器,参数和选项上找到条目基本。
在开始之前,请确保已安装并成功配置LDAP服务器。
如果没有安装LDAP,请参阅简单安装教程(请跳过镜像模式配置部分)。
1)查询LDAP服务器并提取信息
以下三个命令将查询并提取来自LDAP服务器的所有条目
ldapsearch -x -h master.example.com -p 389
-x stands for simple authentication (without SASL) -h specifies hostname -p used for port (that can be 636 in case of LDAP over SSL)
ldapsearch -x -h master.example.com -D "cn=manager,dc=example,dc=com" -W
-D defines bind Distinguish name. In other words, your authentication user from slapd.conf file -W will prompt for bind password (the one you've typed after slappasswd command)
ldapsearch -x -h master.example.com -D "cn=manager,dc=example,dc=com" -w "slappasswd"
-w will use the password provided in the command line
因此,所有三个命令都将提供相同的输出:
# example.com dn: dc=example,dc=com dc: corp o: corp objectclass: dcObject objectclass: organization # department, example.com dn: ou=department,dc=example,dc=com objectclass: organizationalUnit objectclass: top ou: hadoop # groups, department, example.com dn: ou=groups,ou=department,dc=example,dc=com objectclass: organizationalUnit objectclass: top ou: groups # system_admin, groups, department, example.com dn: cn=system_admin,ou=groups,ou=department,dc=example,dc=com cn: system_admin gidnumber: 502 memberuid: admin1 memberuid: admin2 objectclass: posixGroup objectclass: top # users, department, example.com dn: ou=users,ou=department,dc=example,dc=com objectclass: organizationalUnit objectclass: top ou: users # admin1, users, department, example.com dn: uid=admin1,ou=users,ou=department,dc=example,dc=com cn: admin1 gidnumber: 502 givenname: Admin1 homedirectory: /home/users/admin1 objectclass: inetOrgPerson objectclass: posixAccount objectclass: top sn: Admin1 uid: admin1 uidnumber: 5001 userpassword: password # admin2, users, department, example.com dn: uid=admin2,ou=users,ou=department,dc=example,dc=com cn: admin2 gidnumber: 502 givenname: Admin2 homedirectory: /home/users/admin2 objectclass: inetOrgPerson objectclass: posixAccount objectclass: top sn: Admin2 uid: admin2 uidnumber: 5002 userpassword: password
2)查询SSL/TLS
要使用LDAP统一资源标识符(URI),我们需要用户-h
标志,该标志指定用于连接到服务器和端口的URI:LDAP [S]://hostname [:端口]
ldapsearch -x -H ldap://master.example.com
ldapsearch -x -H ldaps://master.example.com
端口是可选的,如果未给出端口,则将使用389或者LDAPS端口的默认LDAP或者LDAPS端口。
输出将是所有LDAP数据库。
3)搜索特定的基础DN和范围
现在,我们将尝试搜索特定的基础区分名称和范围。
ldapsearch -h master.example.com -D "cn=manager,dc=example,dc=com" -w "slappasswd" -b "ou=users,ou=department,dc=example,dc=com" -s base
-b defines base distinguish name for search. In other words, it defines starting point for the search -s scope of your search. That can be base object (base), one-level (one), subtree (sub) or children search (children)
上面的命令的输出将是ou =用户的基本区分名称,ou =部门,dc =示例,dc = com范围。
# users, department, example.com dn: ou=users,ou=department,dc=example,dc=com objectclass: organizationalUnit objectclass: top ou: users
如果是相同的基础DN和子树范围搜索,我们将获得OU = USERS下方的所有内容(所有子树),OU = DEPARTION,DC =示例,DC = COM树。
在我们的情况下,我们将获得管理员的参赛作品:
ldapsearch -h master.example.com -D "cn=manager,dc=example,dc=com" -w "slappasswd" -b "ou=users,ou=department,dc=example,dc=com" -s sub
# admin1, users, department, example.com dn: uid=admin1,ou=users,ou=department,dc=example,dc=com cn: admin1 gidnumber: 502 givenname: Admin1 homedirectory: /home/users/admin1 objectclass: inetOrgPerson objectclass: posixAccount objectclass: top sn: Admin1 uid: admin1 uidnumber: 5001 userpassword: password # admin2, users, department, example.com dn: uid=admin2,ou=users,ou=department,dc=example,dc=com cn: admin2 gidnumber: 502 givenname: Admin2 homedirectory: /home/users/admin2 objectclass: inetOrgPerson objectclass: posixAccount objectclass: top sn: Admin2 uid: admin2 uidnumber: 5002 userpassword: password
4)使用文件读取操作
向前移动,我们将使用LDAPSearch Utility与文件一起使用。
请创建包含以下内容的文件:
vi file
admin1
现在,我们需要运行命令:
ldapsearch -h master.example.com -D "cn=manager,dc=example,dc=com" -w "slappasswd" -b "ou=users,ou=department,dc=example,dc=com" -s sub -f file.txt "(uid=%s)"
-f read operations from 'file'. This is usually used for multiple filters. If the file contains multiple filters, the file should be structured with one filter per line
请注意,它将提供相同的输出:
ldapsearch -h master.example.com -D "cn=manager,dc=example,dc=com" -w "slappasswd" -b "uid=admin1,ou=users,ou=department,dc=example,dc=com"
# admin1, users, department, example.com dn: uid=admin1,ou=users,ou=department,dc=example,dc=com cn: admin1 gidnumber: 502 givenname: Admin1 homedirectory: /home/users/admin1 objectclass: inetOrgPerson objectclass: posixAccount objectclass: top sn: Admin1 uid: admin1 uidnumber: 5001 userpassword: password
5)查询结果的排序结果
在本主题中,我们将考虑主输入和输出选项。
首先,我们将按Attribute'Uidnumber'对我们的查询结果进行排序
ldapsearch -h master.example.com -D "cn=manager,dc=example,dc=com" -w "slappasswd" -b "ou=users,ou=department,dc=example,dc=com" -S uidnumber
# admin1, users, department, example.com dn: uid=admin1,ou=users,ou=department,dc=example,dc=com cn: admin1 gidnumber: 502 givenname: Admin1 homedirectory: /home/users/admin1 objectclass: inetOrgPerson objectclass: posixAccount objectclass: top sn: Admin1 uid: admin1 uidnumber: 5001 userpassword: password # admin2, users, department, example.com dn: uid=admin2,ou=users,ou=department,dc=example,dc=com cn: admin2 gidnumber: 502 givenname: Admin2 homedirectory: /home/users/admin2 objectclass: inetOrgPerson objectclass: posixAccount objectclass: top sn: Admin2 uid: admin2 uidnumber: 5002 userpassword: password
正如我们所看到的,--S标志按定义的属性对结果进行排序。
由于我们的例子我们只有2个条目,因此通过Uidnumber = 5001和5002对输出进行排序。
6)限制,用户友好和非角色输出
在下一个示例中,我们将响应于搜索请求(-z标志)指定要返回的最大条目数,然后我们将包括输出(-u标志)中区分名称的用户友好名称形式。
JPEGPOLO和音频值将被检索并写入临时文件(-t"()"jpegphoto音频)。
不幸的是,在我们的示例中,我们没有这样的属性,但如果我们有这些属性,则会收到以下输出:
ldapsearch -h master.example.com -D "cn=manager,dc=example,dc=com" -w "slappasswd" -b "ou=users,ou=department,dc=example,dc=com" -z 2 -u -t "(uid=admin*)" jpegPhoto audio
# admin1, users, department, example.com dn: uid=admin1,ou=users,ou=department,dc=example,dc=com ufn: admin1, users, department, example.com audio:< file:///tmp/ldapsearch-audio-a1 jpegPhoto:< file:///tmp/ldapsearch-jpegPhoto-a1 # admin2, users, department, example.com dn: uid=admin2,ou=users,ou=department,dc=example,dc=com ufn: admin2, users, department, example.com audio:< file:///tmp/ldapsearch-audio-a2 jpegPhoto:< file:///tmp/ldapsearch-jpegPhoto-a2
-T标志对于处理包含非字符数据(如照片或者音频)的值非常有用。
它会生成临时文件输出,每个条目的每个属性都将被写入系统临时目录中的单独文件,通常它是/tmp /。
7)持久搜索
返回命令输出后,持久搜索留下搜索操作。
这允许搜索中返回的条目保留在缓存中和更新以在发生时传输和包括。
这保持打开,直到客户端关闭与Ctrl-C键的连接。
ldapsearch -x -C ps:changeType[:changesOnly[:entryChangeControls]]
# example.com dn: dc=example,dc=com # department, example.com dn: ou=department,dc=example,dc=com # groups, department, example.com dn: ou=groups,ou=department,dc=example,dc=com # system_admin, groups, department, example.com dn: cn=system_admin,ou=groups,ou=department,dc=example,dc=com # users, department, example.com dn: ou=users,ou=department,dc=example,dc=com # admin1, users, department, example.com dn: uid=admin1,ou=users,ou=department,dc=example,dc=com # admin2, users, department, example.com dn: uid=admin2,ou=users,ou=department,dc=example,dc=com
-c标志将作为持久搜索运行搜索。
PS:ChangeType指定要返回的条目的哪种类型的更改(添加/删除/修改/moddn /全部)。
变迁设置是否返回与搜索过滤器或者返回修改的条目匹配的所有现有条目。
默认情况下,它将返回修改后的条目。
EntrychangeControls设置是否发送条目更改控件,有关对该条目所做的修改的其他信息。
如果值设置为0,则仅返回条目,如果设置为1,则将行添加到条目中,因为它将其返回到列出在条目上执行的ChangeType的搜索。
默认值为1.
8)虚拟列表视图
在下一个示例中,我们将尝试仅利用-g标志提取一部分结果。
所谓的虚拟列表视图始终需要-s和-x标志来指定排序顺序。
entriessBefore:entriesSafter:值将搜索目标指定为第一个条目,以便在其排序属性>或者=给定值的结果中。
由于我们在LDAP中没有多少条目,我们将考虑一个例子。
例如,
ldapsearch -x -S uidnumber -G 2:3:admin1
将在Uidnumber订单中给我们6个条目。
2 admin1之前的条目,进入等于或者遵循admin1,以及3个后续条目。
测试LDAP连接
我们可以通过从客户端/服务器运行此ldapsearch命令来绑定到LDAP目录服务器。
我将此命令从我的客户端计算机运行到我的LDAP服务器,并在文本文件中保存详细信息。
root@ldapclient:~# ldapsearch -x -b " dc=ldap01,dc=theitroad,dc=com" >> all.txt root@ldapclient:~# cat all.txt # extended LDIF ## LDAPv3 # base < dc=ldap01,dc=theitroad,dc=com> with scope subtree # filter: (objectclass=*) # requesting: ALL ## ldap01.theitroad.com dn: dc=ldap01,dc=theitroad,dc=com objectClass: top objectClass: dcObject objectClass: organization o: VIP dc: ldap01 # admin, ldap01.theitroad.com dn: cn=admin,dc=ldap01,dc=theitroad,dc=com objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator # search result search: 2 result: 0 Success # numResponses: 3 # numEntries: 2
我们甚至可以使用此命令用以下筛选器返回首选目录服务中的所有条目。
root@ldapclient:~# ldapsearch -x -b " dc=ldap01,dc=theitroad,dc=com" -s sub "objectclass=*" # extended LDIF ## LDAPv3 # base < dc=ldap01,dc=theitroad,dc=com> with scope subtree # filter: objectclass=* # requesting: ALL ## ldap01.theitroad.com dn: dc=ldap01,dc=theitroad,dc=com objectClass: top objectClass: dcObject objectClass: organization o: VIP dc: ldap01 # admin, ldap01.theitroad.com dn: cn=admin,dc=ldap01,dc=theitroad,dc=com objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator # search result search: 2 result: 0 Success # numResponses: 3 # numEntries: 2