você está aqui: Home  → Arquivo de Mensagens Programação Shell Linux: Inscrições Abertas

Implantando autenticação centralizada e segura usando Openldap

Colaboração: Alexandro Silva

Data de Publicação: 01 de agosto de 2010

Uma autenticação centralizada faz parte do processo de adequação do ambiente as boas práticas de segurança. Esta solução provê recursos que atendem aos principios de autenticidade e não-repúdio. Usando a criptografia juntamente com esta solução poderemos previnir ataques de hijacking, spoofing e man in the middle.

O LDAP (Lightweight Directory Access Protocol) é um protocolo cliente-servidor, utilizado para acessar um serviço de Diretório. Ele foi inicialmente usado como uma interface para o X.500, mas também pode ser usado com autonomia e com outros tipos de servidores de Diretório. Atualmente vem se tornando um padrão, diversos programas já têm suporte a LDAP. Livros de endereços, autenticação, armazenamento de certificados digitais (S/MIME) e de chaves públicas (PGP), são alguns dos exemplos onde o LDAP já é amplamente utilizado.

O Openldap é a solução livre para a implementação do LDAP. Diferentemente das soluções proprietárias ( e.g. Active Directory (tm) ), ele implementa de forma fidedigna as especificações das RFCs deste protocolo.

Este artigo têm como principal objetivo ensinar como implantar uma solução livre e gratuita de autenticação com segurança. Não abordarei conceitos sobre o funcionamento do protocolo, para isso recomendo a leitura das referências.

Inicialmente irei configurar um servidor LDAP e um cliente autenticando nesta base.

Configurando o LDAP server

Instale os pacotes necessários

# aptitude install slapd ldap-utils migrationtools
# dpkg-reconfigure slapd
DNS domain name: acme.local 
Organization name: acme
Database backend to set:   HDB
Do you want the database to be removed when slapd is purged? No
Move old database? Yes
Allow LDAPv2 protocol? Yes

Adicionando Schemas

Acesso o diretório /etc/ldap/schemas

cd /etc/ldap/schemas

Faça o download dos schemas. Eles serão importantes na implementação do kerberos e na autenticação dos usuários do Postfix

wget http://www.bayour.com/openldap/schemas/krb5-kdc.schema
wget http://trac.kyapanel.com/export/360/trunk/ldap/schema/qmailuser.schema

Edite o arquivo /etc/ldap/slapd adicionando os novos schemas e novos indices no index

# vim /etc/ldap/slapd.conf


include         /etc/ldap/schema/krb5-kdc.schema
include         /etc/ldap/schema/qmailuser.schema

index objectClass,ou,cn,sn,uid,uidNumber,mail,mailAlternateAddress,mailForwardingAddress,memberUid eq

Reinicie o slapd

invoke-rc.d slapd restart

Testando

ldapsearch -x -b "dc=acme,dc=local"
# extended LDIF
#
# LDAPv3
# base <dc=acme,dc=local> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# acme.local
dn: dc=acme,dc=local
objectClass: top
objectClass: dcObject
objectClass: organization
o: acme
dc: acme

# admin, acme.local
dn: cn=admin,dc=acme,dc=local
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator

# search result
search: 2
result: 0 Success

# numResponses: 3
# numEntries: 2

Migrando os usuários e grupos locais com o migration tools

O migrationtools é um conjunto de scripts responsáveis por migrar as informações locais como hosts, serviços, usuários, grupos e etc para a infraestrutura do LDAP.

Edite as seguintes linhas do arquivo /usr/share/migrationtools

vim migrate_common.ph
$DEFAULT_MAIL_DOMAIN = "acme.local";
$DEFAULT_BASE = "dc=acme,dc=local";
$EXTENDED_SCHEMA = 1;

Importe a base

./migrate_base.pl > base.ldif

O arquivo base.ldif contém a infraestrutura básica de OUs ( Unidades Organizacionais ). Como o objetivo de nosso LDAP é autenticação então edite o arquivo base.ldif deixando somente as seguintes informações:

dn: dc=acme,dc=local
dc: acme
objectClass: top
objectClass: domain
objectClass: domainRelatedObject
associatedDomain: acme.local

dn: ou=People,dc=acme,dc=local
ou: People
objectClass: top
objectClass: organizationalUnit
objectClass: domainRelatedObject
associatedDomain: acme.local

dn: ou=Group,dc=acme,dc=local
ou: Group
objectClass: top
objectClass: organizationalUnit
objectClass: domainRelatedObject
associatedDomain: acme.local

Migre as contas e as senhas dos usuários

ETC_SHADOW=/etc/shadow ./migrate_passwd.pl /etc/passwd > passwd.ldif

Migre os grupos

./migrate_group.pl /etc/group > group.ldif

Atualize o BD do LDAP

ldapadd -h localhost -x -W -D "cn=admin,dc=acme,dc=local" -c -f base.ldif
ldapadd -h localhost -x -W -D "cn=admin,dc=acme,dc=local" -c -f passwd.ldif
ldapadd -h localhost -x -W -D "cn=admin,dc=acme,dc=local" -c -f group.ldif

Testando

ldapsearch -LL -H ldap://localhost -b"dc=acme,dc=local" -x "(uid=alexos)"

dn: uid=alexos,ou=People,dc=acme,dc=local
uid: alexos
cn: alexos
sn: alexos
mail: alexos@acme.local
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: krb5Principal
objectClass: shadowAccount
shadowMax: 99999
shadowWarning: 7
krb5PrincipalName: alexos@ACME.LOCAL
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/alexos
gecos: alexos,,,

Referências

Fonte: http://blog.alexos.com.br/?p=1901&lang=en



Veja a relação completa dos artigos de Alexandro Silva