openldap-sasl身份认证镜像

news2024/11/27 14:46:30

背景

在这篇文章中,AD域信息同步至openLDAP我们使用了SASL将身份验证从OpenLDAP委托给AD”这种方案,本文主要来构建此方案的docker镜像。

sasl官网:Cyrus SASL

bitnami/openldap镜像地址:containers/Dockerfile

bitnami/openldap镜像集成 sasl文档说明(主要在14.5章节):[OpenLDAP Software 2.5 Administrator’s Guide](https://www.openldap.org/doc/admin25/guide.html#Using SASL)

其他镜像参考:openldap-sasl-proxy-authorization-docker

sasl验证原理

在openldap中,如果用户的userpassword包含{SASL}那么这种用户在访问openldap的时候,其身份验证就会呗sasl截取,去AD验证了,如果不包含,则走openldap自己的验证

其流程为:

在这里插入图片描述

/etc/saslauthd.conf为sasl的配置文件

其中,{SASL}的密码被拦截后,会去配置文件中的ldap_filter字段去AD服务器进行条件匹配,如果符合要求,则会验证密码;

OpenLDAP docker 部署

镜像
热度比较高的有两个镜像:osixia/openldap、bitnami/openldap

osixia/openldap:

集成了 TLS 安全认证,默认开启
个人维护
6个月前更新

bitnami/openldap:

没有做签名认证
团队维护
7天前更新
两者都没有做 SSL 安全认证,没有开 memberOf 功能,没有开账号安全策略,没有设置用户自主改密码

综合两者的优缺点,最终选择了 bitnami/openldap,没做的功能自己做

目录树

├── sh                
│   ├── docker                     # 部署需要的文件
│   │   ├── entrypoint.sh           # entrypoint.sh文件
│   │   ├── saslauthd.sh            # sasl文件             
├── Dockerfile                      # dockerfile

详情

Dockerfile文件

FROM bitnami/openldap:2.6.3

LABEL maintainer="xxxx"

ENV OPENLDAP_VERSION="2.6.7" \
    SASLAUTHD_VERSION="2.1.28" \
    LDAP_AD_SERVERS="ldap://ad.example.com:389/" \
    LDAP_AD_SEARCH_BASE="CN=DomainUsers,DC=example,DC=com" \
    LDAP_AD_TIMEOUT="10" \
    LDAP_AD_FILTER="(sAMAccountName=%U)" \
    LDAP_AD_BIND_DN="CN=admin,CN=Users,DC=example,DC=com" \
    LDAP_AD_PASSWORD="ADpassword"

USER root

COPY sh/docker/saslauthd.sh     /opt/bitnami/scripts/openldap/saslauthd.sh
COPY sh/docker/entrypoint.sh    /opt/bitnami/scripts/openldap/entrypoint.sh

RUN chmod +x /opt/bitnami/scripts/openldap/saslauthd.sh
RUN chmod +x /opt/bitnami/scripts/openldap/entrypoint.sh

RUN sed -i s@/deb.debian.org/@/mirrors.163.com/@g /etc/apt/sources.list

RUN apt-get clean \
    && apt-get update \
    && apt-get install -q -y sasl2-bin \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

RUN chmod g+rwX /opt/bitnami

entrypoint.sh文件

#!/bin/bash

# shellcheck disable=SC1091

set -o errexit
set -o nounset
set -o pipefail

# Load libraries
. /opt/bitnami/scripts/liblog.sh

if [[ "$1" = "/opt/bitnami/scripts/openldap/run.sh" ]]; then
    info "** Starting LDAP setup **"
    /opt/bitnami/scripts/openldap/setup.sh
    info "** LDAP setup finished! **"
fi
# 执行 sasl 相关文件
sh /opt/bitnami/scripts/openldap/saslauthd.sh
echo ""
exec "$@"

saslauthd.sh文件

#!/bin/bash
cat > /etc/saslauthd.conf << EOF
ldap_servers: ${LDAP_AD_SERVERS}
ldap_search_base: ${LDAP_AD_SEARCH_BASE}
ldap_timeout: ${LDAP_AD_TIMEOUT}
ldap_filter: ${LDAP_AD_FILTER}
ldap_bind_dn: ${LDAP_AD_BIND_DN}
ldap_password: ${LDAP_AD_PASSWORD}
ldap_deref: never
ldap_restart: yes
ldap_scope: sub
ldap_use_sasl: no
ldap_start_tls: no
ldap_version: 3
ldap_auth_method: bind
EOF

sed -i 's/MECHANISMS="pam"/MECHANISMS="ldap"/' /etc/default/saslauthd 
sed -i 's/START=no/START=yes/' /etc/default/saslauthd
echo "chmod -R 777 /var/run/saslauthd" >> /etc/init.d/saslauthd

echo "mech_list: plain EXTERNAL" >> /usr/lib/sasl2/slapd.conf 
echo "pwcheck_method: saslauthd" >> /usr/lib/sasl2/slapd.conf 
echo "saslauthd_path: /var/run/saslauthd/mux" >> /usr/lib/sasl2/slapd.conf

/etc/init.d/saslauthd start
echo "==========saslauthd start =========="

Docker命令

构建镜像

# 进入与Dockerfile同级的目录执行
docker build -t openldap-sasl2:v1.0 -f Dockerfile .

docker启动

docker run -d --name openldap2 -p 389:1389 \
-u root \
--restart=always \
-e LDAP_ADMIN_USERNAME='admin' \
-e LDAP_ROOT='dc=abc,dc=com' \
-e LDAP_ADMIN_PASSWORD='123456' \
-e LDAP_AD_SERVERS='ldap://xx.xx.xx:389' \
-e LDAP_AD_SEARCH_BASE='OU=users,DC=def,DC=com' \
-e LDAP_AD_TIMEOUT=10 \
-e LDAP_AD_FILTER='(|(cn=%u)(userPrincipalName=%u)(sAMAccountName=%u)(telephoneNumber=%u))' \
-e LDAP_AD_BIND_DN='CN=admin,CN=Users,DC=def,DC=com' \
-e LDAP_AD_PASSWORD='111111' \
openldap-sasl2:v1.0

进入容器

docker exec -it 容器id /bin/bash

验证sasl服务(账户为AD用户以及AD密码)

testsaslauthd -u user01@def.com -p 22222

验证openldap服务(账户为openldap用户以及openldap密码)

ldapwhoami -x -H ldap://127.0.0.1:1389 -D cn=admin,dc=abc,dc=com -w 123456

给openldap添加用户

cat >> user1.ldif <<EOF
dn: uid=user01,ou=users,dc=abc,dc=com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: top
uid: user01
cn: user01
sn: user01
userpassword: {SASL}user01@def.com
givenname: user01
mail: user01@def.com
EOF



ldapadd -x -H ldap://127.0.0.1:1389 -w "123456" -D "cn=admin,dc=abc,dc=com" -f user1.ldif

使用AD的密码去验证用户

ldapwhoami -x -H ldap://127.0.0.1:1389 -D uid=user01,ou=users,dc=abc,dc=com -w 22222

动态查询docker日志

docker logs -f -t --since="2023-02-23" --tail=50 97

AD搜索语句

ldapsearch -x -H ldap://xxx.xx.xx.xx:389/ -D CN=admin,CN=Users,DC=def,DC=com -w 111111  -b "ou=xxx,ou=xxxx,ou=xxx,dc=def,dc=com" "(userPrincipalName=user01@def.com)"

踩坑点

运行docker容器报错

standard_init_linux.go:228: exec user process caused: no such file or directory。

这是由于编码环境是Windows系统,而容器运行或镜像编译环境是Linux系统,换行格式不同造成的

解决方案:

可以使用代码编辑器(以VScode为例),修改文件格式。在打开文件时,软件右下角会有“选择行尾序列选项”,把CRLF(Windows)更改为LF(Linux)就好了。

docker使用entrypoint执行时报permission denied错误

在Dockerfile中使用指令ENTRYPOINT来执行项目下entrypoint.shshell文件,如下:

ENTRYPOINT ["./entrypoint.sh"]

时报错提示:

Exec: "./entrypoint.sh": permission denied

很明显问题在于用户没有文件的执行权限。

解决方案:

添加:

RUN chmod +x /opt/bitnami/scripts/openldap/xxx.sh

sasl验证的时候日志报错(Failure: cannot connect to saslauthd server: Permission denied)

明显是个权限问题

解决方案

在saslauthd.sh文件中添加

echo "chmod -R 777 /var/run/saslauthd" >> /etc/init.d/saslauthd

sasl验证的时候报错(Invalid credentials (49))

这种情况分为两种:

  1. 仔细核对dn以及密码,确保密码正确;
  2. 编码问题,有可能是window和linux系统编码不一致,所以在linux输入!!!!!!!!!(这个问题极其蛋疼)

参考文献

OpenLDAP docker 部署

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

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

相关文章

ConnectTimeout 和 ConnectionError 的差异

随着网络请求库的不断发展和更新&#xff0c;开发者们在使用不同版本的requests库时&#xff0c;可能会遇到一些差异和问题。 首先&#xff0c;让我们看看问题的具体背景。用户在使用requests库的get方法时&#xff0c;遇到了以下情况&#xff1a; python import requests re…

恭喜顺利结项 | 开源之夏 2023openGauss项目结项结果公示

祝贺&#xff01; 激动人心的时刻终于到来&#xff01;开源之夏 2023 活动结项审核结果正式出炉。此次&#xff0c;openGauss深度参与活动&#xff0c;发布12个openGauss相关项目&#xff0c;10个项目进入开发周期&#xff0c;最终有8个项目成功结项。恭喜所有成功结项的同学&…

【volatality 3】使用说明文档

由于volatility2.6 和3.0 版本之间略有差异,所以特写本文档用来学习参考。 在vol3 中不需要指定profile,而是在命令中指定系统。 如windows.info、Windows.pslist 使用示例 文档说明 本文作者:SwBack 创作时间:‎2022‎年‎6‎月‎14‎日&#xff0c;‏‎15:47:05 知乎:https…

三维模型几何坐标偏差修正(纠正)的常用方法分析

三维模型几何坐标偏差修正&#xff08;纠正&#xff09;的常用方法分析 以下是几个常用的倾斜摄影三维模型几何坐标偏差修正和纠正的方法&#xff1a; 1、基于地面控制点的坐标转换&#xff1a;地面控制点是已知精确地理位置的点&#xff0c;可以通过测量仪器获取其准确的世界…

水厂消毒设施设备还有哪些其他类型?

除了上述提到的紫外线消毒器、臭氧消毒器、氯消毒设备、次氯酸钠消毒设备、过氧化氢消毒器、臭氧水消毒器和电解水制氯设备之外&#xff0c;水厂消毒设施设备还有其他类型&#xff0c;例如&#xff1a; 超声波消毒器&#xff1a;利用超声波的振动和热效应&#xff0c;破坏细菌…

某股份制商业银行:实现高可靠、自动化、可视可控的数据传输

客户简介 国内某股份制商业银行是一家自2000年来在发起设立阶段就引进境外战略投资者的全国性股份制商业银行。自银行成立以来&#xff0c;紧紧抓住多项国家战略实施与金融科技发展带来的时代机遇&#xff0c;已形成业务网络辐射全国、国际化业务蓄势待发、技术产品创新快速迭…

[Vue 代码模板] Vue3 中使用 Tailwind CSS + NutUI 实现侧边工具栏切换主题

文章归档&#xff1a;https://www.yuque.com/u27599042/coding_star/vzkgy6gvcnpl3u2y 效果示例 配置 src 目录别名 https://www.yuque.com/u27599042/coding_star/ogu2bhefy1fvahfv 配置 Tailwind CSS https://www.yuque.com/u27599042/coding_star/yqzi9olphko9ity1 配置…

如何同步微信通讯录?看这里,学习如何快速添加联系人!

无论是聊天、购物还是支付&#xff0c;微信都扮演着重要的角色。其中&#xff0c;微信通讯录是微信中的一个重要功能&#xff0c;它主要用于管理用户的联系人信息。如何在微信通讯录中快速添加好友&#xff1f;我们可以通过同步手机通讯录来实现。接下来&#xff0c;小编将给大…

万能在线答题考试小程序源码系统 既能刷题 又能考试 带完整的搭建教程

现如今&#xff0c;线上学习和考试已经成为一种趋势。近年来&#xff0c;移动端的普及以及微信小程序的兴起&#xff0c;使得在线答题考试系统变得更加便捷和高效。今天罗峰就来给大家介绍一款万能在线答题考试小程序源码系统&#xff0c;既能刷题&#xff0c;又能考试&#xf…

聊聊ThreadLocal(一)

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 话说《中华英雄》有一个…

【文献阅读】Low Cost Edge Sensing for High Quality Demosaicking

[PDF] [Code] 1. 摘要 使用彩色滤光器阵列(CFA)的数码相机需要一个去马赛克程序来形成完整的RGB图像。对于数码相机行业来说&#xff0c;解调速度和解调精度同样重要&#xff0c;因为相机用户已经习惯了即时查看拍摄的照片。此外&#xff0c;与去马赛克相关的成本不应超过使用…

OpenCV入门5——OpenCV的算术与位运算

文章目录 图像的加法运算图像的减法运算图像的乘除运算图像的融合OpenCV位运算-非操作OpenCV位操作-与运算OpenCV位操作-或与异或为图像添加水印 图像的加法运算 # -*- coding: utf-8 -*- import cv2 import numpy as npimg cv2.imread(E://pic//4.jpg)# 图的加法运算就是矩阵…

3ds max 2024 V-Ray 6 ACES workflow 工作流设置

ACES的流程包括2个设置&#xff1a; 1、环境设置&#xff1b;2、贴图设置&#xff1a; 一、环境设置&#xff1a;3ds max 2024已经内置了OCIO文件&#xff1b;设置一下即可&#xff1b; 二、贴图设置&#xff1a; 所有类型贴图加载有默认和加后缀2种方法&#xff1a; 第一…

提高Producer的发送速度

发送一条消息出去要经过三步&#xff0c;一是客户端发送请求到服务器&#xff0c;二是服务器处理该请求&#xff0c;三是服务器向客户端返回应答&#xff0c;一次消息的发送耗时是上述三个步骤的总和。在一些对速度要求高&#xff0c;但是可靠性要求不高的场景下&#xff0c;比…

Python装饰器的用途和实例

说明 装饰器是Python中非常有用的工具&#xff0c;它们可以用于修改或扩展函数或类的行为&#xff0c;而无需修改其原始定义。装饰器通常是一个函数&#xff0c;它接受一个函数作为参数&#xff0c;并返回一个新的函数或类。下面我们将介绍一些常见的装饰器用途和示例。 记录日…

SAP Dump:RFC callback call rejected by positive list

问题描述:配置SM59 连接时报错CALLBACK_REJECTED_BY_WHITELIST 报错简介: RFC callback call rejected by positive list 报错内容: An RFC callback has been prevented due to no corresponding positive list entry being configured. The original RFC called function m…

ceph学习笔记

ceph ceph osd lspoolsrbd ls -p testpool#查看 ceph 集群中有多少个 pool,并且每个 pool 容量及利 用情况 rados dfceph -sceph osd tree ceph dfceph versionsceph osd pool lsceph osd crush rule dumpceph auth print-key client.adminceph orch host lsceph crash lsceph…

vue2、vue3傻傻分不清楚

前端工作也做了几年了&#xff0c;好多东西还是分不清楚。特别是对于最基础的书写格式还是有点模糊不清&#xff0c;今天特地整理一下&#xff0c;以供日后查阅。 vue2 //最纯洁简单的一种创建组件的方式&#xff0c;使用基础 Vue 构造器&#xff0c;创建一个“子类”。 <…

2.认识中台

1.数字化中台初步认识与建设策略 中台的定义 阿里对中台的定义: 中台是一个基础的理念和架构&#xff0c;我们要用中台的思想建设、联通所有基础服务&#xff0c;共同支持上端的业务。业务中台更多的是支持在线业务&#xff0c;数据中台则提供基础数据处理能力和很多的数据产…

基于SDN技术构建多平面业务承载网络

随着企业数字化的浪潮席卷各个行业&#xff0c;传统网络架构面临着更为复杂和多样化的挑战。企业正在寻找一种全面适应数字化需求的网络解决方案。随着软件定义网络&#xff08;SDN&#xff09;的发展&#xff0c;“多业务SDN一张网”解决方案为企业提供了一种全新的网络架构&a…