Difference: HowtoOpenLDAP (r2 vs. r1)

r2 - 14 Jul 2016 - 12:03 - Main.italovalcy r1 - 14 Jul 2016 - 00:41 - Main.italovalcy

Howto OpenLDAP

Howto OpenLDAP

  

Objetivo

Objetivo

Esse documento mostrará dicas gerais para instalação e configuração de um servidor OpenLDAP. Para isso vamos suporte um ambiente de exemplo conforme abaixo:

Esse documento mostrará dicas gerais para instalação e configuração de um servidor OpenLDAP. Para isso vamos suporte um ambiente de exemplo conforme abaixo:

  • Domínio: foobar.br
  • Base: dc=foobar,dc=br
  • Hostname do servidor LDAP: ldap.foobar.org
  • Domínio: foobar.br
  • Base: dc=foobar,dc=br
  • Hostname do servidor LDAP: ldap.foobar.org

Descrição das etapas

Descrição das etapas

Instalação básica do servidor OpenLDAP

Instalação básica do servidor OpenLDAP

Antes de proceder com a instalação do servidor OpenLDAP cabe uma breve discussão sobre o modo on-line configuration e slapd.conf. Historicamente o servidor OpenLDAP era configurado através de um arquivo de configuração (/etc/ldap/slapd.conf) e qualquer alteração necessitava de uma reinicialização do serviço. Embora o processo de restart da base seja rápido, em bases grandes ou com muitas requisições de autenticação, a interrupção do serviço pode causar transtornos significativos. A partir da versão 2.3, o OpenLDAP passou a suportar sua configuração também no formato LDAP em uma DIT específica, chamada on-line configuration (OLC), cujo DN é cn=config. Esse modo de configuração permite zero downtime para alterações nas configurações da base! Algumas distribuições passaram, então, a usar o modo OLC por padrão nas versões mais recentes. No entanto, a complexidade de manutenção da base torna-se um pouco maior com OLC e não existem ferramentas de gerenciamento consolidadas ainda para facilitar seu gerenciamento. Dessa forma, nesse documento vamos mostrar a utilização do modelo antigo, baseado no slapd.conf.

Antes de proceder com a instalação do servidor OpenLDAP cabe uma breve discussão sobre o modo on-line configuration e slapd.conf. Historicamente o servidor OpenLDAP era configurado através de um arquivo de configuração (/etc/ldap/slapd.conf) e qualquer alteração necessitava de uma reinicialização do serviço. Embora o processo de restart da base seja rápido, em bases grandes ou com muitas requisições de autenticação, a interrupção do serviço pode causar transtornos significativos. A partir da versão 2.3, o OpenLDAP passou a suportar sua configuração também no formato LDAP em uma DIT específica, chamada on-line configuration (OLC), cujo DN é cn=config. Esse modo de configuração permite zero downtime para alterações nas configurações da base! Algumas distribuições passaram, então, a usar o modo OLC por padrão nas versões mais recentes. No entanto, a complexidade de manutenção da base torna-se um pouco maior com OLC e não existem ferramentas de gerenciamento consolidadas ainda para facilitar seu gerenciamento. Dessa forma, nesse documento vamos mostrar a utilização do modelo antigo, baseado no slapd.conf.

Antes de iniciar a instalação, vamos criar a configuração slapd.conf manualmente:

Antes de iniciar a instalação, vamos criar a configuração slapd.conf manualmente:

  
 cp /usr/share/slapd/slapd.conf /etc/ldap/slapd.conf
sed -i "s/@BACKEND@/hdb/" /etc/ldap/slapd.conf
sed -i "s/@SUFFIX@/dc=foobar,dc=br/" /etc/ldap/slapd.conf
sed -ri "s/# rootdn *\"cn=admin/rootdn \"cn=gerente-ldap/" /etc/ldap/slapd.conf
sed -i '/@ADMIN@/d' /etc/ldap/slapd.conf
sed -i 's/dbconfig/# dbconfig/g' /etc/ldap/slapd.conf
 cp /usr/share/slapd/slapd.conf /etc/ldap/slapd.conf
sed -i "s/@BACKEND@/hdb/" /etc/ldap/slapd.conf
sed -i "s/@SUFFIX@/dc=foobar,dc=br/" /etc/ldap/slapd.conf
sed -ri "s/# rootdn *\"cn=admin/rootdn \"cn=gerente-ldap/" /etc/ldap/slapd.conf
sed -i '/@ADMIN@/d' /etc/ldap/slapd.conf
sed -i 's/dbconfig/# dbconfig/g' /etc/ldap/slapd.conf

Na configuração acima, atente-se para:

Na configuração acima, atente-se para:

  • Altere o domínio e a base para a sua realidade
  • Tipo do backend: HDB (HDB é bem parecida com a Berkeley DB, com exceção que implementa a base de forma hierárquica e suporta fazer renomeação na hierarquia)
  • Como boa prática de segurança, alteramos a conta do administrador da base para um padrão interno, em particular cn=gerente-ldap.
  • Altere o domínio e a base para a sua realidade
  • Tipo do backend: HDB (HDB é bem parecida com a Berkeley DB, com exceção que implementa a base de forma hierárquica e suporta fazer renomeação na hierarquia)
  • Como boa prática de segurança, alteramos a conta do administrador da base para um padrão interno, em particular cn=gerente-ldap.

Agora deve-se informar ao DPKG para ignorar as perguntas de configuração no DEBCONF:

Agora deve-se informar ao DPKG para ignorar as perguntas de configuração no DEBCONF:

  
debconf-set-selections <<-EOF
slapd slapd/no_configuration boolean true
EOF
debconf-set-selections <<-EOF
slapd slapd/no_configuration boolean true
EOF

O próximo passo é realizar a instalação do servidor LDAP, com o seguinte comando:

O próximo passo é realizar a instalação do servidor LDAP, com o seguinte comando:

  
aptitude install slapd ldap-utils
aptitude install slapd ldap-utils

Após realizar a configuração inicial do LDAP, vamos modificar o DN do admin a fim de evitar tentativas de brute-force com esse usuário (nome padrão: cn=admin). Para isso execute o seguinte comando (informe a senha criada acima):

Após realizar a configuração inicial do LDAP, vamos modificar o DN do admin a fim de evitar tentativas de brute-force com esse usuário (nome padrão: cn=admin). Para isso execute o seguinte comando (informe a senha criada acima):

  
ldapmodrdn -x -h localhost -D cn=admin,dc=foobar,dc=br -W cn=admin,dc=foobar,dc=br cn=gerente-ldap
ldapmodrdn -x -h localhost -D cn=admin,dc=foobar,dc=br -W cn=admin,dc=foobar,dc=br cn=gerente-ldap

Os passos acima farão com que a configuração do LDAP seja realizada através do método Online Configuration (as configurações ficam também na base LDAP, no dn: cn=config). Vamos migrar para a configuração no modelo antigo, através do arquivo slapd.conf. Para isso, execute os seguintes comandos:

Os passos acima farão com que a configuração do LDAP seja realizada através do método Online Configuration (as configurações ficam também na base LDAP, no dn: cn=config). Vamos migrar para a configuração no modelo antigo, através do arquivo slapd.conf. Para isso, execute os seguintes comandos:

  
invoke-rc.d slapd stop
rm -rf /etc/ldap/slapd.d/
cp /usr/share/slapd/slapd.conf /etc/ldap/
sed -i "s/@BACKEND@/mdb/" /etc/ldap/slapd.conf
sed -i "s/@SUFFIX@/dc=foobar,dc=br/" /etc/ldap/slapd.conf
sed -ri "s/# rootdn *\"cn=admin/rootdn \"cn=gerente-ldap/" /etc/ldap/slapd.conf
sed -i '/@ADMIN@/d' /etc/ldap/slapd.conf
sed -i 's/dbconfig/# dbconfig/g' /etc/ldap/slapd.conf
invoke-rc.d slapd start
invoke-rc.d slapd stop
rm -rf /etc/ldap/slapd.d/
cp /usr/share/slapd/slapd.conf /etc/ldap/
sed -i "s/@BACKEND@/mdb/" /etc/ldap/slapd.conf
sed -i "s/@SUFFIX@/dc=foobar,dc=br/" /etc/ldap/slapd.conf
sed -ri "s/# rootdn *\"cn=admin/rootdn \"cn=gerente-ldap/" /etc/ldap/slapd.conf
sed -i '/@ADMIN@/d' /etc/ldap/slapd.conf
sed -i 's/dbconfig/# dbconfig/g' /etc/ldap/slapd.conf
invoke-rc.d slapd start
  

Design da base LDAP

  

A base LDAP é formada por vários OUs (Organization Units), cada um com os usuários (pessoas) de cada entidade envolvida nas atividades e serviços. A configuração de design proposta para a sua organização leva em consideração diferentes subárvores para usuários, grupos e aplicações. Para implementar essa estrutura, crie o arquivo LDIF abaixo (/root/design-ldap-foobar.ldif):

  
# people, foobar.br
dn: ou=people,dc=foobar,dc=br
objectClass: organizationalUnit
objectClass: top
ou: people

# groups, foobar.br
dn: ou=groups,dc=foobar,dc=br
objectClass: organizationalUnit
objectClass: top
ou: groups

# apps, foobar.br
dn: ou=apps,dc=foobar,dc=br
objectClass: organizationalUnit
objectClass: top
ou: apps
  

Em seguida, atualize a base LDAP para incluir essa nova estrutura:

  
ldapadd -x -h localhost -D cn=gerente-ldap,dc=foobar,dc=br -W -f base-ldap-foobar.ldif
  

Criação de aplicações de leitura da base

  

Como mecanismo de segurança, a base LDAP não permitirá leitura de login anonimo. Para isso, desativaremos esse tipo de consulta e criaremos usuários específicos para cada consulta. Devemos, portanto, alterar privilégios para evitar bind anonimo com leitura (apenas autenticado pode ler), alterando o seguinte trecho do arquivo /etc/ldap/slapd.conf:

  
# The admin dn has full write access, everyone else
# need to authenticate to read anything
access to *
        by users read
        by anonymous auth
        by * none
  

Em seguida, vamos criar um usuário de leitura de uma aplicação genérica XPTO, que será usado futuramente para autenticação de usuários ou buscas na base:

  
cat > leitor-xpto.ldif <
  

A senha pode ser gerada com o aplicativo slappasswd.

  

Agora é preciso inserir essa nova conta:

  
ldapadd -x -h localhost -D cn=gerente-ldap,dc=foobar,dc=br -W -f leitor-xpto.ldif

Habilitar schemas adicionais

Habilitar schemas adicionais

  

Abaixo vamos mostrar como adicionar esquemas LDAP adicionais à sua base. Os esquemas LDAP agregam novos atributos e classes de objetos, expandindo a capacidade de armazenamento da sua base. No exemplo a seguir vamos mostrar a inserção de atributos necessários pela CAFe/RNP - Comunidade Acadêmica Federada.

Para importar a base de dados é necessário antes adicionar os schemas misc.schema, eduPerson e brEduPerson, que serão utilizados para prover atributos da Federação CAFe.

Para importar a base de dados é necessário antes adicionar os schemas misc.schema, eduPerson e brEduPerson, que serão utilizados para prover atributos da Federação CAFe.

Para isso é necessário baixar os schemas do CAFe:

Para isso é necessário baixar os schemas do CAFe:

  
wget https://svn.rnp.br/repos/CAFe/schemas/openldap/eduperson.schema -O /etc/ldap/schema/eduperson.schema --no-check-certificate
wget https://svn.rnp.br/repos/CAFe/schemas/openldap/breduperson.0.0.6.schema -O /etc/ldap/schema/breduperson.schema --no-check-certificate
wget https://svn.rnp.br/repos/CAFe/schemas/openldap/eduperson.schema -O /etc/ldap/schema/eduperson.schema --no-check-certificate
wget https://svn.rnp.br/repos/CAFe/schemas/openldap/breduperson.0.0.6.schema -O /etc/ldap/schema/breduperson.schema --no-check-certificate

Em seguida, devemos editar o arquivo /etc/ldap/slapd.conf e acrescentar os seguintes schemas na configuração:

Em seguida, devemos editar o arquivo /etc/ldap/slapd.conf e acrescentar os seguintes schemas na configuração:

  
...
include         /etc/ldap/schema/misc.schema
include         /etc/ldap/schema/eduperson.schema
include         /etc/ldap/schema/breduperson.schema
...
...
include         /etc/ldap/schema/misc.schema
include         /etc/ldap/schema/eduperson.schema
include         /etc/ldap/schema/breduperson.schema
...

Em seguida faça um teste na configuração do slapd:

Em seguida faça um teste na configuração do slapd:

  
slapd -Tt
slapd -Tt

E caso o retorno seja config file testing succeeded, faça o restart do daemon:

E caso o retorno seja config file testing succeeded, faça o restart do daemon:

  
invoke-rc.d slapd restart
invoke-rc.d slapd restart

Limite de respostas

Limite de respostas

Também é necessário tirar o limite das respostas através de consultas LDAP do servidor slapd, para isto basta editar o arquivo /etc/ldap/slapd.conf conforme abaixo:

Também é necessário tirar o limite das respostas através de consultas LDAP do servidor slapd, para isto basta editar o arquivo /etc/ldap/slapd.conf conforme abaixo:

  
 # The maximum number of entries that is returned for a search operation
-sizelimit 500
+sizelimit unlimited
 # The maximum number of entries that is returned for a search operation
-sizelimit 500
+sizelimit unlimited

Logging

Logging

É importante habilitar o logging para auditoria das requisições de autenticação (bind), consultas, operações de modificação, etc. Para isso, edite o arquivo de configuração do OpenLDAP (slapd.conf) conforme abaixo:

É importante habilitar o logging para auditoria das requisições de autenticação (bind), consultas, operações de modificação, etc. Para isso, edite o arquivo de configuração do OpenLDAP (slapd.conf) conforme abaixo:

  
diff --git a/ldap/slapd.conf b/ldap/slapd.conf
index db3f82f..4e38c3f 100644
--- a/ldap/slapd.conf
+++ b/ldap/slapd.conf
@@ -30,7 +30,7 @@ pidfile         /var/run/slapd/slapd.pid
 argsfile        /var/run/slapd/slapd.args
 
 # Read slapd.conf(5) for possible values
-loglevel        1
+loglevel        256
 
 # Where the dynamically loaded modules are stored
 modulepath     /usr/lib/ldap
diff --git a/ldap/slapd.conf b/ldap/slapd.conf
index db3f82f..4e38c3f 100644
--- a/ldap/slapd.conf
+++ b/ldap/slapd.conf
@@ -30,7 +30,7 @@ pidfile         /var/run/slapd/slapd.pid
 argsfile        /var/run/slapd/slapd.args
 
 # Read slapd.conf(5) for possible values
-loglevel        1
+loglevel        256
 
 # Where the dynamically loaded modules are stored
 modulepath     /usr/lib/ldap

Índices

Índices

Para otimizar o desempenho das consultas no LDAP é importante criar índices que irão criar referencias em memória para os atributos mais acessados. Para isso devemos editar o arquivo /etc/ldap/slapd.conf conforme abaixo:

Para otimizar o desempenho das consultas no LDAP é importante criar índices que irão criar referencias em memória para os atributos mais acessados. Para isso devemos editar o arquivo /etc/ldap/slapd.conf conforme abaixo:

  
# Indexing options for database #1 index objectClass eq index cn eq index mail eq index dc eq index uid pres,sub,eq index brEduAffiliation pres index brEntranceDate pres index brExitDate pres 
# Indexing options for database #1 index objectClass eq index cn eq index mail eq index dc eq index uid pres,sub,eq index member eq index memberOf eq index brEduAffiliation pres index brEntranceDate pres index brExitDate pres 

Agora é preciso recriar os índices e reiniciar o daemon:

Agora é preciso recriar os índices e reiniciar o daemon:

  
invoke-rc.d slapd stop
slapindex
chown -R openldap:openldap /var/lib/ldap
invoke-rc.d slapd start
invoke-rc.d slapd stop
slapindex
chown -R openldap:openldap /var/lib/ldap
invoke-rc.d slapd start

Habilitar SSL/TLS

Habilitar SSL/TLS

Nesse ambiente vamos criar uma autoridade certificadora específica para emitir os certificados SSL/TLS do LDAP. Para isso vamos criar uma CA com o comando abaixo (utilize a senha conforme SUSSEG):

Nesse ambiente vamos criar uma autoridade certificadora específica para emitir os certificados SSL/TLS do LDAP. Para isso vamos criar uma CA com o comando abaixo (utilize a senha conforme SUSSEG):

  
mkdir /etc/ldap/ssl
cd /etc/ldap/ssl
openssl genrsa -des3 -out ldap-ca.key 2048
mkdir /etc/ldap/ssl
cd /etc/ldap/ssl
openssl genrsa -des3 -out ldap-ca.key 2048

Em seguida vamos criar um certificado para a nossa CA:

Em seguida vamos criar um certificado para a nossa CA:

  
openssl req -new -x509 -days 36500 -key ldap-ca.key -out ldap-ca.crt 
openssl req -new -x509 -days 36500 -key ldap-ca.key -out ldap-ca.crt 

Responda as seguintes perguntas:

Responda as seguintes perguntas:

  • Country Name: BR
  • State: Bahia
  • Locality: Salvador
  • Organization Name: FOOBAR
  • Organization Unit: SetorTI
  • Common Name: CA LDAP FOOBAR
  • Email Address:
  • Country Name: BR
  • State: Bahia
  • Locality: Salvador
  • Organization Name: FOOBAR
  • Organization Unit: SetorTI
  • Common Name: CA LDAP FOOBAR
  • Email Address:

Agora vamos criar o certificado do servidor LDAP, assinado pela CA criada acima. Primeiro vamos gerar uma requisição de certificado:

Agora vamos criar o certificado do servidor LDAP, assinado pela CA criada acima. Primeiro vamos gerar uma requisição de certificado:

  
openssl req -nodes -new -keyout ldap.key -out ldap.csr 
openssl req -nodes -new -keyout ldap.key -out ldap.csr 

Responda as seguintes perguntas:

Responda as seguintes perguntas:

  • Country Name: BR
  • State: Bahia
  • Locality: Salvador
  • Organization Name: FOOBAR
  • Organization Unit: STI
  • Common Name: ldap.foobar.br
  • Email Address:
  • A challenge password:
  • An optional company name:
  • Country Name: BR
  • State: Bahia
  • Locality: Salvador
  • Organization Name: FOOBAR
  • Organization Unit: STI
  • Common Name: ldap.foobar.br
  • Email Address:
  • A challenge password:
  • An optional company name:

Em seguida assinaremos a requisição de certificado com a chave da CA:

Em seguida assinaremos a requisição de certificado com a chave da CA:

  
openssl x509 -req -in ldap.csr -out ldap.crt -sha1 -CA ldap-ca.crt -CAkey ldap-ca.key -CAcreateserial -days 36500 
openssl x509 -req -in ldap.csr -out ldap.crt -sha1 -CA ldap-ca.crt -CAkey ldap-ca.key -CAcreateserial -days 36500 

Modificaremos a permissão dos arquivos:

Modificaremos a permissão dos arquivos:

  
chown openldap:openldap ldap.key
chmod 640 ldap.key
chown openldap:openldap ldap.key
chmod 640 ldap.key

Agora devemos configurar no LDAP para utilizar os certificados SSL criados acima. Para isso edite o arquivo /etc/ldap/slapd.conf e insira as seguintes informações (logo no começo antes dos includes):

Agora devemos configurar no LDAP para utilizar os certificados SSL criados acima. Para isso edite o arquivo /etc/ldap/slapd.conf e insira as seguintes informações (logo no começo antes dos includes):

  
################
# Global Directives:

# SSL/TLS certificates
TLSCACertificateFile  /etc/ldap/ssl/ldap-ca.crt
TLSCertificateFile    /etc/ldap/ssl/ldap.crt
TLSCertificateKeyFile /etc/ldap/ssl/ldap.key
################
# Global Directives:

# SSL/TLS certificates
TLSCACertificateFile  /etc/ldap/ssl/ldap-ca.crt
TLSCertificateFile    /etc/ldap/ssl/ldap.crt
TLSCertificateKeyFile /etc/ldap/ssl/ldap.key

Alteraremos também o arquivo /etc/default/slapd conforme abaixo:

Alteraremos também o arquivo /etc/default/slapd conforme abaixo:

  
-SLAPD_SERVICES="ldap:/// ldapi:///"
+SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///"
-SLAPD_SERVICES="ldap:/// ldapi:///"
+SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///"

Em seguida faça um teste na configuração do slapd:

Em seguida faça um teste na configuração do slapd:

  
slapd -Tt
slapd -Tt

E caso o retorno seja config file testing succeeded, faça o restart do daemon:

E caso o retorno seja config file testing succeeded, faça o restart do daemon:

  
invoke-rc.d slapd restart
invoke-rc.d slapd restart

Configurar o /etc/ldap/ldap.conf (parametros do cliente):

Configurar o /etc/ldap/ldap.conf (parametros do cliente):

  
BASE   dc=foobar,dc=br
URI   ldap://localhost
TLS_CACERT   /etc/ldap/ssl/ldap-ca.crt
BASE   dc=foobar,dc=br
URI   ldap://localhost
TLS_CACERT   /etc/ldap/ssl/ldap-ca.crt

Alterar o arquivo /etc/hosts e acrescentar um alias para ldap.foobar.br:

Alterar o arquivo /etc/hosts e acrescentar um alias para ldap.foobar.br:

  
diff --git a/hosts b/hosts
index 2dc3692..16c502b 100644
--- a/hosts
+++ b/hosts
@@ -1,5 +1,5 @@
 127.0.0.1      localhost
-127.0.1.1      debian.foobar.br debian
+127.0.1.1      debian.foobar.br debian  ldap.foobar.br
 
 # The following lines are desirable for IPv6 capable hosts
 ::1     localhost ip6-localhost ip6-loopback
diff --git a/hosts b/hosts
index 2dc3692..16c502b 100644
--- a/hosts
+++ b/hosts
@@ -1,5 +1,5 @@
 127.0.0.1      localhost
-127.0.1.1      debian.foobar.br debian
+127.0.1.1      debian.foobar.br debian  ldap.foobar.br
 
 # The following lines are desirable for IPv6 capable hosts
 ::1     localhost ip6-localhost ip6-loopback
  

Habilitar overlay de reverse group mapping

  

O overlay de grupo reverso é importante para que, ao inserir um usuário em um grupo, o OpenLDAP insira também um atributo no objeto do usuário informando o DN do grupo que ele pertence. Dessa forma, é possível implementar filtros por atributos que na verdade representam o grupo (exemplo de filtro: (memberOf=cn=helpdesk-admin,ou=groups,dc=foobar,dc=br)), pois algumas ferramentas não suportam fazer controle de acesso por grupo.

  

O primeiro passo é editar a configuração do servidor LDAP (/etc/ldap/slapd.conf) e garantir a existência das seguintes configurações, que devem ficar antes das definições dos backends:

  
modulepath      /usr/lib/ldap
moduleload      refint
moduleload      memberof
  

O módulo memberof irá prover a funcionalidade de mapeamento reverso de grupos, enquanto que o módulo refint será usado para garantir integridade dos atributos de mapeamento reverso quando da remoção de um grupo.

  

Em seguida, devemos editar novamente a configuração do SLAPD (/etc/ldap/slapd.conf) e incluir a configuração do módulo memberof na base que desejamos habilitá-lo. Nesse momento é importante salientar que a configuração deve vir após a definição do backend da base e antes da definição de outra base.

  
################
## overlay memberof
################
overlay memberof
# determina se alteracoes nos objetos (ex: novo DN) serao replicadas
# para os grupos aos quais ele eh "member of", garantindo a integridade
# referencial (refint)
memberof-refint true
# nome do objectClass que eh usado para disparar mapeamento reverso de grupos
memberof-group-oc groupOfNames
# atributo que armazena o DN dos membros de um grupo
memberof-member-ad member
# atributo que armazena o(s) DN(s) do(s) grupo(s) de um usuario
memberof-memberof-ad memberOf
  

Vamos criar índices para os atributos do overlay memberof. Para isso devemos editar o arquivo /etc/ldap/slapd.conf conforme abaixo:

  
# Indexing options for database #1
...
index   member                  eq
index   memberOf                eq
  

Em seguida faça um teste na configuração do slapd:

  
slapd -Tt
  

E caso o retorno seja config file testing succeeded, é preciso recriar os índices e reiniciar o daemon:

  
invoke-rc.d slapd stop
slapindex
chown -R openldap:openldap /var/lib/ldap
invoke-rc.d slapd start
  

Abaixo um exemplo de criação de grupo com mapeamento reverso pode ser visto no LDIF abaixo, onde o usuário fulano, beltrano e cicrano foram inseridos no grupo:

  
# owncloud-users, groups, foobar.br
dn: cn=owncloud-users,ou=groups,dc=foobar,dc=br
objectClass: groupOfNames
cn: owncloud-users
description: Grupo de usuarios com acesso ao owncloud
member: uid=fulano,ou=people,dc=foobar,dc=br
member: uid=beltrano,ou=people,dc=foobar,dc=br
member: uid=cicrano,ou=people,dc=foobar,dc=br
  

Nesse exemplo ficitício, poderíamos depois listar os membros do grupo owncloud-users, com uma busca como:

  
ldapsearch -x -h localhost -D cn=gerente-ldap,dc=foobar,dc=br -W -b dc=foobar,dc=br '(memberOf=cn=owncloud-users,ou=groups,dc=foobar,dc=br)'

Habilitar overlay de last bind

Habilitar overlay de last bind

O overlay de lastbind é interessante para armazenar o timestamp do último logon do usuário, facilitando assim a identificação de usuários inativos.

O overlay de lastbind é interessante para armazenar o timestamp do último logon do usuário, facilitando assim a identificação de usuários inativos.

O primeiro passo é editar a configuração do servidor LDAP (/etc/ldap/slapd.conf) e garantir a existência das seguintes configurações, que devem ficar antes das definições dos backends:

O primeiro passo é editar a configuração do servidor LDAP (/etc/ldap/slapd.conf) e garantir a existência das seguintes configurações, que devem ficar antes das definições dos backends:

  
modulepath      /usr/lib/ldap
moduleload      lastbind
modulepath      /usr/lib/ldap
moduleload      lastbind

Em seguida, devemos editar novamente a configuração do SLAPD (/etc/ldap/slapd.conf) e incluir a configuração do módulo lastbind na base que desejamos habilitá-lo. Nesse momento é importante salientar que a configuração deve vir após a definição do backend da base e antes da definição de outra base.

Em seguida, devemos editar novamente a configuração do SLAPD (/etc/ldap/slapd.conf) e incluir a configuração do módulo lastbind na base que desejamos habilitá-lo. Nesse momento é importante salientar que a configuração deve vir após a definição do backend da base e antes da definição de outra base.

  
###################################################
## overlay lastbind
###################################################
overlay lastbind
# tempo maximo (seg) que o authTimestamp pode ficar desatualizado por questoes 
# de desempenho. Caso seja omitido, sera atualizado a cada bind com sucesso
lastbind-precision 86400
###################################################
## overlay lastbind
###################################################
overlay lastbind
# tempo maximo (seg) que o authTimestamp pode ficar desatualizado por questoes 
# de desempenho. Caso seja omitido, sera atualizado a cada bind com sucesso
lastbind-precision 86400

Em seguida faça um teste na configuração do slapd:

Em seguida faça um teste na configuração do slapd:

  
slapd -Tt
slapd -Tt

E caso o retorno seja config file testing succeeded, faça o restart do daemon:

E caso o retorno seja config file testing succeeded, faça o restart do daemon:

  
invoke-rc.d slapd restart
invoke-rc.d slapd restart
  

Design da base LDAP

  

A base LDAP é formada por vários OUs (Organization Units), cada um com os usuários (pessoas) de cada entidade envolvida nas atividades e serviços. A configuração de design proposta para a sua organização leva em consideração diferentes subárvores para usuários, grupos e aplicações. Para implementar essa estrutura, crie o arquivo LDIF abaixo (/root/design-ldap-foobar.ldif):

  
# people, foobar.br
dn: ou=people,dc=foobar,dc=br
objectClass: organizationalUnit
objectClass: top
ou: people

# groups, foobar.br
dn: ou=groups,dc=foobar,dc=br
objectClass: organizationalUnit
objectClass: top
ou: groups

# apps, foobar.br
dn: ou=apps,dc=foobar,dc=br
objectClass: organizationalUnit
objectClass: top
ou: apps
  

Em seguida, atualize a base LDAP para incluir essa nova estrutura:

  
ldapadd -x -h localhost -D cn=gerente-ldap,dc=foobar,dc=br -W -f base-ldap-foobar.ldif
  

Criação de aplicações de leitura da base

  

Como mecanismo de segurança, a base LDAP não permitirá leitura de login anonimo. Para isso, desativaremos esse tipo de consulta e criaremos usuários específicos para cada consulta. Devemos, portanto, alterar privilégios para evitar bind anonimo com leitura (apenas autenticado pode ler), alterando o seguinte trecho do arquivo /etc/ldap/slapd.conf:

  
# The admin dn has full write access, everyone else
# need to authenticate to read anything
access to *
        by users read
        by anonymous auth
        by * none
  

Em seguida, vamos criar um usuário de leitura de uma aplicação genérica XPTO, que será usado futuramente para autenticação de usuários ou buscas na base:

  
cat > leitor-xpto.ldif <
  

A senha pode ser gerada com o aplicativo slappasswd.

  

Agora é preciso inserir essa nova conta:

  
ldapadd -x -h localhost -D cn=gerente-ldap,dc=foobar,dc=br -W -f leitor-xpto.ldif

Integração entre o OpenLDAP e AD

Integração entre o OpenLDAP e AD

Para permitir a integração das bases OpenLDAP e AD, será utilizado o framework de autenticação SASL. Essa integração é importante pois o AD não permite exportar as senhas dos usuários, dessa forma a base LDAP irá conter os atributos gerais do usuário (nome, login, e-mail etc) mas a senha continuará sendo armazenada no AD.

Para permitir a integração das bases OpenLDAP e AD, será utilizado o framework de autenticação SASL. Essa integração é importante pois o AD não permite exportar as senhas dos usuários, dessa forma a base LDAP irá conter os atributos gerais do usuário (nome, login, e-mail etc) mas a senha continuará sendo armazenada no AD.

O primeiro passo é instalar o daemon do SASL:

O primeiro passo é instalar o daemon do SASL:

  
aptitude install sasl2-bin 
aptitude install sasl2-bin 

Em seguida é necessário efetuar algumas configurações dos parâmetros do daemon (/etc/default/saslauthd):

Em seguida é necessário efetuar algumas configurações dos parâmetros do daemon (/etc/default/saslauthd):

  
diff --git a/default/saslauthd b/default/saslauthd
index a60eaa1..c40583d 100644
--- a/default/saslauthd
+++ b/default/saslauthd
@@ -4,7 +4,7 @@
 #
 
 # Should saslauthd run automatically on startup? (default: no)
-START=no
+START=yes
 
 # Description of this saslauthd instance. Recommended.
 # (suggestion: SASL Authentication Daemon)
@@ -29,7 +29,7 @@ NAME="saslauthd"
 # for more information.
 #
 # Example: MECHANISMS="pam"
-MECHANISMS="pam"
+MECHANISMS="ldap"
 
 # Additional options for this mechanism. (default: none)
 # See the saslauthd man page for information about mech-specific options.
@@ -59,4 +59,4 @@ THREADS=5
 # then your Postfix is running in a chroot.
 # If it has the line "smtp inet n - n - - smtpd" then your Postfix is NOT
 # running in a chroot.
-OPTIONS="-c -m /var/run/saslauthd"
+OPTIONS="-c -m /var/run/saslauthd -O /etc/saslauthd.conf"
diff --git a/default/saslauthd b/default/saslauthd
index a60eaa1..c40583d 100644
--- a/default/saslauthd
+++ b/default/saslauthd
@@ -4,7 +4,7 @@
 #
 
 # Should saslauthd run automatically on startup? (default: no)
-START=no
+START=yes
 
 # Description of this saslauthd instance. Recommended.
 # (suggestion: SASL Authentication Daemon)
@@ -29,7 +29,7 @@ NAME="saslauthd"
 # for more information.
 #
 # Example: MECHANISMS="pam"
-MECHANISMS="pam"
+MECHANISMS="ldap"
 
 # Additional options for this mechanism. (default: none)
 # See the saslauthd man page for information about mech-specific options.
@@ -59,4 +59,4 @@ THREADS=5
 # then your Postfix is running in a chroot.
 # If it has the line "smtp inet n - n - - smtpd" then your Postfix is NOT
 # running in a chroot.
-OPTIONS="-c -m /var/run/saslauthd"
+OPTIONS="-c -m /var/run/saslauthd -O /etc/saslauthd.conf"

Deve-se, ainda, criar arquivo de configuração do SASLAUTHD em /etc/saslauthd.conf (atente-se para configurar a senha do usuário cafernp-sync-rw conforme SUSSEG):

Deve-se, ainda, criar arquivo de configuração do SASLAUTHD em /etc/saslauthd.conf (atente-se para configurar a senha do usuário cafernp-sync-rw conforme SUSSEG):

  
ldap_servers: ldap://ldap-ad.intranet.foobar.br
ldap_search_base: dc=mydomain,dc=foobar,dc=br
ldap_timeout: 10
ldap_filter: sAMAccountName=%U
ldap_bind_dn: leitor-ad@mydomain.foobar.br
ldap_password: XXXXXX
ldap_deref: never
ldap_restart: yes
ldap_scope: sub
ldap_use_sasl: no
ldap_start_tls: no
ldap_version: 3
ldap_auth_method: bind
ldap_servers: ldap://ldap-ad.intranet.foobar.br
ldap_search_base: dc=mydomain,dc=foobar,dc=br
ldap_timeout: 10
ldap_filter: sAMAccountName=%U
ldap_bind_dn: leitor-ad@mydomain.foobar.br
ldap_password: XXXXXX
ldap_deref: never
ldap_restart: yes
ldap_scope: sub
ldap_use_sasl: no
ldap_start_tls: no
ldap_version: 3
ldap_auth_method: bind

É preciso agora fazer a ligação entre o daemon do OpenLDAP e do SASL. Para isso utilizaremos um socket do tipo MUTEX, configurado da seguinte maneira:

É preciso agora fazer a ligação entre o daemon do OpenLDAP e do SASL. Para isso utilizaremos um socket do tipo MUTEX, configurado da seguinte maneira:

  
cat > /usr/lib/sasl2/slapd.conf <
cat > /usr/lib/sasl2/slapd.conf <

É precisso adicionar o usuário do OpenLDAP ao grupo do SASL:

É precisso adicionar o usuário do OpenLDAP ao grupo do SASL:

  
adduser openldap sasl
adduser openldap sasl

Habilitar os parametros de autenticação SASL no OpenLDAP:

Habilitar os parametros de autenticação SASL no OpenLDAP:

  
diff --git a/ldap/slapd.conf b/ldap/slapd.conf
index c58060b..bb67edf 100644
--- a/ldap/slapd.conf
+++ b/ldap/slapd.conf
@@ -44,6 +44,10 @@ sizelimit unlimited
 # for indexing.
 tool-threads 1
 
+# SASL authentication parameters
+sasl-host       localhost
+sasl-secprops   none
+
 #######################################################################
 # Specific Backend Directives for hdb:
 # Backend specific directives apply to this backend until another
diff --git a/ldap/slapd.conf b/ldap/slapd.conf
index c58060b..bb67edf 100644
--- a/ldap/slapd.conf
+++ b/ldap/slapd.conf
@@ -44,6 +44,10 @@ sizelimit unlimited
 # for indexing.
 tool-threads 1
 
+# SASL authentication parameters
+sasl-host       localhost
+sasl-secprops   none
+
 #######################################################################
 # Specific Backend Directives for hdb:
 # Backend specific directives apply to this backend until another

Reiniciar o daemon do OpenLDAP e do SASL:

Reiniciar o daemon do OpenLDAP e do SASL:

  
invoke-rc.d slapd restart 
/etc/init.d/saslauthd restart
invoke-rc.d slapd restart 
/etc/init.d/saslauthd restart

TODO: documentar tunning de performance, tamanho do cache, etc.

TODO: documentar tunning de performance, tamanho do cache, etc.

Performance LDAP - OpenLDAP

Performance LDAP - OpenLDAP

http://www.openldap.org/faq/data/cache/1075.html

http://www.openldap.org/faq/data/cache/1075.html

http://www.openldap.org/faq/data/cache/1076.html

http://www.openldap.org/faq/data/cache/1076.html

Limpeza de logs de transação

Limpeza de logs de transação

O OpenLDAP faz log de transação quanto às modificações na base. Para isso, crie a tarefa no CRON (/etc/cron.d/openldap) para remover arquivos de logs antigos:

O OpenLDAP faz log de transação quanto às modificações na base. Para isso, crie a tarefa no CRON (/etc/cron.d/openldap) para remover arquivos de logs antigos:

  
# cron for cleanup openldap logs
# m h dom mon dow user command
0 0 * * * root find /var/lib/ldap -name 'log.*' -mtime +15 -delete
# cron for cleanup openldap logs
# m h dom mon dow user command
0 0 * * * root find /var/lib/ldap -name 'log.*' -mtime +15 -delete

Próximos passos

Próximos passos

* Interface de gerenciamento do LDAP (phpldapadmi, LAM) * Interface de alteração de senha e aplicação de política de senha

* Interface de gerenciamento do LDAP (phpldapadmi, LAM) * Interface de alteração de senha e aplicação de política de senha

Referências

Referências

-- ItaloValcy - 14 Jul 2016

-- ItaloValcy - 14 Jul 2016

r2 - 14 Jul 2016 - 12:03 - Main.italovalcy r1 - 14 Jul 2016 - 00:41 - Main.italovalcy

View topic | View difference interwoven | History: r4 < r3 < r2 < r1 | More topic actions
 
No permission to view System.WebBottomBarExample