Páginas

sábado, 17 de septiembre de 2011

Unir Linux a Active Directory

Unir Linux a un dominio Active Directory

Puede parecer mucha cosa, lo que lo que en realidad lo complica es que, por diseño, Windows dificulta la interoperatibilidad. Menos mal que los heroicos programadores de Linux, como el equipo Samba, hacen posible la interoperatibilidad y las redes mixtas.

Las cuentas de usuario son gestionadas en el servidor AD, disponibles para Linux a través de winbind y pam. De manera que no es necesario crear cuentas duplicadas en su máquina Linux.

Sus cuentas locales (en la máquina Linux), son invisibles para Active Directory. Permiten acceder libremente al servidor tanto de manera remota utilizando SSH, como localmente.

Después de tener Samba depurado y en marcha, será tan sencillo como hacer una réplica para los demás hosts Linux que necesiten ser miembros de AD. Dicho esto, para hacernos una idea del escenario::

Dominio: dominio.local

- Servidor nombre: srv-dcfs-01
- Server nombre FQDN del dominio: srv-dcfs-01.dominio.local
- IP Servidor: 192.168.3.1
- IP DNS: 192.168.3.1
- IP PC Linux: 192.168.3.55
- Cliente Linux nombre: maquina-01


En una red Windows gestionada por un dominio AD puede agregar hosts Linux que puedan acceder a los hosts Windows. Lo que quiere es que los equipos Linux sean auténticos mienbros del dominio y manejarlos como cualquier otro objeto AD, tener una entrada unificada para todos los hosts y gestionar usuarios Linux desde AD. Tiene un KDC Kerberos y su DNS en orden.

Paquetes necesarios. Hará falta tener instalados todos los paquetes cliente de Samba, Winbind y Kerberos y compilar en Samba soporte para Kerberos, LDAP, Active Directory y Winbind. Aquí está todo lo que necesita:

Samba 3.0.20 o superior
MIT kerberos 1.4 o superior
OpenLDAP
Winbind 3.0.20 o superior (forma parte de Samba pero pueden estar en distintos paquetes)

Soporte para los compilados en Samba:
Kerberos
LDAP
Winbind
Active Directory

Debian, Ubuntu, mantiene actualizados los binarios además de incluir las opciones necesarias. Es decir que está a un aptitude install.

Samba necesita sambacommon, samba-doc, smbclient y winbind.

Que versión de samba tengo instalada?

$ /usr/sbin/smbd --version
Version 3.5.8
$ /usr/sbin/winbindd --version
Version 3.5.8

Necesitamos los paquetes clientes krb5-config, krb5-doc, krb5-kdc, krb5-user, ldap-utils, ldapscripts, libldap2 y slapd.

Si quiere averiguar todas las opciones compiladas:
$ /usr/sbin/smbd -b | grep -i ldap
HAVE_KRB5_H
HAVE_LDAP
HAVE_LDAP_DOMAIN2HOSTLIST

$ /usr/sbin/smbd -b | grep -i krb5
HAVE_KRB5_H
HAVE_ADDRTYPE_IN_KRB5_ADDRESS
HAVE_KRB5

$ /usr/sbin/smbd -b | grep -i ads
WITH_ADS
WITH_ADS

$ /usr/sbin/smbd -b | grep -i winbind
WITH_WINBIND
WITH_WINBIND

También necesita cuenta(s) para usuario(s) y equipo(s) Linux en AD:

- Tener un servidor NTP (Protocolo de señales horarias de red) disponible para su LAN y los hosts sincronizados, (si, como las pelis de detectives "sincronizemos los relojes").

- Borrar todos los ficheros .tdb si existen y los localizados en /var/lib/samba. Si desea haga copia de seguridad.

- Detenga los demonios Samba y Winbind
# /etc/init.d/smbd stop
# /etc/init.d/winbind stop

- Crear un grupo Linux para las cuentas de equipo.
# groupadd machines

- Configurar /etc/hosts
Agregar
192.168.3.1 srv-dcfs-01.dominio.local srv-dcfs-01
192.168.3.55 maquina-01.dominio.local maquina-01

- Configurar /etc/resolv.conf
#/etc/resolv.conf
domain dominio.local
search dominio.local
nameserver 192.168.3.1
nameserver 192.168.3.2

Ahora pruebe a conectar con el KDC. kinit es parte del paquete kstart es decir que si no lo tiene tendrá que instalarlo. Fíjese que dominio.local debe estar en "mayusculas". En mi caso he utilizado la cuenta Administrator (en inglés), porque la instalación está en inglés:
# kinit Administrator@DOMINIO.LOCAL
Password for Administrator@DOMINIO.LOCAL

- Configurar Samba.

/etc/samba/smb.conf
#
[global]
workgroup = dominio
netbios name = debian-01
realm = DOMINIO.LOCAL
server string = Samba server one
security = ADS
encrypt passwords = yes

idmap uid = 10000-20000
idmap gid = 10000-20000
winbind use default domain = yes
winbind enum users = yes
winbind enum groups = yes
winbind separator = +

log file = /var/log/samba/log
log level = 2
max log size = 50
hosts allow = 192.168.3.

[homes]
comment = Home Directories
valid users =%S
read only = No
browseable = No

- Configurar NSS.

#/etc/nssswitch.conf

passwd:       compat files winbind
group:          compat files winbind
shadow:       compat files

hosts:          files dns winbind

En este momento inicie Samba y Winbind. Una el pc Linux al dominio Active Directory y establezca una Machine Trust Account. con la cuenta de Administrator del servidor AD. Vamos al servidor AD de Windows (srv-dcfs-01).
Inicio, Ejecutar, cmd
C:>netdom add maquina-01

De vuelta a la máquina Linux:
# net ads join -U Administrator
Enter Administrator's password:
Using short domain name -- DOMAIN
Joined 'MAQUINA-01' to realm 'DOMINIO.LOCAL'

Debería haber una nueva cuenta de equipo con el nombre NetBIOS de su máquina Linux en Active Directory, en la carpeta equipos (o computer).

Comprobar la versión de Kerberos:

$ dpkg -l | grep krb5
ii  krb5-admin-server  1.6.dfsg.4~beta1-5lenny6   MIT Kerberos master server (kadmind)
ii  krb5-config  1.22   Configuration files for Kerberos Version 5
ii  krb5-kdc   1.6.dfsg.4~beta1-5lenny6   MIT Kerberos key server (KDC)
ii  krb5-pkinit 1.6.dfsg.4~beta1-5lenny6   PKINIT plugin for MIT Kerberos
ii  krb5-user   1.6.dfsg.4~beta1-5lenny6   Basic programs to authenticate using MIT Kerberos
ii  libkrb53    1.6.dfsg.4~beta1-5lenny6   MIT Kerberos runtime libraries

Lista de paquetes Debian:
$ apt-cache search krb5
krb5-clients - Secure replacements for ftp, telnet and rsh using MIT Kerberos
krb5-ftpd - Secure FTP server supporting MIT Kerberos
ssh-krb5 - secure shell client and server (transitional package)
krb5-admin-server - MIT Kerberos master server (kadmind)
krb5-config - Configuration files for Kerberos Version 5
krb5-doc - Documentation for MIT Kerberos
krb5-kdc - MIT Kerberos key server (KDC)
krb5-user - Basic programs to authenticate using MIT Kerberos
libkrb5-3 - MIT Kerberos runtime libraries
libpam-krb5 - Modulo PAM para MIT Kerberos

Si es necesario instalar Kerberos y kstart
$  sudo apt-get install krb5-{admin-server,kdc} kstart

Fichero de configuración:
# /etc/krb5.conf

 [libdefaults]
default_realm = DOMINIO.LOCAL
clockskw = 300

[realms]
DOMINIO.LOCAL = {
kdc =192.168.3.1
default_domain = dominio.local
admin_server = 192.168.3.1  
}

dominio.local = {
kdc = 192.168.3.1
default_domain = dominio.local
admin_server = 192.168.3.1
}

dominio = {
kdc = 192.168.3.1
default_domain = dominio
admin_server = 192.168.3.1
}

[logging]
kdc = FILE:/var/log/krb5/krb5kdc.log
admin_server = FILE:/var/log/krb5/kadmind.log

default = SYSLOG:NOTICE:DAEMON

 [domain_realms]
.dominio = dominio
.dominio.local = dominio

[appdefaults]
pam = {
ticket_lifetime = 1d
renew_lifetime =1d
forwardable = true
proxiable = false
retain_after_close = false
minimum_uid = 0 try_first_pass = true }

Por último, hay que configurar los PAM para permitir la autenticación vía winbind. Editar los siguientes ficheros para incluir los módulos winbind y el módulo pam_mkhomedir.so
- Configurar PAM.

# cp /etc/pam.d/login /etc/pam.d/login-back

auth requisite pam_securetty.so
auth requisite pam_nologin.so
auth required pam_env.so
auth sufficient pam_winbind.so
auth required pam_unix.so nullok use_first_pass

# cp /etc/pam.d/common-account /etc/pam.d/common-account-back


account requisite pam_time.so
account sufficient pam_winbind.so
account required pam_unix.so

# cp /etc/pam.d/common-session /etc/pam.d/common-session


session required pam_unix.so
session optional pam_lastlog.so
session optional pam_motd.so
session optional pam_mail.so standard noenv
session required pam_mkhomedir.so skel=/etc/skel umask=0027


Agradecimientos especiales a:
Joel Barrio Dueñas por su desinteresado trabajo "Servidores en Linux".
A Carla Schroder por su excelente libro "Redes en Linux".


Linux es genial!.