Openldap集成Kerberos

在这里插入图片描述

文章目录

  • 一、背景
  • 二、Openldap集成Kerberos
    • 2.1kerberos服务器中绑定Ldap服务器
      • 2.1.1创建LDAP管理员用户
      • 2.1.2添加principal
      • 2.1.3生成keytab文件
      • 2.1.4赋予keytab文件权限
      • 2.1.5验证keytab文件
      • 2.1.6增加KRB5_KTNAME配置
    • 2.2Ldap服务器中绑定kerberos服务器
      • 2.2.1生成LDAP数据库RootDN的密码文件
      • 2.2.2增加kerberos在ldap数据库的container DN
      • 2.2.3更新kerberos的server配置
      • 2.2.4增加rootDN全局权限
      • 2.2.5加载kerberos对应schema
      • 2.2.6创建kerberos的LDAP数据库
      • 2.2.7重启kerberos服务
      • 2.2.8验证kerberos+ldap集成

一、背景

亲测可用,之前搜索了很多博客,啥样的都有,就是不介绍报错以及配置用处,根本不懂照抄那些配置是干啥的,稀里糊涂的按照博客搭完也跑不起来,因此记录这个。

项目背景:公司项目当前采用http协议+shiro+mysql的登录认证方式,而现在想支持ldap协议认证登录然后能够访问自己公司的项目网站。

举例说明:假设我们公司有自己的门户网站,现在我们收购了一家公司,他们数据库采用ldap存储用户数据,那么为了他们账户能登陆我们公司项目所以需要集成,而不是再把他们的账户重新在mysql再创建一遍,万一人家有1W个账户呢,不累死了且也不现实啊。

需要安装openldap+kerberos,且ldap和kerberos安装在同一台服务器上,当前版本如下:

  • centos 7.9
  • openldap 2.4.44
  • phpldapadmin 1.2.5
  • 服务器IP:10.110.38.162
  • Kerberos :Kerberos 5 release 1.15.1

本博客参考的博客是:

  • ① Openldap安装部署
  • ② Kerberos基本原理、安装部署及用法
  • ③ Openldap集成Kerberos

注意:这个文章是真实可行的,但是有执行顺序,一定要先安装“Openldap安装部署”+“Kerberos基本原理、安装部署及用法”之后,确保安装无误后再去安装“Openldap集成Kerberos”。
在这里插入图片描述

我当时犯的毛病就是前两个没完全照着文档安装完成就直接安装的第三个,然后出现各种问题,我还不知道为点啥。人家博客都说了要先安装前两个,再看这个“Kerberos基本原理、安装部署及用法”。所以一定要注意安装顺序,遇到不懂得配置也没事先照着安。

二、Openldap集成Kerberos

2.1kerberos服务器中绑定Ldap服务器

2.1.1创建LDAP管理员用户

在kdc服务器执行如下操作:

kadmin.local -q "addprinc ldapadmin@NODE3.COM"

2.1.2添加principal

在kdc服务器执行如下操作:

kadmin.local -q "addprinc -randkey ldap/bridge1@NODE3.COM"

2.1.3生成keytab文件

在kdc服务器执行如下操作:

kadmin.local -q "ktadd -k /etc/openldap/ldap.keytab ldap/bridge1@NODE3.COM"

2.1.4赋予keytab文件权限

把生成的ldap.keytab文件转移到openldap服务器节点上,并在openldap服务器节点执行如下操作:(本机此处都是在同一台机器执行)

chown ldap:ldap /etc/openldap/ldap.keytab && chmod 640 /etc/openldap/ldap.keytab

2.1.5验证keytab文件

使用ldapadmin用户测试,输入密码没有报错说明已通过kerberos身份验证

kinit ldapadmin

2.1.6增加KRB5_KTNAME配置

在openldap服务器节点,确保LDAP启动时使用上一步创建的keytab文件,在/etc/sysconfig/sladp文件中增加如下内容

KRB5_KTNAME=/etc/openldap/ldap.keytab

然后重启服务

systemctl restart slapd

至此,LDAP在Kerberos服务器上已完成集成。

2.2Ldap服务器中绑定kerberos服务器

Kerberos.schema是在krb5-server-ldap安装之后才出现的,不能使用该软件安装后自带的kerberos.ldif,需要手动生成。安装软件krb5-server-ldap,获取kerberos.schema。
在openldap服务器节点执行如下命令:

yum -y install krb5-server-ldap

移动kerberos.schema到目的目录

mv /usr/share/doc/krb5-server-ldap-1.15.1/Kerberos.schema /etc/openldap/schema

手动创建文件schema_convert.conf用来生成kerberos.ldif,文件内容如下

vim schema_convert.conf
-----------------------------------------------
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/collective.schema
include /etc/openldap/schema/corba.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/duaconf.schema
include /etc/openldap/schema/dyngroup.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/java.schema
include /etc/openldap/schema/misc.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/openldap.schema
include /etc/openldap/schema/ppolicy.schema
include /etc/openldap/schema/kerberos.schema

使用命令生成kerberos.ldif

cd ~
slapcat -f schema_convert.conf -F /root/ -n 0 -s "cn={13}kerberos,cn=schema,cn=config">/home/cn=Kerberos.ldif

并注释掉如下属性:

#structuralObjectClass: olcSchemaConfig
#entryUUID: ff864160-c092-103e-89e3-570a7b5d6144
#creatorsName: cn=config
#createTimestamp: 20240617011641Z
#entryCSN: 20240617011641.575801Z#000000#000#000000
#modifiersName: cn=config
#modifyTimestamp: 20240617011641Z

修改生成的kerberos.ldif,把dn: cn={12}kerberos改为dn: cn={13}kerberos,cn=schema,cn=config,把cn: {12}kerberos改为cn: {13}kerberos 注:这里的cn={13}kerberos是因为schema_convert.conf文件里面kerberos排行13,故kerberos是作为第13个导入到openldap里面的。

2.2.1生成LDAP数据库RootDN的密码文件

kdb5_ldap_util -D cn=admin,dc=node3,dc=com -w 123456 stashsrvpw -f /etc/krb5.ldap cn=admin,dc=node3,dc=com

2.2.2增加kerberos在ldap数据库的container DN

增加一个kerberos1.ldif文件

vim kerberos1.ldif dn: cn=kerberos,dc=node3,dc=com
cn: kerberos
objectClass: organizationalRole

执行命令,添加cn=Kerberos,dc=node3,dc=com节点

ldapadd -x -D cn=admin,dc=node3,dc=com -W -f kerberos1.ldif

2.2.3更新kerberos的server配置

[realms]字段,NODE3.COM设置为需要的值,增加database_module=openldap_ldapconf配置

[kdcdefaults]kdc_ports = 88kdc_tcp_ports = 88[realms]NODE3.COM = {#master_key_type = aes256-ctsacl_file = /var/kerberos/krb5kdc/kadm5.acldict_file = /usr/share/dict/wordsadmin_keytab = /var/kerberos/krb5kdc/kadm5.keytabsupported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normaldatabase_module = openldap_ldapconf#kdc = kdc.node.com#admin_server = kdc.node.comkdc = 127.0.0.1:88admin_server =127.0.0.1:749
}[dbdefaults]ldap_kerberos_container_dn = cn=kerberos,dc=node3,dc=com[dbmodules]openldap_ldapconf = {db_library = kldapldap_servers = ldap://127.0.0.1:389ldap_kdc_dn = cn=admin,dc=node3,dc=comldap_kadmind_dn = cn=admin,dc=node3,dc=comldap_service_password_file = /etc/krb5.ldap#ldap_kdc_dn = "uid=kdc-service,dc=node,dc=com"#ldap_kadmind_dn = "uid=kadmin-service,dc=node,dc=com"#ldap_service_password_file = /etc/krb5kdc/service.keyfile# ldap_servers = ldapi:///ldap_conns_per_server = 5}

注意:ldap_kerberos_container_dc字段为kerberos在ldap数据库的container。ldap_kdc_dn和ldap_kadmind_dc分别对应kerberos访问LDAP数据库时的服务和管理账号,为方便管理,都是用rootdn。

2.2.4增加rootDN全局权限

修改ldap全局配置文件/etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif增加rootDN创建库权限

vi /etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif
#增加如下两行
olcRootDN: cn=config
olcRootPW: 123456
#更改完毕需要重启slapd服务
Ps –aux | grep slapd
Kill  -9  $PID
Systemctl restart slapd

2.2.5加载kerberos对应schema

cd ~
ldapadd -x -D "cn=config" -w 123456 -f cn=kerberos.ldif

2.2.6创建kerberos的LDAP数据库

kdb5_ldap_util -D cn=admin,dc=node3,dc=com -w 123456 -H ldap://127.0.0.1:389 create -r NODE3.COM –s

执行成功,可在ldap客户端查看到kerberos中多了以下节点显示,如下图。

在这里插入图片描述

2.2.7重启kerberos服务

在kdc服务器节点执行如下操作:

systemctl restart krb5kdc
systemctl restart kadmin

至此,Kerberos在LDAP服务器上已完成集成。

2.2.8验证kerberos+ldap集成

通过kadmin命令行增加一个principal,在kerberos显示成功。
在这里插入图片描述

在ldap客户端通过kerberos验证显示成功。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/856481.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第二十五篇——信息加密:韦小宝说谎的秘诀

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 加密这件事,对于这个时代的我们来说非常重要,那么…

ElasticSearch学习笔记(二)文档操作、RestHighLevelClient的使用

文章目录 前言3 文档操作3.1 新增文档3.2 查询文档3.3 修改文档3.3.1 全量修改3.3.2 增量修改 3.4 删除文档 4 RestAPI4.1 创建数据库和表4.2 创建项目4.3 mapping映射分析4.4 初始化客户端4.5 创建索引库4.6 判断索引库是否存在4.7 删除索引库 5 RestClient操作文档5.1 准备工…

模拟原神圣遗物系统-小森设计项目,设计圣遗物(生之花,死之羽,时之沙,空之杯,理之冠)抽象类

分析圣遗物 在圣遗物系统,玩家操控的是圣遗物的部分 因此我们应该 物以类聚 人与群分把每个圣遗物的部分,抽象出来 拿 生之花,死之羽为例 若是抽象 类很好的扩展 添加冒险家的生之花 时候继承生之花 并且名称冒险者- 生之花 当然圣遗物包含…

求职难遇理想offer!!【送源码】

现在的求职行情确实不太好,有很多抱怨自己找到的工作技术栈落后的同学,我也是建议他们接下先干着。不能幻想毕业之后还能找到更合适的工作,那个时候就基本只能参加社招了,没有工作经验参加社招想要获得满意 offer 的更是地狱难度。…

【尚庭公寓SpringBoot + Vue 项目实战】移动端登录管理(二十)

【尚庭公寓SpringBoot Vue 项目实战】移动端登录管理(二十) 文章目录 【尚庭公寓SpringBoot Vue 项目实战】移动端登录管理(二十)1、登录业务2、接口开发2.1、获取短信验证码2.2、登录和注册接口2.3、查询登录用户的个人信息 1、…

【BES2500x系列 -- RTX5操作系统】CMSIS-RTOS RTX -- 实时操作系统的核心,为嵌入式系统注入活力 --(一)

💌 所属专栏:【BES2500x系列】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &#x1f49…

动态住宅代理IP:多账号矩阵管理的使用

如果您要处理多个在线帐户,选择正确的代理类型对于实现流畅的性能至关重要。但最适合这项工作的代理类型是什么? 为了更好地管理不同平台上的多个账户并优化成本,动态住宅代理IP通常作用在此。 一、什么是轮换代理? 轮换代理充当…

数据仓库与数据库的区别

在数据管理和分析的过程中,我们常常会听到“数据库”和“数据仓库”这两个术语。 虽然它们看起来相似,但实际上它们在设计目的、结构和使用场景上都有显著的区别。 数据库是什么? 数据库(Database)是一个用于存储和管…

idea2023开发插件入门

idea2023开发插件入门 创建工程 通过 idea plugin 来创建工程 修改 开发语言 默认创建的工程是用scala开发的,但是我不会,就会java,所以改成java创建 build.gradle.kt 为 build.gradlesettings.gradle.kt 为 settings.gradle build.gradle修改为以…

英语恶补ing

ing的词组都有停下来做某事的感觉了。 second hand是形容词了。 wouldnt buy这里的would是情态动词,也是助动词 助动词不能单独使用,要搭配实义动词,这样才能构成谓语 情态动词(modals)在英语中有多种作用&#xff…

随机森林算法详解

随机森林算法详解 随机森林(Random Forest)是一种集成学习方法,通过构建多个决策树并将它们的预测结果结合起来,来提高模型的准确性和稳定性。随机森林在分类和回归任务中都表现出色,广泛应用于各类机器学习问题。本文…

【机器学习】基于稀疏识别方法的洛伦兹混沌系统预测

1. 引言 1.1. DNN模型的来由 从数据中识别非线性动态学意味着什么? 假设我们有时间序列数据,这些数据来自一个(非线性)动态学系统。 识别一个系统意味着基于数据推断该系统的控制方程。换句话说,就是找到动态系统方…

XXL-Job实战(一)

​需求介绍:构建一个分布式短信发送系统,应对双十一活动需向1000万用户快速推送营销短信的挑战,每条数据的业务处理逻辑为0.1s。对于普通任务来说,只有一个线程来处理 可能需要10万秒才能处理完,业务则严重受影响。 常…

5款堪称变态的AI神器,焊死在电脑上永不删除!

一 、AI视频合成工具——Runway: 第一款RunWay,你只需要轻轻一抹,视频中的元素就会被擦除,再来轻轻一抹,直接擦除,不喜欢这个人直接擦除,一点痕迹都看不出来。 除了视频擦除功能外,…

【AI大模型】Transformers大模型库(十):repetition_penalty惩罚系数

目录​​​​​​​ 一、引言 二、惩罚系数repetition_penalty 2.1 概述 2.2 使用说明 2.3 使用示例 三、总结 一、引言 这里的Transformers指的是huggingface开发的大模型库,为huggingface上数以万计的预训练大模型提供预测、训练等服务。 🤗 T…

韩顺平0基础学Java——第27天

p548-568 明天开始坦克大战 Entry 昨天没搞明白的Map、Entry、EntrySet://GPT教的 Map 和 Entry 的关系 1.Map 接口:它定义了一些方法来操作键值对集合。常用的实现类有 HashMap、TreeMap 等。 2. Entry接口:Entry 是 Map 接口的一个嵌…

vivado TILE

TILE是包含一个或多个SITE对象的设备对象。可编程逻辑TILE 包括各种各样的对象,如SLICE/CLB、BRAM、DSP、I/O块、时钟资源,以及 GT块。从结构上讲,每个瓦片都有许多输入和输出,并且可编程 互连以将瓦片的输入和输出连接到任何其他…

实现一个简易动态线程池

项目完整代码:https://github.com/YYYUUU42/Yu-dynamic-thread-pool 如果该项目对你有帮助,可以在 github 上点个 ⭐ 喔 🥰🥰 1. 线程池概念 2. ThreadPoolExecutor 介绍 2.1. ThreadPoolExecutor是如何运行,如何同时…

elementUI的el-table自定义表头

<el-table-column label"昨日仪表里程(KM)" align"left" min-width"190" :render-header"(h, obj) > renderHeader(h, obj, 参数)" > <template slot-scope"scope"> <span>{{ scope.row.firstStartMil…

流程图工具评测:十大热门软件对比

流程图是一种用图形符号和箭头表示工作流程的图形表示方法。它展示了一系列相互关联的步骤&#xff0c;以显示过程中数据或物质的流动、决策点和操作步骤。流程图广泛用于各种领域&#xff0c;包括业务流程、软件开发、工程等&#xff0c;以帮助人们更好地理解和分析工作流程。…