Samba implementa el protocolo SMB, el mismo que usa Windows para compartir carpetas en red, de modo que un servidor Linux puede ofrecer archivos a equipos Windows, macOS y Linux sin software adicional en los clientes. En este tutorial instalarás Samba en Ubuntu 24.04, crearás una carpeta compartida a la que solo accede un grupo de usuarios autenticados, restringirás el acceso por red y te conectarás desde los tres sistemas operativos.
Requisitos previos
Para seguir esta guía necesitas:
- Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath.
- Un usuario no root con privilegios
sudo. - UFW activo, con el acceso SSH ya permitido.
- La red desde la que se conectarán los clientes. En los ejemplos es
10.0.0.0/24y la IP del servidor es10.0.0.10; sustitúyelas por las tuyas.
Advertenciano publiques nunca el puerto 445 en Internet. SMB es uno de los servicios más atacados y escaneados. Si los clientes no están en la misma red privada que el servidor, conéctalos a través de una VPN (WireGuard, Tailscale o similar) y permite Samba solo desde esa red.
Paso 1: Instalar Samba
Instala el paquete samba desde los repositorios de Ubuntu:
sudo apt update
sudo apt install samba
Comprueba la versión y que el servicio smbd, el que sirve los archivos, está en marcha:
smbd --version
sudo systemctl status smbd
Version 4.19.5-Ubuntu
● smbd.service - Samba SMB Daemon
Loaded: loaded (/usr/lib/systemd/system/smbd.service; enabled; preset: enabled)
Active: active (running) since ...
El paquete también instala nmbd, que anuncia el servidor en la red mediante NetBIOS. No es necesario para conectarse por IP o nombre DNS, así que puedes desactivarlo si no lo usas:
sudo systemctl disable --now nmbd
Paso 2: Crear el grupo y los usuarios
Samba usa cuentas del sistema Linux, pero con una contraseña propia guardada en su base de datos. Crea un grupo para los usuarios que podrán acceder a la carpeta:
sudo groupadd smbusuarios
Crea un usuario para cada persona. Si solo van a usar Samba, no necesitan shell ni directorio personal:
sudo useradd -M -s /usr/sbin/nologin -G smbusuarios ana
Asigna al usuario su contraseña de Samba. Se te pedirá dos veces; elige una contraseña robusta:
sudo smbpasswd -a ana
New SMB password:
Retype new SMB password:
Added user ana.
Si el usuario ya existía en el sistema, añádelo al grupo con sudo usermod -aG smbusuarios nombre_usuario y ejecuta igualmente smbpasswd -a. Lista los usuarios registrados en Samba para comprobarlo:
sudo pdbedit -L
ana:1001:
Paso 3: Crear el directorio compartido
Crea el directorio y asígnalo al grupo:
sudo mkdir -p /srv/samba/compartido
sudo chown root:smbusuarios /srv/samba/compartido
sudo chmod 2770 /srv/samba/compartido
El modo 2770 da lectura y escritura al propietario y al grupo, ningún acceso al resto, y el bit setgid (el 2 inicial) hace que los archivos nuevos hereden el grupo smbusuarios en lugar del grupo primario de quien los crea. Así todos los miembros pueden editar los archivos de los demás.
Paso 4: Configurar Samba
La configuración está en /etc/samba/smb.conf. Haz una copia del archivo original antes de tocarlo:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.orig
sudo nano /etc/samba/smb.conf
En la sección [global], añade estas líneas justo debajo de la cabecera [global] para exigir versiones modernas del protocolo y limitar las redes que pueden conectarse:
[global]
server min protocol = SMB3
hosts allow = 127.0.0.1 ::1 10.0.0.0/24
hosts deny = 0.0.0.0/0
SMB3 es compatible con Windows 10 y 11, macOS actuales y el cliente CIFS de Linux. Si tienes equipos antiguos que solo hablan SMB2, usa SMB2_10, pero nunca habilites SMB1.
Al final del archivo, añade la definición de la carpeta compartida:
[compartido]
comment = Carpeta compartida del equipo
path = /srv/samba/compartido
browseable = yes
read only = no
guest ok = no
valid users = @smbusuarios
force group = smbusuarios
create mask = 0660
directory mask = 2770
Qué hace cada opción:
| Opción | Efecto |
|---|---|
path | Directorio del servidor que se comparte. |
read only = no | Permite escribir. |
guest ok = no | Exige usuario y contraseña. |
valid users = @smbusuarios | Solo los miembros del grupo pueden conectarse (la @ indica grupo). |
force group | Todos los archivos se crean con el grupo smbusuarios. |
create mask / directory mask | Permisos máximos de los archivos y directorios nuevos. |
Guarda el archivo y valida la sintaxis con testparm, que muestra errores y la configuración efectiva:
testparm -s
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
...
[compartido]
comment = Carpeta compartida del equipo
create mask = 0660
directory mask = 02770
force group = smbusuarios
path = /srv/samba/compartido
read only = No
valid users = @smbusuarios
Si ves Loaded services file OK. la sintaxis es correcta. Reinicia Samba para aplicar los cambios:
sudo systemctl restart smbd
Paso 5: Abrir el cortafuegos
Los clientes modernos solo necesitan el puerto TCP 445. Permítelo únicamente desde tu red:
sudo ufw allow from 10.0.0.0/24 to any port 445 proto tcp
sudo ufw status
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
445/tcp ALLOW 10.0.0.0/24
Paso 6: Probar el acceso desde el propio servidor
smbclient es un cliente SMB de línea de comandos, útil para comprobar la configuración antes de ir a los clientes. Instálalo y lista los recursos compartidos con el usuario que creaste:
sudo apt install smbclient
smbclient -L //localhost -U ana
Sharename Type Comment
--------- ---- -------
compartido Disk Carpeta compartida del equipo
IPC$ IPC IPC Service (Samba 4.19.5-Ubuntu)
Conéctate a la carpeta y sube un archivo de prueba:
echo "hola" > /tmp/prueba.txt
smbclient //localhost/compartido -U ana -c 'put /tmp/prueba.txt prueba.txt; ls'
Si el archivo aparece en el listado, la escritura funciona. En el servidor verás que pertenece al grupo smbusuarios:
ls -l /srv/samba/compartido
-rw-rw---- 1 ana smbusuarios 5 sep 25 10:40 prueba.txt
Paso 7: Conectarse desde los clientes
Windows
Abre el Explorador de archivos y escribe en la barra de direcciones:
\\10.0.0.10\compartido
Introduce el usuario ana y su contraseña de Samba. Para tenerlo siempre disponible, haz clic derecho en Este equipo, elige Conectar a unidad de red y usa la misma ruta.
macOS
En Finder, pulsa Cmd + K (Ir > Conectarse al servidor) y escribe:
smb://10.0.0.10/compartido
Linux
Instala cifs-utils en el cliente y crea el punto de montaje:
sudo apt install cifs-utils
sudo mkdir -p /mnt/compartido
Para no dejar la contraseña en /etc/fstab, guárdala en un archivo de credenciales legible solo por root:
sudo nano /root/.smb-compartido
username=ana
password=tu_contraseña_samba
sudo chmod 600 /root/.smb-compartido
Monta la carpeta, indicando el usuario y grupo locales que serán propietarios de los archivos en el cliente:
sudo mount -t cifs //10.0.0.10/compartido /mnt/compartido -o credentials=/root/.smb-compartido,uid=$(id -u),gid=$(id -g)
df -h /mnt/compartido
Para montarla en cada arranque, añade esta línea a /etc/fstab (sustituye 1000 por tu UID y GID):
//10.0.0.10/compartido /mnt/compartido cifs credentials=/root/.smb-compartido,uid=1000,gid=1000,_netdev,nofail 0 0
Comprueba la entrada con sudo umount /mnt/compartido && sudo mount -a.
Paso 8: Supervisar las conexiones
smbstatus muestra quién está conectado, a qué recurso, con qué versión del protocolo y qué archivos tiene abiertos:
sudo smbstatus
Samba version 4.19.5-Ubuntu
PID Username Group Machine Protocol Version Encryption Signing
------------------------------------------------------------------------------------------------------------------
12345 ana ana 10.0.0.20 (ipv4:10.0.0.20:51234) SMB3_11 - partial(AES-128-GMAC)
Los registros de cada cliente se guardan en /var/log/samba/.
Solución de problemas
NT_STATUS_LOGON_FAILURE: la contraseña no es correcta o el usuario no está en la base de datos de Samba. Comprueba con sudo pdbedit -L y restablécela con sudo smbpasswd ana. Si la cuenta está deshabilitada, actívala con sudo smbpasswd -e ana.
NT_STATUS_ACCESS_DENIED al entrar en la carpeta: el usuario no pertenece a smbusuarios. Revísalo con id ana y añádelo con sudo usermod -aG smbusuarios ana.
Permission denied al escribir: los permisos del directorio no coinciden con la configuración. Samba nunca concede más de lo que permite el sistema de archivos; comprueba con ls -ld /srv/samba/compartido que el grupo es smbusuarios y el modo drwxrws---.
El cliente no llega al servidor: comprueba desde el cliente que el puerto responde (nc -zv 10.0.0.10 445 en Linux o Test-NetConnection 10.0.0.10 -Port 445 en PowerShell) y que la IP del cliente está dentro de hosts allow.
Conclusión
Tienes un servidor Samba en Ubuntu 24.04 que comparte una carpeta con un grupo de usuarios autenticados, acepta solo SMB3 y únicamente desde tu red. Puedes crear más carpetas repitiendo los pasos 3 y 4 con grupos distintos, añadir la opción server smb encrypt = required en [global] para cifrar todo el tráfico, o programar copias de seguridad de /srv/samba para proteger los datos compartidos.
