Servidor NAS con SAMBA

_images/sambalogo.png

Introducción

Antes de tener la Raspberry Pi probablemente tuvieras un ordenador donde almacenabas todo tu contenido multimedia. Ahora lo ideal sería transferir todo ese material al disco duro USB conectado a la RPi. Ya que tenemos SSH podríamos utilizar el protocolo SFTP para transferir los ficheros, pero también podemos tener una carpeta compartida en la red mediante samba y así transformar nuestra RasPi en un servidor NAS.

Instalar Samba

Lo primero es instalar los dos paquetes necesarios para lo que queremos:

$ sudo apt-get install samba samba-common-bin

El primero es el samba en sí mismo y el segundo nos sirve para poder asignar una contraseña a nuestro usuario de samba. Hasta aquí fácil. Ahora viene lo más crítico, que es configurarlo apropiadamente. El 90% de los fallos vienen de aquí.

Configurar samba

Vamos a tocar lo básico, el fichero de configuración está muy bien comentado y explicado, por si te apetece toquetear y adaptarlo a tus necesidades, pero para el común de los mortales habrá que cambiar muy pocas cosas.

$ sudo nano /etc/samba/smb.conf

Toda línea que empiece por # (almohadilla) es un comentario y no tiene efecto en la configuración del samba. Nosotros nos tenemos que fijar en 2 parámetros fundamentalmente:

workgroup = WORKGROUP <- Es mi red local
wins support = yes

El primero es workgroup y da nombre al grupo de trabajo de tu red, por defecto viene el que le pone Windows de serie a sus redes. Normalmente no es necesario cambiarlo. El segundo, wins support, aparecerá comentado, con una almohadilla delante. Es muy importante que descomentes esa línea (quita la #). Da igual si vas a utilizarlo o no, eso ya lo decides tú poniendo yes o no, pero la configuración del samba debe leer ese parámetro para que todo funcione correctamente.

Compartir carpetas

Una vez puestos correctamente esos 2 parámetros del principio del fichero nos iremos al final del todo y en líneas nuevas escribiremos esto:

[DiscoUSB]
comment=Disco USB en la RPi
path=/media/discousb
browseable=yes
writeable=yes
create mask=0775
directory mask=0775
only guest=no
  • Donde la primera línea define el nombre que tendrá nuestra carpeta compartida en la red, en mi caso DiscoUSB.
  • comment puede ser cualquier cosa que quieras que defina a la carpeta.
  • path es la ruta de la carpeta que quieres compartir, como yo comparto todo el disco duro USB especifico dónde está montado.
  • browseable para que se pueda navegar por los subdirectorios.
  • writeable para poder leer y escribir.
  • create mask y directory mask definen los permisos que se aplican a los ficheros y directorios nuevos.
  • only guest permite acceder como usuario anónimo o no.

No creo que sea difícil de entender. Si quieres compartir más carpetas, debajo de estas líneas pondrías otras similares para cada carpeta, por ejemplo:

[MusicaRPi]
comment=Musica en la RPi
path=/media/discousb/musica
browseable=yes
writeable=yes
create mask=0775
directory mask=0775
only guest=no

[Torrents]
comment=Torrents para Transmission
path=/media/discousb/torrents
browseable=yes
writeable=yes
create mask=0775
directory mask=0775
only guest=no
Mi ejemplo que funciona 100%:

[TOSHIBA2TB]
comment = HDD Externo
path = /media/2TB
writeable = YES
create mask = 0777
directory mask = 0777
browseable = Yes
force user = pi
valid users @users

Y así con todas y cada una de las carpetas que desees compartir en tu red. Yo prefiero compartir directamente el directorio donde está montado el disco duro USB y así tengo acceso a todo, pero cada uno que se lo monte como le convenga. Ahora guardamos y cerramos el fichero de configuración: Ctrl+O, Intro, Ctrl+X.

Establecer contraseña

Por último, vamos a darle una contraseña a nuestro usuario pi, la lógica diría que es la misma que para acceder al sistema, pero no, samba tiene su propia gestión de contraseñas así que hay asignarle una a cada usuario, puedes utilizar la misma para no liarte u otra diferente por seguridad:

$ sudo smbpasswd -a pi

Nos pide que pongamos una contraseña dos veces y fin. Esa será la contraseña que debemos poner cuando queramos acceder a alguna de las carpetas compartidas que definimos antes en el fichero de configuración.

Para terminar vamos a reiniciar el servicio para que todos los cambios surtan efecto:

$ sudo /etc/init.d/smbd restart

Advertencia

EVITAR COMPARTIR LA CARPETA DE USUARIO

Normalmente, cuando instalamos el servidor Samba se comparte por defecto la carpeta del usuario, es decir, /home/pi en nuestro caso. Si queremos evitar esto, podemos añadir al fichero de configuración de Samba los datos necesarios para que no comparta esa carpeta. Lo haremos así, haciendo referencia al directorio o carpeta del usuario:

[pi]
comment = directorio del usuario
path = /home/pi
browseable = no
writeable = no
read only = yes
guest ok = no
public = no

La clave está en la línea browseable = no, que es la que realmente impide que se muestre la carpeta.

Ahora volvemos a reiniciar el servidor para que Samba se ponga en funcionamiento:

sudo /etc/init.d/smbd restart

Con este último paso, ya podemos compartir ficheros entre la Raspberry Pi y cualquier otro dispositivo que tengamos en casa sin necesidad de utilizar un software de FTP, ya sea un PC con Windows o con Linux, un Mac o un dispositivo móvil. En Android yo utilizo ES File Explorer para acceder a mis carpetas compartidas por LAN.