如何在 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
现在打开以下文件并对 passwd
和 group
行进行以下更改:
$ 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 集成以进行用户身份验证
更新于:4个月前
相关文章
- 【说站】Java如何在PDF添加注释
- 【说站】java软引用如何在浏览器使用
- DockerUI 中文可视化Docker管理工具使用示例
- docker 怎么部署 php 应用
- 容器化囧途~没上容器时好好的?
- 如何在 JavaScript 中使用正则表达式删除 HTML 标签?
- TP6.0 容器和依赖注入
- 使用Docker Wine Qemu KVM在Linux运行Windows应用
- docker部署.net core网站
- 简单了解Docker的概念和作用
- Docker 80端口 绑定多个域名
- Docker运维常用命令大全
- 使用docker搭建Nginx + PHP + mysql环境
- linux的shell脚本中如何在一个字符串中查找指定字符串是否存在
- .NET容器化支持和云原生支持
- 你如何在 Python 中循环字典?
- 如何在 Anaconda 中安装 Python 包?
- 你如何在 Python 中编写自动售货机代码?
- 如何在 Python 中读取 .data 文件?
- 如何在 Python 中创建静态类数据和静态类方法?