Você está na página 1de 5

Segurana 2010/11

Departamento de Informtica da Faculdade de Cincias da Universidade de Lisboa

Configurao e utilizao de LDAP

Instalao e configurao do Apache Directory Server (ApacheDS)


1. Obter cdigo (Java compilado), descarregando o Archive zip/tar.gz, do stio: http://directory.apache.org/apacheds/1.5/downloads.html

2. Descompactar cdigo com tar xvzf apacheds-1.5.7.tar.gz

3. Configurar ApacheDS editando conf/server.xml a. Na seco LDAP service configuration, configurar EndereoIP/porto do servidor, sem SSL, mantendo uma nica entrada na seco <transports> (eliminar outras entradas):
<transports> <tcpTransport address="0.0.0.0" port="60000" enableSSL="false" /> </transports>

b. As entradas (organizaes, pessoas, ) so armazenadas em parties. Cada partio contm uma rvore de entradas completa. Criar partio para a organizao seg (o=seg) no final da seco <partitions>:
<partitions> <jdbmPartition id="seg" suffix="o=seg"> </jdbmPartition> </partitions>

Obs: O ApacheDS cria automaticamente um utilizador especial (uid=admin,ou=system) com o qual se pode administrar o directrio que possui as seguintes credenciais (por omisso): DN: uid=admin, ou=system Password: secret Mais informao sobre a criao de uma partio pode ser encontrada em: http://directory.apache.org/apacheds/1.5/143-adding-your-own-partition-resp-suffix.html

Execuo do Apache Directory Server (ApacheDS)


4. Executar o ApacheDS no directrio DS_HOME (directrio raiz do ApacheDS), em Linux, com
sh ./apacheds.sh

O ApacheDS dever ficar em execuo na consola. Esta consola s serve para o ApacheDS escrever mensagens de aviso ou de erro. Nota: O ApacheDS no recebe comandos.

FCUL/DI-LEI-Segurana-2010/11

Problemas comuns: [11:34:20] ERROR [org.apache.directory.server.ldap.LdapServer] - ERR_171 Failed to bind an LDAP service (60,000) to the service registry. Problema: j tm um servidor a correr no mesmo porto (normalmente porque no mataram a execuo anterior do servidor cuidado com a diferena entre control+c e control+z) Soluo: tm de matar o servidor que est a correr. Como? Comando kill Exception in thread "main" org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 79 in XML document from URL [file:/home/nemo/si/si000/apacheds/apacheds_1.5.7/conf/server.xml] is invalid; nested exception is org.xml.sax.SAXParseException: The element type "jdbmPartition" must be terminated by the matching end-tag "</jdbmPartition>". Problema: evidenciado a azul na mensagem de erro Soluo: Verificar que a partio XML <jdbmPartition> criada em 3b se encontra imediatamente antes de </partitions>

Adio de entradas no Apache Directory Server (ApacheDS)


5. As entradas no ApacheDS podem ser criadas, modificadas ou eliminadas individualmente ou em bloco atravs de ficheiro LDIF com as entradas individuais. fundamental que sejam criadas primeiro as entradas de contexto e s depois outras entradas como pessoas, Criar um ficheiro LDIF (DS_HOME/ldif/seg.ldif), mantendo uma linha em branco a separar cada entrada e no fim, com o seguinte contedo

dn: o=seg o: seg objectClass: top objectClass: organization dn: cn=userA,o=seg cn: userA sn: userA userPassword: secretA objectClass: top objectClass: person dn: cn=userB,o=seg cn: userB sn: userB userPassword: secretB objectClass: top objectClass: person

FCUL/DI-LEI-Segurana-2010/11

6. Adicionar o contedo do ficheiro LDIF atravs de uma das trs formas seguintes a. Plataforma interactiva Apache Directory Studio. Necessita de ser instalada a partir do stio http://directory.apache.org/studio/downloads.html Criar nova ligao ao ApacheDS, supondo que o hostname da mquina onde o ApacheDS est em execuo lab1223-24, no menu LDAP->New Connection Connection Name: teste Hostname: lab1223-24 Port: 60000 Encryption method: No encription Verificar ligao ao servidor ApacheDS com Check Network Parameter Se a ligao foi estabelecida com sucesso ento passar introduo de credenciais Next> Authentication Method: Simple Authentication Bind DN or user: uid=admin,ou=system Bind password: secret Verificar validade das credenciais Check Authentication Se as credenciais foram aceites com sucesso ento terminar com Finish Importar entradas em ficheiro LDIF no menu File->Import->LDIF into LDAP Indicar o ficheiro LDIF b. Adicionando as entradas do ficheiro LDIF com o comando ldapadd (requere o pacote ldap-utils ou openldap-clients) na consola (Linux Shell)
ldapadd -x -W -D uid=admin,ou=system -H ldap://lab1223-24:60000/ -f seg.ldif c. Carregar automaticamente o ficheiro LDIF com o 1 arranque do servidor ApacheDS

editando conf/server.xml e adicionando uma entrada <ldifDirectory> em


<apacheDS id="apacheDS"> <ldifDirectory>ldif/seg.ldif</ldifDirectory> </apacheDS>

7. Listar as entradas em o=seg com o comando ldapsearch (requere o pacote ldap-utils ou openldap-clients) na consola (Linux Shell) supondo que o hostname da mquina onde o

ApacheDS est em execuo lab1223-24


ldapsearch -x -W -D uid=admin,ou=system -H ldap://lab1223-24:60000/ -b "o=seg" s sub "objectClass=*" dn sn cn

FCUL/DI-LEI-Segurana-2010/11

Configurao SSL do Apache Directory Server (ApacheDS)


8. Criar keystore atravs da ferramenta keytool supondo que o hostname da mquina onde o

ApacheDS est em execuo lab1223-24:


keytool genkeypair keyalg RSA dname cn=lab1223-24, ou=DI, o=FCUL, c=PT alias lab1223-24 keystore lab1223-24.ks storepass secret

Obs: O CN (X.509) tem de ser o hostname do computador onde executado o ApacheDS. Obs2: O certificado assim produzido auto-assinado e pode no ser aceite por uma aplicao cliente. Para contornar este problema, o certificado pode ser adicionado lista de certificados considerados de confiana.

9. Alterar a seco LDAP service configuration (referida em 3.a), tendo em ateno que pode ser necessrio colocar o caminho completo para a keystore criada no ponto anterior, para
<ldapServer id="ldapServer" ... keystoreFile=lab1223-24.ks certificatePassword=secret> <transports> <tcpTransport address="0.0.0.0" port="60000" enableSSL="true" /> </transports> </ldapserver>

Acesso com SSL de clientes ao Apache Directory Server (ApacheDS)


10. Aps a configurao do ponto anterior qualquer cliente que se queira ligar via ldap ao ApacheDS tem de o fazer com SSL. Os clientes mais provveis podem ser configurados da seguinte forma: a. Aplicaes em Java atravs de JNDI No cdigo, o URL para a ligao passa a utilizar o protocolo ldaps em
env.put(Context.PROVIDER_URL, "ldaps://lab1223-24:60000/");

preciso importar o certificado criado em 8 para uma truststore que ir ser utilizada nas ligaes SSL, atravs dos seguintes comandos:
keytool -exportcert alias lab1223-24 keystore lab1223-24.ks storepass secret file apacheds.der keytool importcert alias lab1223-24 keystore truststore.ks storepass secret file apacheds.der java -Djavax.net.ssl.trustStore=truststore.ks ...

b. Apache Directory Studio A nica alterao no estabelecimento de uma ligao : Encryption method: Use SSL encryption (ldaps://) Posteriormente quando se efectuar a ligao o utilizar ser confrontado com um aviso relativo ao certificado (por este ser auto-assinado). Neste caso o certificado deve ser aceite para a sesso.

FCUL/DI-LEI-Segurana-2010/11

c. Ferramentas-cliente ldap-utils ou openldap-clients (ldapadd, ) preciso exportar o certificado criado em 8 para o formato PEM (RFC 1421)
keytool exportcert alias lab1223-24 keystore lab1223-24.ks storepass secret rfc file apacheds.pem

Depois preciso criar manualmente, no mesmo directrio do certificado, um hash (OpenSSL) atravs de um symbolic link
hash=`openssl x509 -hash -noout -in apacheds.pem` ln -s apacheds.pem ${hash}.0

Obs: a string da varivel hash rodeada por acentos graves (e no por apstrofo ou aspas) Seguidamente necessrio indicar s ferramentas-cliente do LDAP a localizao deste certificado. Para isso deve-se copiar o ficheiro /etc/ldap.conf (Fedora) ou /etc/ldap/ldap.conf (Ubuntu) para um novo directrio e adicionar no final deste:
tls_cacert /caminho/completo/para/certificado/apacheds.pem

Finalmente, necessrio criar uma varivel de ambiente que indique s ferramentascliente do LDAP a localizao do novo ldap.conf. Para isso executar na consola (Linux Shell)
export LDAPCONF=/caminho/completo/para/ldap.conf

Obs: O nico espao em branco deste comando est entre o comando export e o nome da varivel.

Snteses de passwords de utilizadores Apache Directory Server (ApacheDS)


11. As passwords dos utilizadores podem ser adicionadas ao ApacheDS como uma das seguintes snteses: SHA, SSHA, MD5, SMD5 e CRYPT. Neste exemplo criada uma sntese CRYPT atravs de um comando PERL dado na consola (Linux Shell). A password dada como 1 parmetro do comando crypt e o sal dado como 2 parmetro.
perl -e 'print("{CRYPT}".crypt("secret","secret-salt")."\n");'

Finalmente basta copiar toda a string que resultou do comando PERL (considere que o resultado foi XX) e coloc-la no local da password (neste caso secret) do ficheiro LDIF resultando a seguinte linha
userPassword: {CRYPT}XX

Outros aspectos de segurana do Apache Directory Server (ApacheDS)


12. A password do administrador (uid=admin,ou=system) tambm pode ser alterada e armazenada como sntese atravs de um cliente como o Apache Directory Studio. Nota: No esquecer de reiniciar o ApacheDS depois desta alterao. 13. A ligao sem autenticao (annima) deve ser desactivada em server.xml atravs de
<defaultDirectoryService id="directoryService" instanceId="default" ... allowAnonymousAccess="false" ...>
FCUL/DI-LEI-Segurana-2010/11 5