Samba es la suite de interoperabilidad estándar que permite a sistemas Linux compartir archivos e impresoras con clientes Windows utilizando el protocolo SMB/CIFS. En entornos empresariales basados en Red Hat Enterprise Linux 8 o CentOS 8, su implementación es una tarea fundamental para garantizar la integración en redes heterogéneas.
Instalación del software necesario
Para comenzar, debemos instalar los paquetes de Samba disponibles en los repositorios oficiales. Aunque el servidor es el componente principal, es recomendable incluir las herramientas del cliente para realizar pruebas de conectividad locales.
$ sudo dnf install samba samba-common samba-client
Tras la instalación, es necesario activar y arrancar los servicios smb (que gestiona las transferencias de archivos) y nmb (encargado de la resolución de nombres NetBIOS).
$ sudo systemctl enable --now smb nmb
Gestión de reglas en el Cortafuegos
El firewall por defecto en RHEL 8, firewalld, permite habilitar el tráfico de Samba de forma sencilla mediante el uso de perfiles de servicio predefinidos, lo que evita tener que abrir manualmente los puertos 137, 138, 139 y 445.
$ sudo firewall-cmd --permanent --add-service=samba
$ sudo firewall-cmd --reload
Para confirmar que el servicio ha sido aplicado correctamente en la zona activa, podemos ejecutar:
$ sudo firewall-cmd --list-services
Creación de un recurso compartido público (Acceso para invitados)
Si necesitamos una carpeta donde cualquier usuario pueda acceder sin credenciales, debemos modificar el archivo de configuración principle /etc/samba/smb.conf. Primero, configuramos el mapeo de usuarios desconocidos en la sección global.
[global]
workgroup = WORKGROUP
server string = Servidor Samba RHEL8
security = user
map to guest = bad user
dns proxy = no
Posteriormente, definimos el recurso al final del archivo. En este ejemplo, compartiremos el directorio /srv/samba/publico.
[publico]
path = /srv/samba/publico
browsable = yes
writable = yes
guest ok = yes
read only = no
Recuerde crear el directorio y reiniciar los servicios para aplicar los cambios:
$ sudo mkdir -p /srv/samba/publico
$ sudo chmod -R 0777 /srv/samba/publico
$ sudo systemctl restart smb nmb
Configuración de recursos restringidos para usuarios registrados
Para entornos que requieren control de acceso, debemos vincular usuarios del sistema con la base de datos de contraseñas de Samba. Es una buena práctica crear usuarios sin capacidad de inicio de sesión local para este propósito.
$ sudo useradd -M -s /sbin/nologin usuario_red
$ sudo smbpasswd -a usuario_red
Luego, definimos un recurso privado en smb.conf donde solo este usuario tenga permisos:
[privado]
path = /srv/samba/privado
valid users = usuario_red
guest ok = no
writable = yes
browsable = yes
Utilice la herramienta testparm para verificar que la sintaxis del archivo de configuración sea correcta antes de reiniciar el servicio.
Configuración de políticas de seguridad en SELinux
SELinux es un componente de seguridad crítico en RHEL 8. Si está en modo enforcing, bloqueará el acceso a Samba a menos que los directorios tengan el contexto de seguridad adecuado. Para etiquetar de forma persistente nuestro directorio de intercambio, utilizamos semanage.
$ sudo semanage fcontext -a -t samba_share_t "/srv/samba(/.*)?"
$ sudo restorecon -Rv /srv/samba
Si además desea permitir que los usuarios compartan sus propios directorios personales (home directories), debe habilitar el booleano correspondiente en SELinux:
$ sudo setsebool -P samba_enable_home_dirs on
Para visualizar otros parámetros de SELinux relacionados con Samba que puedan ser útiles según su caso de uso, ejecute:
$ getsebool -a | grep samba