Pesquisa de site

Como instalar o servidor OpenLDAP no CentOS 8/RHEL 8


Este tutorial abordará como instalar o OpenLDAP no CentOS 8 | RHEL 8. LDAP é um protocolo leve de autenticação de domínio. Isso significa que você pode usar o LDAP como um sistema de autenticação central para usuários e sistemas como o Postfix. Pode ser comparado ao Active Directory da Microsoft. OpenLDAP é um sistema LDAP de código aberto que roda em sistemas Linux.

Instale o OpenLDAP no CentOS 8 | RHEL 8

Neste guia, construiremos a versão fonte mais recente do OpenLDAP em vez de usar a versão disponível fornecida pelo PowerTools.

Siga as etapas abaixo para configurar o servidor OpenLDAP no CentOS 8 | RHEL 8.

1. Atualizar sistema

Execute atualizações do sistema e atualize os pacotes.

sudo dnf update -y

Reinicie após a atualização:

sudo reboot

2. Instale os pacotes de software necessários

Instale os pacotes necessários que permitirão construir o OpenLDAP com sucesso.

sudo dnf install wget vim cyrus-sasl-devel libtool-ltdl-devel openssl-devel libdb-devel make libtool autoconf  tar gcc perl perl-devel -y

3. Crie uma conta do sistema LDAP

Precisamos criar um usuário de sistema sem privilégios para OpenLDAP.

sudo useradd -r -M -d /var/lib/openldap -u 55 -s /usr/sbin/nologin ldap

4. Baixe o arquivo fonte OpenLDAP

No momento deste tutorial, a versão mais recente do OpenLDAP era 2.5.x. Baixe a versão mais recente nesta página.

Declararemos a versão em seu shell

VER=2.6.6
wget https://www.openldap.org/software/download/OpenLDAP/openldap-release/openldap-$VER.tgz

Extraia o arquivo baixado:

tar xzf openldap-$VER.tgz

5. Instale OpenLDAP no CentOS 8/RHEL 8

Mova os arquivos extraídos para /opt/ e compile os arquivos de origem.

sudo mv openldap-$VER /opt

Mude seu diretório de trabalho para fonte OpenLDAP.

cd /opt/openldap-$VER

Instale ferramentas de desenvolvimento:

sudo dnf groupinstall "Development Tools" -y

Compilar os arquivos fonte

sudo ./configure --prefix=/usr --sysconfdir=/etc \
--enable-debug --with-tls=openssl --with-cyrus-sasl --enable-dynamic \
--enable-crypt --enable-spasswd --enable-slapd --enable-modules \
--enable-rlookups

Após a compilação bem-sucedida, você deverá ver uma saída que diz: “Por favor, execute “make depend” para construir dependências ”

Execute make depende para construir dependências OpenLDAP.

sudo make depend

Compile o OpenLDAP.

sudo make

Instale o OpenLDAP no CentOS 8/CentOS Stream 8:

sudo make install

Uma instalação bem-sucedida cria arquivos de configuração em /etc/openldap. Os seguintes arquivos estão disponíveis após a instalação:

$ ls /etc/openldap
certs  ldap.conf  ldap.conf.default  schema  slapd.conf  slapd.conf.default  slapd.ldif  slapd.ldif.default

6. Configurando OpenLDAP no CentOS 8/RHEL 8

Vamos prosseguir com a configuração do OpenLDAP.

Primeiro, precisamos criar diretórios de banco de dados OpenLDAP.

sudo mkdir /var/lib/openldap /etc/openldap/slapd.d

Defina as permissões adequadas para os diretórios OpenLDAP

sudo chown -R ldap:ldap /var/lib/openldap
sudo chown root:ldap /etc/openldap/slapd.conf
sudo chmod 640 /etc/openldap/slapd.conf

Criar esquema OpenLDAP SUDO

Verifique se a sua versão do sudo suporta LDAP.

sudo -V |  grep -i "ldap"

Você deverá ver as linhas abaixo na saída se o seu sistema suportar LDAP.

ldap.conf path: /etc/sudo-ldap.conf
ldap.secret path: /etc/ldap.secret

Confirme se o esquema LDAP sudo está disponível em seu sistema

rpm -ql sudo |  grep -i schema.openldap

Exemplo de saída

/usr/share/doc/sudo/schema.OpenLDAP

Copie o esquema para o diretório de esquema ldap.

sudo cp /usr/share/doc/sudo/schema.OpenLDAP  /etc/openldap/schema/sudo.schema

Crie um arquivo ldif do esquema sudo.

sudo su -

Execute abaixo para adicionar linhas ao arquivo:

cat << 'EOL' > /etc/openldap/schema/sudo.ldif
dn: cn=sudo,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: sudo
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.1 NAME 'sudoUser' DESC 'User(s) who may  run sudo' EQUALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.2 NAME 'sudoHost' DESC 'Host(s) who may run sudo' EQUALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.3 NAME 'sudoCommand' DESC 'Command(s) to be executed by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.4 NAME 'sudoRunAs' DESC 'User(s) impersonated by sudo (deprecated)' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.5 NAME 'sudoOption' DESC 'Options(s) followed by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.6 NAME 'sudoRunAsUser' DESC 'User(s) impersonated by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.7 NAME 'sudoRunAsGroup' DESC 'Group(s) impersonated by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcObjectClasses: ( 1.3.6.1.4.1.15953.9.2.1 NAME 'sudoRole' SUP top STRUCTURAL DESC 'Sudoer Entries' MUST ( cn ) MAY ( sudoUser $ sudoHost $ sudoCommand $ sudoRunAs $ sudoRunAsUser $ sudoRunAsGroup $ sudoOption $ description ) )
EOL

Configurar banco de dados SLAPD

Atualize o conteúdo do /etc/openldap/slapd.ldif

sudo mv /etc/openldap/slapd.ldif /etc/openldap/slapd.ldif.bak
sudo vi /etc/openldap/slapd.ldif

Cole os dados abaixo:

dn: cn=config
objectClass: olcGlobal
cn: config
olcArgsFile: /var/lib/openldap/slapd.args
olcPidFile: /var/lib/openldap/slapd.pid

dn: cn=schema,cn=config
objectClass: olcSchemaConfig
cn: schema

dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulepath: /usr/libexec/openldap
olcModuleload: back_mdb.la

# Include more schemas in addition to default core
include: file:///etc/openldap/schema/core.ldif
include: file:///etc/openldap/schema/cosine.ldif
include: file:///etc/openldap/schema/nis.ldif
include: file:///etc/openldap/schema/inetorgperson.ldif
include: file:///etc/openldap/schema/sudo.ldif

dn: olcDatabase=frontend,cn=config
objectClass: olcDatabaseConfig
objectClass: olcFrontendConfig
olcDatabase: frontend
olcAccess: to dn.base="cn=Subschema" by * read
olcAccess: to * 
  by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage 
  by * none

dn: olcDatabase=config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: config
olcRootDN: cn=config
olcAccess: to * 
  by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage 
  by * none

Execute um teste para verificar a configuração

$ sudo slapadd -n 0 -F /etc/openldap/slapd.d -l /etc/openldap/slapd.ldif -u
Closing DB...

Execute o comando para escrever as alterações

sudo slapadd -n 0 -F /etc/openldap/slapd.d -l /etc/openldap/slapd.ldif

O comando acima cria configurações de banco de dados slapd e as coloca em /etc/openldap/slapd.d.

$ ls /etc/openldap/slapd.d
'cn=config'  'cn=config.ldif'

Defina a propriedade correta para o diretório slapd

sudo chown -R ldap:ldap /etc/openldap/slapd.d

Criar serviço OpenLDAP

Crie um serviço systemd

$ sudo vim /etc/systemd/system/slapd.service
[Unit]
Description=OpenLDAP Server Daemon
After=syslog.target network-online.target
Documentation=man:slapd
Documentation=man:slapd-mdb

[Service]
Type=forking
PIDFile=/var/lib/openldap/slapd.pid
Environment="SLAPD_URLS=ldap:/// ldapi:/// ldaps:///"
Environment="SLAPD_OPTIONS=-F /etc/openldap/slapd.d"
ExecStart=/usr/libexec/slapd -u ldap -g ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS

[Install]
WantedBy=multi-user.target

Reinicie o daemon

sudo systemctl daemon-reload

Iniciar serviço slapd

sudo systemctl enable --now slapd

Verifique o status

$ systemctl status slapd
 slapd.service - OpenLDAP Server Daemon
   Loaded: loaded (/etc/systemd/system/slapd.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2022-09-23 17:16:05 EAT; 5s ago
     Docs: man:slapd
           man:slapd-mdb
  Process: 116476 ExecStart=/usr/libexec/slapd -u ldap -g ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 116477 (slapd)
    Tasks: 2 (limit: 49442)
   Memory: 3.1M
   CGroup: /system.slice/slapd.service
           └─116477 /usr/libexec/slapd -u ldap -g ldap -h ldap:/// ldapi:/// ldaps:/// -F /etc/openldap/slapd.d

Sep 23 17:16:05 rocky8.mylab.io systemd[1]: Starting OpenLDAP Server Daemon...
Sep 23 17:16:05 rocky8.mylab.io slapd[116476]: @(#) $OpenLDAP: slapd 2.6.3 (Sep 23 2022 17:10:45) $
                                                       [email :/opt/openldap-2.6.3/servers/slapd
Sep 23 17:16:05 rocky8.mylab.io slapd[116477]: slapd starting
Sep 23 17:16:05 rocky8.mylab.io systemd[1]: Started OpenLDAP Server Daemon.

Configurar o DN raiz padrão do OpenLDAP

Crie o banco de dados MDB com o DN raiz e as ACLs.

Gerar senha de root:

$ sudo slappasswd
New password:
Re-enter new password:
{SSHA}MnsvmiMXvuXOHjDJi/rrqYra/1qo+hHE

Copie a senha hash gerada para um editor de texto. Isso será necessário no arquivo rootdn.ldif na entrada olcRootPW.

vim rootdn.ldif

Adicione o conteúdo abaixo substituindo dc=ldapmaster,dc=computingforgeeks,dc=com pelas informações do seu domínio. e olcRootPW com valor de senha gerado.

dn: olcDatabase=mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: mdb
olcDbMaxSize: 42949672960
olcDbDirectory: /var/lib/openldap
olcSuffix: dc=ldapmaster,dc=computingforgeeks,dc=com
olcRootDN: cn=admin,dc=ldapmaster,dc=computingforgeeks,dc=com
olcRootPW: {SSHA}MnsvmiMXvuXOHjDJi/rrqYra/1qo+hHE
olcDbIndex: uid pres,eq
olcDbIndex: cn,sn pres,eq,approx,sub
olcDbIndex: mail pres,eq,sub
olcDbIndex: objectClass pres,eq
olcDbIndex: loginShell pres,eq
olcDbIndex: sudoUser,sudoHost pres,eq
olcAccess: to attrs=userPassword,shadowLastChange,shadowExpire
  by self write
  by anonymous auth
  by dn.subtree="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage 
  by dn.subtree="ou=system,dc=ldapmaster,dc=computingforgeeks,dc=com" read
  by * none
olcAccess: to dn.subtree="ou=system,dc=ldapmaster,dc=computingforgeeks,dc=com" by dn.subtree="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
  by * none
olcAccess: to dn.subtree="dc=ldapmaster,dc=computingforgeeks,dc=com" by dn.subtree="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
  by users read 
  by * none

Atualizar o banco de dados slapd

$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f rootdn.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "olcDatabase=mdb,cn=config"

7. Defina a estrutura da sua organização

Crie o arquivo basedn.ldif para definir a estrutura da sua organização.

vim basedn.ldif

Com informações semelhantes às abaixo – atualize para se adequar ao seu domínio.

dn: dc=ldapmaster,dc=computingforgeeks,dc=com
objectClass: dcObject
objectClass: organization
objectClass: top
o: computingforgeeks
dc: ldapmaster

dn: ou=groups,dc=ldapmaster,dc=computingforgeeks,dc=com
objectClass: organizationalUnit
objectClass: top
ou: groups

dn: ou=people,dc=ldapmaster,dc=computingforgeeks,dc=com
objectClass: organizationalUnit
objectClass: top
ou: people

Atualizar o banco de dados:

$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f basedn.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "dc=ldapmaster,dc=computingforgeeks,dc=com"

adding new entry "ou=groups,dc=ldapmaster,dc=computingforgeeks,dc=com"

adding new entry "ou=people,dc=ldapmaster,dc=computingforgeeks,dc=com"

8. Configure OpenLDAP SSL/TLS (opcional)

Você pode proteger a comunicação cliente-servidor entre OpenLDAP e os sistemas clientes habilitando TLS/SSL.

Você pode usar um certificado autoassinado ou Let’s Encrypt para isso. Usaremos um certificado autoassinado neste guia.

sudo openssl req -x509 -nodes -days 365 \
  -newkey rsa:2048 \
  -keyout /etc/pki/tls/ldapserver.key \
  -out /etc/pki/tls/ldapserver.crt

Defina a propriedade correta.

sudo chown ldap:ldap /etc/pki/tls/{ldapserver.crt,ldapserver.key}

Crie o arquivo de configuração SSL:

sudo vi add-tls.ldif

Com informações abaixo:

dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/pki/tls/ldapserver.crt
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/pki/tls/ldapserver.key
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/pki/tls/ldapserver.crt

Atualizar banco de dados slapd

sudo ldapadd -Y EXTERNAL -H ldapi:/// -f add-tls.ldif

Atualize a localização da CA para OpenLDAP.

$ sudo vim /etc/openldap/ldap.conf
...
#TLS_CACERT     /etc/pki/tls/cert.pem
TLS_CACERT     /etc/pki/tls/ldapserver.crt

9. Crie usuários OpenLDAP

Defina seus usuários no arquivo users.ldif da seguinte forma:

vim users.ldif

Aqui estão os dados de amostra:

dn: uid=user1,ou=people,dc=ldapmaster,dc=computingforgeeks,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: user1
cn: Test
sn: User1
loginShell: /bin/bash
uidNumber: 10000
gidNumber: 10000
homeDirectory: /home/user1
shadowMax: 60
shadowMin: 1
shadowWarning: 7
shadowInactive: 7
shadowLastChange: 0

dn: cn=user1,ou=groups,dc=ldapmaster,dc=computingforgeeks,dc=com
objectClass: posixGroup
cn: user1
gidNumber: 10000
memberUid: user1

Atualize o banco de dados LDAP para adicionar o novo usuário

$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f users.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "uid=user1,ou=people,dc=ldapmaster,dc=computingforgeeks,dc=com"

adding new entry "cn=user1,ou=groups,dc=ldapmaster,dc=computingforgeeks,dc=com"

Defina a senha do usuário acima com o comando abaixo:

sudo ldappasswd -H ldapi:/// -Y EXTERNAL -S "uid=user1,ou=people,dc=ldapmaster,dc=computingforgeeks,dc=com"

Exemplo de saída:

New password:
Re-enter new password:
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0

Criar usuário de ligação LDAP

Crie o DN de ligação do OpenLDAP e o usuário de ligação. Este é um usuário que será usado para executar aberturas LDAP, como resolver IDs de usuário e IDs de grupo.

Crie a senha do BindDN.

$ sudo slappasswd
New password: 
Re-enter new password: 
{SSHA}YPkUdvnqpYcHM5mMKH6YWMb0AY36OJCd

Obtenha a senha com hash e salve-a em algum lugar.

Crie o arquivo bindDNuser.ldif e adicione o conteúdo abaixo, lembre-se de substituir a senha com hash e as informações do domínio pelos seus dados.

vim bindDNuser.ldif

Aqui estão minhas configurações:

dn: ou=system,dc=ldapmaster,dc=computingforgeeks,dc=com
objectClass: organizationalUnit
objectClass: top
ou: system

dn: cn=readonly,ou=system,dc=ldapmaster,dc=computingforgeeks,dc=com
objectClass: organizationalRole
objectClass: simpleSecurityObject
cn: readonly
userPassword: {SSHA}YPkUdvnqpYcHM5mMKH6YWMb0AY36OJCd
description: Bind DN user for LDAP Operations

Atualizar banco de dados ldap:

$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f bindDNuser.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "ou=system,dc=ldapmaster,dc=computingforgeeks,dc=com"

adding new entry "cn=readonly,ou=system,dc=ldapmaster,dc=computingforgeeks,dc=com"

10. Permitir OpenLDAP através do Firewall

Permita o OpenLDAP através do firewall para permitir conexões.

sudo firewall-cmd --add-service={ldap,ldaps} --permanent
sudo firewall-cmd --reload

Neste ponto, o OpenLDAP está configurado e pronto para uso. Você precisa configurar clientes OpenLDAP em seus sistemas para poder se conectar ao servidor OpenLDAP.

Guias de replicação OpenLDAP:

  • Configure a replicação OpenLDAP Multi-Master no CentOS 8
  • configurar a replicação OpenLDAP provedor-consumidor

Siga o guia abaixo para configurar clientes OpenLDAP:

  • Configure o cliente LDAP no Ubuntu

Artigos relacionados: