Autenticación a un dominio AD con kerberos-centos

Objetivo:

Agregar Centos 6 a un dominio Active Directory, y configurar acceso de los usuarios del dominio al sistema con sus credenciales del dominio.

1. Instalar los paquetes:

krb5-libs

krb5-workstation

ntp

policycoreutils-gui

samba

samba-common

samba-winbind

Verificar:

# rpm -qa |grep "paquete"

2. Agregar en /etc/hosts una línea para llegar al controlador de dominio

aunque caiga el servicio DNS, por ejemplo

192.168.1.x    w2k3-domainControler1 w2k3-domainControler1.dominio.grupo.com.uy # datos del controlador de dominio

3. Configurar en /etc/ntp.conf el(los) servidor(es) de hora para el dominio, ya que Kerberos depende de

que la hora del servidor y de la estación de trabajo estén sincronizadas:

# vi /etc/ntp.conf

server 192.168.1.x #ip ntp server 1

server 192.168.1.x #ip ntp server 2

SELinux y iptables en caso de ser necesario:

4.   Habilitar en SELinux todas las funciones de Samba.

Sistema > Administración > Administración de SELinux (o system-config-selinux en consola).

En la ventana que aparece marcar todas las entradas que comienzan con samba.

Puede ser necesario reiniciar el sistema para que SELinux reetiquete los ficheros.

5.  Configurar el cortafuegos agregando al fichero /etc/sysconfig/iptables las líneas siguientes

-A INPUT -p udp -m udp --dport 137 -j ACCEPT

-A INPUT -p udp -m udp --dport 138 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT

antes de la primera con la palabra REJECT.

6.  Reiniciar el firewall con el comando

# service iptables restart

Esto es necesario para poder compartir impresoras, directorios, etc. desde CentOS.

7.  Configurar Kerberos. Editar /etc/krb5.conf:

# vi /etc/krb5.conf

[libdefaults]

 default_realm = DOMINIO.GRUPO.COM.UY

 dns_lookup_realm = true

 dns_lookup_kdc = true

 ticket_lifetime = 24h

 renew_lifetime = 7d

 forwardable = true

[realms]

 DOMINIO.COM.UY = {

  kdc = 10.1.1.1

  kdc = 10.1.1.2

  admin_server = 10.1.1.1

  default_domain = dominio.grupo.com.uy

 }

[domain_realm]

 .dominio.grupo.com.uy = DOMINIO.GRUPO.COM.UY

 dominio.grupo.com.uy = DOMINIO.GRUPO.COM.UY

[appdefaults]

pam = {

 debug = false

 ticket_lifetime = 360000

 renew_lifetime = 360000

 forwardable = true

 krb4_convert = false

}

8.   Ejecutar el comando:

# kinit

Administrator

Debería ejecutar sin errores, no mostrará nada en la salida.

9.  Configurar Samba. Editar /etc/samba/smb.conf:

[global]

   workgroup = GRUPO

   realm = DOMINIO.GRUPO.COM.UY

   password server = ipcontrolador1 ipcontrolador1

   security = ads

   idmap uid = 16777216-33554431

   idmap gid = 16777216-33554431

   template shell = /bin/bash

   winbind use default domain = true

   winbind offline logon = true

   # Personal Unix.

   winbind use default domain = yes

   winbind enum users = yes

   winbind enum groups = yes

   winbind nested groups = yes

   obey pam restrictions = yes

   allow trusted domains = no

   #idmap backend = idmap_rid:acme=16777216-33554431

   encrypt passwords = yes

10.  Terminada la edición reiniciar samba con el comando

# service smb restart

11.  Configurar winbind/nsswitch. Editar /etc/nsswitch.conf y editar

para que queden así las 3 líneas (cambiarlas, ya existen):

passwd:     files winbind

shadow:     files winbind

group:      files winbind

12.  Editar el fichero /etc/pam.d/system-auth para que quede similar a:

auth        required      pam_env.so

auth        sufficient    pam_fprintd.so

auth        sufficient    pam_unix.so nullok try_first_pass

auth        requisite     pam_succeed_if.so uid >= 500 quiet

auth        sufficient    pam_winbind.so cached_login use_first_pass

auth        required      pam_deny.so

account     required      pam_access.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_winbind.so cached_login

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_winbind.so cached_login use_authtok

password    required      pam_deny.so

session     optional      pam_keyinit.so revoke

session     required      pam_limits.so

session     optional      pam_oddjob_mkhomedir.so umask=0022 skel=/etc/skel/

session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid

session     required      pam_unix.so

Las líneas a agregar son las de ``pam_winbind.so'' y ``pam_oddjob_mkhomedir''.

13.  Editar el fichero /etc/pam.d/password-auth para que quede similar a:

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_winbind.so cached_login use_first_pass

auth        required      pam_deny.so

account     required      pam_access.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_winbind.so cached_login

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_winbind.so cached_login use_authtok

password    required      pam_deny.so

session     optional      pam_keyinit.so revoke

session     required      pam_limits.so

session     optional      pam_oddjob_mkhomedir.so umask=0022 skel=/etc/skel/

session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid

session     required      pam_unix.so

14.  Editar el fichero /etc/pam.d/fingerprint-auth para que quede similar a

auth        required      pam_env.so

auth        sufficient    pam_fprintd.so

auth        required      pam_deny.so

account     required      pam_access.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_winbind.so cached_login

account     required      pam_permit.so

password    required      pam_deny.so

session     optional      pam_keyinit.so revoke

session     required      pam_limits.so

session     optional      pam_oddjob_mkhomedir.so umask=0022 skel=/etc/skel/

session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid

session     required      pam_unix.so

15.  Editar el fichero /etc/pam.d/-auth para que quede similar a:

auth        required      pam_env.so

auth        [success=done ignore=ignore default=die] pam_pkcs11.so wait_for_card card_only

auth        required      pam_deny.so

account     required      pam_access.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_winbind.so cached_login

account     required      pam_permit.so

password    required      pam_pkcs11.so

session     optional      pam_keyinit.so revoke

session     required      pam_limits.so

session     optional      pam_oddjob_mkhomedir.so umask=0022 skel=/etc/skel/

session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid

session     required      pam_unix.so

16. Reiniciar el servicio winbind con

# service winbind restart

17.  Agregar a /etc/pam.d/system-auth la línea

session     required      pam_oddjob_mkhomedir.so skel=/etc/skel/ umask=0022

18.  Probar a unir la máquina al dominio:

# net ads join -U <domainadmin>@DOMINIO.GRUPO.COM.UY

19.  Una prueba para ver si todo anduvo bien:

# wbinfo -u

debe listar los usuarios del dominio.