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