LDAP基础知识

基本概念

objectclass:LDAP对象类,是LDAP内置的数据模型。比如我们写了person这个属性类,那么我们就一定需要填写用户名等。各种属性,如果拥有account属性则必须填写uid或者userid属性。 可以拥有多个objectClass但是需要注意有些不能兼容。
Entry:entry可以被称为条目,一个entry就是一条记录,是LDAP中一个基本的存储单元;也可以被看作是一个DN和一组属性的集合
DN:Distinguished Name,LDAP中entry的唯一辨别名,一条完整的DN写法:uid=XX,ou=组织名,dc=xx,dc=xx。LDAP中的entry只有DN是由LDAP Server来保证唯一的。
LDAP Search filter:使用filter对LDAP进行搜索。 Filter一般由 (attribute=value) 这样的单元组成,比如:(&(uid=ZHANGSAN)(objectclass=person)) 表示搜索用户中,uid为ZHANGSAN的LDAP Entry.再比如:(&(|(uid= ZHANGSAN)(uid=LISI))(objectclass=person)),表示搜索uid为ZHANGSAN, 或者LISI的用户;也可以使用来表示任意一个值,比如(uid=ZHANGSAN),搜索uid值以 ZHANG开头SAN结尾的Entry。更进一步,根据不同的LDAP属性匹配规则,可以有如下的Filter: (&(createtimestamp>=20050301000000)(createtimestamp<=20050302000000)),表示搜索创建时间在20050301000000和20050302000000之间的entry。
Filter中 “&” 表示“与”;“!”表示“非”;“|”表示“或”。根据不同的匹配规则,我们可以使用“=”,“~=”,“>=”以及“<=”,更多关于LDAP Filter读者可以参考LDAP相关协议。
Base DN:一条Base DN可以是“dc=163,dc=com”,也可以是“dc=People,dc=XX,dc=XX”。执行LDAP Search时一般要指定basedn,由于LDAP是树状数据结构,指定basedn后,搜索将从BaseDN开始,我们可以指定Search Scope为:只搜索basedn(base),basedn直接下级(one level),和basedn全部下级(sub tree level)。
dc: Domain Component,域名的部分,其格式是将完整的域名分为几部分,比如example.com,dc=example,dc=com,
uid:User ID 用户id,随便取的
ou:Organization Unit 组织单位,类似于Linux文件系统中的字目录,比如/root 座位base dn ,我们假设root/data下面有一个text.txt文本。 那么完整的dn写法为 dn:uid=text.txt,ou=data,dc=root,dc=com 类似这种意思的
cn:Common Name 类似于公共名称
sn:真实名称
rdn:相对辨别名,类似于文件系统中的相对路径

objectClass介绍

LDAP中,一个条目(Entry)必须包含一个对象类(objectClass)属性,且需要赋予至少一个值。每一个值将用作一条LDAP条目进行数据存储的模板;模板中包含了一个条目必须被赋值的属性和可选的属性。
objectClass有着严格的等级之分,最顶层是top和alias。例如,organizationalPerson这个objectClass就隶属于person,而person又隶属于top。
objectClass可分为以下3类:
结构型(Structural):如account、inetOrgPerson、person和organizationUnit;
辅助型(Auxiliary):如extensibeObject;
抽象型(Abstract):如top,抽象型的objectClass不能直接使用。
每种objectClass有自己的数据结构,比如我们有一种叫“电话薄”的objectClass,肯定会内置很多属性(attributes),如姓名(uid),身份证号(uidNumber),单位名称(gid),家庭地址(homeDirectory)等,这些属性(attributes)中,有些是必填的,例如,account就要求userid是必填项,而inetOrgPerson则要求cn(common name,常用名称)和sn(sure name,真实名称)是必填项。
由上可见,accout仅仅预置了几个必要且实用的属性(完成登陆验证肯定是够了),而inetOrgPerson内置了非常之多的属性,例如电话号码、手机号码、街道地址、邮箱号码,邮箱地址,房间号码,头像,经理,雇员号码等等。

因此,在配置LDAP时,如果仅仅是基于验证登陆的目的,建议将objectClass类型设置为accout,而如果希望打造一个大而全的员工信息宝库,建议将objectClass设置为inetOrgPerson。
上面已经写出,account的必要属性是userid,而
posixAccount的必要属性是cn、gidNumber、homeDirectory、uid、uidNumber;
shadowAccount的必要属性是uid,可选属性有shadowExpire、shadowInactive、shadowMax、shadowMin、userPassword等;
top必要属性是objectClass(可见,top和其它objectClass是继承的关系)。

示例介绍

添加组织示例
dn: ou=Person, dc=test,dc=com
changetype: add
objectclass: top
objectclass: organizationalUnit
ou: Person
添加用户到Person组织示例
dn: uid=xx,ou=People,dc=test,dc=com
objectClass: person
objectClass: posixaccount
objectClass: inetOrgPerson
objectClass: organizationalPerson
homeDirectory: /home/xx
loginShell: /bin/bash
uid: xx
cn: xx
userPassword: 123456
uidNumber: 10006
gidNumber: 10002
sn: xx
ldapadd -x -H ldap://你自己的域名或者ldap服务器IP -D “cn=Manager,dc=test,dc=com(这一段需要与你自己的配置相同)” -W -f xx.ldif

自定义schema

我们可能会想假设上面的属性不够用了怎么办,那么我们就需要自定义schema
下面给出一个例子
1 首先新建一个myschema.schema,填入一下内容
attributetype ( 1.3.6.1.4.1.7914.1.2.1.1
NAME ( ‘username’ )
DESC ‘RFC3280: legacy attribute for email addresses in DNs’
EQUALITY caseIgnoreIA5Match
SUBSTR caseIgnoreIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} )
objectclass ( 1.3.6.1.4.1.7914.1.2.2.1 NAME ‘myUser’
DESC ‘LDAP User’ SUP top STRUCTURAL
MUST ( username $ cn )
MAY (sn) )
定义了一个objectClass对象myUser。 MUST 必须填写的 username和cn
我们可能发现username的属性由attributetype填写,NAME 自定义属性名称
DESC 描述
SYNTAX是表示字段的数据类型。这个admin guide里面也有说明。 每个数据类型的值是固定的
SINGLE-value表示这个属性只有一个值,有些属性可以有多个值,比如联系地址等。默认的话,是多值的。
caseIgnoreIA5Match 忽略大小写
MAY可选
2 创建一个myconf.conf文件
填入以下内容
include /etc/openldap/schema/core.schema
include /etc/ldap/schema/myschema.schema 注意这是你自己的路劲
3 编译
slapcat -f /tmp/myconf.conf(你自己的myconf.conf的路径) -F /tmp/ -n0
然后到/tmp/cn=config/cn=schema这个文件下面你会发现两个ldif文件
1个是myschema{1}.ldif和core{0}.ldif。 然后将这些文件替换掉/etc/openldap/slapd.d/cn=config/cn=schema里面的core{1}.ldif。这里要注意大括号里面的数值,core的与core的要一样,myschema里面的大括号要与里面的文件的不能重复。你就依次命名一下。 然后重启服务
如果可以重启成功,最起码说明你写的没问题
4.创建ou ,上面说过ou需要是已经定义过的objectClass,vim 创建一个ldif文件将下面的内容复制。
dn: ou=myUser, dc=xx,dc=com
changetype: add
objectclass: top
objectclass: organizationalUnit
ou: myUser
然后执行
ldapadd -x -H ldap://xx.com -D “cn=Manager,dc=xx,dc=com” -W -f xx.ldif。
用ldap web界面工具查看你会发现自己已经成功定义了一个myUser。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值