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验证显示成功。
本人其他相关文章链接
1.Centos7.9安装openldap
2.Centos7.9安装kerberos
3.Openldap集成Kerberos
4.Centos7.9安装phpldapadmin
5.java连接ldap实现用户查询功能
6.java连接kerberos用户认证
7.javax.security.auth.login.LoginException: Unable to obtain password from user
8.javax.security.auth.login.LoginException: null (68)
9.javax.security.auth.login.LoginException: Message stream modified (41)
10.javax.security.auth.login.LoginException: Checksum failed
11.javax.security.auth.login.LoginException: No CallbackHandler available to garner authentication info
12.javax.security.auth.login.LoginException: Cannot locate KDC
13.javax.security.auth.login.LoginException: Receive timed out
14.java: 无法访问org.springframework.context.ConfigurableApplicationContext
15.LDAP: error code 34 - invalid DN
16.LDAP: error code 32 - No Such Object
17.java: 无法访问org.springframework.ldap.core.LdapTemplate
相关文章:

Openldap集成Kerberos
文章目录 一、背景二、Openldap集成Kerberos2.1kerberos服务器中绑定Ldap服务器2.1.1创建LDAP管理员用户2.1.2添加principal2.1.3生成keytab文件2.1.4赋予keytab文件权限2.1.5验证keytab文件2.1.6增加KRB5_KTNAME配置 2.2Ldap服务器中绑定kerberos服务器2.2.1生成LDAP数据库Roo…...

(创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
目录 一、主要内容: 二、运行效果: 三、VMD-BiLSTM负荷预测理论: 四、代码数据下载: 一、主要内容: 本代码结合变分模态分解( Variational Mode Decomposition,VMD) 和卷积神经网络(Convolutional neu…...
机器 reboot 后 kubelet 目录凭空消失的灾难恢复
文章目录 [toc]事故背景报错内容 修复过程停止 kubelet 服务备份 kubelet.config重新生成 kubelet.config重新生成 kubelet 配置文件对比 kubeadm-flags.env 事故背景 因为一些情况,需要 reboot 服务器,结果 reboot 机器后,kubeadm init 节点…...

Pytorch构建vgg16模型
VGG-16 1. 导入工具包 import torch.optim as optim import torch import torch.nn as nn import torch.utils.data import torchvision.transforms as transforms import torchvision.datasets as datasets from torch.utils.data import DataLoader import torch.optim.lr_…...

分支结构相关
1.if 语句 结构: if 条件语句: 代码块 小练习: 使用random.randint()函数随机生成一个1~100之间的整数,判断是否是偶数 import random n random.randint(1,100) print(n) if n % 2 0:print(str(n) "是偶数") 2.else语…...

flutter开发实战-RichText富文本居中对齐
flutter开发实战-RichText富文本居中对齐 在开发过程中,经常会使用到RichText,当使用RichText时候,不同文本字体大小默认没有居中对齐。这里记录一下设置过程。 一、使用RichText 我这里使用RichText设置不同字体大小的文本 Container(de…...

智慧消防新篇章:可视化数据分析平台引领未来
一、什么是智慧消防可视化数据分析平台? 智慧消防可视化数据分析平台,运用大数据、云计算、物联网等先进技术,将消防信息以直观、易懂的图形化方式展示出来。它不仅能够实时监控消防设备的运行状态,还能对火灾风险进行预测和评估…...
u8g2 使用IIC驱动uc1617 lcd有时候某些像素显示不正确
折腾了很久,本来lcd是挂载到已经存在的iic总线上的,总线原来是工作正常的,挂载之后lcd也能显示,但是有时候显示不正确,有时候全白的时候有黑色的杂点。 解决方案: 1.最开始以为是IIC总线速度快࿰…...

使用opencv合并两个图像
本节的目的 linear blending(线性混合)使用**addWeighted()**来添加两个图像 原理 (其实我也没太懂,留个坑,感觉本科的时候线代没学好。不对,我本科就没学线代。) 源码分析 源码链接 #include "opencv2/imgc…...

k8s学习笔记(一)
configMap 一般用来存储配置信息 创建configMap 从文件中获取信息创建:kubectl create configmap my-config --from-file/tmp/k8s/user.txt 直接指定信息: kubectl create configmap my-config01 --from-literalkey1config1 --from-literalkey2confi…...
自学前端——JavaScript篇
JavaScript 什么是JavsScript JavaScript是一种轻量级、解释型、面向对象的脚本语言。它主要被设计用于在网页上实现动态效果,增加用户与网页的交互性。 作为一种客户端语言,JavaScript可以直接嵌入HTML,并在浏览器中执行。 与HTML和CSS不…...
高考毕业季--浅谈自己感想
随着2024年高考落幕,数百万高三学生又将面临人生中的重要抉择:选择大学专业。在这个关键节点,计算机相关专业是否仍是“万金油”的选择?在过去很长一段时间里,计算机科学与技术、人工智能、网络安全、软件工程等专业一…...

遥感图像地物覆盖分类,数据集制作-分类模型对比-分类保姆级教程
遥感图像地物覆盖分类,数据集制作-分类模型对比-分类保姆级教程 在遥感影像上人工制作分类数据集采用python+gdal库制作数据集挑选分类模型(RF、KNN、SVM、逻辑回归)选择随机森林模型建模分类遥感图像预测在遥感影像上人工制作分类数据集 1.新建shp文件 地理坐标系保持和影像…...
【Android面试八股文】Kotlin内置标准函数let的原理是什么?
确实,let 函数在 Kotlin 中被广泛使用,特别是在处理可空类型或者需要在对象上执行一系列操作后返回结果的场景中非常有用。 let 函数的源代码 /*** Calls the specified function [block] with `this` value as its argument and returns its result.** For detailed usage i…...
网工面试总结1
网工还是要基本会ACL、ISIS、OSPF、MPLS、QOS、GVRP、VRRP、FW、BGP、STP、IV4\6、WLAN、路由策略、策略路由、LACP等都或多或少要知道,常见的哪怕没有实战,要在ensp、cisco中练过! OSPF邻居故障,你认为是哪些原因?或者…...

[stm32]密码锁
[stm32]密码锁 需要资料的请在文章末尾获取~ 01描述 使用原件:stm32f103c8t6最小系统板x1,0.96寸OLED显示屏四角x1,4x4矩阵按键x1; 键位对应图: 1, 2, 3, 4------------- 1 2 3 4 5&am…...
优化yarn在任务执行时核数把控不准确的问题
核数不准这个事情是个概率问题,如果你碰见了,只能说你有点非欧,本质上是因为集群配置问题,默认时yarn不会去精准把控任务的核数,因为默认的资源计算方式是用实际内存去估算核数,这就导致如果大家配置任务时…...

2024年,收付通申请开通流程
大家好,今天咱们来聊聊关于APP场景中开通微信收付通的一些实用小窍门。在如今的移动互联网时代,很多商家都选择通过APP来提供服务和产品,因此如何在APP中顺利集成微信收付通功能,让用户能够轻松完成支付,就显得尤为重要…...

Django使用django-apscheduler实现定时任务
定时任务可以在后台定时执行指定的代码,避免了很多人为操作。下面是在Django项目中如何使用定时任务的具体操作流程。 我在这里使用的 django-apscheduler库来实现定时任务。 一、安装 django-apscheduler pip install django-apscheduler二、在项目的setting.py…...
python数据分析:修改数据
在 Python 中进行数据分析时,通常使用 pandas 库来处理和修改数据。以下是一个完整的示例,展示如何使用 pandas 库读取数据、修改数据并保存结果。 1. 安装并导入必要的库 首先,确保你已经安装了 pandas 库。如果没有安装,可以使…...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

论文阅读:Matting by Generation
今天介绍一篇关于 matting 抠图的文章,抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法,已经有很多的工作和这个任务相关。这两年 diffusion 模型很火,大家又开始用 diffusion 模型做各种 CV 任务了&am…...

SQL注入篇-sqlmap的配置和使用
在之前的皮卡丘靶场第五期SQL注入的内容中我们谈到了sqlmap,但是由于很多朋友看不了解命令行格式,所以是纯手动获取数据库信息的 接下来我们就用sqlmap来进行皮卡丘靶场的sql注入学习,链接:https://wwhc.lanzoue.com/ifJY32ybh6vc…...