2 de set de 2009

Autenticando usuários do AD no Debian

Para você que sempre quis usar sua base do Active Directory para autenticar os usuários em seus servidores Gnu/Linux Debian. Esse post é pra você.

O debian utilizado para esse documento é o Debian 4 (Etch).

É necessário que o servidor Active Directory já tenha instalado o software AD For Unix.

Primeiro vamos instalar os programas necessários para a consulta LDAP

# apt-get install ldap-utils libldap-2.3-0 libldap2-dev libldap2 libnss-ldap libpam-ldap finger-ldap libsasl2-modules

Após instalação vamos editar os arquivos necessários.

Começaremos com o /etc/nsswitch.conf:

Onde temos:

passwd: compat
group: compat
shadow: compat

Devemos mudar para:

passwd: compat ldap
group: compat ldap
shadow: compat ldap

Agora iremos modificar alguns arquivos que podem servir de referência para futuras modificações ou consultas, sendo assim faremos antes um backup.

# cd /etc
# mv pam_ldap.conf pam_ldap.conf.old
# mv libnss-ldap.conf libnss-ldap.conf.old
# mv ldap/ldap.conf ldap/ldap.conf.old

Agora crie um novo /etc/ldap/ldap.conf com o seguinte conteúdo:

# -+-+-+-+-+-+-+- Inicio +-+-+-+-+-+-+-+-+-+-+-+-+-+-

# configurações gerais
host 192.168.100.30
base dc=intranet,dc=ufba,dc=br
ldap_version 3
# Modifique a linha abaixo que reflita o seu ambiente
binddn cn=usuario,ou=ou que está o usuário,dc=techfree,dc=com,dc=br
# Abaixo temos a senha do usuário citado acima
bindpw senhaforte

scope sub

# Atributos específicos do Active Directory
nss_map_objectclass posixAccount User
nss_map_objectclass shadowAccount User
nss_map_attribute uid sAMAccountName
nss_map_attribute uniqueMember member
nss_map_attribute homeDirectory msSFUHomeDirectory
nss_map_attribute cn sAMAccountName
pam_login_attribute sAMAccountName
nss_map_objectclass posixGroup group
pam_member_attribute memberOf
pam_filter objectclass=user
pam_password ad

# -+-+-+-+-+-+-+- FIM +-+-+-+-+-+-+-+-+-+-+-+-+-+-

Agora faremos alguns links para esse arquivo recém-criado:


# cd /etc
# ln -s ldap/ldap.conf pam_ldap.conf
# ln -s ldap/ldap.conf libnss-ldap.conf

Agora faremos um teste pra verificar se tudo foi feito perfeitamente:

# finger

O resultado deve ser algo próximo a informação abaixo:

# finger rafael
Login: rafael Name: Rafael Brito Gomes
Directory: /home/rafael Shell: /bin/bash
Never logged in.
No mail.
No Plan.

Agora vamos configurar o Kerberos. Primeiro vamos instalar os pacotes necessários:

# apt-get install libkrb5-dev libkrb53 libpam-krb5 krb5-config krb5-user nscd

Vamos configurar o arquivo /etc/krb5.conf para que o kerberos funcione normalmente.

O arquivo deve conter o seguinte conteúdo:


# -+-+-+-+-+-+-+- Inicio +-+-+-+-+-+-+-+-+-+-+-+-+-+-

[libdefaults]
default_realm = SEUDOMINIO.COM.BR
krb4_config = /etc/krb.conf
krb4_realms = /etc/krb.realms
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
v4_instance_resolve = false
v4_name_convert = {
host = {
rcmd = host
ftp = ftp
}
plain = {
something = something-else
}
}

[realms]
SEUDOMINIO.COM.BR = {
kdc = SERVERAD.SEUDOMINIO.COM.BR
admin_server = SERVERAD.SEUDOMINIO.COM.BR
}

[domain_realm]
seudominio.com.br = SERVERAD.SEUDOMINIO.COM.BR
.seudominio.com.br =SERVERAD.SEUDOMINIO.COM.BR

[login]
krb4_convert = true
krb4_get_tickets = true

# -+-+-+-+-+-+-+- Fim +-+-+-+-+-+-+-+-+-+-+-+-+-+-

É importe ressaltar que o nome do domínio e o servidor controlador do domínio DEVEM estar em letras maiúsculas.

Após essa configuração, o usuário deve criar um “ticket” no servidor para poder autenticar. Para criar um ticket é necessário um usar um usuário válido do domínio UFBA. Na linha de comando, digite:

#kinit seu_usuario
Password for seu_usuario@INTRANET.UFBA.BR:

Se tudo ocorrer normalmente, o processo será igual ao exemplo acima.

Possíveis mensagens de erro retornados:

kinit(v5): Preauthentication failed while getting initial credentials — Usuário ou senha inválidos
kinit(v5): Clock skew too great while getting initial credentials — Horário desajustado

Para evitar problemas com horário, já que o kerberos não faz a pré-autenticação caso a diferença de hora entre o servidor e a estação seja maior que 5 minutos. Para manter o relógio sempre atualizado, instale o

Caso obtenha a mensagem acima, ajuste a hora da estação. Na linha de comando, digite:

# aptitude install ntp

Após isso acesse o arquivo /etc/ntp e adicione o servidor ntp de sua preferência. O Servidor NTP da RNP pode ser utilizado:

server ntp.cais.rnp.br iburst

Após configuração é necessário reiniciar o serviço

# /etc/init.d/ntp restart

Feito isso a configuração do Kerberos está feita. Agora é necessário configurar os arquivos que usam esses arquivos para fazer a autenticação. A maioria da distribuições usam o PAM para centralizar as rotinas de autenticação do Linux.

Vamos configurar o PAM.

Primeiro acesse o arquivo /etc/pam.d/common-auth.
O arquivo deve conter as seguintes informações:


auth sufficient pam_krb5.so
auth required pam_unix.so nullok_secure try_first_pass
session required pam_mkhomedir.so skel=/etc/skel umask=0022
#criar o home caso nao exista. Necessario para logar na interface gráfica

Primeiro acesse o arquivo /etc/pam.d/common-account.
O arquivo deve conter as seguintes informações:


account sufficient pam_krb5.so
account required pam_unix.so

Pronto, agora efetue o seguinte teste:

# id

Ele deve retornar o nome do usuário e os grupos que ele pertence (grupos esse locais e do AD)

Se tiver problemas com o cache do nscd ele deve ter seu cache zerado com os comandos abaixo:

# nscd -i group
# nscd -i passwd
# nscd -i host

Para verificar os dados atuais do nscd digite:

# nscd -g

Pronto, provavelmente seus usuários e grupos do AD serão facilmente utilizados pelo seu servidor Gnu/Linux.

Valeu Jerônimo e Italo pela documentação e ajuda na construção desse conhecimento.


Fonte: http://techfree.com.br