Icono del sitio Un lugar en el mundo…

Integrando un servidor Samba en un Dominio Windows

El punto de partida es el siguiente: en tu empresa ya se usa un dominio con directorio activo de windows para la gestión de usuarios y grupos y quieres introducir una nueva maquina que haga funciónes de servidor de ficheros pero no te hace gracia pagar una nueva licencia y, además, quieres sacarle un poco más de rendimiento a esa máquina tan bonita que se ha comprado. La solución es usar Samba que desde su versión 3 se integra perfectamente con el directorio activo de windows. La chuleta que os cuento a continuación funciona tanto con windows server 2000 como con la versión 2003.

Nuestro servidor windows además de ser el controlador principal del dominio tiene activado el servicio de DNS y lo primero que debemos hacer es abrir manualmente un registro para nuestro servidor samba con su correspondiente IP. Los paquetes que deberíamos de tener instalados en nuestro debian son samba, winbind y krb5-user (creo que los nombres son los mismos en una Ubuntu Server).

Manos a la obra. En primer lugar nos aseguramos de que la resolución de nombres de nuestro servidor samba apunte correctamente al DNS del servidor que contiene nuestro directorio activo. Para ello editamos el fichero /etc/resolv.conf de esta forma:

search madrid.midominio.es
domain madrid.midominio.es
nameserver 192.168.1.2
nameserver 80.58.61.250
nameserver 80.58.61.254

En segundo lugar editamos el fichero /etc/krb5.conf para permitir la validación a través de kerberos con el siguiente contenido:

[libdefaults]
default_realm = MADRID.MIDOMINIO.ES

[realms]
MADRID.MIDOMINIO.ES = {
kdc = 192.168.1.2
admin_server = 192.168.1.2
}

[domain_realms]
.dominio.es = MADRID.MIDOMINIO.ES

Tres: editar el fichero /etc/nsswitch.conf que es quien regula el orden en el que se realizaran las búsquedas de usuarios, grupos, nombres de máquinas en nuestra máquina Linux. El contenido debería de ser algo así:

passwd: files winbind ldap
shadow: files winbind ldap
group: files winbind ldap

hosts: files dns wins
networks: files dns

services: files
protocols: files
rpc: files
ethers: files
netmasks: files
netgroup: files
publickey: files

bootparams: files
automount: files
aliases: files

Y cuatro: editamos el fichero /etc/samba/smb.conf:

[global]
unix charset = LOCALE
realm=MADRID.MIDOMINIO.ES
workgroup=MADRID
security=ADS
password server=*
winbind separator=+
log level = 1
syslog = 0
log file = /var/log/samba/%m
max log size = 50
winbind uid=10000-20000
winbind gid=10000-20000
winbind enum users=yes
winbind enum groups=yes
template homedir=/tmp
template shell=/bin/false

Y ya casi estamos. Lo primero que vamos a hacer ahora es validad nuestro fichero smb.conf mediante el comando testparm:

samba:/etc# testparm -s
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
'winbind separator = +' might cause problems with group membership.
Server role: ROLE_DOMAIN_MEMBER
[global]
unix charset = LOCALE
workgroup = MADRID
realm = MADRID.MIDOMINIO.ES
security = ADS
log level = 1
syslog = 0
log file = /var/log/samba/%m
max log size = 50
idmap uid = 10000-20000
idmap gid = 10000-20000
template homedir = /tmp
winbind separator = +
winbind enum users = Yes
winbind enum groups = Yes
samba:/etc#

Ahora tenemos que asegurarnos de que la sincronización horaria entre nuestros dos servidores es correcta. Para ello usamos el comando net time set:

samba:/etc# net time set
mié nov 28 22:19:23 CET 2007
samba:/etc#

Puesto que es muy importante que esta sincronización sea permanente lo mejor es programar la ejecución de este comando en nuestro cron. Por ejemplo así:

samba:/etc# crontab -l
# m h dom mon dow command
0 5 * * * /usr/bin/net time set

samba:/etc#

Hora, finalmente, de añadir nuestra máquina Linux al directorio activo de windows.

samba:/etc# net ads join -UAdministrador%micontraseña
Using short domain name -- MADRID
Joined 'SAMBA' to realm 'MADRID.MIDOMINIO.ES'
samba:/etc#

Donde sustituiremos los parámetros que acompañan al comando net ads join por un usuario y su contraseña (Administrador y micontraseña respectivamente en este caso) con privilegios de administradores del dominio. Y ya debería de estar todo funcionando. Ahora podemos comprobar que la resolución es correcta y que podemos usar los usuarios y grupos de nuestro directorio activo para validar permisos en samba mediante los siguientes comandos: wbinfo nos lista los usuarios y grupos del directorio activo.

samba:/etc# wbinfo -u
MADRID+administrador
MADRID+invitado
MADRID+tsinternetuser
MADRID+krbtgt
MADRID+arturof
MADRID+josemaria
...

samba:/etc# wbinfo -g
BUILTIN+administrators
BUILTIN+users
MADRID+equipos del dominio
MADRID+controladores de dominio
MADRID+administradores de esquema
MADRID+administración de empresas
MADRID+publicadores de certificados
MADRID+admins. del dominio
MADRID+usuarios del dominio
MADRID+invitados de dominio
MADRID+propietarios del creador de directivas de grupo
MADRID+dnsupdateproxy
MADRID+administracion
MADRID+finanzas
MADRID+proyectos
MADRID+sistemas
...

Por último comprobaremos que la validación de usuarios y grupos funciona también vía NSS mediante getent:

samba:/home/josemaria# getent passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
...
MADRID+administrador:*:10000:10000:Administrador:
/tmp:/bin/false
MADRID+invitado:*:10001:10000:Invitado:/tmp:/bin/false
MADRID+tsinternetuser:*:10002:10000:TsInternetUser:
/tmp:/bin/false
MADRID+krbtgt:*:10003:10000:krbtgt:/tmp:/bin/false
MADRID+arturof:*:10004:10000:Arturo:/tmp:/bin/false
...
samba:/home/josemaria# getent group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
...
MADRID+equipos del dominio:x:10001:
MADRID+controladores de dominio:x:10002:MADRID+itziarr
MADRID+administradores de esquema:x:10003:MADRID+administrador
MADRID+administración de empresas:x:10004:MADRID+administrador
MADRID+publicadores de certificados:x:10005:
...

A partir de ahora podremos usar los usuarios y grupos almacenados en el directorio activo de windows para conceder acceso a los recursos de samba de esta forma:

[sistemas]
path = /media/samba/sistemas
guest ok = no
read only = no
valid users = @MADRID+sistemas-r @MADRID+sistemas-rw @BUILTIN+administrators
read list = @MADRID+sistemas-r @BUILTIN+administrators
write list = @MADRID+sistemas-rw
force group = @MADRID+sistemas-rw
create mask = 0775
directory mask = 0775

ACTUALIZACI?N: El capítulo Active Directory Domain with Samba Domain Member Server del libro Samba 3 by example es un excelente complemento y ampliación a esta entrada.

Salir de la versión móvil