r3 - 06 Jul 2017 - 20:50 - Main.italovalcy | r2 - 14 Jul 2016 - 12:03 - 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: |
||||
|
|
||||
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 ( |
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 ( |
||||
Antes de iniciar a instalação, vamos criar a configuração |
Antes de iniciar a instalação, vamos criar a configuração |
||||
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: |
||||
|
|
||||
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 |
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 ( |
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 ( |
||||
# 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 |
# 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: |
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 |
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 |
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 |
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 |
||||
# 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 |
# 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: |
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 < |
cat > leitor-xpto.ldif < |
||||
A senha pode ser gerada com o aplicativo slappasswd. |
A senha pode ser gerada com o aplicativo slappasswd. |
||||
Agora é preciso inserir essa nova conta: |
Agora é preciso inserir essa nova conta: |
||||
ldapadd -x -h localhost -D cn=gerente-ldap,dc=foobar,dc=br -W -f leitor-xpto.ldif |
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. |
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. Além disso, é importante também importar o schema schac.schema (SCHema for ACademia), que é o schema utilizado para a Rede de Inter-Federações. |
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 |
||||
Para baixar os schemas do SCHAC: |
|||||
wget https://wiki.refeds.org/download/attachments/1606048/schac-20150413-1.5.0.schema.txt -O /etc/ldap/schema/schac.schema --no-check-certificate |
|||||
Em seguida, devemos editar o arquivo |
Em seguida, devemos editar o arquivo |
||||
... include /etc/ldap/schema/misc.schema include /etc/ldap/schema/eduperson.schema include /etc/ldap/schema/breduperson.schema include /etc/ldap/schema/schac.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 |
Também é necessário tirar o limite das respostas através de consultas LDAP do servidor slapd, para isto basta editar o arquivo |
||||
# 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 ( |
É 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 ( |
||||
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 |
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 |
||||
# 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 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: |
||||
|
|
||||
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: |
||||
|
|
||||
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 |
Agora devemos configurar no LDAP para utilizar os certificados SSL criados acima. Para isso edite o arquivo |
||||
################ # 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 |
Alteraremos também o arquivo |
||||
-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 |
Alterar o arquivo |
||||
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 |
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: |
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: |
||||
O primeiro passo é editar a configuração do servidor LDAP ( |
O primeiro passo é editar a configuração do servidor LDAP ( |
||||
modulepath /usr/lib/ldap moduleload refint moduleload memberof |
modulepath /usr/lib/ldap moduleload refint moduleload memberof |
||||
O módulo |
O módulo |
||||
Em seguida, devemos editar novamente a configuração do SLAPD ( |
Em seguida, devemos editar novamente a configuração do SLAPD ( |
||||
################ ## 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 |
################ ## 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 |
Vamos criar índices para os atributos do overlay memberof. Para isso devemos editar o arquivo |
||||
# Indexing options for database #1 ... index member eq index memberOf eq |
# Indexing options for database #1 ... index member eq index memberOf eq |
||||
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, é preciso recriar os índices e reiniciar o daemon: |
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 |
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: |
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 |
# 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: |
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)' |
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 ( |
O primeiro passo é editar a configuração do servidor LDAP ( |
||||
modulepath /usr/lib/ldap moduleload lastbind |
modulepath /usr/lib/ldap moduleload lastbind |
||||
Em seguida, devemos editar novamente a configuração do SLAPD ( |
Em seguida, devemos editar novamente a configuração do SLAPD ( |
||||
################################################### ## 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 |
||||
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 ( |
Em seguida é necessário efetuar algumas configurações dos parâmetros do daemon ( |
||||
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 |
Deve-se, ainda, criar arquivo de configuração do SASLAUTHD em |
||||
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 |
||||
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 ( |
O OpenLDAP faz log de transação quanto às modificações na base. Para isso, crie a tarefa no CRON ( |
||||
# 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 |
||||
r3 - 06 Jul 2017 - 20:50 - Main.italovalcy | r2 - 14 Jul 2016 - 12:03 - Main.italovalcy | ||||