红帽目录服务的基本客户端工具

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。 http://linuxsafe.blog.51cto.com/438124/667052

2011-09-17 11:49:37

客户端命令

客户端工具软件包是openldap-clients包含了几个小命令

  1. ldapsearch
  2. ldapadd
  3. ldapdelete
  4. ldapmodify
  5. ldappasswd
  6. ldapmodrdn

配置客户端

为了便于我们的操作我们需要在客户端上设置一些默认预设的目录服务环境,好让客户端更高效的工作

这个配置文件帮助客户端确定访问的目录服务器和查询范围

#
# LDAP Defaults
#

BASE dc=server109,dc=example,dc=com  #BASE指定查询范围
HOST server109.example.com  #HOST指定目录服务器

这个配置文件是绑定以什么身份操作目录服务,redhat-ds默认允许匿名查询可以不提供密码。但涉及到记录的添加,删除等操作就需要有管理权限的用户来做了,这里就是绑定一个管理账户操纵目录服务,免得以后操作总是要输入管理身份,很麻烦。

BINDDN cn=Directory Manager

查询

现在我们就试试查询的命令是否缩减一些了

ldapsearch -x 'uid=fishcool' -LLL
# -LLL标示输出标准的ldif文件内容
# uid=fishcool是查询条件

如果不设置刚才的客户端预设值呢会有什么后果

ldapsearch -x -b ou=People,dc=server109,dc=example,dc=com -D 'cn=Directory Manager' -h server109.example.com 'uid=fishcool' -LLL

# -x 简单认证
# -b 指定搜索范围
# -D 指定用什么身份来做查询
# -h 指定在哪台目录服务做查询
# -b和-h 在/etc/openldap/ldap.conf预充了
# -D 参数在~/.ldaprc预设了

还有一些其他的参数我们来认识一下

-W: BINDDN账户的密码,当做添加,删除这些需要身份验证的操作时目录服务就去找.ldaprc下得BINDDN账户并要求输入密码。
-Z: 尝试使用tls加密,如果没有就继续
-ZZ: 强制使用tls加密,那么目录服务器的地址就必须改成 – H ldaps://server109.example.com

如果你在搜索出结果后只想得到所有用户的cn全名如何做呢

ldapsearch -x -LLL cn  # 在结果中过滤掉什么属性

现在我们来看看搜索条件

=
>=
<=
~=
(!(age>21))
(&(sn=jones)(o=IBM))  (&(sn=jones)(|(givenName=bridget)(givenName=tom)))
(|(sn=fish)(sn=shark))
*

记录的删除

ldapdelete [-r] [-f]

ldapdelete -x -W uid=dogsmart,ou=People,dc=server109,dc=example,dc=com

RDN的修改

ldapmodrdn [-r]

用户密码的修改

只能在一个安全连接下进行比如证书或者kerberos

ldappasswd [-s]

添加记录

ldapadd [-f]

这里给你一个真实的用户信息,让你能够写成ldif文件,我们现在来编辑这个ldif文件(adduser.ldif):

dn: uid=eblues,ou=People,dc=server109,dc=example,dc=com
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetorgperson
uid: eblues
sn: Blues
giveName: Elwood
cn: Elwood Blues
street: 1060 West Addison
l: Chicago
st: IL
postalCode: 60613

看看是否有这个记录

ldapadd -x -W -f adduser.ldif

修改记录

ldapmodify [-f]

ldapsearch -x 'uid=fishcool' -LLL

dn: uid=fishcool,ou=People,dc=server109,dc=example,dc=com
uid: fishcool  #我想为fishcool添加一个电话号码属性
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetorgerson
GiveName: fish
sn: cool
cn: fish cool
mail: fishcool@server109.example.com #我想修改邮箱为fishcool@redhat.com
postalCode: 665504 #我想删除这个邮编
postalCode: 778095

我编写了一个文件

dn: uid=fishcool,ou=People,dc=server109,dc=example,dc=com
changetype: modify             # 修改类型为"modify"
add: telephoneNumber           # 添加"telephoneNumber"属性
telephoneNumber: +190 22557799 # telephoneNumber值

dn: uid=fishcool,ou=People,dc=server109,dc=example,dc=com
changetype: modify   # 修改类型为"modify"
delete: postalCode   # 删除属性postalCode
postalCode: 665504   # postalCode值为665504,因为postCode有多个属性值,所以需指定一个值删除

开始执行修改

ldapmodify -x -f modify.ldif -W

# -f 指定一个ldif文件

查看一下结果

ldapsearch -x 'uid=fishcool' -LLL