Aqui falaremos sobre os procedimentos para configurar o NSCD. Este procedimento foi realizado sobre uma Instalação padrão do CentOS 7 que fazemos de servidores CentOS, caso queira realizar a mesma instalação, consulte aqui, ou nas referências abaixo.

Para executar os passos é necessário que se saiba Como obter o Distinguished Name (DN) no Active Directory, verifique aqui ou nas referências, abaixo.

Em nosso exemplo, configuraremos a pasta home de todos os usuários LDAP como a mesma pasta e deixaremos um script de logon para auditoria de quem logou quando.

Existem algumas formas de realizar esse procedimento, caso queira explorar outras possibilidades consulte neste link, ou nas referências abaixo.

Para configurarmos corretamente, usaremos uma conta de serviço para leitura no AD e um grupo de Acesso (para restringirmos quem poderá acessar o servidor).

Criando um usuário para consulta LDAP

Crie uma conta com o padrão de nomes de contas de serviço que sua empresa utiliza, essa conta pode ser membro de um grupo genérico e retirado o grupo Domain Users (defina o grupo novo grupo como padrão primeiro para poder retirar o grupo Domain Users). Desta forma está conta não poderá ser usado para logon em computadores;

Criando um grupo de acesso ao servidor

Crie um grupo e adicione os membros que poderão fazer logon no servidor, sugerimos um grupo para cada servidor linux, pois mesmo que muitos acessos sejam comuns (por exemplo, todos de uma equipe), com o tempo podem surgir necessidades específicas e se for um único grupo essas “exceções” começam a ter acesso a vários sistemas que não deveriam;

Instalando e configurando o NSCD

Para instalar e configurar, execute os comandos abaixo (altere as partes em cinza conforme sua realidade):

yum install authselect-compat autofs nfs-utils nscd nss-pam-ldapd openldap openldap-clients pam_ldap rpcbind -y

authconfig --enableldap --enableldapauth --ldapserver=ldap://ip_seu_servidor_dc:389/ --ldapbasedn="dc=seu_dominio,dc=com" --enablecache --disablefingerprint --kickstart

sed -i "s/TLS_CACERTDIR/#TLS_CACERTDIR/g" /etc/openldap/ldap.conf
sed -i "s/SASL_NOCANON/#SASL_NOCANON/g" /etc/openldap/ldap.conf

systemctl enable nslcd
systemctl restart nslcd

mkdir /home/seu_dominio.com
cp -r /etc/skel/. /home/seu_dominio.com/

touch /home/seu_dominio.com/.logon.log
chown -R root.users /home/seu_dominio.com
chmod -R 775 /home/seu_dominio.com

echo "echo \"Usuario \`whoami\` logou em \`date\`\" >> /home/seu_dominio.com/.logon.log" >> /home/seu_dominio.com/.bashrc

Agora será necessário o SID, para obter esse sid crie e execute o script abaixo:

vim /tmp/teste.sh

Aperte a tecla INSERT do teclado para entrar em modo de edição e deixa-lo da seguinte forma: 

#!/bin/bash
OBJECT_ID=”AQUAAAAAAAUVAAAAPWW1S5rojK4mDAiG5BAAAA==”
G=($(echo -n $OBJECT_ID | base64 -d -i | hexdump -v -e ‘1/1 ” %02X”‘))
SID_HEX=${G[0]}-${G[1]}-${G[2]}${G[3]}${G[4]}${G[5]}${G[6]}${G[7]}-${G[8]}${G[9]}${G[10]}${G[11]}-${G[12]}${G[13]}${G[14]}${G[15]}-${G[16]}${G[17]}${G[18]}${G[19]}-${G[20]}${G[21]}${G[22]}${G[23]}-${G[24]}${G[25]}${G[26]}${G[27]}${G[28]}
BESA2=${G[8]}${G[9]}${G[10]}${G[11]}
BESA3=${G[12]}${G[13]}${G[14]}${G[15]}
BESA4=${G[16]}${G[17]}${G[18]}${G[19]}
BESA5=${G[20]}${G[21]}${G[22]}${G[23]}
BERID=${G[24]}${G[25]}${G[26]}${G[27]}${G[28]}
LESA1=${G[2]}${G[3]}${G[4]}${G[5]}${G[6]}${G[7]}
LESA2=${BESA2:6:2}${BESA2:4:2}${BESA2:2:2}${BESA2:0:2}
LESA3=${BESA3:6:2}${BESA3:4:2}${BESA3:2:2}${BESA3:0:2}
LESA4=${BESA4:6:2}${BESA4:4:2}${BESA4:2:2}${BESA4:0:2}
LESA5=${BESA5:6:2}${BESA5:4:2}${BESA5:2:2}${BESA5:0:2}
LERID=${BERID:6:2}${BERID:4:2}${BERID:2:2}${BERID:0:2}
LE_SID_HEX=${LESA1}-${LESA2}-${LESA3}-${LESA4}-${LESA5}-${LERID}
SID=”S-1″
IFS=’-‘ read -ra ADDR <<< “${LE_SID_HEX}”
for OBJECT in “${ADDR[@]}”; do
       SID=${SID}-$((16#${OBJECT}))
done
echo ${SID}

Ao final, pressionar a tecla ESC para sair do modo de edição, digitar :wq! e pressionar ENTER para sair e salvar. Em seguida, execute:

chmod 755 /tmp/teste.sh

sed -i "s/tls_cacertdir/#tls_cacertdir/g" /etc/nslcd.conf
echo "ldap_version 3" >> /etc/nslcd.conf
echo "pagesize        20000" >> /etc/nslcd.conf
echo "referrals       off" >> /etc/nslcd.conf
echo "filter  passwd  (objectClass=user) " >> /etc/nslcd.conf
echo "filter  group   (objectClass=group) " >> /etc/nslcd.conf
echo "map    passwd uid           sAMAccountName" >> /etc/nslcd.conf
echo "map    passwd gecos         displayName" >> /etc/nslcd.conf
echo "map    passwd gidNumber     \"100\"" >> /etc/nslcd.conf
echo "map    passwd uidNumber     objectSid:`/tmp/teste.sh`" >> /etc/nslcd.conf
echo "map    passwd homeDirectory \"/home/seu_dominio.com/\"" >> /etc/nslcd.conf
echo "map    passwd loginShell    \"/bin/bash\"" >> /etc/nslcd.conf

Execute os comandos abaixo alterando a parte em cinza pelo distinguished name e senha da conta criada para leitura no AD.

echo "binddn CN=CONTA SERVICO AUTENTICACAO CENTOS,OU=NOME DA OU,DC=seu_dominio,DC=com" >> /etc/nslcd.conf

echo "bindpw senha" >> /etc/nslcd.conf
echo "filter passwd (&(objectClass=user)(memberOf=CN=GRUPO QUE PODE ACESSAR O SERVIDOR,OU=NOME DA OU,DC=seu_dominio,DC=com))" >> /etc/nslcd.conf

systemctl restart nslcd

Agora, basta fazer logon com o usuário do AD

Fontes/Referências

NVLAN – Como obter o Distinguished Name (DN) no Active Directory
NVLAN – Instalação padrão do CentOS7
NVLAN – Métodos para integrar o CentOS com LDAP (Active Directory)

https://serverfault.com/questions/633802/ldap-authentication-on-centos-7
https://serverfault.com/questions/851864/get-sid-by-its-objectsid-using-ldapsearch/852338#852338
http://www.tutorialspoint.com/unix_commands/nscd.htm

Mais Informações

Esperamos ter ajudado da melhor forma possível e estaremos sempre a disposição para mais informações.

Entre em contato conosco pelo e-mail equipe@nvlan.com.br.

NVLAN - Consultoria