Série RHCSA: Configurando Autenticação Baseada em LDAP no RHEL 7 – Parte 14

Vamos começar este artigo delineando alguns fundamentos do LDAP (o que é, onde é usado e por que) e mostrar como configurar um servidor LDAP e configurar um cliente para autenticar contra ele usando sistemas Red Hat Enterprise Linux 7.

RHCSA Series: Setup LDAP Server and Client Authentication – Part 14

Como veremos, existem vários outros cenários de aplicativos possíveis, mas neste guia nos concentraremos inteiramente na autenticação baseada em LDAP. Além disso, tenha em mente que devido à vastidão do assunto, abordaremos apenas seus fundamentos aqui, mas você pode consultar a documentação delineada na sinopse para obter detalhes mais aprofundados.

Por essa mesma razão, você notará que decidi deixar de fora várias referências a páginas de manual de ferramentas LDAP por brevidade, mas as explicações correspondentes estão à distância de um toque de dedo (man ldapadd, por exemplo).

Com isso dito, vamos começar.

Nosso Ambiente de Teste

Nosso ambiente de teste consiste em duas caixas 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 em Parte 12: Automatize instalações do RHEL 7 usando Kickstart como cliente.

O que é LDAP?

O LDAP significa Protocolo de Acesso a Diretório Leve 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 estar 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 (e mais) informações centralmente significa que elas podem ser mais facilmente mantidas e acessadas por todos que receberam permissões para utilizá-las.

O diagrama a seguir oferece um diagrama simplificado do LDAP, e é descrito abaixo com mais detalhes:

LDAP Diagram

Explicação do diagrama acima em detalhes.

  1. Uma entrada em um diretório LDAP representa uma unidade única de informação e é identificada de forma única pelo que é chamado de Nome Distinto.
  2. 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).
  3. 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

No 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

Assim que a instalação estiver concluída, algumas coisas devem ser observadas. As seguintes etapas devem ser realizadas apenas no servidor, a menos que seja explicitamente indicado:

1. Verifique se o SELinux não está atrapalhando, habilitando os seguintes booleans de forma persistente, 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

Lembre-se de 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 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 de forma recursiva, copie o arquivo de configuração do banco de dados de exemplo para 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:

Set LDAP Admin Password

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:

  1. SENHA é a string hash obtida anteriormente.
  2. cn=config indica opções de configuração global.
  3. 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:

LDAP Configuration

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
LDAP Definitions

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

Em seguida, carregue-o da seguinte forma:

# ldapmodify -H ldapi:/// -f ldapdomain.ldif
LDAP Domain Configuration

7. Agora é hora de adicionar algumas entradas ao nosso diretório LDAP. Atributos e valores são separados por dois pontos (:) no seguinte arquivo, 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
Add LDAP Domain Attributes and Values

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 conteúdo a seguir:

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
LDAP User Configuration

Da mesma forma, você pode excluir a entrada de 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, permita que o cliente se autentique usando o LDAP.

Para nos ajudar nesta etapa final, vamos usar o utilitário authconfig (uma interface para configurar recursos de autenticação do sistema).

Usando o seguinte comando, o diretório inicial do usuário solicitado é criado se não existir após a autenticação contra o servidor LDAP ser bem-sucedida:

# authconfig --enableldap --enableldapauth --ldapserver=rhel7.mydomain.com --ldapbasedn="dc=mydomain,dc=com" --enablemkhomedir --update
LDAP Client Configuration

Resumo

Neste artigo, explicamos como configurar a autenticação básica em um servidor LDAP. Para configurar ainda mais o setup descrito neste guia, consulte o Capítulo 13 – Configuração LDAP no Guia do Administrador de Sistema RHEL 7, prestando atenção especial à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/