Как запустить OpenLDAP в Docker-контейнере Bitnami
Управление пользователями, группами и их различными разрешениями — одна из жизненно важных задач системных администраторов в любой организации. Чтобы упростить задачу, многие предпочитают использовать службу каталогов. Это обеспечивает централизованную базу данных, содержащую всю информацию о ресурсах и объектах в компьютерной сети. Это упрощает доступ и управление информацией о различных ресурсах в сети, таких как пользователи, компьютеры, принтеры, приложения и другие устройства. Microsoft Active Directory — одна из широко используемых служб каталогов. Существует также множество других служб каталогов, таких как Novell eDirectory, LDAP и т. д.
Облегченный протокол доступа к каталогу, сокращенно LDAP, — это протокол, используемый для доступа и изменения службы каталогов на основе X.500, работающей через TCP/IP. Этот инструмент можно использовать для аутентификации и обмена информацией о пользователях, системах и приложениях по сети.
OpenLDAP — это реализация LDAP с открытым исходным кодом. Этот инструмент предоставляет богатый интерфейс командной строки, который упрощает создание LDAP и управление им. Есть несколько других причин, почему OpenLDAP предпочтителен. Некоторые из них включают в себя:
- Его экономическая эффективность, учитывая тот факт, что он бесплатный и имеет открытый исходный код.
- Он полностью соответствует формату обмена данными LDAP (LDIF) версии 1.
- Он поддерживает простую аутентификацию, уровень безопасности и безопасность транспортного уровня.
- Он обеспечивает гибкость, обеспечивая тем самым широкую применимость.
- Он поддерживает Интернет-протокол версии 6.
- Имеет кроссплатформенную поддержку. Он поддерживает системы Mac, Windows и Linux.
В этом руководстве мы узнаем, как запустить OpenLDAP в контейнере Bitnami Docker. Этот метод установки проще, поскольку он устраняет трудности, связанные с настройкой OpenLDAP. Спасибо Bitnami за упаковку всех зависимостей и библиотек, необходимых для запуска OpenLDAP, в легкий контейнер.
1. Установите Docker Container Engine.
Прежде чем мы углубимся, рекомендуется установить Docker Engine и Docker Compose. Для этого вы можете использовать приведенные ниже руководства:
- Как установить Докер
- Как установить 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: это базовое DN вашего дерева LDAP. Например, 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. Например: битнами1,битнами2
- LDAP_USER_DC: это организационное подразделение пользователя. Значение по умолчанию — пользователи.
- LDAP_GROUP: это группа, используемая для вновь созданных пользователей. По умолчанию: читатели
- LDAP_EXTRA_SCHEMAS: используется для добавления дополнительных схем среди распределенных схем OpenLDAP. По умолчанию: косинус, inetorgperson, nis.
- LDAP_SKIP_DEFAULT_TREE: используется, чтобы указать, следует ли пропускать создание дерева LDAP по умолчанию на основе LDAP_USERS, LDAP_PASSWORDS, LDAP_USER_DC и LDAP_GROUP.
- 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: файл с центром сертификации сертификата. Никаких значений по умолчанию.
- 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. Запустите OpenLDAP в Docker-контейнере Bitnami.
После того, как все вышеперечисленные настройки выполнены, мы можем продолжить и запустить контейнер с помощью команды:
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
Продолжайте и настройте URI LDAP. В нашем случае мы будем использовать синтаксис ldap://:
Установите ROOT DN вашей базы поиска.
Установите используемую версию LDAP:
Продолжите и назначьте локального корневого администратора базы данных.
На следующий вопрос «Требует ли база данных LDAP входа в систему?» ответьте НЕТ.
Установите корневую учетную запись:
Укажите пароль для учетной записи администратора:
После завершения установки ваша конфигурация будет сохранена в /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
Пример вывода:
Вердикт
На этом заканчивается руководство по запуску OpenLDAP в контейнере Bitnami Docker. Надеюсь, вы чему-то научились из этого. Подробнее смотрите на этой странице:
- Как запустить сервер OpenLDAP в контейнерах Docker
- Установите и настройте сервер OpenLDAP в Rocky Linux 8/AlmaLinux 8
- Интегрируйте TrueNAS с LDAP/Active Directory для аутентификации пользователей.