LDAP入门学习
- LDAP:LDAP是轻型目录访问协议,实现提供被称为目录服务的信息服务。目录服务是特殊的数据库系统,其针对读取、检索、浏览进行特定优化。LDAP目录是按照树型结构组织的,具体信息存储在条目(entry)的数据结构中,条目相当于关系型数据库中的表的记录。条目通过dn(distinguishName)区分,其相当于关系型数据库中的主键;属性包含type和values,一个type可以对应多个值。属性相当于关系型数据库的字段(Field)。
LDAP的树根一般定义为国家(c=CN)或域名(dc=com),其下定义组织(o=fff)或组织单元(ou=people),组织单元可以包括具体的群体,例如开发部所有的雇员,公司内所有的打印机。LDAP还能对能够和必须支持哪些属性进行控制,这是通过一个特殊的称之为对象类别(objectClass)的属性来实现。该属性的值决定了该条目必须遵循的一些规则。 - LDAP简称对应
- o - organization(组织-公司)
- ou - organization unit(组织单元-部门)
- c - country name(国家)
- dc - domain name(域名)
- sn - suer name(真实名称)
- cn - common name(常用名称)
LDIF文件解读
LDIF文件是目录信息数据的默认存放文件,我们可以通过slapadd执行它来向目录数据库中增加数据
一般的,设计好目录结构就可以编写LDIF文件实现我们的目录结构,它从树根开始定义,每个条目有dn开始,并由objectclass指定了必须包含的属性。切记:记录的前后不能包含任何的空格
例如:
定义一个树根,它由com开始,并指定它必须含有organization属性dn:dc=icebear,dc=com objectclass:organization o:icebear dn:ou=People,dc=icebear,dc=com objectclass:organizationUnit ou:People ...
其中,inetOrgPerson指定必须有cn(常用名称),sn(正式名称)
- 配置LDAP
简单的配置LDAP只需要修改suffix和rootdn,其中suffix一般为你的树根,rootdn为登陆的用户,rootpw指定登陆密码。 - 新增条目,根据上面的规则编辑和导入LDIF文件,导入命令有ldapadd和slapadd,其中ldapadd支持远程和本地,slapadd仅支持本地导入
操作LDAP数据库
- schema:schema定义了属性遵从的规则,在配置文件(slapd.conf)中载入后生效,且对载入顺序有一定要求。
登陆信息
登陆信息被记录在配置文件(slapd.conf)中,它们主要有如下配置database bdb #后台数据库类型,这里我们指定为Berkeley DB suffix "dc=icebear" #目录树后缀 rootdn "cn=root,dc=icebear" #管理员DN信息 rootpw lllllll #明文密码
其中密码可以通过slappasswd -h {SHA} -s “lllllll”进行加密
使用openldap-clients套件操作LDAP
导入操作
客户端的导入命令如下:ldapadd -x -h xxx.xxx.xxx.xxx -D "cn=Manager,dc=icebear" -W password -f file.ldif
其中各参数意义如下:
- x 使用简单密码验证方式
- D 指定管理员DN
- W 指定管理员密码
- f 为初始化数据的LDIF的文件名(包括后缀名)
- h 执行操作的服务器IP地址
搜索操作
客户端搜索命令如下:ldapsearch -x -b "dc=icebear"
其中各参数意义如下:
- x 同上,不过LDAP默认是任何人都可以读取的,因此不需要密码验证
- b 指定搜索节点位置
ldapsearch -x -b "dc=icebear" "(objectclass=*)" "dn"
上述查询语句中,”(objectclass=*)”是filter,”dn”是返回的内容
身份验证
在进行修改或新增操作的时候需要进行用户验证,通过如下方式进行验证:ldapwhoami -x -D 'cd=Manager,dc=icebear' -w password
4.修改操作
修改一般通过LDIF文件进行修改,我们可以自己编写LDIF文件,同时,我们也可以利用Linux便利的管道把需要修改的内容输出到LDIF文件,修改后重新导入ldapsearch -x -LLL -b 'dc=icebear' '(objectclass=*)' 'dn' 'o' > examole_dn.ldif
其中 -LLL表示不输出注释
手动修改后,导入语句如下:ldapmodify -x -D 'cn=Manager,dc=icebear' -w "password" -f example_dn.ldif
删除操作
ldapdelete -x -D "cn=Manager,dc=icebear" -w "password" -r 'dc=icebear'
其中 -r表示递归删除该节点下面的所有子节点