Vamos começar este artigo delineando alguns conceitos básicos do LDAP (o que é, onde é usado e porquê) e mostrar como configurar um servidor LDAP e configurar um cliente para autenticar-se contra ele usando sistemas Red Hat Enterprise Linux 7.

Como veremos, existem vários outros cenários de aplicação possíveis, mas neste guia vamos focar exclusivamente na autenticação baseada em LDAP. Além disso, por favor, tenha em mente que devido à vastidão do assunto, vamos cobrir apenas o básico aqui, mas você pode consultar a documentação detalhada no resumo para mais detalhes.
Por essa mesma razão, você notará que decidi deixar de fora várias referências às páginas de manual das ferramentas LDAP por uma questão de brevidade, mas as explicações correspondentes estão a um clique de distância (man ldapadd, por exemplo).
Dito isso, vamos começar.
Nosso Ambiente de Teste
Nosso ambiente de teste consiste em duas máquinas RHEL 7:
Server: 192.168.0.18. FQDN: rhel7.mydomain.com Client: 192.168.0.20. FQDN: ldapclient.mydomain.com
Se desejar, você pode usar a máquina instalada na Parte 12: Automatizar instalações RHEL 7 usando Kickstart como cliente.
O que é o LDAP?
LDAP significa Protocolo de Acesso a Diretórios Leves e consiste em um conjunto de protocolos que permite a um cliente acessar, através de uma rede, informações armazenadas centralmente (como um diretório de shells de login, caminhos absolutos para diretórios pessoais e outras informações típicas de usuários do sistema, por exemplo) que devem ser acessíveis de diferentes lugares ou disponíveis para um grande número de usuários finais (outro exemplo seria um diretório de endereços residenciais e números de telefone de todos os funcionários de uma empresa).
Manter tais informações (e mais) centralmente significa que elas podem ser mais facilmente mantidas e acessadas por todos que receberam permissão para utilizá-las.
O diagrama a seguir oferece um diagrama simplificado do LDAP, e é descrito abaixo com mais detalhes:

Explicação do diagrama acima em detalhes.
- Uma entrada em um diretório LDAP representa uma única unidade de informação e é identificada de forma única pelo que é chamado de Nome Distinto.
- Um atributo é uma informação associada a uma entrada (por exemplo, endereços, números de telefone de contato disponíveis e endereços de e-mail).
- Cada atributo é atribuído a um ou mais valores que consistem em uma lista separada por espaços. Um valor que é único por entrada é chamado de Nome Distinto Relativo.
Dito isso, vamos prosseguir com as instalações do servidor e do cliente.
Instalando e Configurando um Servidor e Cliente LDAP
Em RHEL 7, o LDAP é implementado pelo OpenLDAP. Para instalar o servidor e o cliente, use os seguintes comandos, respectivamente:
# yum update && yum install openldap openldap-clients openldap-servers # yum update && yum install openldap openldap-clients nss-pam-ldapd
Uma vez que a instalação estiver completa, há algumas coisas que devemos observar. Os seguintes passos devem ser realizados apenas no servidor, a menos que explicitamente indicado:
1. Certifique-se de que o SELinux não atrapalhe, habilitando os seguintes booleans persistentemente, tanto no servidor quanto no cliente:
# setsebool -P allow_ypbind=0 authlogin_nsswitch_use_ldap=0
Onde allow_ypbind é necessário para autenticação baseada em LDAP, e authlogin_nsswitch_use_ldap pode ser necessário por algumas aplicações.
2. Habilite e inicie o serviço:
# systemctl enable slapd.service # systemctl start slapd.service
Tenha em mente que você também pode desabilitar, reiniciar ou parar o serviço com systemctl também:
# systemctl disable slapd.service # systemctl restart slapd.service # systemctl stop slapd.service
3. Como o serviço slapd é executado como o usuário ldap (o que você pode verificar com ps -e -o pid,uname,comm | grep slapd), esse usuário deve ser o proprietário do diretório /var/lib/ldap para que o servidor possa modificar entradas criadas por ferramentas administrativas que só podem ser executadas como root (mais sobre isso em um minuto).
Antes de alterar a propriedade deste diretório recursivamente, copie o arquivo de configuração do banco de dados de exemplo para o slapd nele:
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG # chown -R ldap:ldap /var/lib/ldap
4. Configure um usuário administrativo do OpenLDAP e atribua uma senha:
# slappasswd
como mostrado na próxima imagem:

e crie um arquivo LDIF (ldaprootpasswd.ldif) com o seguinte conteúdo:
dn: olcDatabase={0}config,cn=config changetype: modify add: olcRootPW olcRootPW: {SSHA}PASSWORD
onde:
- SENHA é a string hash obtida anteriormente.
- cn=config indica opções de configuração global.
- olcDatabase indica um nome de instância de banco de dados específico e geralmente pode ser encontrado dentro de /etc/openldap/slapd.d/cn=config.
Referindo-se ao fundo teórico fornecido anteriormente, o arquivo ldaprootpasswd.ldif
adicionará uma entrada ao diretório LDAP. Nessa entrada, cada linha representa um par de atributo: valor (onde dn, changetype, add e olcRootPW são os atributos e as strings à direita de cada dois pontos são seus valores correspondentes).
Você pode querer ter isso em mente enquanto avançamos, e observe que estamos usando os mesmos Nomes Comuns (cn=)
ao longo do restante deste artigo, onde cada etapa depende da anterior.
5. Agora, adicione a entrada LDAP correspondente especificando o URI referente ao servidor ldap, onde apenas os campos protocolo/host/porta são permitidos.
# ldapadd -H ldapi:/// -f ldaprootpasswd.ldif
A saída deve ser semelhante a:

e importe algumas definições básicas do LDAP do diretório /etc/openldap/schema
:
# for def in cosine.ldif nis.ldif inetorgperson.ldif; do ldapadd -H ldapi:/// -f /etc/openldap/schema/$def; done

6. Faça com que o LDAP use seu domínio em seu banco de dados.
Crie outro arquivo LDIF, que chamaremos de ldapdomain.ldif
, com o seguinte conteúdo, substituindo seu domínio (no Componente de Domínio dc=) e senha conforme apropriado:
dn: olcDatabase={1}monitor,cn=config changetype: modify replace: olcAccess olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=Manager,dc=mydomain,dc=com" read by * none dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcSuffix olcSuffix: dc=mydomain,dc=com dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcRootDN olcRootDN: cn=Manager,dc=mydomain,dc=com dn: olcDatabase={2}hdb,cn=config changetype: modify add: olcRootPW olcRootPW: {SSHA}PASSWORD dn: olcDatabase={2}hdb,cn=config changetype: modify add: olcAccess olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=Manager,dc=mydomain,dc=com" write by anonymous auth by self write by * none olcAccess: {1}to dn.base="" by * read olcAccess: {2}to * by dn="cn=Manager,dc=mydomain,dc=com" write by * read
# ldapmodify -H ldapi:/// -f ldapdomain.ldif

7. Agora é hora de adicionar algumas entradas ao nosso diretório LDAP. Atributos e valores são separados por dois pontos (:)
no arquivo a seguir, que chamaremos de baseldapdomain.ldif
:
dn: dc=mydomain,dc=com objectClass: top objectClass: dcObject objectclass: organization o: mydomain com dc: mydomain dn: cn=Manager,dc=mydomain,dc=com objectClass: organizationalRole cn: Manager description: Directory Manager dn: ou=People,dc=mydomain,dc=com objectClass: organizationalUnit ou: People dn: ou=Group,dc=mydomain,dc=com objectClass: organizationalUnit ou: Group
Adicione as entradas ao diretório LDAP:
# ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f baseldapdomain.ldif

8. Crie um usuário LDAP chamado ldapuser (adduser ldapuser), em seguida, crie as definições para um grupo LDAP em ldapgroup.ldif
.
# adduser ldapuser # vi ldapgroup.ldif
Adicione o seguinte conteúdo.
dn: cn=Manager,ou=Group,dc=mydomain,dc=com objectClass: top objectClass: posixGroup gidNumber: 1004
onde gidNumber é o GID em /etc/group para ldapuser) e carregue-o:
# ldapadd -x -W -D "cn=Manager,dc=mydomain,dc=com" -f ldapgroup.ldif
9. Adicione um arquivo LDIF com as definições para o usuário ldapuser (ldapuser.ldif
):
dn: uid=ldapuser,ou=People,dc=mydomain,dc=com objectClass: top objectClass: account objectClass: posixAccount objectClass: shadowAccount cn: ldapuser uid: ldapuser uidNumber: 1004 gidNumber: 1004 homeDirectory: /home/ldapuser userPassword: {SSHA}fiN0YqzbDuDI0Fpqq9UudWmjZQY28S3M loginShell: /bin/bash gecos: ldapuser shadowLastChange: 0 shadowMax: 0 shadowWarning: 0
e carregue-o:
# ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f ldapuser.ldif

Da mesma forma, você pode excluir a entrada do usuário que acabou de criar:
# ldapdelete -x -W -D cn=Manager,dc=mydomain,dc=com "uid=ldapuser,ou=People,dc=mydomain,dc=com"
10. Permita a comunicação através do firewall:
# firewall-cmd --add-service=ldap
11. Por último, mas não menos importante, habilite o cliente para autenticar usando o LDAP.
Para nos ajudar neste último passo, usaremos o utilitário authconfig (uma interface para configurar recursos de autenticação do sistema).
Usando o seguinte comando, o diretório home para o usuário solicitado é criado se não existir após a autenticação contra o servidor LDAP ter sucesso:
# authconfig --enableldap --enableldapauth --ldapserver=rhel7.mydomain.com --ldapbasedn="dc=mydomain,dc=com" --enablemkhomedir --update

Resumo
Neste artigo, explicamos como configurar a autenticação básica contra um servidor LDAP. Para configurar ainda mais o setup descrito no guia atual, consulte o Capítulo 13 – Configuração LDAP no guia do administrador de sistema do RHEL 7, prestando especial atenção às configurações de segurança usando TLS.
Sinta-se à vontade para deixar quaisquer perguntas que possa ter usando o formulário de comentários abaixo.
Source:
https://www.tecmint.com/setup-ldap-server-and-configure-client-authentication/