Cómo configurar SAMBA para que los
usuarios accedan a un recurso mediante
validación en un dominio NT
Víctor Martín Goyeneche
1. Notas aclaratorias
Este documento no trata de ser una verdad absoluta ni nada por el estilo. Estará lleno de fallos, errores de concepto y un montón de cosas más, con lo que cualquiera puede modificar, corregir o ampliar esta pequeña guía que no es más que una serie de conclusiones a la que llegué después de muchos quebraderos de cabeza que espero que pueda evitar a alguien
2. Introducción
SAMBA es la implementación en plataformas UNIX del protocolo de comunicación de equipos Windows conocido como SMB. La idea consiste en conseguir que cohabiten un servidor NT con un servidor Linux de manera que las tareas de administración de usuarios se sigan administrando por el servidor NT mientras que las tareas más pesadas como la compartición de ficheros las soporte el servidor Linux.
Para conseguir este propósito, se deberá lograr configurar SAMBA en el servidor Linux como un servidor dentro de un dominio NT, de manera que confíe en la autenticación realizada por el servidor NT y logre trabajar con los usuarios y grupos del dominio.
Esto puede ser muy útil como primer paso para migrar una red basada en Windows a una basada en Linux, ya que poco a poco, el servidor Linux ganará responsabilidades que le irá quitando al servidor NT
3. Configuración de SAMBA
El primer paso consiste en dar de alta el nuevo servidor dentro del dominio, y para eso se deberá entrar en el servidor NT y añadir el nuevo servidor. Es importante recordar el nombre del servidor linux deberá ser el mismo que le asignemos en NT, y para ello podemos utilizar la instrucción
$hostname NombreDelServidor
La configuración de SAMBA se realiza en el fichero /etc/smb.conf. En este fichero se establecen las características del servidor, así como los recursos que serán compartidos en la red. El fichero se encuentra dividido en secciones, encabezadas por una palabre entre corchetes. Los valores de las opciones aparecen según la forma "etiqueta = valor ".
Para configurarlo, se ha utilizado la herramienta webmin, aunque después se haya retocado a mano. Esta herramienta publica en el puerto 10000 una aplicación web de configuración de todos los servicios de red del servidor.
3.1. Smb.conf
#fichero /etc/smb.conf [global]
add user script = /usr/bin/useradd -s/bin/false %u printing = lprng
winbind uid = 10000-20000 dns proxy = No
encrypt passwords = yes template shell = /bin/false
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 template homedir = /home/%U
max log size = 0 preferred master = no
password server = SERVIDORNT obey pam restrictions = Yes
delete user script = /usr/bin/userdel %u security = domain
winbind separator = +
server string = Nombre del servidor Linux en entorno de red workgroup = DOMINIONT
winbind gid = 10000-20000 comment = samba
winbind enum groups = yes
log file = /var/log/samba/%m.log netbios name = SERVIDORLINUX netbios aliases = SERVIDORLINUX os level = 10
winbind enum users = yes [homes]
browseable = no
comment = Home Directories writeable = yes
available = no create mask = 0664 directory mask = 0775 [printers]
comment = All Printers path = /var/spool/samba printable = Yes browseable = No [DirCompartido] path = .../DirCompartido writeable = yes create mask = 0740 directory mask = 0750 hide unreadable = yes inherit permissions = yes hide local users = yes map archive = yes map system = yes map hidden = yes
Dentro del fichero, existen una serie de opciones que requieren un comentario
[global]
add user script : script para añadir un usuario winbind uid = rango de usuarios de dominio NT
template shell = ruta donde está el shell que se ejecutará tras login template homedir = directorio home de cada usuario
password server = servidor de dominio que valida a los usuarios delete user script = script para eliminar un usuario
security = tipo de validación en el caso de domain, las valida el servidor de dominio ( password server)
winbind separator = separador que se utiliza entre el dominio y el usuario server string = descripción del servidor
workgroup = dominio
winbind gid = grupo de los usuarios
log file = ficheros de log. En este caso, /var/log/samba/%m.log, un fichero por cada máquina que intenta acceder
netbios name = nombre NETBIOS netbios aliases = alias NETBIOS Además también incluyen las etiquetas map archive = yes
map system = yes map hidden = yes
Que sirven para que Samba sea capaz de mapear los atributos de los ficheros en Windows a partir de los atributos en Linux
3.2. Winbind
Como se puede apreciar, se está utilizando un servicio llamado winbind, que es el que se encarga de validar y ofrecer los servicios de nombres de NT,de modo que no acaba aquí la configuración, ahora habrá que permitir que los usuarios validados en un dominio NT puedan acceder a los servicios del sistema, y para ello hay que modificar el fichero
/etc/ nsswitch.conf.
En nuestro caso se añade winbind en passwd y en group de manera que queda así.
#/etc/nsswitch.conf
passwd: files winbind nisplus shadow: files nisplus
group: files winbind nisplus
Una vez añadido esto, ya se puede lanzar el servicio winbindd, que se deberá lanzar desde /etc/rc.d/init.d/winbind start
getent passwd obtiene una salida similar a /etc/passwd pero con todos los usuarios del dominio getent group obtiene una salida con todos los grupos del dominio
3.3. PAM
El último paso consiste en conseguir que los usuarios puedan entrar en el servidor (siempre y cuando tengan privilegios para ello).
Se podría permitir que los usuarios que se validan en el servidor NT pudieran hacer iniciar sesión, conectarse por telnet etc. En este caso, sólo se va a permitir acceder a los recursos que le permita Samba
Para esto se utiliza PAM, como sistema de autenticación. Para ello se deben modificar una serie de ficheros que se encuentran en /etc/pam.d/ dependiendo de los servicios que necesitas permitir la validación.
En este caso se han modificado el fichero system-auth, que es genérico y se llama desde todos los servicios y el fichero login, para permitir este servicio
3.3.1. /etc/pam.d/system-auth
#fichero /etc/pam.d/system-auth auth required /lib/security/pam_env.so
auth required /lib/security/pam_unix.so use_first_pass likeauth nullok auth required /lib/security/pam_deny.so
account required /lib/security/pam_unix.so password required /lib/security/pam_cracklib.so
password sufficient /lib/security/pam_unix.so nullok use_authtok md5 shadow password required /lib/security/pam_deny.so
session required /lib/security/pam_limits.so session required /lib/security/pam_unix.so
3.3.2. /etc/pam.d/login
#fichero /etc/pam.d/logi
auth required /lib/security/pam_securetty.so auth required /lib/security/pam_nologin.so
auth sufficient /lib/security/pam_stack.so service=system-auth
# Esta linea se eliminará en el caso de querer validación local de usuarios auth required /lib/security/pam_winbind.so
account sufficient /lib/security/pam_winbind.so
account required /lib/security/pam_stack.so service=system-auth password required /lib/security/pam_stack.so service=system-auth session required /lib/security/pam_stack.so service=system-auth session optional /lib/security/pam_console.so
El mecanismo de estos ficheros consiste en una serie de reglas que se deben cumplir para permitir el acceso al servicio. Así auth required /lib/security/pam_securetty.so comprueba mediante la librería pam_securetty.so si se está ejecutando desde un terminal seguro, y esta condición es requerida, es decir obligatoria.
También se requiere en este ejemplo que se la autenticación se valide mediante pam_winbind. Y esto signfica que los usuarios locales de la máquina Linux no podrán iniciar sesión, porque se requiere para iniciar sesión ser validado mediante winbind.
En el caso de la cuenta de usuario, account, es suficiente si pam_winbind lo valida, con lo que si el dominio NT valida la cuenta se podría hacer login en la máquina Linux.
4. Los usuarios de dominio y LINUX
El último paso consiste en sincronizar la base de datos de usuarios de dominio y la del servidor NT, para ello debe ejecutar la orden
smbpasswd -j <Dominio> -r <Servidor PDC> -U <usuario con claves administrativas de dominio>
A continuación deberás permitir que el usuario inicie sesión en el servidor LINUX.
A partir de aquí, el usuario podrá ver el contenido compartido del servidor, y si existe una carpeta en home con su nombre de usuario es posible que la vea, aunque podría suceder que no fuera capaz de validarse para ese recurso. Esto es debido a que para LINUX, el usuario será<DOMINIO>+<USUARIO>, en vez de
<USUARIO>con lo que no considera que el usuario sea propietario del recurso y no le permite acceder.
Para cambiar el propietario de un recurso se utiliza el comando chown.
chown <usuario ( DOMINIO+USUARIO) > <recurso>
También puede cambiar el grupo de un recurso
chgrp < ( DOMINIO +GRUPO)> <recurso>
Una última nota, los usuarios del dominio deberán tener permiso para validarse en el servidor, con lo que se deberá añadir a los usuarios inicio de sesión en el servidor Linux.
5. Para saber más
el "Samba Cómo" una lectura imprescindible para empezar (http://www.insflug.org/COMOs/Samba-Como/Samba-Como.html)
Integrating Linux into Windows Networks (ranger.dnsalias.com/mandrake/samba/ Integrating%20Linux%20into%20Windows%20Networks.pdf)