同步滚动:关

什么是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。

通常一个条目(或者对象)在存储在这两种类型对象中

  1. 容器(container):这种对象本身可以包含其他对象。 例如:root(目录树的根元素,它实际上并不存在),c(国家/地区),ou(组织单位)和dc(域)。 容器(container)与与文件系统中的目录相当。

  2. (叶子节点)leaf:这种对象位于节点的末端,不能再包含其它对象。 例如person,InetOrgPerson,groupofNames。

每一个对象有包含一些属性,属性的值决定了该对象必须遵循的一些规则。

最后还需要记住LDAP里的简称

  • o:organization(组织-公司)
  • ou:organization unit(组织单元-部门)
  • c:countryName(国家)
  • dc:domainComponent(域名)
  • sn:suer name(真实名称)
  • cn:common name(常用名称)

例子:

i例子

例如上图的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

i查看配置文件

输出如下图,可能些人的结果不一样,但是几乎差不多,注意文件的名称,一会修改配置的时候,会使用到。

当然,你可以使用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才全部更新成功。

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

输出如下图

monitor

同样,要出现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/*

image.png

完成配置后,我们就可以向数据库中增加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 DB

完成以后,就可以创建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服务器的最新教程的更多相关文章

  1. 如何在centos7上安装源码包

    在我们使用linux的过程中,有很多程序是通过红帽官网给的系统中安装的,但是一般来说,系统更新的速度比较慢,如果这个时候我们又想用最新版的该怎么办呢?总不能一直等系统升级吧╮(╯﹏╰)╭所以,我们可以 ...

  2. 如何在Centos7上安装zookeeper 多实例

    一.如何在Centos7上安装zookeeper 多实例 cd /usr/local/src/ wget https://mirrors.tuna.tsinghua.edu.cn/apache/zoo ...

  3. 如何在CentOS7上改变网络接口名

    如何在CentOS7上改变网络接口名 传统上,Linux的网络接口被枚举为eth[0123...],但这些名称并不一定符合实际的硬件插槽,PCI位置,USB接口数量等,这引入了一个不可预知的命名问题( ...

  4. 手把手教你如何在Ubuntu系统中安装Pycharm

    前几天带大家一起安装了Ubuntu14.04系统,没来得及上车的伙伴可以戳这篇文章:手把手教你在VMware虚拟机中安装Ubuntu14.04系统.今天小编带大家一起在Ubuntu14.04中安装Py ...

  5. 手把手教你 在Pytorch框架上部署和测试 关键点人脸检测项目DBFace,成功实现人脸检测效果

    这期教向大家介绍仅仅 1.3M 的轻量级高精度的关键点人脸检测模型DBFace,并手把手教你如何在自己的电脑端进行部署和测试运行,运行时bug解决. 01. 前言 前段时间DBFace人脸检测库横空出 ...

  6. 初试 Centos7 上 Ceph 存储集群搭建

    转载自:https://cloud.tencent.com/developer/article/1010539 1.Ceph 介绍 Ceph 是一个开源的分布式存储系统,包括对象存储.块设备.文件系统 ...

  7. 手把手教你如何在Presentation中拿高分

    掐指一算,留学生们最近应该马上遇到Presentation作业.一般来说,这类的任务会占最终成绩的20-30%,对于期末成绩有一定的影响,如果想拿高分,就需要好好的准备.所以本文算是系列里的第一篇(扫 ...

  8. Linux环境搭建 | 手把手教你如何安装CentOS7虚拟机

    centos 下载地址: 可以去官网下载最新版本:https://www.centos.org/download/ 以下针对各个版本的ISO镜像文件,进行一一说明: CentOS-7.0-x86_64 ...

  9. 手把手教你vmware导入centos7虚拟机

    安装vmware 安装vmware15:https://www.cnblogs.com/uncleyong/p/10740005.html 可能遇到的问题:VMware提示此主机支持Intel VT- ...

随机推荐

  1. eclipse maven工程错误总汇

    1.问题: Target runtime Apache Tomcat v7.0 is not defined 解决方法:           right click on your project & ...

  2. 【转】[IT综合面试]牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结

    感谢IT面试群 S-北京-陈磊 的整理分享.   基础篇:操作系统.计算机网络.设计模式         提高篇:WIN32.MFC与Linux 算法篇:算法与数据结构           一:操作系 ...

  3. springboot整合apache ftpserver详细教程(看这一篇就够了)

    原创不易,如需转载,请注明出处https://www.cnblogs.com/baixianlong/p/12192425.html,否则将追究法律责任!!! 一.Apache ftpserver相关 ...

  4. must appear in the GROUP BY clause or be used in an aggregate function

    今天在分组统计的时候pgsql报错 must appear in the GROUP BY clause or be used in an aggregate function,在mysql里面是可以 ...

  5. await Task.Yield(); 超简单理解!

    上面的代码类似于: Task.Run(() => { }).ContinueWith(t => Do(LoadData())); 意思就是: loadData 如果耗时较长那么上述代码会产 ...

  6. k8s~为服务添加ingress的实现

    为服务添加ingress的实现 1 当我们为指定的项目添加ingress支持之后,它会在“负载均衡”标签页出现,并显示出你的域名解析到的服务. 2 我们的ingress是支持https的,所以需要为你 ...

  7. 不止开源,不止跨平台。微软的 .NET Core 还有哪些强大之处值得我们学习?

    自从 2016 年微软发布了 .NET Core 1.0,至今 4 年的时间里,.NET Core 历经 7 个正式版本和几十个 Preview 版本..NET Core 作为最通用的框架,和其他软件 ...

  8. NumPy排序

    numpy.sort()函数 该函数提供了多种排序功能,支持归并排序,堆排序,快速排序等多种排序算法 使用numpy.sort()方法的格式为: numpy.sort(a,axis,kind,orde ...

  9. java小心机(4)| 继承与组合的爱恨情仇

    在java中,有两种主要复用代码的方法:继承和组合. 继承,是OOP的一大特性,想必大家都非常熟悉了;组合,其实也很常见,只是不知道它的名字罢了. 继承 子类拥有父类的基本特性,需使用extend关键 ...

  10. java面试| 精选基础题(3)

    每天进步一点点,距离大腿又近一步! 阅读本文大概需要6分钟 系列文章 java面试| 精选基础题(1) java面试|精选基础题(2) 1.float f=3.4;是否正确? 答:不正确,编译无法通过 ...