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:
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