2020年,手把手教你如何在CentOS7上一步一步搭建LDAP服务器的最新教程
同步滚动:关
什么是LDAP
什么是LDAP?
要想知道一个概念,最简单的办法就是wikipedia,当然也可以百科。
LDAP全称是轻型目录访问协议(Lightweight Directory Access Protocol)是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息。
简单理解起来就是LADP包含一个数据库存储了树状结构组织数据,和一套协议,第三方可通过这套协议进行数据的查询与搜索的功能。
它用的协议基于X.500标准的轻量级目录访问协议,是一种开放Internet标准,LADP协议是跨平台的Internt协议,
总结来说LDAP是由目录数据库和一套访问协议组成的系统。
为什么用LDAP
要知道为什么,我们就需要了解LDAP能解决什么问题?
众所周知,当一个公司规模之后,会有无数的系统进行工作,如果每一个系统都需要注册自己的用户名,每一个系统的用户名与密码可能都不一样。对个人来说就是一件折腾的事情,从公司的IT安全角度来说更是麻烦。
所以需要统一认证,单点登录。
LDAP就是最适合在单点登录中使用的系统了。
因为LDAP是一个开放的,中立的,工业标准的应用协议,它支持跨平台,数据配置简单且功能单一,稳定性高且查询性能好,使用它做认证服务可降低重复开发和对接的成本。
LDAP 的基本数据模型
LDAP 的基本数据模型就是一种树状的组织数据,但就是这些名称有点叫人哭笑不得。要了解LDAP,至少要了解以下概念。
LDAP的数据是树状结构, 所有条目(或者对象)都定义在树结构中。
条目下的树状结构称为目录信息树(DIT)。
一个完整的条目有唯一可识别的名称,我们叫之为区别名(DN)。
在DN的子节点下的一个单独节点或者路径,我们称之为RDU。
通常一个条目(或者对象)在存储在这两种类型对象中
容器(container):这种对象本身可以包含其他对象。 例如:root(目录树的根元素,它实际上并不存在),c(国家/地区),ou(组织单位)和dc(域)。 容器(container)与与文件系统中的目录相当。
(叶子节点)leaf:这种对象位于节点的末端,不能再包含其它对象。 例如person,InetOrgPerson,groupofNames。
每一个对象有包含一些属性,属性的值决定了该对象必须遵循的一些规则。
最后还需要记住LDAP里的简称
- o:organization(组织-公司)
- ou:organization unit(组织单元-部门)
- c:countryName(国家)
- dc:domainComponent(域名)
- sn:suer name(真实名称)
- cn:common name(常用名称)
例子:
例如上图的babs条目中:
DN:uid=babs,ou=people,dc=example,dc=com
相对于ou=people,dc=example,dc=com 节点的RDN:uid=babs ObjectClass:Person
本文只提一些关键的LDAP概念,更详细更具体请自己学习官方文档。
搭建LDAP服务器
使用的环境:OpenLDAP 2.4, Centos7.6
第一步 更新环境
运行: yum update
第二步 安装 OpenLdap
安装OPenLDAP与相关安装包
yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel
安装完之后,可以直接启动服务并且将服务设置为自启动状态。运行如下命令
systemctl start slapd
systemctl enable slapd
启动完之后可以查验slapd服务是否正在运行
netstat -antup | grep -i 389
可看到如下图

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

第四步 配置LDAP服务
这是整个过程中最难的地方,目前整个网络上能搜索到的,几乎都是过时配置方式,Ricman也是踩着坑爬出来的,希望此文能给在今后的日子,能帮助道友们少走弯路。
要怎么修改配置,OPenLdap 2.4不再推荐直接使用配置文件方式,并且极容易出错,修改的所有过程,均使用ldapmodify完成
我们可以先看一下目前配置都有哪些文件,执行命令
cd /etc/openldap/slapd.d/cn=config
ls

输出如下图,可能些人的结果不一样,但是几乎差不多,注意文件的名称,一会修改配置的时候,会使用到。
当然,你可以使用cat 来查看文件内容,可以看到原始的内容。

我们要修改的字段有:
olcSuffix – 用于保存域信息,需要更新为自己的域
olcRootDN – 根的DN(唯一识别名),根的区别名,它用于根管理员在此节点下做所有的管理
olcRootPW – LDAP 管理员的根密码,用刚刚第三步创建出来的密码设置到这里
我们在任意目录下创建 db.ldif文件。Ricman的经验最好不要在/etc/openldap/slapd.d/cn=config目录下创建,因为这目录保存着原始的配置文件,当使用slaptest -u 测试配置时会报错。我偷懒,直接在根目录下创建,运行cd ~便可切换到根目录(在根目录下创建文件是不好行为,为方便说明安装过程,就暂时使用)
修改db文件
这db文件不是数据库文件,只是ldap中配置文件中一个,可能是mdb,也可能是各种*db,Ricman安装的是hdb。
运行 vi db.ldif
在此文件中编辑的内容如下
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=ricman,dc=localhost
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=ricman,dc=localhost
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}KUYZ4irDCPN8seoOg1zNNVzh70jVr1c8

请注意上面内容中的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文件
与修改db文件相似。在刚刚的db.ldif目录下运行命令
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=max,dc=localhost" read by * none
请自己修改db.base中的内容,这个等号后面的内容是上面db.ldif中的olcRootDN是一致的。
保存文件后同样使用ldapmodify让其生效。
ldapmodify -Y EXTERNAL -H ldapi:/// -f monitor.ldif
输出如下图

同样,要出现modifying entry才成功。如上图中Ricman在编辑文件时多写了一行,所以出错了。请注意检查自己编辑的monitor文件。
创建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
schemas是什么鬼,schemas就是数据库表的定义文件,相当于关系数据库中的表定义。当然稍有区别。具体可以参考文档说明understanding-ldap-schema
执行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,在库中增加自己管理域下的内容,运行命令
vi base.ldif
在文件中输入以下内容
dn: dc=ricman,dc=localhost
dc: ricman
objectClass: top
objectClass: domain
dn: cn=Manager ,dc=ricman,dc=localhost
objectClass: organizationalRole
cn: Manager
description: LDAP Manager
dn: ou=People,dc=ricman,dc=localhost
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=ricman,dc=localhost
objectClass: organizationalUnit
ou: Group
同样的,需要修改为你自己的域
运行命令将此数据保存到库中去
ldapadd -x -W -D "cn=Manager,dc=ricman,dc=localhost" -f base.ldif
此命令会提示输入ldap的密码,输入的密码同上面第三步创建的密码一致,我这里输入:ricman
输出如下图

至此,完成基本的配置
管理Ldap
在网上下载Ldap Admin,我使用的是window7系统,直接使用Ldap admin来管理个人觉得还是很爽的。
连接之前,我们需要设置一下服务器的防火墙,允许ldap例外。
运行命令
firewall-cmd --permanent --add-service=ldap
firewall-cmd --reload

接下来,可以使用ldap admin进行管理了。点击 connect->new connect

然后设置好 Host,Base以及用户名与密码
用户名要使用管理员,本例子中是 cn=Manager ,dc=ricman,dc=localhost
密码为上面第三步创建的密码,本方使用的密码为ricman

点击测试连接,成功后直接点击连接即可进入管理界面,如下图


就可以使用工具创建自己所需要的用户,组织
卸载 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/*
至此全文结束。如有转载,请标明转载来源,谢谢
2020年,手把手教你如何在CentOS7上一步一步搭建LDAP服务器的最新教程的更多相关文章
- 如何在centos7上安装源码包
在我们使用linux的过程中,有很多程序是通过红帽官网给的系统中安装的,但是一般来说,系统更新的速度比较慢,如果这个时候我们又想用最新版的该怎么办呢?总不能一直等系统升级吧╮(╯﹏╰)╭所以,我们可以 ...
- 如何在Centos7上安装zookeeper 多实例
一.如何在Centos7上安装zookeeper 多实例 cd /usr/local/src/ wget https://mirrors.tuna.tsinghua.edu.cn/apache/zoo ...
- 如何在CentOS7上改变网络接口名
如何在CentOS7上改变网络接口名 传统上,Linux的网络接口被枚举为eth[0123...],但这些名称并不一定符合实际的硬件插槽,PCI位置,USB接口数量等,这引入了一个不可预知的命名问题( ...
- 手把手教你如何在Ubuntu系统中安装Pycharm
前几天带大家一起安装了Ubuntu14.04系统,没来得及上车的伙伴可以戳这篇文章:手把手教你在VMware虚拟机中安装Ubuntu14.04系统.今天小编带大家一起在Ubuntu14.04中安装Py ...
- 手把手教你 在Pytorch框架上部署和测试 关键点人脸检测项目DBFace,成功实现人脸检测效果
这期教向大家介绍仅仅 1.3M 的轻量级高精度的关键点人脸检测模型DBFace,并手把手教你如何在自己的电脑端进行部署和测试运行,运行时bug解决. 01. 前言 前段时间DBFace人脸检测库横空出 ...
- 初试 Centos7 上 Ceph 存储集群搭建
转载自:https://cloud.tencent.com/developer/article/1010539 1.Ceph 介绍 Ceph 是一个开源的分布式存储系统,包括对象存储.块设备.文件系统 ...
- 手把手教你如何在Presentation中拿高分
掐指一算,留学生们最近应该马上遇到Presentation作业.一般来说,这类的任务会占最终成绩的20-30%,对于期末成绩有一定的影响,如果想拿高分,就需要好好的准备.所以本文算是系列里的第一篇(扫 ...
- Linux环境搭建 | 手把手教你如何安装CentOS7虚拟机
centos 下载地址: 可以去官网下载最新版本:https://www.centos.org/download/ 以下针对各个版本的ISO镜像文件,进行一一说明: CentOS-7.0-x86_64 ...
- 手把手教你vmware导入centos7虚拟机
安装vmware 安装vmware15:https://www.cnblogs.com/uncleyong/p/10740005.html 可能遇到的问题:VMware提示此主机支持Intel VT- ...
随机推荐
- 原生js里的offset、client、scroll三大家族
offset家族 自己的,用于获取元素自身尺寸 offsetWidth 和 offsetHeight 获取元素自身的宽度和高度,包括内容+边框+内边距 offsetLeft 和 offsetTop 距 ...
- Numpy的介绍与基本使用方法
1.什么是Numpy numpy官方文档:https://docs.scipy.org/doc/numpy/reference/?v=20190307135750 NumPy是一个功能强大的Pytho ...
- 树 dfs暴力判环 题意转化
以后还是要多做题啊 这一道题我把题目想的太简单了 用并查集做了一波 但是忘了一种情况 就是同一个树上可能会有环 这就不太对了 而且还不要忘了 一棵树的根节点是一个自环 也就是说这一题的答案就是 ...
- 解析Json字符串中的指定的值
{ "head": { ", "Id": "20191008144448iAQE", "Message": & ...
- Android Linker简介
简单介绍Android linker的基础知识,基于Android 10分支. linker的作用 考虑简单的HelloWorld程序. $ tree . . |-- jni | |-- Androi ...
- Pyhon语法字符集报错
pyhton对语法的字符集,特别的敏感因此我们在写python代码特别要注意.以下代码是个人在学习python中遇见的错误 附:错代码截图1-1 从以上代码中可以看到,似乎代码没有什么问题接下来验证一 ...
- MOS 常用链接地址
主页面类 Exadata主页面 Exadata Database Machine and Exadata Storage Server Supported Versions (Doc ID 8888 ...
- pyton 封装
定义:在类中将方法和属性隐藏起来 一.私有化 1.格式 __名字,在名字前加双下划线 2.私有化对象 对象属性 静态属性 普通方法 3.作用 1)在类的外面不能直接调用类的方法和属性 2)类的属性值不 ...
- 深入Nodejs模块fs - 文件系统操作
node 的fs文档密密麻麻的 api 非常多,毕竟全面支持对文件系统的操作.文档组织的很好,操作基本分为文件操作.目录操作.文件信息.流这个大方面,编程方式也支持同步.异步和 Promise. 本文 ...
- 分布式缓存Redis的持久化方式RDB和AOF
一.前言 Redis支持两种方式的持久化,RDB和AOF.RDB会根据指定的规则“定时”将内存中的数据存储到硬盘上,AOF会在每次执行命令后将命令本身记录下来.两种持久化方式可以单独使用其中一种,但更 ...