Como executar o OpenLDAP no contêiner Bitnami Docker
Gerenciar usuários, grupos e suas diversas permissões é uma das tarefas vitais para administradores de sistema em qualquer organização. Para facilitar, muitos optam por usar um serviço de diretório. Isto fornece um banco de dados centralizado que contém todas as informações sobre recursos e entidades em uma rede de computadores. Facilita o acesso e o gerenciamento de informações sobre diversos recursos da rede, como usuários, computadores, impressoras, aplicativos e outros dispositivos. O Microsoft Active Directory é um dos serviços de diretório mais usados. Existem também muitos outros serviços de diretório, como Novell eDirectory, LDAP etc.
Lightweight Directory Access Protocol abreviado como LDAP é um protocolo usado para acessar e modificar serviços de diretório baseados em X.500 executados em TCP/IP. Esta ferramenta pode ser utilizada para autenticação e compartilhamento de informações sobre usuários, sistemas e aplicações na rede.
OpenLDAP é uma implementação de código aberto do LDAP. Esta ferramenta fornece uma CLI avançada que facilita a construção e o gerenciamento do LDAP. Existem vários outros motivos pelos quais o OpenLDAP é preferido. Alguns deles incluem:
- Sua relação custo-benefício considerando o fato de ser gratuito e de código aberto
- Possui total conformidade com o LDAP Data Interchange Format (LDIF) versão 1
- Suporta autenticação simples, camada de segurança e segurança da camada de transporte
- Oferece flexibilidade proporcionando assim uma ampla aplicabilidade.
- Suporta protocolo de Internet versão 6
- Possui suporte multiplataforma. Suporta sistemas Mac, Windows e Linux.
Neste guia, aprenderemos como executar OpenLDAP no Bitnami Docker Container. Este método de instalação é mais fácil, pois elimina a confusão envolvida na configuração do OpenLDAP. Obrigado ao Bitnami por empacotar todas as dependências e bibliotecas necessárias para executar o OpenLDAP em um contêiner leve.
1. Instale o Docker Container Engine
Antes de começarmos, é recomendável que você tenha o Docker Engine e o Docker Compose instalados. Para conseguir isso, você pode usar os guias abaixo:
- Como instalar o Docker
- Como instalar o Docker Compose
Verifique a instalação executando os comandos:
$ 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. Configure o contêiner OpenLDAP
Ao executar o OpenLDAP, há várias configurações que você precisa fazer. O contêiner Bitnami Docker oferece suporte a diversas configurações ou variáveis de ambiente. Abaixo estão algumas das variáveis suportadas:
- LDAP_PORT_NUMBER: Esta é a porta na qual o OpenLDAP está escutando solicitações. A porta padrão suportada aqui é 1389
- LDAP_ROOT: Este é o baseDN da sua árvore LDAP. Por exemplo dc=example,dc=org
- LDAP_ADMIN_USERNAME: este é o usuário administrador do banco de dados LDAP
- LDAP_ADMIN_PASSWORD: A senha desejada para o usuário administrador.
- LDAP_ADMIN_PASSWORD_FILE: você pode usar isso para apontar para o arquivo que contém a senha do usuário administrador do banco de dados LDAP em vez de especificar a senha diretamente no YAML
- LDAP_CONFIG_ADMIN_ENABLED: Isto é usado para especificar se um usuário administrador de configuração deve ser criado. Padrão: não
- LDAP_CONFIG_ADMIN_USERNAME: o nome de usuário do usuário administrador da configuração LDAP. Isso é separado de LDAP_ADMIN_USERNAME. Padrão: administrador.
- LDAP_CONFIG_ADMIN_PASSWORD: Uma senha para o administrador de configuração.
- LDAP_CONFIG_ADMIN_PASSWORD_FILE: aponta para um arquivo que contém a senha do usuário administrador da configuração LDAP.
- LDAP_USERS: esta é uma lista de usuários no seu LDAP separados por vírgulas. Os usuários serão criados na árvore padrão. Por exemplo usuário01, usuário02
- LDAP_PASSWORDS: uma lista de senhas a serem usadas pelos usuários LDAP. Por exemplo: bitnami1,bitnami2
- LDAP_USER_DC: esta é a unidade organizacional dos usuários. O valor padrão é usuários.
- LDAP_GROUP: Este é o grupo usado para usuários recém-criados. Padrão: leitores
- LDAP_EXTRA_SCHEMAS: É usado para adicionar esquemas extras entre os esquemas distribuídos do OpenLDAP. Padrão: cosseno, inetorgperson, nis
- LDAP_SKIP_DEFAULT_TREE: Usado para especificar se a criação da árvore LDAP padrão deve ser ignorada com base em LDAP_USERS, LDAP_PASSWORDS, LDAP_USER_DC e LDAP_GROUP.
- LDAP_CUSTOM_LDIF_DIR: Usado para especificar o local dos arquivos LDIF que devem ser usados para inicializar o banco de dados.
- LDAP_CUSTOM_SCHEMA_FILE: o local de um arquivo de esquema que não pôde ser adicionado como um arquivo ldif customizado.
- LDAP_CUSTOM_SCHEMA_DIR: Este é o diretório dos esquemas customizados que não puderam ser adicionados como arquivos ldif customizados.
- LDAP_ULIMIT_NOFILES: Este é o número máximo de descritores de arquivos abertos. Padrão: 1024.
- LDAP_PASSWORD_HASH: O Hash que você deseja que seja utilizado na geração das senhas dos usuários. Deve ser um entre {SSHA}, {SHA}, {SMD5}, {MD5}, {CRYPT} e {CLEARTEXT}. Padrão: {SSHA}.
- LDAP_PPOLICY_HASH_CLEARTEXT: Usado para especificar se você deseja que as senhas em texto simples sejam criptografadas automaticamente. Só será aplicado com LDAP_CONFIGURE_PPOLICY ativo. Padrão: não.
Você também tem a opção de proteger o OpenLDAP usando as seguintes variáveis:
- LDAP_ENABLE_TLS: usado para especificar se o TLS deve ser ativado ou não para tráfego. O padrão é não.
- LDAP_REQUIRE_TLS: Usado para definir se as conexões devem usar TLS. Só será aplicado com LDAP_ENABLE_TLS ativo. O padrão é não.
- LDAP_LDAPS_PORT_NUMBER: esta é a porta usada para tráfego seguro TLS. A porta privilegiada é suportada (por exemplo, 636). Padrão: 1636 (porta não privilegiada).
- LDAP_TLS_CERT_FILE: Este é o arquivo que contém o arquivo de certificado para o tráfego TLS. Sem padrões.
- LDAP_TLS_KEY_FILE: o arquivo que contém a chave do certificado. Sem padrões.
- LDAP_TLS_CA_FILE: O arquivo com a CA do certificado. Sem padrões.
- LDAP_TLS_DH_PARAMS_FILE: O arquivo que contém os parâmetros DH. Sem padrões.
Por exemplo, você pode usar um arquivo YAML com a sintaxe abaixo para proteger sua instância 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/
...
Neste guia, usaremos o Docker Compose para configurar e executar o contêiner OpenLDAP Bitnami. Primeiro, baixaremos o arquivo Docker Compose de amostra:
curl -sSL https://raw.githubusercontent.com/bitnami/containers/main/bitnami/openldap/docker-compose.yml > docker-compose.yml
Você pode então prosseguir e modificar o contêiner conforme desejado.
vim docker-compose.yml
No arquivo, você pode atualizar os valores conforme desejado. Neste guia, usaremos a imagem Docker mais recente disponível e atualizaremos as configurações para se adequar ao nosso ambiente.
# 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
Assim que todas as configurações desejadas forem feitas. Salve o arquivo e proceda conforme mostrado abaixo.
3. Crie o volume persistente OpenLDAP
Para que o contêiner persista seus dados após a reinicialização do sistema, precisamos criar um armazenamento persistente. Comece criando o caminho na sua máquina host:
sudo mkdir -p /data/openldap
Defina a permissão e a propriedade necessárias:
sudo chmod 775 -R /data/openldap
sudo chown -R $USER:docker /data/openldap
Em sistemas baseados em Rhel, você precisa configurar o SELinux conforme mostrado:
sudo setenforce 0
sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
Agora crie o volume conforme mostrado:
docker volume create --driver local \
--opt type=none \
--opt device=/data/openldap \
--opt o=bind openldap_data
Verifique se o volume existe:
$ docker volume list
DRIVER VOLUME NAME
local openldap_data
4. Inicie o OpenLDAP no contêiner Bitnami Docker
Depois de feitas todas as configurações acima, podemos prosseguir e iniciar o contêiner usando o comando:
docker compose up -d
Saída de amostra:
[+] 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
Verifique se o contêiner está ativo:
$ 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
Agora todas as portas através do firewall:
##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. Configure o cliente OpenLDAP
Para testar se está tudo bem, podemos configurar o cliente OpenLDAP no sistema desejado. Existem vários guias sobre como configurar seu cliente OpenLDAP.
- Como configurar o cliente OpenLDAP
Neste guia, configuraremos um cliente Ubuntu. A primeira coisa a fazer é configurar o nome do host do cliente:
sudo hostnamectl set-hostname ldapclient.computingforgeeks.org
Em seguida, configure a atualização da resolução /etc/hosts:
$ sudo vim /etc/hosts
##OpenLDAP server
192.168.200.56 ldapmaster.computingforgeeks.org
##OpenLDAP Client
192.168.200.52 ldapclient.computingforgeeks.org
Certifique-se de que o cliente possa acessar o servidor 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
Em seguida, instale todos os pacotes necessários:
sudo apt update -y && sudo apt -y install libnss-ldap libpam-ldap ldap-utils
Prossiga e configure o URI LDAP. Para o nosso caso, usaremos a sintaxe ldap://:
Defina o DN ROOT da sua base de pesquisa
Defina a versão do LDAP a ser usada:
Prossiga e torne o administrador do banco de dados raiz local
Responda à próxima pergunta “O banco de dados LDAP requer login?: com NÃO.
Defina a conta root:
Forneça a senha da conta de administrador:
Assim que a instalação for concluída, sua configuração será salva em /etc/ldap.conf
Agora abra o arquivo abaixo e faça estas alterações nas linhas passwd
e group
:
$ sudo vim /etc/nsswitch.conf
passwd: compat systemd ldap
group: compat systemd ldap
shadow: compat
Você também precisa modificar o arquivo abaixo e modificar a linha 26 conforme mostrado:
$ sudo vim /etc/pam.d/common-password
##Line 26
password [success=1 user_unknown=ignore default=die] pam_ldap.so try_first_pass
Você também precisa permitir que o diretório inicial do usuário seja criado no primeiro login. Para conseguir isso, adicione a linha abaixo no final do arquivo:
$ sudo vim /etc/pam.d/common-session
session optional pam_mkhomedir.so skel=/etc/skel umask=077
Agora salve as alterações e teste se você consegue fazer login no sistema usando os usuários criados no OpenLDAP. Por exemplo:
ssh user01@localhost
Saída de amostra:
Veredito
Isso marca o fim do guia sobre como executar o OpenLDAP no Bitnami Docker Container. Espero que você tenha aprendido algo com isso. Veja mais nesta página:
- Como executar o servidor OpenLDAP em contêineres Docker
- Instale e configure o servidor OpenLDAP no Rocky Linux 8/AlmaLinux 8
- Integre TrueNAS com LDAP/Active Directory para autenticação de usuário