SMB / CIFS

De jagfloriano.com
Ir a la navegaciónIr a la búsqueda

SMB / CIFS

Introducción

SMB (Server Message Block), también conocido como CIFS, es un protocolo de compartición de archivos muy utilizado en entornos Windows y mixtos (Linux / Windows).

En sistemas Linux, el servicio que implementa SMB/CIFS es **Samba**, que permite:

  • Compartir directorios con clientes Windows
  • Integrar sistemas Linux en dominios Windows
  • Proveer recursos compartidos con control de usuarios y permisos
  • Autenticación local o mediante Active Directory

SMB funciona sobre TCP (puerto 445) y es el estándar de facto en redes Windows.


Crear un servidor SMB / CIFS

Para crear un recurso compartido SMB se necesita:

  • Un servidor Linux con Samba instalado
  • Un directorio que compartir
  • Usuarios válidos para acceder al recurso
  • Conectividad de red entre cliente y servidor


Instalación de Samba

En sistemas basados en RHEL:

dnf install -y samba samba-client samba-common

Habilitar y arrancar los servicios:

systemctl enable --now smb nmb

Comprobar estado:

systemctl status smb


Crear el directorio compartido

[root@nodo1 ~]# mkdir -p /srv/samba/datos
[root@nodo1 ~]# chmod 770 /srv/samba/datos
[root@nodo1 ~]# chown root:sambashare /srv/samba/datos

[root@nodo1 ~]# ls -lrtd /srv/samba/datos
drwxrwx---. 2 root sambashare 6 Feb  2 19:39 /srv/samba/datos
[root@nodo1 ~]#

> El grupo puede ajustarse según el modelo de permisos deseado.


Crear usuarios Samba

El usuario debe existir previamente en el sistema:

[root@nodo1 ~]# useradd usuario1

[root@nodo1 ~]# passwd usuario1
Changing password for user usuario1.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

[root@nodo1 ~]# usermod -aG sambashare usuario1

[root@nodo1 ~]# id usuario1
uid=1000(usuario1) gid=1001(usuario1) groups=1001(usuario1),1000(sambashare)

Añadir el usuario a Samba:

[root@nodo1 ~]# smbpasswd -a usuario1
New SMB password:
Retype new SMB password:
Added user usuario1.

Habilitarlo:

[root@nodo1 ~]# smbpasswd -e usuario1
Enabled user usuario1.


Configuración de Samba

Editar el fichero `/etc/samba/smb.conf`.

Ejemplo de configuración básica:

# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.
#
# Note:
# SMB1 is disabled by default. This means clients without support for SMB2 or
# SMB3 are no longer able to connect to smbd (by default).

[global]
        workgroup = SAMBA
        security = user

        passdb backend = tdbsam

        printing = cups
        printcap name = cups
        load printers = yes
        cups options = raw

[homes]
        comment = Home Directories
        valid users = %S, %D%w%S
        browseable = No
        read only = No
        inherit acls = Yes

[datos]
        path = /srv/samba/datos
        browsable = yes
        writable = yes
        valid users = usuario1
        create mask = 0660
        directory mask = 0770

Verificar la sintaxis:

[root@nodo1 ~]# testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Weak crypto is allowed by GnuTLS (e.g. NTLM as a compatibility fallback)

Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

# Global parameters
[global]
        printcap name = cups
        security = USER
        workgroup = SAMBA
        idmap config * : backend = tdb
        cups options = raw


[homes]
        browseable = No
        comment = Home Directories
        inherit acls = Yes
        read only = No
        valid users = %S %D%w%S


[datos]
        create mask = 0660
        directory mask = 0770
        path = /srv/samba/datos
        read only = No
        valid users = usuario1
[root@nodo1 ~]#

Reiniciar el servicio:

[root@nodo1 ~]# systemctl restart smb

[root@nodo1 ~]# systemctl status smb
Failed to find catalog entry: Invalid argument
Failed to find catalog entry: Invalid argument
● smb.service - Samba SMB Daemon
     Loaded: loaded (/usr/lib/systemd/system/smb.service; enabled; preset: disabled)
     Active: active (running) since Mon 2026-02-02 19:44:26 CET; 7s ago
       Docs: man:smbd(8)
             man:samba(7)
             man:smb.conf(5)
   Main PID: 9816 (smbd)
     Status: "smbd: ready to serve connections..."
      Tasks: 3 (limit: 23115)
     Memory: 7.2M
        CPU: 46ms
     CGroup: /system.slice/smb.service
             ├─9816 /usr/sbin/smbd --foreground --no-process-group
             ├─9819 /usr/sbin/smbd --foreground --no-process-group
             └─9820 /usr/sbin/smbd --foreground --no-process-group

Feb 02 19:44:26 nodo1 systemd[1]: Starting Samba SMB Daemon...
Feb 02 19:44:26 nodo1 systemd[1]: Started Samba SMB Daemon.
[root@nodo1 ~]#


Acceso al recurso SMB

Requisitos Previos

En el cliente Linux:

dnf install -y cifs-utils samba-client

Comprobar recursos disponibles:

[root@nodo2 ~]#  smbclient -L node1 -U usuario1
Password for [SAMBA\usuario1]:

        Sharename       Type      Comment
        ---------       ----      -------
        datos           Disk
        IPC$            IPC       IPC Service (Samba 4.22.4)
        usuario1        Disk      Home Directories
SMB1 disabled -- no workgroup available


Montaje manual

Crear punto de montaje:

mkdir -p /mnt/smb/datos

Montar el recurso:

[root@nodo2 ~]# mount -t cifs //node1/datos /mnt/smb/datos -o username=usuario1
Password for usuario1@//node1/datos:

Verificar:

[root@nodo2 ~]# df -hT /mnt/smb/datos
Filesystem     Type  Size  Used Avail Use% Mounted on
//node1/datos  cifs   17G  2.5G   15G  15% /mnt/smb/datos

Montaje persistente (fstab)

Crear un fichero de credenciales:

[root@nodo2 ~]# cat /root/.smbcred
username=usuario1
password=PASSWORD

Añadir a `/etc/fstab`:

[root@nodo2 ~]# grep -i node1 /etc/fstab
//node1/datos  /mnt/smb/datos  cifs  credentials=/root/.smbcred,_netdev  0  0

Aplicar:

[root@nodo2 ~]# mount /mnt/smb/datos -vvv
Host "node1" resolved to the following IP addresses: 192.168.1.81
mount.cifs kernel mount options: ip=192.168.1.81,unc=\\node1\datos,user=usuario1,pass=********

[root@nodo2 ~]# df -hT /mnt/smb/datos
Filesystem     Type  Size  Used Avail Use% Mounted on
//node1/datos  cifs   17G  2.5G   15G  15% /mnt/smb/datos

Configuración de red

Permitir tráfico SMB en el firewall del servidor:

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

Comprobar reglas:

firewall-cmd --list-all

Puertos utilizados:

  • TCP 445 (SMB)
  • TCP/UDP 137-139 (NetBIOS, opcional)

Verificación y diagnóstico

Ver usuarios Samba:

[root@nodo1 ~]# pdbedit -L
usuario1:1000:

Ver conexiones activas:

[root@nodo1 ~]# smbstatus

Samba version 4.22.4
PID     Username     Group        Machine                                   Protocol Version  Encryption           Signing
----------------------------------------------------------------------------------------------------------------------------------------
10420   usuario1     usuario1     192.168.1.82 (ipv4:192.168.1.82:49084)    SMB3_11           -                    partial(AES-128-CMAC)

Service      pid     Machine       Connected at                     Encryption   Signing
---------------------------------------------------------------------------------------------
datos        10420   192.168.1.82  Mon Feb  2 07:57:51 PM 2026 CET  -            -
IPC$         10420   192.168.1.82  Mon Feb  2 07:57:51 PM 2026 CET  -            -


Locked files:
Pid          User(ID)   DenyMode   Access      R/W        Oplock           SharePath   Name   Time
--------------------------------------------------------------------------------------------------
10420        1000       DENY_NONE  0x89        RDONLY     LEASE(RH)        /srv/samba/datos   .   Mon Feb  2 19:57:55 2026

Probar acceso local:

smbclient //localhost/datos -U usuario1

Logs relevantes:

  • `/var/log/samba/`
  • `journalctl -u smb`

Buenas prácticas

  • Usar autenticación por usuario (evitar guest)
  • Limitar acceso con `valid users`
  • Proteger credenciales (ficheros 600)
  • Mantener Samba actualizado
  • Integrar con AD si el entorno lo requiere