LDAP介绍及安装详解
文章目录
- LDAP介绍及安装详解
- 1. LDAP简介
- 1.目录服务
- 2. LDAP
- 2. 在centos7.0安装并使用OpenLDAP
1. LDAP简介
LDAP(Light Directory Access Portocol):轻量级目录访问协议,LDAP是基于X.500的DAP(目录访问协议),在说LDAP之前,先介绍一下目录服务。
1.目录服务
目录简单理解就是一种树状结构的数据库,而目录服务是一种以树状结构的目录数据库为基础,外加各种访问协议的信息查询服务。与关系型数据库(如:MariaDB)相比,目录服务最大的优势是在于读取性极高。但是写入性能就非常差,而且不支持事务处理、回滚等容错功能,因此不适合频繁修改数据。
2. LDAP
LDAP协议的主要特点:
- 基于TCP/IP
- 以树状结构存储数据
- 读取速度快,写入数据慢
- 服务器用于存放数据,客户端用于操作数据
- 跨平台、维护简单
- 支持SSL/TLS加密
- 协议是开放的
LDAP的四大模型: - 信息模型:规定了 LDAP 目录信息的表示方式以及数据的存储结构。
- 命名模型:规定了 LDAP 目录中数据如何进行组织和区分。
- 功能模型:规定了可以对 LDAP 目录进行的操作(如查询、更新、认证等)。
- 安全模型:规定了保护 LDAP 目录中的数据的安全措施。
LDAP的基本结构
- 目录树:如图
- 条目(Entry)
上图中的每一个方框就是一个条目。一个条目有若干个属性和若干个值。有些条目还能包含子条目。 - 识别名(Distinguished Name, DN)
它表示条目在目录树中从根出发的绝对路径,是条目的唯一标识。可以跟 UNIX 文件系统中文件或目录的完整路径做类比。例如:上图图中右下角的条目的 DN 是 cn=group01,dc=example,dc=com. - 相对识别名(Relative Distinguished Name, RDN),相对识别名就是识别名第一个逗号左侧的内容。
可以跟 UNIX 文件系统中文件或目录名做类比。例如:上图中右下角的条目的 RDN 是 cn=group01.
在一般情况下,RDN 以 dc=、ou=、c=、o= 开头的条目为容器。也就是说,它们可以包含子条目。 - 基准识别名(Base Distinguished Name, Base DN),一般指整个目录树的根。例如,上图的 Base DN 是 dc=example,dc=com.
- 模式(Schema)模式是对象类(ObjectClass)、属性类型(AttributeType)、属性语法(Syntax)和匹配规则(MatchingRules)的集合。可以跟关系型数据库的数据表结构做类比。LDAP 协议定义了一些标准的模式,一般直接使用即可。用户也可以根据自己的需求自行定义模式。
- LDIF(LDAP Data Interchange Format) 文件,LDAP 数据交换格式文件,它以文本形式存储,用于在服务器之间交换数据。添加数据以及修改数据都需要通过 LDIF 文件来进行。可以跟关系型数据库的SQL 文件做类比。LDIF 文件的格式一般如下:
dn: <识别名>
<属性 1>: <值 1>
<属性 2>: <值 2>
...
2. 在centos7.0安装并使用OpenLDAP
1.在centos中执行以下命令
yum install -y openldap-servers openldap-clients
安装成功后如图所示:
2.创建数据库配置文件,以下是直接套用模板,命令如下:
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG && chown ldap:ldap /var/lib/ldap/DB_CONFIG
3.启动OpenLDAP服务
systemctl start slapd
# 如需开机启动,命令如下
systemctl enable slapd
4.设置OpenLDAP管理员密码
# 生成密码
slappasswd # 执行完该命令之后,请输入您要设定的密码。然后会生成 {SSHA}xxxxx 这样一行东西,记录下来
# 生成LDIF文件
cat << EOF > chrootpw.ldif
# 分别执行以下命令,{SSHA}xxxxx 修改为上一步记下来的值
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}xxxxx
EOF
# 执行LDIF文件
ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif
# 导入预设的模式
find /etc/openldap/schema/ -name "*.ldif" -exec ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f {} \;
# 新建一个根节点 注意:根节点管理员密码与 OpenLDAP 管理员密码不是同一回事!一个 LDAP 数据库可以包含多个目录树。
slappasswd # 执行完该命令之后,请输入您要设定的密码。然后会生成 {SSHA}xxxxx 这样一行东西,记录下来
# 生成LDIF文件 预备一个域名:如:itwangxiaobai.com
cat << EOF > chdomain.ldif
# 执行以下命令
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
read by dn.base="cn=Manager,dc=xxx,dc=xxx" read by * none #修改 dc=xxx,dc=xxx 为自己的域名
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=xxx,dc=xxx #修改 dc=xxx,dc=xxx 为自己的域名
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=xxx,dc=xxx #修改 dc=xxx,dc=xxx 为自己的域名
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}xxxxx #{SSHA}xxxxx 修改为上一步记下来的值
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
dn="cn=Manager,dc=xxx,dc=xxx" write by anonymous auth by self write by * none #修改 dc=xxx,dc=xxx 为自己的域名
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=xxx,dc=xxx" write by * read #修改 dc=xxx,dc=xxx 为自己的域名
EOF
# 执行 LDIF 文件
ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif
# 添加用户、组节点
cat << EOF > basedomain.ldif
# 执行以下命令
dn: dc=xxx,dc=xxx #修改 dc=xxx,dc=xxx 为自己的域名
objectClass: top
objectClass: dcObject
objectclass: organization
o: root_ldap
dc: xxx #修改 xxx 为自己域名第一个点左边的内容
dn: cn=Manager,dc=xxx,dc=xxx #修改 dc=xxx,dc=xxx 为自己的域名
objectClass: organizationalRole
cn: Manager
description: Directory Manager
dn: ou=People,dc=xxx,dc=xxx #修改 dc=xxx,dc=xxx 为自己的域名
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=xxx,dc=xxx #修改 dc=xxx,dc=xxx 为自己的域名
objectClass: organizationalUnit
ou: Group
EOF
# 执行 LDIF 文件 dc=xxx,dc=xxx 为自己的域名然后再执行
ldapadd -x -D cn=Manager,dc=xxx,dc=xxx -W -f basedomain.ldif
# 输入设定的根节点管理员密码
# 清理LDIF文件
rm basedomain.ldif chdomain.ldif chrootpw.ldif
至此,一个 LDAP 目录树就构建完毕了。