Após a configuração do ambiente, devemos configurar o sistema operacional de forma a autenticar-se no AD. As seguintes configurações devem ser efetuadas:
NSLCD (Autenticação LDAP)
O NSLCD (local LDAP name service daemon) será utilizado para a autenticação ao LDAP. Antes configurado através do arquivo
/etc/ldap.conf (no RHEL 5 e derivados), agora este recurso possui um
daemon próprio.
Para configurá-lo, devemos alterar o arquivo
/etc/nslcd.conf conforme abaixo (as explicações estão nos comentários do arquivo):
# Versao LDAP
ldap_version 3
# Usuario e grupo para executar o daemon
uid nslcd
gid ldap
# Limite de timeout de bind e de busca
bind_timelimit 30
timelimit 30
# Servidor LDAP e BaseDN
uri ldap://springfield.corp
base dc=springfield,dc=corp
# O SSL ainda não será configurado
ssl no
tls_cacertdir /etc/openldap/cacerts
# usuário e senha de serviço
binddn cn=AuthLinux,cn=Users,dc=springfield,dc=corp
bindpw 12qw!@QW
scope sub
scope group sub
scope hosts sub
# Ignorar lookup de grupos para os usuários de sistema
nss_initgroups_ignoreusers root,nslcd,bin,daemon,mail,nobody,sshd,nscd,ntp
# Caso seja necessário algum filtro, para apenas algum usuário de algum grupo logar
# pam_authz_search (gidNumber=10000)
# Configuracoes de Mapping - AD
pagesize 1000
referrals off
filter passwd (&(objectClass=user)(!(objectClass=computer))(uidNumber=*)(unixHomeDirectory=*))
map passwd uid sAMAccountName
map passwd homeDirectory unixHomeDirectory
map passwd gecos displayName
filter shadow (&(objectClass=user)(!(objectClass=computer))(uidNumber=*)(unixHomeDirectory=*))
map shadow uid sAMAccountName
map shadow shadowLastChange pwdLastSet
filter group (objectClass=group)
map group uniqueMember member
Após isso, devemos iniciar o daemon do
nslcd e colocá-lo na inicialização:
# chkconfig nslcd on
# /etc/init.d/nslcd on
Kerberos 5
A configuração do
Kerberos deverá ser feita de forma a validar um usuário, e permitir, entre outras coisas, sua autenticação e posteriores operações (como
query de grupos a que pertence, etc).
A configuração deverá ser feita conforme abaixo.
Alterar o arquivo
/etc/krb5.conf, conforme abaixo (as explicações estão nos comentários do arquivo):
# Nao validar o hostname do servidor (senao precisa de entradas no DNS e Reverso)
[appdefaults]
validate = false
# Locais de Logging
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
# Configuracoes Padrao
[libdefaults]
# Dominio Padrao - SPRINGFIELD.CORP - Deve ser o mesmo do AD
default_realm = SPRINGFIELD.CORP
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
[realms]
# Configuracao do servidor de KERBEROS
# Utilizando o nome do DOMINIO, ele vai para o DC
SPRINGFIELD.CORP = {
kdc = SPRINGFIELD.CORP
admin_server = SPRINGFIELD.CORP
}
# Configuracoes de DOMINIO - Qual REALM deve ser usado para qual dominio
[domain_realm]
springfield.corp = springfield.corp
.springfield.corp = springfield.corp
Testar a geração de um ticket de autenticação para um usuário qualquer do domínio, como o Administrador:
# kinit -V Administrator@SPRINGFIELD.CORP
A saída seria:
Using default cache: /tmp/krb5cc_0
Using principal: Administrator@SPRINGFIELD.CORP
Password for Administrator@SPRINGFIELD.CORP: [DIGITAR A SENHA]
Authenticated to Kerberos v5
Caso o retorno seja diferente de:
Authenticated to Kerberos v5
A configuração deve ser verificada novamente, pois alguma configuração foi efetuada incorretamente.
Configuração do NSCD e NSSWITCH
Devemos agora, configurar o daemon de cache de logins, e o NSSWITCH, que irá direcionar a autenticação de usuários e grupos para o NSLCD (LDAP), caso não seja encontrado um usuário local.
Por padrão, o arquivo
/etc/nscd.conf já vem configurado com parâmetros aceitáveis, sendo necessário apenas descomentar a linha "logfile /var/log/nscd.log", para que o daemon efetue log, caso algo dê errado.
Devemos então, alterar o arquivo
/etc/nsswitch.conf, deixando as linhas:
passwd, shadow e
group, conforme abaixo:
passwd: files ldap
shadow: files ldap
group: files ldap
Por fim, o daemon do NSCD deve ser colocado na inicialização do S.O., e ser iniciado:
# chkconfig nscd on
# /etc/init.d/nscd start
Para verificar o funcionamento correto da configuração, utilizar o comando
getent no usuário e grupo criado na etapa de "Pré requisitos":
# getent passwd rkatz
A saída seria:
rkatz:*:10002:10000:Ricardo P. Katz:/home/rkatz:/bin/bash
E:
# getent group Linux
Linux:*:10000:rkatz
Configuração do PAM
A etapa final da configuração é a alteração do PAM (Plugable Authentication Modules), de forma que as autenticações do Sistema Operacional sejam enviadas ao servidor LDAP (Domain Controller).
Adicionalmente, quando um usuário não possuir diretório 'home' no ambiente, o esperado é que o PAM crie esse diretório.
O arquivo
/etc/pam.d/system-auth deverá ser alterado para ficar conforme abaixo. O arquivo aqui é um exemplo, sugiro que verifique se não há nenhum mecanismo de autenticação já em uso no ambiente, e adeque as configurações às suas necessidades:
#%PAM-1.0
auth required pam_env.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth sufficient pam_krb5.so use_first_pass
auth required pam_deny.so
account required pam_unix.so broken_shadow
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 500 quiet
account [default=bad success=ok user_unknown=ignore] pam_krb5.so
account required pam_permit.so
password requisite pam_cracklib.so try_first_pass retry=3 type=
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password sufficient pam_krb5.so use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
session optional pam_krb5.so
Após as alterações, logar-se em um novo terminal com o usuário criado no AD (no exemplo, o usuário: rkatz), e verificar se o login é autorizado, bem como o diretório home criado.
Verificar também com o comando
id, se os grupos a que o usuário pertence são carregados. Caso não funcione, os arquivos
/var/log/messages e
/var/log/secure podem ser verificados em busca de erros.