Intro
La ventaja de elegir samba como servidor de archivos permite a los usuarios trabajar indistintamente con sus datos desde cualquier equipo de la red local. Además simplifica en extremo las operaciones de copia de seguridad, tanto la realización de la misma como su recuperación.
Al virtualizar el servidor además teníamos la ventaja de poderlo alojar en un cluster de alta disponibilidad (cluster HA) para minimizar los riesgos y maximizar la disponibilidad. Sin embargo, trabajar con imágenes de disco duro de más de 1TB con drbd puede resultar incómodo cuando menos. Por ese motivo empleamos una opción alternativa: en lugar de emplear un archivo de imagen de disco para alojar los datos del servidor samba, emplearíamos un recurso compartido NFS dentro del propio nodo del cluster.
Manos a la obra
Para ello lo primero que necesitamos era una forma de conectar la máquina virtual con el servidor NFS del nodo sin tener que salir a Internet. Nos apoyamos en las Redes virtuales del servidor de virtualización, creando una red para NFS.
Creación de la red virtual para NFS en los nodos del cluster.
Tendremos que crear la red virtual en ambos nodos del cluster.
Nombramos la red en la primera pantalla (fig. 1)
Luego marcamos «Habilitar definición de un espacio de dirección de IPv4» y desmarcamos «Habilitar DHCP» (fig. 2) y después de saltarnos la pantalla de definir IPv6 seleccionamos «Red virtual aislada» en «Conectado a una red física» (fig. 3).
Le damos a «Finalizar» y ya está.
Configuración del nodo del cluster HA
Aparece en el nodo ya la interfaz de red virtual virbr1 con la IP 192.168.100.1
Instalaremos el paquete nfs-utils y crearemos el archivo /etc/exports, donde compartiremos los directorios con las máquinas virtuales que seleccionemos. Ej.:
/home/datos/nfs_share/samba_datos 192.168.100.50(rw,fsid=0)
En ese caso estamos exportando el directorio samba_datos de /home/datos/nfs_share con la máquina 192.168.100.50 y lo haremos como lectura/escritura (rw). También le indicamos al servidor que este export es el raiz (fsid=0), con las implicaciones que tendrá ésto al montar el export en el cliente.
Permisos, permisos, permisos
Lo primero con lo que nos vamos a enfrentar con esta aproximación es como gestionar los permisos del directorio compartido por NFS para que nos sirva con los fines que tiene que cumplir, que son:
- Permitir el acceso de lectura y escritura gestionado por los permisos de samba
- Permitir las copias de seguridad en los servidores de backup remotos
Cuando conectamos por NFS con nfs4 el usuario root del cliente se convierte en el usuario nfsnobody del servidor. Por lo tanto, si el usuario/grupo nfsnobody no tiene permisos en el directorio del servidor, el usuario root del cliente no podrá tenerlos en el mismo directorio en el cliente.
Cuando conectamos como un usuario en el servidor samba, el cliente debe tener permisos en el directorio para poder acceder, leer y escribir en él.
Por otro lado está el control que el servidor samba 4 ejerce sobre el acceso a los directorios.
A efectos prácticos, los directorios que contienen los shares de samba que no sean shares de usuario han de tener las siguientes características:
- Owner: nfsnobody
- Group: samba
- Permisos: 771 para los directorios y 770 para los archivos.
Para conseguir permisos 770 para los archivos manteniendo 771 para los directorios habría que ejecutar el siguiente comando tras cambiar los permisos recursivamente a 771:
# chmod -R a-x+X directorio
Shares de usuario
- Owner: usuario (si el usuario no existe en el nodo del cluster usar el número del usuario en el servidor samba)
- Grupo: nfsnobody
- Permisos: 771 para los directorios y 770 para los archivos
Configuración en la máquina virtual cliente
Hemos de agregar una interfaz de red mediante la que conectarse con el servidor NFS del nodo y le asignaremos la IP autorizada en el archivo exports del servidor NFS del nodo.
Montaremos el export en el archivo fstab con la siguiente línea:
192.168.100.1:/ /home/samba nfs4 _netdev,auto 0 0
Configración de samba
Para la configuración emplearemos el webmin, que facilita bastante el trabajo con su módulo samba.
Usuarios y grupos
En el servidor samba deberemos crear los usuarios y grupos necesarios para samba a nivel de sistema operativo.
En general, asignaremos samba como grupo principal de todos los usuarios.
A la hora de generar el usuario lo crearemos con nologin en el shell y evitaremos que el sistema cree el directorio de usuario y copie en el los archivos de la plantilla (fig. 4).
Shares de samba
Shares de usuario
Creamos los shares de usuario de acuerdo a las figuras 5, 6 y 7.
Resto de shares
El resto de shares se configurarían de acuerdo a la figura 8.
La seguridad y control de acceso se ajustarán de acuerdo a la figura 9.
Para evitar que cualquiera pueda escribir en el share y gestionar quién tiene permiso de escritura en el mismo indicamos NO en Writable
En este ejemplo, todos los usuarios del grupo samba pueden acceder al share, pero solamente los del grupo eucariotas tienen permiso de escritura.
Para evitar problemas cuando se creen nuevos archivos, hemos de configurar los permisos de archivos de acuerdo a la figura 10: