Instalar y configurar samba en RHEL 8 y Centos 8

Aprendemos a instalar el servidor de ficheros samba en RHEL y Centos 8. Si no lo conoces trata de un proyecto que sigue la filosofía de desarrollo de código abierto, que utiliza una licencia GPL y que nos permite compartir archivos utilizando el protocolo SMB / CIFS.

Se nos proporciona software tanto para el lado del servidor como para el lado del cliente, para permitir así la interoperación sistemas MS Windows. En esta entrada vamos a ver como realizar la instalación tanto para Red Hat Enterprise Linux 8 como para Centos 8. Además, vemos cómo configurar un recurso compartido de samba, como configurar el cortafuegos, para permitir el acceso a los recursos compartidos y como aplicar el contexto SELinux, si lo tenemos habilitado.

No es la primera vez que hablamos de samba, lo hicimos hace unos años, en una primera entrada llamada compartiendo con SAMBA, además de una segunda parte, donde os expliqué como implementar los permisos ACL. Estas entradas son del 2014, por lo que ya tocaba actualizar el tema.

Instalación de samba en RHEL 8 y Centos 8

Para realizar la instalación en un servidor, tenemos disponibles en los repositorios principales los paquetes y bibliotecas necesarias. Para realizar la instalación utilizaremos la herramienta dnf (recordar que yum para estas últimas versiones es un alias)

sudo dnf install samba samba-client

El paquete samba-client no es estrictamente necesario, pero proporciona recursos que nos pueden ser útiles. Una vez realizada la instalación, debemos iniciar y activar los servicios. El primero es el encargado de realizar las transferencias y operaciones de uso compartido. El segundo realiza las resoluciones de nombre NetBIOS, permitiendo así que los recursos aparezcan al navegar por la red en MS Windows. Veamos como habilitar e iniciar los servicios:

sudo systemctl enable --now {smb,nmb}

Configurar el cortafuegos

Si en el servidor tenemos habilitado el cortafuegos, debemos realizar algunos cambios en este, para que los recursos compartidos por samba puedan ser accesibles desde otras máquinas. En estos sistemas el software encargado de gestionar el cortafuegos se llamada firewalld.

Para ello debemos añadir el servicio al cortafuegos, este ya se encargará de abrir todos los puertos que este necesita. De hecho podemos consultar los puertos que firewalld abrirá en el caso de samba:

sudo firewall-cmd --info-service samba

Con el resultado en mi caso:

samba
  ports: 137/udp 138/udp 139/tcp 445/tcp
  protocols:
  source-ports:
  modules: netbios-ns
  destinatio

Añadimos el servicio al cortafuegos:

sudo firewall-cmd --permanent --add-service=samba

Al indicar –-permanent, indicamos que sea de forma persistente. Asumimos de esta manera que la zona utilizamos es la Default. Si deseamos especificar otra zona, podemos utilizar el parámetro --zone. Una vez hechos los cambios, recargamos la configuración:

sudo firewall-cmd --reload

Podemos consultar la lista de servicios habilitados en el cortafuegos:

sudo firewall-cmd --list-services

Configurar un recurso compartido

A modo de ejemplo hemos creado una carpeta llamada «Empresa», con una serie de subdirectorios. Este es el que compartiremos, a través de samba, además le daremos libre acceso a este para los usuarios invitados, sin que tengan que proporcionar contraseña. Esto lo consiguiremos editando el fichero de configuración «/etc/samba/smb.conf» y agregar la información correspondiente.

El árbol es el siguiente:

/mnt/Empresa
├── almacen
├── compras
├── contabilidad
├── IT
│   ├── sysadmin
│   └── usuarios
└── ventas

Usamos nuestro editor favorito y editamos:

[global]
        workgroup = SAMBA
        security = user
 
        passdb backend = tdbsam
 
        printing = cups
        printcap name = cups
        load printers = yes
        cups options = raw
        map to guest = bad user

Al escribir map to guest = bad user, asignará intentos de inicio de sesión con nombres de usuario incorrectos al usuario invitado predeterminado, que , de forma predeterminada, no es nadie. Esto es necesario para permitir el acceso anónimo sin tener que proporcionar una contraseña. Esto es un ejemplo, no hace falta que os diga que en entornos productivos no hay que hacerlo.

Después de este cambio, debemos agregar una estrofa, dedicada a nuestro recurso compartido, justo al final del archivo.

[empresa]
        path = /mnt/empresa
        guest only = yes

Con la configuración anterior declaramos que queremos compartir el contenido ubicado en «/mnt/empresa«, sin la necesidad de autentificación de usuario. Si lo deseamos podemos evitar la escritura, añadiendo writeable = no Para que estos cambios sean efectivos, debemos reiniciar los servicios:

sudo systemctl restart {smb,nmb}

Configurar el acceso solo para usuarios registrados

Lo adecuado es proteger el acceso a los recursos con una solicitud de inicio de sesión, con un usuario y contraseña. Para ello debemos añadir los respectivos usuarios a la base de datos samba. Las credenciales de usuario serán necesarias para acceder al recurso compartido. Lo adecuado es crear un usuario dedicado para dicha tarea, omitiendo la creación de su directorio de inicio (en la home) e indicando que no utilizará una shell.

sudo useradd  -c "Usuario para Samba" -M  -s "/sbin/nologin" usersamba

Con el parámetro -M indicamos que el usuario no utilizará una carpeta en la home, sería lo mismo que añadir -—no-create-home, con el parámetro -s indicamos que no utilizará una shell. Con «-c» añadimos un comentario para el usuario.

Ahora, mediante el comando smbpasswd, le asignaremos el usuario a la base de datos de samba. Además, nos pedirá la contraseña correspondiente.

sudo smbpasswd -a usersamba

Esta contraseña solo será válida en el contexto de samba, no tiene nada que ver con la cuenta de usuario del sistema. Para restringir el recurso compartido que hemos creado antes, tenemos que hacer un pequeño cambio:

[empresa]
        path = /mnt/Empresa
        guest ok = no

Podemos verificar que la configuración es válida, utilizando la herramienta testparm:

$ testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[homes]"
Processing section "[printers]"
Processing section "[empresa]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions

Cada vez que hagamos cambios, hemos de reiniciar los servicios smb y nmb, tal y como hemos indicado antes.

Configuración de SELinux para samba

La configuración de SELinux puede ser algo compleja si está habilitado. Recuerda que en colaboración con el ingenieriero Alex Callejas, de la compañía Red Hat, creamos la entrada: Una guía SysAdmin para SELinux

Para que el recurso compartido de samba funciona en SELinux, debemos asignar el contexto apropiado a nuestro directorio y archivos compartidos:

$ sudo chcon -R -t samba_share_t /mnt/Empresa

Si queremos que nuestros cambios sigan funcionando a un evento de re-etiquetado, debemos agregar nuestra regla a la política. Podemos esto utilizando el comando semanage:

sudo semanage fcontext -a -t samba_share_t "/mnt/Empresa(/.*)?"

Al utilizar «(/.*)?» , la regla se aplica a todo el contenido de la carpeta, incluyendo los subdirectorios. Podemos verificar la configuración, de la siguiente manera:

$ sudo semanage fcontext -l | grep /mnt/empresa
/mnt/empresa(/.*)?   all files      system_u:object_r:samba_share_t:s0

De esta forma ya podemos acceder desde un equipo MS Windows:

Accediendo a un recurso compartido con samba


Y esto es todo. Espero que la información de esta entrada os sea de utilidad en algún momento.

Para saber más, podemos consultar la página oficial en inglés de SAMBA

Samba.org