Integrando un servidor Samba en un Dominio Windows

corte del icono de samba 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.

  • Nombre de dominio: madrid.midomino.es
  • Nombre NETBIOS del dominio: MADRID
  • Nombre e IP del servidor windows: win2k / 192.168.1.2
  • Nombre e IP del servidor Debian: samba / 192.168.1.3

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.

33 comentarios en “Integrando un servidor Samba en un Dominio Windows”

  1. Bufff… a trasmano me pillas, compañero. Se trata de un servidor que instalé para una ONGD hace ahora más de cuatro años. Lo único que te puedo decir es que en su momento funcionó tal y como aparece en este texto salvo que haya habido algún descuido por mi parte a la hora de transcribirlo. Durante un par de años tuve contacto con ellos y acceso por ssh a este servidor, así que podría haberlo comprobado pero ahora, aunque posiblemente aún podría entrar, no me parece éticamente muy correcto… Lo siento 🙁

  2. Muy buenas,

    He seguido el manual, junto a otros y bueno, he de decir que ha funcionado a la primera aunque debo añadir alguna aclaración y ver una duda en los parámetros del recurso samba.

    Aclarar que hay que hacer propietario del directorio al grupo del dominio que se le vaya a dar permisos, al menos en mi caso siedo root y con máscara 775, los usuarios del grupo no podían crear ficheros, esto es debido a que los permisos de samba prevalecen sobre los del sistema y si la máscara es 755 nos jode la marrana.

    La duda, las opciones -rw y -r que añades al final de los grupos en ‘mi’ debian que es squeeze casca el testparm y no funciona, así que con valid users, write list y las máscaras tira millas. ¿hiciste algo al respecto?

    Por cierto, has usado sticky bit o los guid y setuid?? va bien?

    Muy buen articulo.
    Saludos

  3. Hola amigo,

    Artículo muy bonito, felicidades.

    He seguido los pasos, pero estoy para hacer frente a algunos problemas al entrar en el Active Directory.
    Me aparece el mensaje siguiente regresó y el anuncio o el nombre de mi servidor como un objeto está desactivado.
    ——————————————-
    SLinux:/etc# net ads join -UAdministrator%minhasenha
    Using short domain name — GUAN
    Failed to set servicePrincipalNames. Please ensure that
    the DNS domain of this server matches the AD domain,
    Or rejoin with using Domain Admin credentials.
    Disabled account for ‘SLINUX’ in realm ‘GUAN.BR’
    ——————————————-

    Cualquier ayuda será bienvenida, gracias

  4. Buenos días: En el contexto de un servidor Debian Etch tratando de integrarlo como servidor de archivos en un entorno Windows Server 2008,
    he seguido los pasos del tutorial, y ante la ejecución del comando “net ads join…” obtengo el mensaje de error “Server not found in Kerberos database”.
    Cualquier ayuda será bienvenida, gracias

  5. Tengo una maquina virtual en un hyperv, donde he instalado suse 11.xx, y quiero pegarlo al dominio que se encuentra en el mismo server donde se encuentra el hiperv, pero al generar la configuración que recomiendan no me funciona, ni siquiera puedo darle ping al server hiperv. Ayuda por favor, funciona suse en una virtual así como la tengo o no?, espero me proporcionen ayuda.

    Gracias,

    JRosales

  6. Hola, Necesitaria ayuda, resulta que cuando intento añadir la máquina Linux al directorio activo de windows me da un error con el archivo de password:

    linux2:~$ net ads join -U Administrador@dominio
    Enter Administrador@bueno_aires’s password:
    [2011/03/31 13:30:07.705699, 0] passdb/secrets.c:73(secrets_init)
    Failed to open /var/lib/samba/secrets.tdb
    Failed to join domain: Unable to open secrets database
    linux2:~$

    me quede trabado en este punto, gracias

  7. Que buen trabajo Felicitaciones. Una inquietud si ya tengo el servidor Linux Fedora y voy a agregar un Windows 2008 como controlador de dominio. Hay cambios sustanciales?

  8. Hola.

    quiero comentar que he logrado hacer el net ads join de mi maquina linux ubuntu hacia mi servidor controlador de dominio windows server 2008 con AD.

    De hecho puedo acceder desde un cliente auntenticado en windows por entorno de Red sin problema.

    sin embargo al momento de ejecutar el comando

    net ads join -U administrador

    me sale el siguiente mensaje
    No DNS domain configured for miserverlinux . Unable to perform DNS Update.
    DNS update failed!

    Creo que tiene que ver con algo del archivo etc/hosts

    el mio tiene lo siguiente.

    127.0.0.1 localhost
    127.0.1.1 miserverlinux
    192.168.20.53 miserverlinux.midominio.local proxy
    192.168.20.3 serverwindowsad.midominio.local

    Existe algún error en esa configuración de mi archivo hosts ?

    En espera de su aporte!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *