openldap-sasl身份认证镜像

背景

在这篇文章中,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.3LABEL 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 rootCOPY sh/docker/saslauthd.sh     /opt/bitnami/scripts/openldap/saslauthd.sh
COPY sh/docker/entrypoint.sh    /opt/bitnami/scripts/openldap/entrypoint.shRUN chmod +x /opt/bitnami/scripts/openldap/saslauthd.sh
RUN chmod +x /opt/bitnami/scripts/openldap/entrypoint.shRUN sed -i s@/deb.debian.org/@/mirrors.163.com/@g /etc/apt/sources.listRUN 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=SC1091set -o errexit
set -o nounset
set -o pipefail# Load libraries
. /opt/bitnami/scripts/liblog.shif [[ "$1" = "/opt/bitnami/scripts/openldap/run.sh" ]]; theninfo "** Starting LDAP setup **"/opt/bitnami/scripts/openldap/setup.shinfo "** 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
EOFsed -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/saslauthdecho "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
EOFldapadd -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.hqwc.cn/news/185595.html

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

相关文章

修改服务器端Apache默认根目录

目标&#xff1a;修改默认Apache网站根目录 /var/www/html 一、找到 DocumentRoot “/var/www/html” 这一段 apache的根目录&#xff0c;把/var/www/html 这个目录改 #DocumentRoot "/var/www/html" DocumentRoot "/home/cloud/tuya_mini_h5/build" 二、…

图论| 827. 最大人工岛 127. 单词接龙

827. 最大人工岛 题目&#xff1a;给你一个大小为 n x n 二进制矩阵 grid 。最多 只能将一格 0 变成 1 。返回执行此操作后&#xff0c;grid 中最大的岛屿面积是多少&#xff1f; 岛屿 由一组上、下、左、右四个方向相连的 1 形成。 题目链接&#xff1a;[827. 最大人工岛](ht…

obsidian和bookmaster

1 手动安装插件 插件地址&#xff1a;https://forum-zh.obsidian.md/t/topic/12333 安装file服务器 地址&#xff1a;http://www.rejetto.com/hfs/ hfs.exe可以改个端口 改成8866&#xff0c;ip地址也可以改成 127.0.0.1 # 因为安装到本地 如果要创建账户的话&#xff0c;就…

wpf devexpress在未束缚模式中生成Tree

TreeListControl 可以在未束缚模式中没有数据源时操作&#xff0c;这个教程示范如何在没有数据源时创建tree 在XAML生成tree 创建ProjectObject类实现数据对象显示在TreeListControl: public class ProjectObject {public string Name { get; set; }public string Executor {…

Kubernetes基础知识了解

一、Kubernetes简介 Kubernetes是一个轻便的和可扩展的开源平台&#xff0c;用于管理容器化应用和服务。通过Kubernetes能够进行应用的自动化部署和扩缩容。在Kubernetes中&#xff0c;会将组成应用的容器组合成一个逻辑单元以更易管理和发现。Kubernetes积累了作为Google生产…

微服务架构之路7,Nacos配置中心的Pull原理,附源码

目录 一、本地配置二、配置中心1、以Nacos为例&#xff1a;2、Pull模式3、也可以通过Nacos实现注册中心 三、配置中心提供了哪些功能四、如何操作配置中心1、配置注册2、配置反注册3、配置查看4、配置变更订阅 五、主流的微服务注册中心有哪些&#xff0c;如何选择&#xff1f;…

Echarts 实现两两柱图重叠(背景和实际值柱图)

Echarts实现两两重叠柱状图_echarts 重叠柱状图_Web_阿凯的博客-CSDN博客 引用启发的博客 先来效果&#xff1a; option {backgroundColor: #03213D,animation: true, // 控制动画是否开启animationDuration: 1000, // 动画的时长, 它是以毫秒为单位animationDuration: func…

(免费领源码)基于Vue+Node.js的宠物领养网站的设计与开发83352-计算机毕业设计项目选题推荐

摘 要 随着互联网大趋势的到来&#xff0c;社会的方方面面&#xff0c;各行各业都在考虑利用互联网作为媒介将自己的信息更及时有效地推广出去&#xff0c;而其中最好的方式就是建立网络管理系统&#xff0c;并对其进行信息管理。由于现在网络的发达&#xff0c;宠物领养网站的…

滚雪球学Java(09-2):Java中的关系运算符,你真的掌握了吗?

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…

Minio - 多节点多驱动器安装部署

先决条件 网络互通 MinIO集群中的节点的网络需要互相双向互通。 MinIO API默认端口9000 MinIO console默认端口9001 MinIO强烈建议使用负载均衡器来管理与集群的连接。负载均衡器策略使用“最小连接数”逻辑&#xff0c;因为在部署中任何 MinIO 节点都可以接收、路由或处理…

ERR_PNPM_INVALID_WORKSPACE_CONFIGURATION packages field missing or empty

vue执行 pnpm install命令时&#xff0c;报 ERR_PNPM_INVALID_WORKSPACE_CONFIGURATION  packages field missing or empty错&#xff0c;在网上查询了很久&#xff0c;也没有传出来结果&#xff0c;最后发现是pnpm的版本不对引起的。 我先执行的是npm install -g pnpm&…

delphi电子处方流转 sm2 sm4(药店)

【delphi电子处方流转(药店)】支持 处方下载、处方核验、处方审核、药品销售出库明细上传、药品销售出库明细撤销等功能。技术交流Q 648437169 下载链接&#xff1a;https://download.csdn.net/download/liushenglin123/88543771