Usando políticas de senhas em diretórios LDAP
Colaboração: Gabriel Menezes Nunes
Data de Publicação: 21 de Junho de 2006
Vou descrever nesse artigo uma maneira que encontrei de usar os recursos
de políticas de senhas em diretórios LDAP. Essa é uma ótima maneira de
reforçar a segurança total da sua infra-estrutura da rede, pois um usuário
com senha fraca pode colocar em risco todo um planejamento feito durante
muito tempo. Caso um servidor seja penetrado por um intruso, devido a uma
conta com senha fraca, o invasor estará a um passo de uma possível escalada
de privilégios e total comprometimento da máquina em questão. Então, uma
"cartilha" de políticas a serem usadas numa rede que contém dados privados
de usuários, é crucial para qualquer pequena ou grande empresa.
Procurei muito por esse assunto na internet, mas não encontrei uma documentação
interessante usando o OPENLDAP (http://www.openldap.org).
Esse artigo irá apenas demonstrar a instalação e configuração do schema
"ppolicy", usado nas políticas de senhas no servidor. Qualquer configuração
adicional do LDAP ou configuração do cliente estão fora do escopo desse
documento.
Para usar os atributos LDAP de aplicação de senhas fortes, será necessário o
PAM. Logo distribuições que não o usem, como o SLACKWARE, não serão afetadas
e irão ignorar qualquer bloqueio de usuário ou expiração de senha. Nessas
distros, você terá que compilar o PAM , e recompilar alguns pacotes como
OpenSSH e Shadow.
Começando pela instalação a partir do código fonte:
Pegue o OpenLDAP mais atual (http://www.openldap.org/software/download)
Estou usando a versão 2.3.23
tar xvzf openldap-2.3.23.tgz
Agora vem uma parte interessante: a alteração do código fonte!
Teremos que alterá-lo para podermos usar as políticas de senhas diferentes
para cada usuário, e não apenas uma genérica para a base de dados inteira,
e também para podermos modificar alguns atributos operacionais que o OpenLDAP
padrão não nos deixa modificar.
Então vamos "hackear" o OpenLDAP !!!
Entre no diretório "servers/slapd/overlays" dentro da pasta do openldap.
cd openldap-2.3.23/servers/slapd/overlays
Dentro desse diretório localize e abra o arquivo ppolicy.c, de preferência
com um editor que localize facilmente uma string de busca!
kate ppolicy.c
Aberto o arquivo, retire todas as strings "NO-USER-MODIFICATION" dos atributos
do schema.
Explicando melhor, schema é um conjunto de atributos e classes usados no LDAP
para guardar dados específicos do usuário. Caso esse atributo esteja como
"NO-USER-MODIFICATION", ele não poderá ser mudado para usuários normais,
logo não será possível uma política individual para cada um no seu banco
de dados. Exemplos de schema podem ser samba.schema, para uso do samba com
ldap, ou até mesmo um schema feito por um administrador para uso privado
e exclusivo da empresa, usando atributos como RG, número do funcionário,
salário, andar em que se localiza no prédio, etc.
Arquivo alterado, e só salvar, e agora iremos compilar
Volte ao diretório base do openldap
cd ../../..
./configure --enable-overlays --enable-lmpasswd --enable-crypt
A parte mais importante é habilitar todos os "overlays", mais especificamente o
"ppolicy". LMPasswd é para manter alguma compatibilidade com o samba, caso
queira integrá-lo ao LDAP, e "crypt" mantém compatibilidade com sistemas
que não usam PAM, como o SLACKWARE.
Caso dê algum problema com o Berkeley DB, exporte o CPPFLAGS: export
CPPFLAGS="-I/usr/include/db4" ou onde estiver os includes do Berkeley DB.
Repita o configure
E para terminar a instalação
make
make install
Para configurar o ppolicy será necessário apenas a adição de uma linha
ao slapd.conf
overlay ppolicy
Pronto! Já temos as políticas de senhas rodando no servidor.
Para testar podemos montar um LDIF:
lock_user.ldif
—---------------------------------------------
dn: uid=gabriel,dc=servidor,dc=org,dc=br
changetype: modify
add: pwdAccountLockedTime
pwdAccountLockedTime: 000001010000Z
—---------------------------------------------
e adicionamos
ldapmodify -x -D 'cn=admin,dc=servidor,dc=org,dc=br' -w senha_do_ldap -f
lock_user.ldif
A partir desse comando esse usuário estará bloqueado no servidor e não poderá
mais logar. Para permitir sua autenticação:
unlock_user.ldif
—---------------------------------------------
dn: uid=gabriel,dc=servidor,dc=org,dc=br
changetype: modify
delete: pwdAccountLockedTime
—---------------------------------------------
ldapmodify -x -D 'cn=admin,dc=servidor,dc=org,dc=br' -w senha_do_ldap -f
unlock_user.ldif
O servidor volta a permitir o usuário "gabriel" a se autenticar na base
de dados.
Para mais atributos e manipulação de tais políticas, olhe no arquivo
ppolicy.schema no diretório schema do OpenLDAP ou no Google!!!