首页 程序笔记 如何在 Bitnami Docker 容器中运行 OpenLDAP

如何在 Bitnami Docker 容器中运行 OpenLDAP

管理用户、组及其各种权限是任何组织中系统管理员的重要任务之一。为了方便起见,许多人选择使用目录服务。这提供了一个集中式数据库,其中保存有关计算机网络中资源和实体的所有信息。它使访问和管理有关网络上各种资源(例如用户、计算机、打印机、应用程序和其他设备)的信息变得更加容易。 Microsoft Active Directory 是最常用的目录服务之一。还有许多其他目录服务,例如 Novell eDirectory、LDAP 等。

轻量级目录访问协议缩写为LDAP,是一种用于访问和修改在 TCP/IP 上运行的基于 X.500 的目录服务的协议。该工具可用于通过网络对用户、系统和应用程序的信息进行身份验证和共享。

OpenLDAP 是 LDAP 的开源实现。该工具提供了丰富的 CLI,使构建和管理 LDAP 变得更加容易。 OpenLDAP 成为首选还有其他几个原因。其中一些包括:

  • 考虑到它是免费和开源的,它的成本效益
  • 它完全符合 LDAP 数据交换格式 (LDIF) 版本 1
  • 它支持简单身份验证、安全层和传输层安全
  • 它提供了灵活性,从而提供了广泛的适用性。
  • 它支持互联网协议版本6
  • 它具有跨平台支持。它支持 Mac、Windows 和 Linux 系统。

在本指南中,我们将学习如何在 Bitnami Docker 容器中运行 OpenLDAP。这种安装方法更简单,因为它消除了设置 OpenLDAP 时涉及的麻烦。感谢 Bitnami 将运行 OpenLDAP 所需的所有依赖项和库打包在一个轻量级容器中。

1.安装Docker容器引擎

在我们深入之前,建议您安装 Docker Engine 和 Docker Compose。为此,您可以使用以下指南:

  • 如何安装 Docker
  • 如何安装 Docker Compose

通过运行以下命令验证安装:

$ docker version
Client: Docker Engine - Community
 Version:           24.0.6
 API version:       1.43
 Go version:        go1.20.7
 Git commit:        ed223bc
 Built:             Mon Sep  4 12:32:10 2023
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          24.0.6
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.7

$ docker-compose version
Docker Compose version v2.23.0

2.配置OpenLDAP容器

运行 OpenLDAP 时,您需要进行大量配置。 Bitnami Docker 容器支持许多配置或环境变量。以下是一些支持的变量:

  • LDAP_PORT_NUMBER:这是 OpenLDAP 侦听请求的端口。这里默认支持的端口是1389
  • LDAP_ROOT:这是 LDAP 树的基本 DN。例如dc=example,dc=org
  • LDAP_ADMIN_USERNAME:这是 LDAP 数据库的管理员用户
  • LDAP_ADMIN_PASSWORD:管理员用户所需的密码。
  • LDAP_ADMIN_PASSWORD_FILE:您可以使用它指向包含 LDAP 数据库管理员用户密码的文件,而不是直接在 YAML 中指定密码
  • LDAP_CONFIG_ADMIN_ENABLED:用于指定是否创建配置管理员用户。默认值:否
  • LDAP_CONFIG_ADMIN_USERNAME:LDAP 配置管理员用户的用户名。这与 LDAP_ADMIN_USERNAME 是分开的。默认值:管理员。
  • LDAP_CONFIG_ADMIN_PASSWORD:配置管理员的密码。
  • LDAP_CONFIG_ADMIN_PASSWORD_FILE:这指向包含 LDAP 配置管理员用户密码的文件。
  • LDAP_USERS:这是 LDAP 上以逗号分隔的用户列表。用户将在默认树中创建。例如用户01,用户02
  • LDAP_PASSWORDS:LDAP 用户使用的密码列表。例如:bitnami1,bitnami2
  • LDAP_USER_DC:这是用户的组织单位。默认值为用户。
  • LDAP_GROUP:这是用于新创建用户的组。默认:读者
  • LDAP_EXTRA_SCHEMAS:这用于在 OpenLDAP 的分布式模式中添加额外的模式。默认值:cosine、inetorgperson、nis
  • LDAP_SKIP_DEFAULT_TREE:用于指定是否跳过创建基于LDAP_USERS、LDAP_PASSWORDS、LDAP_USER_DC和LDAP_GROUP的默认LDAP树。
  • LDAP_CUSTOM_LDIF_DIR:用于指定用于引导数据库的 LDIF 文件的位置。
  • LDAP_CUSTOM_SCHEMA_FILE:无法添加为自定义 ldif 文件的架构文件的位置。
  • LDAP_CUSTOM_SCHEMA_DIR:这是无法添加为自定义 ldif 文件的自定义架构的目录。
  • LDAP_ULIMIT_NOFILES:这是打开文件描述符的最大数量。默认值:1024。
  • LDAP_PASSWORD_HASH:您希望在生成用户密码时使用的哈希值。必须是 {SSHA}、{SHA}、{SMD5}、{MD5}、{CRYPT} 和 {CLEARTEXT} 之一。默认值:{SSHA}。
  • LDAP_PPOLICY_HASH_CLEARTEXT:用于指定是否要自动对纯文本密码进行哈希处理。仅在 LDAP_CONFIGURE_PPOLICY 处于活动状态时应用。默认值:否。

您还可以选择使用以下变量来保护 OpenLDAP:

  • LDAP_ENABLE_TLS:用于指定是否为流量启用 TLS。默认为否。
  • LDAP_REQUIRE_TLS:用于设置连接是否必须使用 TLS。仅在 LDAP_ENABLE_TLS 处于活动状态时应用。默认为否。
  • LDAP_LDAPS_PORT_NUMBER:这是用于 TLS 安全流量的端口。支持特权端口(例如 636)。默认值:1636(非特权端口)。
  • LDAP_TLS_CERT_FILE:这是包含 TLS 流量的证书文件的文件。没有默认值。
  • LDAP_TLS_KEY_FILE:包含证书密钥的文件。没有默认值。
  • LDAP_TLS_CA_FILE:包含证书 CA 的文件。没有默认值。
  • LDAP_TLS_DH_PARAMS_FILE:具有 DH 参数的文件。没有默认值。

例如,您可以使用具有以下语法的 YAML 文件来保护您的 OpenLDAP 实例。

services:
  openldap:
  ...
    environment:
      ...
      - LDAP_ENABLE_TLS=yes
      - LDAP_TLS_CERT_FILE=/opt/bitnami/openldap/certs/openldap.crt
      - LDAP_TLS_KEY_FILE=/opt/bitnami/openldap/certs/openldap.key
      - LDAP_TLS_CA_FILE=/opt/bitnami/openldap/certs/openldapCA.crt
    ...
    volumes:
      - /path/to/certs:/opt/bitnami/openldap/certs
      - /path/to/openldap-data-persistence:/bitnami/openldap/
  ...

在本指南中,我们将使用 Docker Compose 配置和运行 OpenLDAP Bitnami 容器。首先,我们将下载示例 Docker Compose 文件:

curl -sSL https://raw.githubusercontent.com/bitnami/containers/main/bitnami/openldap/docker-compose.yml > docker-compose.yml

然后,您可以继续并根据需要修改容器。

vim docker-compose.yml

在文件中,您可以根据需要更新值。在本指南中,我们将使用最新的可用 Docker 映像并更新配置以适应我们的环境。

# Copyright VMware, Inc.
# SPDX-License-Identifier: APACHE-2.0

version: '2'

services:
  openldap:
    image: docker.io/bitnami/openldap:latest
    ports:
      - '389:1389'
      - '636:1636'
    environment:
      - LDAP_ADMIN_USERNAME=admin
      - LDAP_ADMIN_PASSWORD=adminpassword
      - LDAP_USERS=user01,user02
      - LDAP_PASSWORDS=password1,password2
      - LDAP_ROOT=dc=computingforgeeks,dc=org 
      - LDAP_ADMIN_DN=cn=admin,dc=computingforgeeks,dc=org 

    volumes:
      - 'openldap_data:/bitnami/openldap'

volumes:
  openldap_data:
    external: true

完成所有所需的设置后。保存文件并按如下所示继续操作。

3. 创建 OpenLDAP 持久卷

为了使容器在系统重新启动后保留其数据,我们需要创建持久存储。首先在主机上创建路径:

sudo mkdir -p /data/openldap

设置所需的权限和所有权:

sudo chmod 775 -R /data/openldap
sudo chown -R $USER:docker /data/openldap

在基于 Rhel 的系统上,您需要按如下所示配置 SELinux:

sudo setenforce 0
sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config

现在创建卷,如下所示:

docker volume create --driver local \
     --opt type=none \
     --opt device=/data/openldap \
     --opt o=bind openldap_data

检查卷是否存在:

$ docker volume list
DRIVER    VOLUME NAME
local     openldap_data

4. 在 Bitnami Docker 容器中启动 OpenLDAP

完成上述所有配置后,我们可以使用以下命令继续启动容器:

docker compose up -d

示例输出:

[+] Running 2/2
 ✔ openldap 1 layers [⣿]      0B/0B      Pulled                                          5.6s 
   ✔ f041216ccfa5 Pull complete                                                          1.2s 
[+] Running 2/2
 ✔ Network debian_default         Created                                                0.1s 
 ✔ Container debian-openldap-1    Started                                                0.5s 

检查容器是否已启动:

$ docker ps
CONTAINER ID   IMAGE                     COMMAND                  CREATED          STATUS          PORTS                                                                              NAMES
bc79a32a90dc   bitnami/openldap:latest   "/opt/bitnami/script…"   42 seconds ago   Up 41 seconds   0.0.0.0:389->1389/tcp, :::389->1389/tcp, 0.0.0.0:636->1636/tcp, :::636->1636/tcp   debian-openldap-1

现在所有端口都可以通过防火墙:

##For UFW
sudo ufw allow 389/tcp
sudo ufw allow 636/tcp

##For Firewalld
sudo firewall-cmd --add-port=389/tcp --permanent
sudo firewall-cmd --add-port=636/tcp --permanent
sudo firewall-cmd --reload

5. 设置 OpenLDAP 客户端

为了测试一切是否正常,我们可以在所需的系统上设置 OpenLDAP 客户端。有多个关于如何设置 OpenLDAP 客户端的指南。

  • 如何设置 OpenLDAP 客户端

在本指南中,我们将设置一个 Ubuntu 客户端。首先要做的是设置客户端的主机名:

sudo hostnamectl set-hostname ldapclient.computingforgeeks.org

接下来,配置更新 /etc/hosts 的分辨率:

$ sudo vim /etc/hosts
##OpenLDAP server
192.168.200.56 ldapmaster.computingforgeeks.org

##OpenLDAP Client
192.168.200.52 ldapclient.computingforgeeks.org

确保客户端可以访问 OpenLDAP 服务器:

$ sudo ping -c3 ldapmaster.computingforgeeks.org
PING ldapmaster.computingforgeeks.org (192.168.200.56) 56(84) bytes of data.
64 bytes from ldapmaster.computingforgeeks.org (192.168.200.56): icmp_seq=1 ttl=64 time=0.232 ms
64 bytes from ldapmaster.computingforgeeks.org (192.168.200.56): icmp_seq=2 ttl=64 time=0.248 ms
64 bytes from ldapmaster.computingforgeeks.org (192.168.200.56): icmp_seq=3 ttl=64 time=0.232 ms

--- ldapmaster.computingforgeeks.org ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2032ms
rtt min/avg/max/mdev = 0.232/0.237/0.248/0.007 ms

然后安装所有必需的包:

sudo apt update -y && sudo apt -y install libnss-ldap libpam-ldap ldap-utils

继续并配置 LDAP URI。对于我们的例子,我们将使用 ldap://: 语法,如下所示:

设置搜索库的 ROOT DN

设置要使用的 LDAP 版本:

继续并设置本地根数据库管理员

回答下一个问题“LDAP 数据库是否需要登录?:”。

设置root账户:

提供管理员帐户的密码:

安装完成后,您的配置将保存在 /etc/ldap.conf

现在打开以下文件并对 passwdgroup 行进行以下更改:

$ sudo vim /etc/nsswitch.conf
passwd: compat systemd ldap
group: compat systemd ldap
shadow: compat

还需要修改下面的文件,修改第26行,如图所示:

$ sudo vim /etc/pam.d/common-password
##Line 26
password [success=1 user_unknown=ignore default=die] pam_ldap.so try_first_pass

您还需要允许在首次登录时创建用户的主目录。为此,请在文件末尾添加以下行:

$ sudo vim /etc/pam.d/common-session
session optional pam_mkhomedir.so skel=/etc/skel umask=077

现在保存更改并测试是否可以使用在 OpenLDAP 上创建的用户登录系统。例如:

ssh user01@localhost

示例输出:

判决

这标志着有关如何在 Bitnami Docker 容器中运行 OpenLDAP 的指南的结束。我希望你能从中学到一些东西。在此页面上查看更多内容:

  • 如何在 Docker 容器中运行 OpenLDAP 服务器
  • 在 Rocky Linux 8/AlmaLinux 8 上安装和配置 OpenLDAP 服务器
  • 将 TrueNAS 与 LDAP/Active Directory 集成以进行用户身份验证

1

站心网

管理用户、组及其各种权限是任何组织中系统管理员的重要任务之一。为了方便起见,许多人选择使用目录服务。..

为您推荐

VS创建.NET Core项目使用Docker方式部署到Linux服务器

在 Visual Studio(VS) 中,使用 Docker 方式部署 .NET Core 项目 到 Linux 服务器,可以简化环境管理并提高部署效率。以下是完整教程:1. 在 VS 创建 .NET Core 项目并启用 Docker新建 ASP.NET Core 项目打开 Visu..

鸿蒙系统HarmonyOS支持Docker吗?

华为鸿蒙系统(HarmonyOS)本身并不是直接为容器化设计的操作系统,因此在原生支持上并没有内置对 Docker 的直接支持。不过,可以通过以下方式实现某些 Docker 的功能:1. 鸿蒙系统的定位鸿蒙系统主要针对 IoT(物联..

ASP.NET如何将Views文件夹从项目分离

将 Views 文件夹从 ASP.NET 项目中分离是一个常见需求,比如为了实现模块化或分层架构。以下是实现此功能的完整步骤,从项目中分离 Views 文件夹,将其移到另一个独立的文件夹或项目中,并确保视图渲染仍然正常。1. ..

如何让AI写出Google认可的文章?

让 AI 写出 Google 认可的文章,核心在于满足 Google 的搜索排名算法要求。这些要求通常围绕以下几个关键点展开:内容质量、用户体验 和 SEO 优化。以下是详细指导:一、内容质量确保文章原创且有价值避免抄袭:Goog..

如何从.NET Framework迁移到.NET Core或.NET 6/7?

从 .NET Framework 迁移到 .NET Core 或 .NET 6/7 是一个提升性能和跨平台能力的关键过程。以下是迁移的主要步骤和注意事项:迁移步骤1. 评估当前项目依赖项检查:确保所有第三方库和NuGet包都有与 .NET Core/.NET 6..

如何优化ASP.NET Core应用的性能?

优化ASP.NET Core应用性能需要从代码、数据库、配置、服务器和部署等多个层面进行综合考虑。以下是一些优化ASP.NET Core应用性能的关键方法和技巧:1. 代码级优化使用异步编程:避免阻塞线程,通过async和await处理I..

在Docker、Kubernetes环境下部署.NET应用的最佳实践

在 Docker 和 Kubernetes 环境中部署 .NET 应用是现代云原生开发的重要实践之一。以下是一些经过验证的最佳实践,涵盖 Docker 镜像优化、Kubernetes 部署配置和整体架构建议。1. Docker 镜像构建的最佳实践1.1 使用..

chrome 开发者工具如何查看元素:hover时的样式

在 Chrome 开发者工具中查看元素的 :hover 样式,可以通过以下步骤实现:打开开发者工具:右键点击页面中的元素,然后选择“检查(Inspect)”或按下 F12 或 Ctrl + Shift + I (Windows) / Cmd + Option +..

鸿蒙OpenHarmony系统可以运行跨平台的.NET Core吗?

鸿蒙(HarmonyOS)和 OpenHarmony 系统本身并不原生支持直接运行 .NET Core,但可以通过一些方法使 .NET Core 应用在其上运行。鸿蒙和 OpenHarmony 是基于 LiteOS 和 Linux 内核的多终端操作系统,因此它们的运行时..

DockerUI 中文可视化Docker管理工具使用示例

DockerUI 是由国内开发者打造的一款优秀的 Docker 可视化管理工具。该工具拥有简洁直观的UI界面,可以轻松进行Docker主机管理、集群管理,以及Docker任务的编排等操作。DockerUI不仅展示了资源利用率、系统信息和更..

如何防止web应用DOS攻击?

防止web应用DOS攻击的最好的方法是什么? 如何防止web应用DOS攻击? 与所有的拒绝服务(DOS)攻击相关的一件事是他们都不可能避免。最好的方法是把重点放在减少影响DOS攻击的方法上。如果你有一个网络,黑客想要玩一玩..

数据库SQL Server2014和SQL Server2019的区别和如何选择?

SQL Server 2014和SQL Server 2019是微软公司发布的两个版本的数据库管理系统,它们在性能、安全性以及可扩展性等方面各有特点。在选择这两个数据库版本时,需要根据系统需求、预算状况以及技术团队的熟悉程度等因素..

MySQL如何建数据库

MySQL是一款非常流行的关系型数据库管理系统。无论是在企业还是个人项目中,都经常使用MySQL数据库。在使用MySQL之前,需要先创建一个数据库。本文将介绍如何建立MySQL数据库。一、安装MySQL在开始建立MySQL数据库之..

jwt是什么?.NET Core API如何使用JwtBearer验证

JWT是JSON Web Token的缩写,是一种开放标准(RFC 7519),用于在网络上以安全和可靠的方式传输信息。它是一种被广泛使用的跨域身份验证解决方案,可以将用户信息、访问权限等加密后存储在Token中,然后通过网络传输..

Blazor使用内存中状态容器服务保存和验证登陆状态

想用Blazor做一个简单的登录验证。模式是render-mode="ServerPrerendered"。在登录页面登录成功后需要保存类似.NET MVC网站的服务端session的状态。网上一些简单的做法是登录成功后把用户信息存在LocalStorage或者Se..

什么是微服务架构?它与单体应用程序架构有什么区别?如何在.NET中实现微服务架构?

微服务架构是一种软件架构风格,通过将应用程序拆分为一组小型、自治的服务来构建应用程序。每个服务都专注于解决特定的业务功能,并通过轻量级的通信机制进行交互。这些服务可以独立开发、部署和扩展,可以使用不同..

winform如何隐藏边框和标题栏

在WinForms中,可以通过以下步骤来隐藏窗体的边框和标题栏:打开WinForms应用程序的窗体设计器。选择窗体控件,然后在属性窗口中找到FormBorderStyle属性。将FormBorderStyle属性设置为None,以指示窗体不显示边框。..

容器化囧途~没上容器时好好的?

如果寿司店老板说,有一种人叫寿司人,寿司人的一切都是为了吃寿司,寿司人比别的人都厉害,你肯定会嗤之以鼻;云厂商提出了云原生概念,倒是拥趸甚多——这是因为云比寿司好吃多了,它提供的好处,足以让人铤而走险..

程序员如何量化炒股?原理是什么?

作为程序员,可以运用编程技能和量化分析来帮助量化炒股。量化炒股有哪些步骤和方法?收集数据:需要收集有关股票市场的数据。可以从各种来源获取这些数据,如Yahoo财经、谷歌财经、股票交易所等。可以使用Python等..

如何让Google谷歌搜索引擎找到并收录网站

Google谷歌会使用大量计算机来抓取网络上数十亿的页面, 这个名为 Googlebot 的抓取工具基本上从以前抓取生成的网页 URL 列表开始,然后使用 Google Search Console 中提供的站点地图数据扩充这些页面。 在抓取过程..

发表回复

返回顶部