
| 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 * 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 <<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
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 | ||||||||
| 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 | ||||||||