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.