CentOS7下搭建OpenLDAP服务器

本文详细介绍了在CentOS7系统中如何搭建OpenLDAP服务器,包括LDAP的作用、基本数据模型、对象类、schema的理解,以及使用LDIF文件格式进行数据操作。通过一步步的配置,展示了从安装OpenLDAP、设置根密码、修改配置到创建基础库的全过程。
摘要由CSDN通过智能技术生成

前言
LDAP 是一款轻量级目录访问协议(Lightweight Directory Access Protocol,LDAP),LDAP轻量目录访问协议为用户管理提供了统一认证服务,解决了长期存在的多套用户认证系统孤立、繁杂、难以维护的问题。具有简捷、高效、易用的特性,是用户认证管理的不二选择,OpenLDAP属于开源集中账号管理架构的实现。
为什么用LDAP
要知道为什么,我们就需要了解LDAP能解决什么问题?
众所周知,当一个公司规模之后,会有无数的系统进行工作,如果每一个系统都需要注册自己的用户名,每一个系统的用户名与密码可能都不一样。对个人来说就是一件折腾的事情,从公司的IT安全角度来说更是麻烦。
所以需要统一认证,单点登录。
LDAP就是最适合在单点登录中使用的系统了。
因为LDAP是一个开放的,中立的,工业标准的应用协议,它支持跨平台,数据配置简单且功能单一,稳定性高且查询性能好,使用它做认证服务可降低重复开发和对接的成本。
LDAP 的基本数据模型
LDAP 的基本数据模型就是一种树状的组织数据,但就是这些名称有点叫人哭笑不得。要了解LDAP,至少要了解以下概念。
LDAP的数据是树状结构, 所有条目(或者对象)都定义在树结构中。
条目下的树状结构称为目录信息树(DIT)。
一个完整的条目有唯一可识别的名称,我们叫之为区别名(DN)。
在DN的子节点下的一个单独节点或者路径,我们称之为RDU。
通常一个条目(或者对象)在存储在这两种类型对象中
容器(container):这种对象本身可以包含其他对象。 例如:root(目录树的根元素,它实际上并不存在),c(国家/地区),ou(组织单位)和dc(域)。 容器(container)与与文件系统中的目录相当。
(叶子节点)leaf:这种对象位于节点的末端,不能再包含其它对象。 例如person,InetOrgPerson,groupofNames。
每一个对象有包含一些属性,属性的值决定了该对象必须遵循的一些规则。
1)LDAP主要的简称含义:
o:organization(组织-公司)
ou:organization unit(组织单元-部门)
c:countryName(国家)
dc:domainComponent(域名)
sn:suer name(真实名称)
cn:common name(常用名称)
2)了解schema
在LDAP中,schema用来指定一个目录中所包含的对象(objects)的类型(objectClass),以及每一个类型(objectClass)中必须提供的属性(Atrribute)和可选的属性。可将schema理解为面向对象程序设计中的类,通过类定义一个具体的对象。LDIF中的数据条目可理解为是一个具体的对象,是通过schema来规划创建的。因此,schema是一个数据模型,用来决定数据按什么方式存储,并定义存储在不同的条目(Entry)下的数据之间的关系。schema需要在主配置文件slapd.conf中指定,以用来决定在目录中可以使用哪些objectClass。
3)了解objectClass
LDAP中,一个条目必须包含一个objectClass属性,且需要赋予至少一个值。每一个值将用作一条LDAP条目进行数据存储的模板;模板中包含了一个条目必须被赋值的属性和可选的属性。
注释
dn: 条目名
属性描述: 值
属性描述: 值
属性描述: 值
)LDIF文件格式
LDIF用文本格式表示目录数据库的信息,以方便用户创建、阅读和修改。在LDIF文件中,一个条目的基本格式如下:
注意(ldif文件中的内容,需要注意的是,每个冒号后面都需要空一格,而每行结束处不能留有空格字符)

注释
dn: 条目名
属性描述: 值
属性描述: 值
属性描述: 值

dn行类似于关系数据库中一条记录的关键字,不能与其他dn重复。一个LDIF文件中可以包含多个条目,每个条目之间用一个空行分隔。 例如,以下内容组成一个条目:

1: dn: dc=dlw, dc=com
2: objectclass: top
3: objectclass: dcobject
4: objectclass: organization
5: dc: dlw
6: o: dlw,Inc.

在以上文本中,各行含义如下: 第1行的dn定义该条目的标识。 第2~4行定义该条目的objectcCass,可以定义多个属性,如上面代码中定义了3个objectClass。条目的属性根据objectClass的不同而不同,有的objectClass有必须设置的属性。在2~4行的3个objectClass中,top没有必须定义的属性,dcobject必须定义属性dc,用来表示一个域名的部分,而organization必须定义属性o,用来表示一个组织的名称。 根据objectClass的要求,第5、6行分别定义属性dc和属性o的值。
)ldap命令

-x:进行简单认证。
-D:用来绑定服务器的dn。
-w:绑定dn的密码。
-b:指定要查询的根节点。
-H:制定要查询的服务器。
-h:目录服务的地址

添加,将name.ldif文件中的条目加入到目录中
ldapadd -x -D “cn=root,dc=dlw,dc=com” -w secret -f name.ldif
查找,使用ldapsearch命令查询“dc=dlw, dc=com”下的所有条目
ldapsearch -x -b “dc=dlw,dc=com”
修改,分为交互式修改和文件修改,推荐文件修改
将sn属性由“Test User Modify”修改为“Test User”
dn: cn=test,ou=managers,dc=dlw,dc=com
changetype: modify
replace: sn
sn: Test User

输入命令
ldapmodify -x -D “cn=root,dc=dlw,dc=com” -w secret -f modify
删除,删除目录数据库中的“cn=test,ou=managers,dc=dlw,dc=com”条目
ldapdelete -x -D “cn=root,dc=dlw,dc=com” -w secret “cn=test,ou=managers,dc=dlw,dc=com”

搭建LDAP服务器
使用的环境:OpenLDAP 2.4, Centos7.6
cn=Manager,dc=root,dc=local

cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core)
slapd -V
@(#) $OpenLDAP: slapd 2.4.44 (Sep 30 2020 17:16:39) $
	mockbuild@x86-02.bsys.centos.org:/builddir/build/BUILD/openldap-2.4.44/openldap-2.4.44/servers/slapd

安装 OpenLdap
安装OPenLDAP与相关安装包

yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel
systemctl start slapd && systemctl enable slapd

创建LDAP的根密码
此密码用于整个安装过程,是LADP的管理员根密码,使用slappasswd 命令生成密码
输入slappasswd后提示输入密码与确认密码,系统会输出一串SSHA加密后的字符串,请Copy出来保存在记事本中。
我设置的密码是root,加密后出来的字符串是{SSHA}71Fpm/0z/TM6XvGdT1wrwM4dBjn+S88/

slappasswd 
New password: 
Re-enter new password: 
{SSHA}71Fpm/0z/TM6XvGdT1wrwM4dBjn+S88/
cat slappasswd.txt 
{SSHA}71Fpm/0z/TM6XvGdT1wrwM4dBjn+S88/

配置LDAP服务
OPenLdap 2.4不再推荐直接使用配置文件方式,并且极容易出错,修改的所有过程,均使用ldapmodify完成

cd /etc/openldap/slapd.d/cn=config

在这里插入图片描述
我们要修改的字段有:
olcSuffix – 用于保存域信息,需要更新为自己的域
olcRootDN – 根的DN(唯一识别名),根的区别名,它用于根管理员在此节点下做所有的管理
olcRootPW – LDAP 管理员的根密码,用刚刚第三步创建出来的密码设置到这里
我们在任意目录下创建 db.ldif文件。最好不要在/etc/openldap/slapd.d/cn=config目录下创建,因为这目录保存着原始的配置文件,当使用slaptest -u 测试配置时会报错。

vim db.ldif
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=root,dc=local

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=root,dc=local

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}71Fpm/0z/TM6XvGdT1wrwM4dBjn+S88/

请注意上面内容中的olcSuffix, olcRootDN, olcRootPW这三个字段,是需要修改成自己的内容的。
特别需要注意是的olcRootPW字段,因为这个字段在刚刚查看olcDatabase={2}hdb.ldif中是不存在的,所以使用add,表示增加,如果字段已经存在,使用replace,表示进行替换内容。
完成编辑后,使用ldapmodify让修改的内容生效。

ldapmodify命令可在运行环境中直接修改配置文件并且不需要重启就生效的命令,具体请看ldapmodify官方使用文档。
在db.ldif目录下运行命令
ldapmodify -Y EXTERNAL -H ldapi:/// -f db.ldif
输出如下图,一定要注意在有三个modifying entry才全部更新成功。
在这里插入图片描述
修改monitor文件

vi monitor.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=root,dc=local" read by * none

请自己修改db.base中的内容,这个等号后面的内容是上面db.ldif中的olcRootDN是一致的。
保存文件后同样使用ldapmodify让其生效。
ldapmodify -Y EXTERNAL -H ldapi:/// -f monitor.ldif
输出如下图
在这里插入图片描述
创建ldap 基础库
这里创建的是一个基础库,用于保存数据。安装ldap后会有一个example配置,需要我们复制一份配置文件并赋予它所有权限
运行以下命令
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap:ldap /var/lib/ldap/*
完成配置后,我们就可以向数据库中增加schemas,需要增加的有:cosine , nis,inetorgperson
执行ldapadd命令增加,命令如下

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif

在这里插入图片描述
创建base.ldif

vim base.ldif
dn: dc=root,dc=local
dc: root
objectClass: top
objectClass: domain

dn: cn=Manager,dc=root,dc=local
objectClass: organizationalRole
cn: Manager
description: LDAP Manager

dn: ou=People,dc=root,dc=local
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=root,dc=local
objectClass: organizationalUnit
ou: Group

运行命令将此数据保存到库中去

ldapadd -x -W -D "cn=Manager,dc=ricman,dc=localhost" -f base.ldif

更新数据
至此,完成基本的配置

在这里插入图片描述
卸载 Ldap
如果需要卸载 ,需要先停止服务,然后yum remove
systemctl stop slapd
yum remove ompat-openldap openldap-clients openldap-servers
当然,别忘记了DB_CONFIG以及配置文件,也要将其删除
rm -rf /var/lib/ldap/*
rm -rf /etc/openldap/slapd.d/*

以上是我自己搭建的过程,原文链接如下:
https://www.cnblogs.com/xiaoshou/p/12337620.html
https://cloud.tencent.com/developer/article/1026304
https://blog.51cto.com/11093860/2318657
https://cloud.tencent.com/developer/article/1563031
感谢以上几位的文章

后续配置
https://www.ucloud.cn/yun/10714.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值