Configurando samba a fondo

Configurando samba a fondo

Introducción.

Acerca del protocolo SMB.

SMB (acrónimo de Server Message Block) es un protocolo, del Nivel de Presentación del modelo OSI de TCP/IP, creado en 1985 por IBM. Algunas veces es referido también como CIFS (Acrónimo de Common Internet File System, http://samba.org/cifs/) tras ser renombrado por Microsoft en 1998. Entre otras cosas, Microsoft añadió al protocolo soporte para enlaces simbólicos y duros así como también soporte para archivos de gran tamaño. Por mera coincidencia esto ocurrió por la misma época en que Sun Microsystems hizo el lanzamiento de WebNFS (una versión extendida de NFS, http://www.sun.com/software/webnfs/overview.xml). SMB fue originalmente diseñado para trabajar a través del protocolo NetBIOS, el cual a su vez trabaja sobre NetBEUI (acrónimo de NetBIOS Extended User Interface, que se traduce como Interfaz de Usuario Extendida de NetBIOS), IPX/SPX (acrónimo de Internet Packet Exchange/Sequenced Packet Exchange, que se traduce como Intercambio de paquetes inter-red/Intercambio de paquetes secuenciales) o NBT, aunque también puede trabajar directamente sobre TCP/IP.

Acerca de Samba.

SAMBA  es un conjunto de programas, originalmente creados por Andrew Tridgell y actualmente mantenidos por The SAMBA Team, bajo la Licencia Publica General GNU, y que implementan en sistemas basados sobre UNIX™ el protocolo SMB. Sirve como reemplazo total para Windows™ NT, Warp™, NFS™ o servidores Netware™.

Equipamiento lógico necesario.

Los procedimientos descritos en este manual han sido probados para poder aplicarse en sistemas con CentOS 5 o Red Hat™ Enterprise Linux 5, o equivalentes o versiones posteriores, y al menos Samba 3.0.33 o versiones posteriores. Necesitará tener instalados los siguientes paquetes:

samba: Servidor SMB.
samba-client: Diversos clientes para el protoclo SMB.
samba-common: Archivos necesarios para cliente y servidor.

Instalación a través de yum.

Si utiliza CentOS 5 y 6 o Red Hat™ Enterprise Linux 5 o 6, y versiones posteriores, solo se necesita ejecutar lo siguiente para instalar o actualizar el equipamiento lógico necesario:

yum -y install samba samba-client samba-common

En el caso de CentOS 6 y Red Hat™ Enterprise Linux 6, se instalará Samba 3.5.4. En el caso de CentOS 5 y Red Hat™ Enterprise Linux 5, se instalará Samba 3.0.33, sin embargo hay opción a utilizar en su lugar Samba 3.5.4 instalando los paquetes samba3x, samba3x-client y samba3x-common.

yum remove samba samba-client samba-common
yum -y install samba3x samba-client3x samba-common3x

Procedimientos.

SELinux y el servicio smb.

A fin de que SELinux permita al servicio smb funcionar como Controlador Primario de Dominio (PDC, Primary Domain Controler), utilice el siguiente mandato:

setsebool -P samba_domain_controller 1

A fin de que SELinux permita al servicio smb compartir los directorios de inicio de los usuarios locales del sistema, utilice el siguiente mandato:

setsebool -P samba_enable_home_dirs 1

Para definir que un directorio será compartido a través del servicio smb, como por ejemplo /var/samba/publico, y que se debe considerar como contenido tipo Samba, se utiliza el siguiente mandato:

chcon -t samba_share_t /var/samba/publico

Cada nuevo directorio que vaya a ser compartido a través de Samba, debe ser configurado como acaba de describirse antes de ser configurado en el archivo /etc/samba/smb.conf. A fin de que SELinux permita al servicio smb compartir todos los recursos en modo de solo lectura, utilice el siguiente mandato:

setsebool -P samba_export_all_ro 1

A fin de que SELinux permita al servicio smb compartir todos los recursos en modo de lectura y escritura, utilice el siguiente mandato:

setsebool -P samba_export_all_rw 1

Alta de cuentas de usuario.

Asigne una clave de acceso al usuario root. Ésta puede ser distinta a la utilizada en el sistema.

smbpasswd -a root

Es importante sincronizar las cuentas entre el servidor Samba y las estaciones Windows™. Es decir, si en una máquina con Windows™ ingresamos como el usuario fulano con clave de acceso 123qwe, en el servidor Samba deberá existir también dicha cuenta con ese mismo nombre y la misma clave de acceso. Como la mayoría de las cuentas de usuario que se utilizarán para acceder hacia Samba no requieren acceso al intérprete de mandatos del sistema, no es necesario asignar clave de acceso con el mandato passwd y se deberá definir /sbin/nologin o bien /bin/false como intérprete de mandatos para la cuenta de usuario involucrada.

useradd -s /sbin/nologin usuario-windows
smbpasswd -a usuario-windows

Es opcional asignar clave de acceso con el mandato passwd. Si se necesita que las cuentas se puedan utilizar para acceder hacia otros servicios como serían Telnet, SSH, etc, es decir, que se permita acceso al intérprete de mandatos, será necesario especificar /bin/bash como intérprete de mandatos y además se deberá asignar una clave de acceso en el sistema con el mandato passwd:

useradd -s /bin/bash usuario-windows
passwd usuario-windows
smbpasswd -a usuario-windows

El archivo lmhosts

Es necesario empezar resolviendo de manera local los nombres NetBIOS, asociándolos con las direcciones IP correspondientes, en el archivo /etc/samba/lmhosts (lmhosts es acrónimo de LAN Manager hosts). Edite el archivo /etc/samba/smb.conf con cualquier editor de texto simple.

vim /etc/samba/lmhosts

Para fines prácticos el nombre NetBIOS debe tener un máximo de 11 caracteres. Normalmente se utiliza como referencia el nombre corto del servidor o el nombre corto que se asigno como alias a la interfaz de red. Si se edita el archivo /etc/samba/lmhosts, se encontrará un contenido similar al siguiente:

127.0.0.1       localhost

Se pueden añadir los nombres y direcciones IP de cada uno de los anfitriones de la red local. Como mínimo debe encontrarse el nombre del anfitrión Samba y su dirección IP correspondiente, y de manera opcional el resto de los anfitriones de la red local. La separación de espacios se hace con un tabulador. Ejemplo:

127.0.0.1       localhost
192.168.70.1     servidor
192.168.70.2     joel
192.168.70.3     blanca
192.168.70.4     alejandro
192.168.70.5     sergio
192.168.70.6     isaac
192.168.70.7     finanzas
192.168.70.8     direccion

Parámetros principales del archivo smb.conf.

Edite el archivo /etc/samba/smb.conf con cualquier editor de texto simple.

vim /etc/samba/smb.conf

Dentro de este archivo, encontrará información que será de utilidad, y que está comentada con almohadillas (símbolo #), y varios ejemplos comentados con punto y coma (símbolo ;), siendo estos últimos los que se pueden tomar como referencia para configurar.

Parámetro workgroup.

Se establece el grupo de trabajo definiendo el valor del parámetro workgroup asignando un grupo de trabajo deseado:

workgroup = MIGRUPO

Parámetro netbios name.

De manera opcional, se puede establecer con el parámetro netbios name otro nombre distinto para el servidor, si acaso ésto fuese necesario, pero siempre tomando en cuenta que dicho nombre deberá corresponder con el establecido en el archivo /etc/samba/lmhosts:

netbios name = servidor

Parámetro server string.

Este parámetro es de carácter descriptivo. Puede utilizarse un comentario breve que de una descripción del servidor.

server string = Servidor Samba %v en %L

Parámetro hosts allow.

La seguridad es importante, y ésta se puede establecer estableciendo la lista de control de acceso, la cual definirá qué máquinas, o redes, podrán acceder hacia el servidor. El parámetro hosts allow sirve para determinar ésto. Si la red consiste en las máquinas con dirección IP desde 192.168.70.1 hasta 192.168.70.126, el rango de direcciones IP que se definirá en hosts allow será 192.168.70. de modo tal que solo se permitirá el acceso dichas máquinas. En el siguiente ejemplo se definen las redes 192.168.70.0/24 y 192.168.37.0/24, definiendo los tres primeros octetos de la dirección IP de red, así como cualquier dirección IP de la red 127.0.0.0/8 (retorno del sistema o loopback), siendo necesario definir solo el primer octeto de dicho segmento:

hosts allow = 127., 192.168.70., 192.168.37.

Parámetro interfaces.

El parámetro interfaces permite establecer desde que interfaces de red del sistema se escucharán peticiones. Samba ignorará todas las peticiones provenientes desde cualquier interfaz, o dirección IP, sin especificar. Ésto es útil cuando Samba se ejecuta en un servidor que sirve además de puerta de enlace para la red local, impidiendo se establezcan conexiones hacia este servicio desde fuera de la red local. Los valores aceptados para este parámetro es una lista, separada por comas, o espacios, con los nombres de las interfaces (lo, eth0, eth1, etc.), y direcciones IP utilizada en una interfaz en partícular, con la máscara de sub-red en formato CIDR (Classless Inter-Domain Routing), es decir, expresada en bits. Ejemplo:

interfaces = lo, eth1, 192.168.70.254/25

Parámetro remote announce.

La opción remote announce se encarga de que el servicio nmbd se anuncie a si mismo de forma periódica hacia una red en particular y un grupo de trabajo específico. Esto es particularmente útil si se necesita que el servidor Samba aparezca no solo en el grupo de trabajo al que pertenece sino también otros grupos de trabajo. El grupo de trabajo de destino puede estar en donde sea mientras exista una ruta y sea posible la difusión exitosa de paquetes. Los valores que pueden ser utilizados son direcciones IP de difusión (broadcast) de la red utilizada (es decir la última dirección IP del segmento de red) y/o nombres de grupos de trabajo. En el siguiente ejemplo se define que el servidor Samba se anuncie a través de las direcciones IP de difusión 192.168.70.127 (que corresponde a la dirección IP de difusión de la red 192.168.70.0/25) y 192.168.2.255 (que corresponde a la dirección IP de difusión de la red 192.168.2.0/24) y hacia los grupos de trabajo DOMINIO1 y DOMINIO2.

remote announce = 192.168.70.127/DOMINIO1, 192.168.2.255/DOMINIO2

Impresoras en Samba.

Las impresoras se comparten de modo predeterminado, así que solo hay que realizar algunos ajustes. Si se desea que se pueda acceder hacia la impresora como usuario invitado sin clave de acceso, basta con añadir public = Yes (que es lo mismo que guest ok = Yes) en la sección de impresoras del siguiente modo:

[printers]
        comment = El comentario que guste.
        path = /var/spool/samba
        printable = Yes
        browseable = No
	writable = no
	printable = yes
        public = Yes

Para la administración de las colas de impresión, anteriormente se hacía utilizando el parámetro printer admin, definiendo una lista de usuarios, o grupos. Actualmente se hace igual que en Windows, utilizando políticas, ejecutando, desde terminal, lo siguiente:

net -S servidor -U root rpc rights grant fulano SePrintOperatorPrivilege

Compartiendo directorios a través de Samba.

Para los directorios o volúmenes que se irán a compartir, en el mismo archivo de configuración encontrará distintos ejemplos para distintas situaciones particulares. En general, puede utilizar el siguiente ejemplo que funcionará para la mayoría:

[Lo_que_sea]
        comment = Comentario que se le ocurra
        path = /cualquier/ruta/que/desee/compartir

El volumen puede utilizar cualquiera de las siguientes opciones:

Opción Descripción
guest ok
Define si se permitirá el acceso como usuario invitado. El valor puede ser Yes o No.
public
Es un equivalente del parámetro guest ok, es decir define si se permitirá el acceso como usuario invitado. El valor puede ser Yes o No.
browseable
Define si se permitirá mostrar este recurso en las listas de recursos compartidos. El valor puede ser Yes o No.
writable
Define si se permitirá la escritura. Es el parámetro contrario de read only. El valor puede ser Yes o No. Ejemplos: «writable = Yes» es lo mismo que «read only = No». Obviamente «writable = No» es lo mismo que «read only = Yes»
valid users
Define los usuarios, o grupos, que podrán acceder al recurso compartido. Los valores pueden ser nombres de usuarios separados por comas, o bien nombres de grupo antecedidos por una @. Ejemplo: fulano, mengano, @administradores
write list
Define los usuarios, o grupos, que podrán acceder con permiso de escritura. Los valores pueden ser nombres de usuarios separados por comas, o bien nombres de grupo antecedidos por una @. Ejemplo: fulano, mengano, @administradores
admin users
Define los usuarios, o grupos, que podrán acceder con permisos administrativos para el recurso. Es decir, podrán acceder hacia el recurso realizando todas las operaciones como super-usuarios. Los valores pueden ser nombres de usuarios separados por comas, o bien nombres de grupo antecedidos por una @. Ejemplo: fulano, mengano, @administradores
directory mask
Es lo mismo que directory mode. Define qué permiso en el sistema tendrán los subdirectorios creados dentro del recurso. Ejemplos: 1777
create mask
Define que permiso en el sistema tendrán los nuevos archivos creados dentro del recurso. Ejemplo: 0644

En el siguiente ejemplo se compartirá a través de Samba el recurso denominado datos, el cual está localizado en el directorio /var/samba/datos del disco duro. Se permitirá el acceso a cualquiera pero será un recurso de solo lectura salvo para los usuarios administrador y fulano. Todo directorio nuevo que sea creado en su interior tendrá permiso 755 (drwxr-xr-x) y todo archivo que sea puesto en su interior tendrá permisos 644 (-rw-r--r--. Primero, se crea el nuevo directorio /var/samba/datos, utilizando el siguiente mandato:

mkdir -p /var/samba/datos

Luego, se cambia el contexto de SELinux, a fin de que este directorio sea considerado como contenido Samba.

chcon -t samba_share_t /var/samba/datos

Se edita el archivo /etc/samba/smb.conf y se añade, hasta el final de éste, el siguiente contenido:

[datos]
	comment = Directorio de Datos
	path = /var/samba/datos
	guest ok = Yes
	read only = Yes
	write list = fulano, administrador
	directory mask = 0755
	create mask = 0644

Ocultando archivos que inician con punto.

Es poco conveniente que los usuarios puedan acceder, notando la presencia de archivos ocultos del sistema, es decir archivos cuyo nombre comienza con un punto, como es el caso del directorio de inicio del usuario en el servidor Samba (.bashrc, .bash_profile, .bash_history, etc.). Puede utilizarse el parámetro hide dot files, con el valor Yes, para mantenerlos ocultos.

hide dot files = Yes

Este parámetro es particularmente útil para complementar la configuración de los directorios personales de los usuarios.

[homes]
   comment = Home Directories
   browseable = no
   writable = yes
   hide dot files = Yes

Iniciar el servicio y añadirlo al arranque del sistema.

Para iniciar los servicios nmb y smb por primera vez realice lo siguiente:

service nmb start
service smb start

Si realiza algún cambio en la configuración del parámetro netbios name, es necesario reiniciar el servicio nmb, el cual es el encargado de proveer el servidor de nombres para los clientes a través de NetBIOS sobre IP.

service nmb restart

Si va a aplicar algún cambio en cualquier otro parámetro de la configuración, como son los recursos compartidos, solo es necesario reiniciar el servicio smb:

service smb restart

Para que los servicios nmb y smb inicien automáticamente junto con el sistema, solo utilice los dos siguientes mandato:

chkconfig nmb on
chkconfig smb on

Comprobaciones.

Modo texto.

Herramienta smbclient.

Indudablemente el método más práctico y seguro es el mandato smbclient. Este permite acceder hacía cualquier servidor Samba o Windows™, similar al mandato ftp en modo texto. Para acceder al cualquier recurso de alguna máquina Windows™ o servidor Samba, determine primero que volúmenes o recursos compartidos posee ésta. Utilice el mandato smbclient del siguiente modo:

smbclient -U usuario -L alguna_maquina

Lo cual le devolvería más menos lo siguiente:

Domain=[MI-DOMINIO] OS=[Unix] Server=[Samba 3.5.4-68.el6_0.2]

        Sharename       Type      Comment
        ---------       ----      -------
        homes           Disk      Home Directories
        netlogon        Disk      Network Logon Service
        datos           Disk      datos
        IPC$            IPC       IPC Service (Servidor Samba 3.5.4-68.el6_0.2 en mi-servidor)
        ADMIN$          IPC       IPC Service (Servidor Samba 3.5.4-68.el6_0.2 en mi-servidor)
        epl5900         Printer   Created by system-config-printer 1.2.x
        hp2550bw        Printer   Created by system-config-printer 1.2.x
Anonymous login successful
Domain=[MI-DOMINIO] OS=[Unix] Server=[Samba 3.5.4-68.el6_0.2]

        Server               Comment
        ---------            -------
        mi-servidor          Servidor Samba 3.5.4-68.el6_0.2 en mi-servidor

        Workgroup            Master
        ---------            -------
        MI-DOMINIO           MI-SERVIDOR

La siguiente corresponde a la sintaxis básica para poder navegar los recursos compartidos por la máquina Windows™ o el servidor SAMBA:

smbclient //alguna_maquina/recurso -U usuario

Ejemplo:

smbclient //LINUX/DATOS -U fulano

Después de ejecutar lo anterior, el sistema solicitará se proporcione la clave de acceso del usuario fulano en el equipo denominado LINUX.

smbclient  //LINUX/DATOS -U fulano
added interface ip=192.168.70.126 bcast=192.168.70.127 nmask=255.255.255.128
Password: 
Domain=[fulano] OS=[Unix] Server=[Samba 2.2.1a]
smb: >

Pueden utilizarse casi los mismos mandatos que en el intérprete de ftp, como serían get, mget, put, del, etc.

Comparte este artículo