Google+

martes, 4 de diciembre de 2012

Autenticación LDAP de Active Directory con Linux


Para un entorno corporativo es requerido la centralización de los usuarios y normalmente, esto suele recalar sobre Active Directory. En este manual partimos desde un Active Directory sobre Windows Server 2008 R2 y Red Hat como cliente.
Ademas Active Directory deberá contar con el rol Identity Management for UNIX instalado.

Datos con los que trabajaremos:
  • Servidor Windows:  win2k8.example.com
  • BaseDN: dc=example,dc=com
  • Servidor NIS: example
  • Un usuario que hará consultas llamado "search"
En la parte de Active Directory:
En el usuario botón derecho > propiedades y añadir el dominio NIS:


En el grupo botón derecho > propiedades y añadir el dominio NIS:

Ahora todo en la máquina Linux, tener instalado:
  • openldap-clients
  • nss_ldap
  • nscd
Fichero /etc/ldap.conf
#debug 7
base dc=example,dc=com
uri ldap://win2k8.example.com/
binddn cn=search,cn=users,dc=example,dc=com
bindpw MiCoNtRaSeÑa
scope sub
ssl no
timelimit 10
bind_timelimit 10
idle_timelimit 60
bind_policy soft
nss_initgroups_ignoreusers oot,bindaemon,adm,lp,sync,shutdown,halt,mail,news,uucp,operator,games,gopher,ftp,nobody,nscd,vcsa,rpc,mailnull,smmsp,pcap,ntp,dbus,avahi,sshd,rpcuser,nfsnobody,haldaemon,oprofile,xfs,gdm,sabayon,isma,vboxadd
nss_base_passwd dc=example,dc=com?sub
nss_base_shadow dc=example,dc=com?sub
nss_base_group dc=example,dc=com?sub? &(objectCategory=group)(gidnumber=*)
nss_map_objectclass posixAccount user
nss_map_objectclass shadowAccount user
nss_map_objectclass posixGroup group
nss_map_attribute       uidNumber          uidNumber
nss_map_attribute       gidNumber          gidNumber
nss_map_attribute gecos cn
nss_map_attribute homeDirectory unixHomeDirectory
nss_map_attribute uniqueMember member
pam_login_attribute sAMAccountName
pam_member_attribute member
pam_groupdn CN=grupo2,CN=Users,DC=example,DC=com
Para sacar la linea nss_initgroups_ignoreusers ejecutar lo siguinte:
# awk -F: '{print $1}' /etc/passwd | sed -n -e '1x;1!H;${x;s-\n-,-gp}'
Fichero /etc/openldap/ldap.conf
URI ldap://win2k8.example.com/
BASE dc=example,dc=com
TLS_CACERTDIR /etc/openldap/cacerts
Cacheado de contraseñas
# /etc/init.d/nscd start
Agregando el servicio al arranque de la máquina:
# chkconfig nscd on
Fichero /etc/pam.d/system-auth añadir las lineas en negrita
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
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_ldap.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_ldap.so
account     required      pam_permit.so
#
password    requisite     pam_cracklib.so try_first_pass retry=3
password    sufficient    pam_unix.so md5 shadow nullok try_first_pass use_authtok
password    sufficient    pam_ldap.so use_authtok
password    required      pam_deny.so
#
session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
session     optional      pam_mkhomedir.so skel=/etc/skel/ umask=0022
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_ldap.so
Comprobar los usuarios y grupos que estén perfectamente conectados:
# getent passwd
# getent group
Con esto estaría listo. Si tenemos un problema es recomendable descomentar la primera linea del fichero /etc/ldap.conf para que muestre todo en modo debug y poder depurar mejor los errores.