OpenLdap教程:openldap介绍
原文出自:
- 1. openldap介绍
- 1.1 什么是openldap
- 1.2 openldap目录服务优点
- 1.3 openldap适用场景
- 1.4 OpenLdap目录架构
- 2. Openldap常用名词介绍
- 2.1 schema
- 2.2 objectClass
- 2.3 常见的对象类
- 2.4 objectClass对象类详解
- 2.5 属性
- 2.5.1 常用属性介绍
- 2.6 LDIF文件
- 2.6.1 LDIF文件特点
- 2.6.2 LDIF文件样例
1. openldap介绍
1.1 什么是openldap
openldap是一款轻量级目录访问协议(Lightweight Directory Access Protocol,LDAP),属于开源集中账号管理架构的实现,支持众多系统版本。
ldap具有两个国家标准,x.500和LDAP。openldap是基于x.500标准的,而且去除了x.500复杂的功能并且可以根据自我需求定制额外扩展功能,可以理解为x.500的简化版本。openldap支持tcp/ip协议。
LDAP提供并实现目录服务的信息服务,目录服务是一种特殊的数据库系统,对于数据的读取、浏览、搜索有很好的效果。目录服务一般用来包含基于属性的描述性信息并支持精细复杂的过滤功能,对搜索有很好的效果。目录服务不支持通用数据库的大量更新操作所需要的复杂的事物管理或回滚策略。
openldap默认以Berkeley DB作为后端数据库,Berkeley DB数据库主要以三列的数据类型进行数据存储,如以键值对的方式进行存储。Berkeley DB是一类特殊的数据库,主要用于搜索、浏览、更新查询操作,一般对于一次写入数据、多次查询和搜索有很好的效果。Berkeley DB数据库是面向查询进行优化,面向读取进行优化的数据库。不支持事务性数据库所支持的高并发的吞吐量以及复杂的事务操作。
1.2 openldap目录服务优点
- 是一个跨平台的标准互联网协议,基于X.500协议
- 提供静态数据查询搜索,不需要像关系数据库中那样通过SQL语句维护数据库信息
- 基于推和拉的机制实现节点间数据同步,简称复制(replication)并提供基于TLS/SASL的安全认证机制,实现数据加密传输以及Kerberos密码验证功能。
- 可以实现用户的集中认证管理,所有关于账号的变更,只需在openldap服务器端直接操作,无需到每个客户端进行操作,影响范围为全局
- 默认使用TCP/IP协议传输数据
- 支持各种应用平台:nginx/http/vsftpd/samba/svn/postfix/openstack/hadoop等都可以实现统一用户管理
- openldap具有费用低、配置简单、功能强大、管理容易、开源等特点
1.3 openldap适用场景
openldap可实现账号集中式管理:不同的发行版UNIX系统、Windows系统以及各种平台,如Apache、Nginx、Zabbix、Postfix、Samaba、Git、Openvpn、OpenStack都可以接入。
1.4 OpenLdap目录架构
openldap目录架构分为两种:一种是互联网命名组织架构;另一种是传统的企业级命名架构,生产中常用的是互联网命名架构,如下图:
LDAP的目录信息是以树形结构进行存储的,在树根一般定义为域名(dc=com),其次往往定义一个或多个组织单元(organization,ou)。一个组织单元可以包含员工、设备信息相关信息。如:uid=babs,ou=People,dc=example,dc=com
2. Openldap常用名词介绍
2.1 schema
schema主要用于控制目录中各种条目所拥有的对象类以及各种属性的定义,可以理解成是一个数据模型。它定义了对象类,指定对象类中有哪些属性,哪些属性是必须的哪些是可选的,属性应该是邮箱地址还是电话号码,字符还是数字等。
比如说,openldap想支持sudo验证,就需要加载sudo的schema文件,这样有了sudo相关的对象类定义,我们在openldap中的条目中才能进行sudo相关的配置。就类似于系统中的库,有了库,我们所使用的方法、命令才能用。
2.2 objectClass
对象类是schema定义的,对象类规定了你可以在一个条目(下边会解释什么是条目)中设置哪些属性,在配置员工信息、账号信息时,我们需要在条目中需要添加对象类,然后才能设置相应的属性。比如你有了person类,你才能定义cn、sn姓名等。如果不添加对象类,就没办法用这个对象类中的属性。
2.3 常见的对象类
person
posixAccount
posixGroup
shadowAccount
uidObject
organizationalRole
organizationalUnit
organizationalPerson
inetOrgPerson
等等
2.4 objectClass对象类详解
条目(Entry)相当于关系数据库中的表的记录
条目是具有分辨名DN(Distinguished Name)的属性-值对(Attribute-value,简称AV)的集合
在Unix文件系统中,最顶层是根目录(root),Ldap目录通常也用root做根,通常称为BaseDN
在openldap目录树中每个条目必须包含一个属于自身条件的对象类,然后再定义其条目属性及对应的值。条目中的属性能否添加取决于它添加的对象类是否包含此属性。如果条目添加的属性不在它继承的对象类中,那这个条目就无法添加。
2.5 属性
属性(Attribute)在目录树中主要用于描述条目相关信息,例如用户条目的用途、联系方式、邮件、uid、gid、密码等辅助信息。属性是由objectClass所控制,一个objectClass的节点具有一系列Attribute,Attribute可以理解成一个变量,每个变量都有对应的值,Attribute也是有对应的值。这些属性的对应值表示每个对象的特点,有些属性是必须指定的,有些不是必须的。在目录中常用的Attribute有uid、sn、giveName、objectClass、dc、ou、cn、mail、telephoneNumber等。
2.5.1 常用属性介绍
dn:唯一标志名,类似于linux文件系统中的绝对路径,每个条目都有一个标识名,例如uid=zhangsan,ou=people,dc=baidu,dc=com,在整个openldap中是唯一的,类似于mysql表中的主键
rdn:通常指相对标识名,类似于linux文件系统中的相对路径,如uid=zhangsan
uid: 通常指一个用户的登陆名称,例如:uid=zhangsan
sn:通常指一个人的姓氏,例如:sn: zhang
giveName: 通常指一个人的名字。giveName: zhangsan
objectClass: objectClass是特殊的属性,用来指定条目包含哪些对象类。如 objectClass:person
dc:通常指定一个域名,例如 dc=baidu,dc=com
ou: 指定一个组织单元的名称:
ou=people,dc=baidu,dc=com
ou=group,dc=baidu,dc=com
mail: 邮箱 mail: didi@baidu.com
2.6 LDIF文件
LDIF(LDAP Data Interchanged Format)轻量级目录访问协议交换数据格式的简称,是存储LDAP配置信息及目录内容的标准文本文件格式,通常用来完成openldap数据的导入、导出、修改。
2.6.1 LDIF文件特点
- 每行的结尾不允许有空格或制表符
- 允许相关属性可以重复赋值并使用
- 文件以.ldif结尾命名
- 文件中以#号开头的一行为注释,可以作为解释使用
- LDIF文件中所有赋值方式为:属性:[空格]属性值
- LDIF文件通过空行来定义一个条目,空行前为一个条目,空行后为另一个条目的开始
2.6.2 LDIF文件样例
dn: uid=user2,ou=people,dc=baidu,dc=com # 唯一标识名,用来定位这个条目
objectClass: shadowAccount # 意思是条目集成了shadowAccount这个对象类了,可以使用这个对象类中定义的属性了,也就是下边定义的各种属性,shadowMin、shadowMax等。
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
cn: user2
gidNumber: 1005
homeDirectory: /home/user2
sn: user2
uid: user2
uidNumber: 1003
loginShell: /bin/bash
mail: user2@baidu.com
shadowLastChange: 17843
shadowMax: 99999
shadowMin: 0
shadowWarning: 7
userPassword:: e2NyeXB0fSQxJFRmY2NYODV6JDlqTzdlRUpYQjFjcG9sVFg1Y3ZSRC8=
原文出自: