Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
Howto OpenLDAP | ||||||||
Line: 135 to 124 | ||||||||
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: | ||||||||
Added: | ||||||||
> > | ||||||||
Changed: | ||||||||
< < | wget https://wiki.refeds.org/download/attachments/1606048/schac-20150413-1.5.0.schema.txt -O /etc/ldap/schema/schac.schema --no-check-certificate | |||||||
> > | 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 /etc/ldap/slapd.conf e acrescentar os seguintes schemas na configuração: | ||||||||
Deleted: | ||||||||
< < | ||||||||
... include /etc/ldap/schema/misc.schema | ||||||||
Line: 317 to 290 | ||||||||
modulepath /usr/lib/ldap moduleload refint | ||||||||
Changed: | ||||||||
< < | moduleload memberof | |||||||
> > | 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. | ||||||||
Line: 337 to 310 | ||||||||
# 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 | ||||||||
Changed: | ||||||||
< < | memberof-memberof-ad memberOf | |||||||
> > | 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: | ||||||||
Added: | ||||||||
> > | ||||||||
# Indexing options for database #1 ... | ||||||||
Line: 345 to 318 | ||||||||
# Indexing options for database #1 ... index member eq | ||||||||
Changed: | ||||||||
< < | index memberOf eq | |||||||
> > | index memberOf eq | |||||||
Em seguida faça um teste na configuração do slapd: | ||||||||
Added: | ||||||||
> > | ||||||||
Changed: | ||||||||
< < | slapd -Tt | |||||||
> > | slapd -Tt | |||||||
E caso o retorno seja config file testing succeeded, é preciso recriar os índices e reiniciar o daemon: | ||||||||
Added: | ||||||||
> > | ||||||||
invoke-rc.d slapd stop slapindex | ||||||||
Line: 358 to 331 | ||||||||
invoke-rc.d slapd stop slapindex chown -R openldap:openldap /var/lib/ldap | ||||||||
Changed: | ||||||||
< < | invoke-rc.d slapd start | |||||||
> > | 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: | ||||||||
Added: | ||||||||
> > | ||||||||
# owncloud-users, groups, foobar.br dn: cn=owncloud-users,ou=groups,dc=foobar,dc=br | ||||||||
Line: 370 to 343 | ||||||||
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 | ||||||||
Changed: | ||||||||
< < | member: uid=cicrano,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: | ||||||||
Added: | ||||||||
> > | ||||||||
Changed: | ||||||||
< < | 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 |
Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
Howto OpenLDAP | ||||||||
Line: 127 to 127 | ||||||||
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. | ||||||||
Changed: | ||||||||
< < | 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. 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 isso é necessário baixar os schemas do CAFe: | ||||||||
Deleted: | ||||||||
< < | ||||||||
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 | ||||||||
Line: 135 to 134 | ||||||||
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 | ||||||||
Added: | ||||||||
> > |
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 /etc/ldap/slapd.conf e acrescentar os seguintes schemas na configuração: | ||||||||
Line: 142 to 146 | ||||||||
include /etc/ldap/schema/misc.schema include /etc/ldap/schema/eduperson.schema include /etc/ldap/schema/breduperson.schema | ||||||||
Added: | ||||||||
> > | include /etc/ldap/schema/schac.schema | |||||||
... Em seguida faça um teste na configuração do slapd: |
Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
Howto OpenLDAP | ||||||||
Line: 24 to 25 | ||||||||
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 | ||||||||
Changed: | ||||||||
< < | sed -i 's/dbconfig/# dbconfig/g' /etc/ldap/slapd.conf | |||||||
> > | sed -i 's/dbconfig/# dbconfig/g' /etc/ldap/slapd.conf | |||||||
Na configuração acima, atente-se para:
| ||||||||
Line: 36 to 37 | ||||||||
debconf-set-selections <<-EOF slapd slapd/no_configuration boolean true | ||||||||
Changed: | ||||||||
< < | EOF | |||||||
> > | EOF | |||||||
O próximo passo é realizar a instalação do servidor LDAP, com o seguinte comando: | ||||||||
Added: | ||||||||
> > | ||||||||
Changed: | ||||||||
< < | 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): | ||||||||
Added: | ||||||||
> > | ||||||||
Changed: | ||||||||
< < | 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: | ||||||||
Added: | ||||||||
> > | ||||||||
invoke-rc.d slapd stop rm -rf /etc/ldap/slapd.d/ | ||||||||
Line: 59 to 60 | ||||||||
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 | ||||||||
Changed: | ||||||||
< < | invoke-rc.d slapd start | |||||||
> > |
invoke-rc.d slapd start
Design da base LDAPA 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: appsEm 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 baseComo 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 * noneEm 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 <<EOF dn: cn=leitor-xpto,ou=apps,dc=foobar,dc=br objectClass: organizationalRole objectClass: simpleSecurityObject cn: leitor-xpto description: Leitor XPTO userPassword: {SSHA}xxxx EOFA 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 | ||||||||
Added: | ||||||||
> > | 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 isso é necessário baixar os schemas do CAFe: | ||||||||
Line: 67 to 130 | ||||||||
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: | ||||||||
Added: | ||||||||
> > | ||||||||
wget https://svn.rnp.br/repos/CAFe/schemas/openldap/eduperson.schema -O /etc/ldap/schema/eduperson.schema --no-check-certificate | ||||||||
Changed: | ||||||||
< < | 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/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: | ||||||||
Added: | ||||||||
> > | ||||||||
... include /etc/ldap/schema/misc.schema | ||||||||
Line: 78 to 142 | ||||||||
include /etc/ldap/schema/misc.schema include /etc/ldap/schema/eduperson.schema include /etc/ldap/schema/breduperson.schema | ||||||||
Changed: | ||||||||
< < | ... | |||||||
> > | ... | |||||||
Em seguida faça um teste na configuração do slapd: | ||||||||
Added: | ||||||||
> > | ||||||||
Changed: | ||||||||
< < | slapd -Tt | |||||||
> > | slapd -Tt | |||||||
E caso o retorno seja config file testing succeeded, faça o restart do daemon: | ||||||||
Added: | ||||||||
> > | ||||||||
Changed: | ||||||||
< < | invoke-rc.d slapd restart | |||||||
> > | invoke-rc.d slapd restart | |||||||
Limite de respostas | ||||||||
Line: 98 to 160 | ||||||||
# The maximum number of entries that is returned for a search operation -sizelimit 500 | ||||||||
Changed: | ||||||||
< < | +sizelimit unlimited | |||||||
> > | +sizelimit unlimited | |||||||
Logging | ||||||||
Line: 117 to 179 | ||||||||
+loglevel 256 # Where the dynamically loaded modules are stored | ||||||||
Changed: | ||||||||
< < | modulepath /usr/lib/ldap | |||||||
> > | modulepath /usr/lib/ldap | |||||||
Índices | ||||||||
Line: 130 to 192 | ||||||||
index mail eq index dc eq index uid pres,sub,eq | ||||||||
Deleted: | ||||||||
< < | index member eq index memberOf eq | |||||||
index brEduAffiliation pres index brEntranceDate pres | ||||||||
Changed: | ||||||||
< < | index brExitDate pres | |||||||
> > | index brExitDate pres | |||||||
Agora é preciso recriar os índices e reiniciar o daemon: | ||||||||
Added: | ||||||||
> > | ||||||||
invoke-rc.d slapd stop slapindex | ||||||||
Line: 142 to 202 | ||||||||
invoke-rc.d slapd stop slapindex chown -R openldap:openldap /var/lib/ldap | ||||||||
Changed: | ||||||||
< < | invoke-rc.d slapd start | |||||||
> > | invoke-rc.d slapd start | |||||||
Habilitar SSL/TLS | ||||||||
Line: 151 to 211 | ||||||||
mkdir /etc/ldap/ssl cd /etc/ldap/ssl | ||||||||
Changed: | ||||||||
< < | openssl genrsa -des3 -out ldap-ca.key 2048 | |||||||
> > | openssl genrsa -des3 -out ldap-ca.key 2048 | |||||||
Em seguida vamos criar um certificado para a nossa CA: | ||||||||
Added: | ||||||||
> > | ||||||||
Changed: | ||||||||
< < | 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:
| ||||||||
Line: 169 to 228 | ||||||||
| ||||||||
Added: | ||||||||
> > | ||||||||
Changed: | ||||||||
< < | openssl req -nodes -new -keyout ldap.key -out ldap.csr | |||||||
> > | openssl req -nodes -new -keyout ldap.key -out ldap.csr | |||||||
Responda as seguintes perguntas:
| ||||||||
Line: 185 to 244 | ||||||||
| ||||||||
Added: | ||||||||
> > | ||||||||
Changed: | ||||||||
< < | 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: | ||||||||
Added: | ||||||||
> > | ||||||||
chown openldap:openldap ldap.key | ||||||||
Changed: | ||||||||
< < | chmod 640 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): | ||||||||
Added: | ||||||||
> > | ||||||||
################ # Global Directives: | ||||||||
Line: 203 to 263 | ||||||||
# SSL/TLS certificates TLSCACertificateFile /etc/ldap/ssl/ldap-ca.crt TLSCertificateFile /etc/ldap/ssl/ldap.crt | ||||||||
Changed: | ||||||||
< < | TLSCertificateKeyFile /etc/ldap/ssl/ldap.key | |||||||
> > | TLSCertificateKeyFile /etc/ldap/ssl/ldap.key | |||||||
Alteraremos também o arquivo /etc/default/slapd conforme abaixo: | ||||||||
Added: | ||||||||
> > | ||||||||
-SLAPD_SERVICES="ldap:/// ldapi:///" | ||||||||
Changed: | ||||||||
< < | +SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///" | |||||||
> > | +SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///" | |||||||
Em seguida faça um teste na configuração do slapd: | ||||||||
Added: | ||||||||
> > | ||||||||
Changed: | ||||||||
< < | slapd -Tt | |||||||
> > | slapd -Tt | |||||||
E caso o retorno seja config file testing succeeded, faça o restart do daemon: | ||||||||
Added: | ||||||||
> > | ||||||||
Changed: | ||||||||
< < | invoke-rc.d slapd restart | |||||||
> > | invoke-rc.d slapd restart | |||||||
Configurar o /etc/ldap/ldap.conf (parametros do cliente): | ||||||||
Added: | ||||||||
> > | ||||||||
BASE dc=foobar,dc=br URI ldap://localhost | ||||||||
Line: 226 to 286 | ||||||||
BASE dc=foobar,dc=br URI ldap://localhost | ||||||||
Changed: | ||||||||
< < | TLS_CACERT /etc/ldap/ssl/ldap-ca.crt | |||||||
> > | TLS_CACERT /etc/ldap/ssl/ldap-ca.crt | |||||||
Alterar o arquivo /etc/hosts e acrescentar um alias para ldap.foobar.br: | ||||||||
Added: | ||||||||
> > | ||||||||
diff --git a/hosts b/hosts index 2dc3692..16c502b 100644 | ||||||||
Line: 241 to 301 | ||||||||
+127.0.1.1 debian.foobar.br debian ldap.foobar.br # The following lines are desirable for IPv6 capable hosts | ||||||||
Changed: | ||||||||
< < | ::1 localhost ip6-localhost ip6-loopback | |||||||
> > | ::1 localhost ip6-localhost ip6-loopback | |||||||
Deleted: | ||||||||
< < |
Habilitar overlay de last bind | |||||||
Changed: | ||||||||
< < | O overlay de lastbind é interessante para armazenar o timestamp do último logon do usuário, facilitando assim a identificação de usuários inativos. | |||||||
> > |
Habilitar overlay de reverse group mappingO 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 | ||||||||
Changed: | ||||||||
< < | moduleload lastbind | |||||||
> > | moduleload refint moduleload memberof | |||||||
Changed: | ||||||||
< < |
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. | |||||||
> > |
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. | |||||||
Changed: | ||||||||
< < | ################################################### ## 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 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: | ||||||||
Line: 270 to 348 | ||||||||
slapd -Tt | ||||||||
Changed: | ||||||||
< < | E caso o retorno seja config file testing succeeded, faça o restart do daemon: | |||||||
> > | E caso o retorno seja config file testing succeeded, é preciso recriar os índices e reiniciar o daemon: | |||||||
Changed: | ||||||||
< < | invoke-rc.d slapd restart | |||||||
> > | invoke-rc.d slapd stop slapindex chown -R openldap:openldap /var/lib/ldap invoke-rc.d slapd start | |||||||
Changed: | ||||||||
< < |
Design da base LDAP | |||||||
> > |
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 | |||||||
Changed: | ||||||||
< < |
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 ): | |||||||
> > | Nesse exemplo ficitício, poderíamos depois listar os membros do grupo owncloud-users, com uma busca como: | |||||||
Changed: | ||||||||
< < | # people, foobar.br dn: ou=people,dc=foobar,dc=br objectClass: organizationalUnit objectClass: top ou: people | |||||||
> > | 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)' | |||||||
Changed: | ||||||||
< < | # groups, foobar.br dn: ou=groups,dc=foobar,dc=br objectClass: organizationalUnit objectClass: top ou: groups | |||||||
> > |
Habilitar overlay de last bind | |||||||
Changed: | ||||||||
< < | # apps, foobar.br dn: ou=apps,dc=foobar,dc=br objectClass: organizationalUnit objectClass: top ou: apps | |||||||
> > |
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: | |||||||
Deleted: | ||||||||
< < | Em seguida, atualize a base LDAP para incluir essa nova estrutura: | |||||||
Changed: | ||||||||
< < | ldapadd -x -h localhost -D cn=gerente-ldap,dc=foobar,dc=br -W -f base-ldap-foobar.ldif | |||||||
> > | modulepath /usr/lib/ldap moduleload lastbind | |||||||
Changed: | ||||||||
< < |
Criação de aplicações de leitura da 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. | |||||||
Deleted: | ||||||||
< < |
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 : | |||||||
Changed: | ||||||||
< < | # 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 | |||||||
> > | ################################################### ## 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: | |||||||
Deleted: | ||||||||
< < | 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: | |||||||
Changed: | ||||||||
< < | cat > leitor-xpto.ldif <<EOF dn: cn=leitor-xpto,ou=apps,dc=foobar,dc=br objectClass: organizationalRole objectClass: simpleSecurityObject cn: leitor-xpto description: Leitor XPTO userPassword: {SSHA}xxxx EOF | |||||||
> > | slapd -Tt | |||||||
Changed: | ||||||||
< < | A senha pode ser gerada com o aplicativo slappasswd. | |||||||
> > | E caso o retorno seja config file testing succeeded, faça o restart do daemon: | |||||||
Deleted: | ||||||||
< < | Agora é preciso inserir essa nova conta: | |||||||
Changed: | ||||||||
< < | ldapadd -x -h localhost -D cn=gerente-ldap,dc=foobar,dc=br -W -f leitor-xpto.ldif | |||||||
> > | invoke-rc.d slapd restart | |||||||
Integração entre o OpenLDAP e AD | ||||||||
Line: 339 to 409 | ||||||||
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: | ||||||||
Added: | ||||||||
> > | ||||||||
Changed: | ||||||||
< < | aptitude install sasl2-bin | |||||||
> > | aptitude install sasl2-bin | |||||||
Em seguida é necessário efetuar algumas configurações dos parâmetros do daemon (/etc/default/saslauthd ): | ||||||||
Added: | ||||||||
> > | ||||||||
diff --git a/default/saslauthd b/default/saslauthd index a60eaa1..c40583d 100644 | ||||||||
Line: 372 to 443 | ||||||||
# 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" | ||||||||
Changed: | ||||||||
< < | +OPTIONS="-c -m /var/run/saslauthd -O /etc/saslauthd.conf" | |||||||
> > | +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): | ||||||||
Added: | ||||||||
> > | ||||||||
ldap_servers: ldap://ldap-ad.intranet.foobar.br ldap_search_base: dc=mydomain,dc=foobar,dc=br | ||||||||
Line: 389 to 460 | ||||||||
ldap_use_sasl: no ldap_start_tls: no ldap_version: 3 | ||||||||
Changed: | ||||||||
< < | ldap_auth_method: bind | |||||||
> > | 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: | ||||||||
Added: | ||||||||
> > | ||||||||
cat > /usr/lib/sasl2/slapd.conf <<EOF pwcheck_method: saslauthd | ||||||||
Line: 397 to 468 | ||||||||
cat > /usr/lib/sasl2/slapd.conf <<EOF pwcheck_method: saslauthd saslauthd_path: /var/run/saslauthd/mux | ||||||||
Changed: | ||||||||
< < | EOF | |||||||
> > | EOF | |||||||
É precisso adicionar o usuário do OpenLDAP ao grupo do SASL: | ||||||||
Added: | ||||||||
> > | ||||||||
Changed: | ||||||||
< < | adduser openldap sasl | |||||||
> > | adduser openldap sasl | |||||||
Habilitar os parametros de autenticação SASL no OpenLDAP: | ||||||||
Added: | ||||||||
> > | ||||||||
diff --git a/ldap/slapd.conf b/ldap/slapd.conf index c58060b..bb67edf 100644 | ||||||||
Line: 421 to 492 | ||||||||
+ ####################################################################### # Specific Backend Directives for hdb: | ||||||||
Changed: | ||||||||
< < | # Backend specific directives apply to this backend until another | |||||||
> > | # Backend specific directives apply to this backend until another | |||||||
Reiniciar o daemon do OpenLDAP e do SASL: | ||||||||
Added: | ||||||||
> > | ||||||||
invoke-rc.d slapd restart | ||||||||
Changed: | ||||||||
< < | /etc/init.d/saslauthd restart | |||||||
> > | /etc/init.d/saslauthd restart | |||||||
TODO: documentar tunning de performance, tamanho do cache, etc. | ||||||||
Line: 444 to 515 | ||||||||
# cron for cleanup openldap logs # m h dom mon dow user command | ||||||||
Changed: | ||||||||
< < | 0 0 * * * root find /var/lib/ldap -name 'log.*' -mtime +15 -delete | |||||||
> > | 0 0 * * * root find /var/lib/ldap -name 'log.*' -mtime +15 -delete | |||||||
Próximos passos |