Cómo funciona SMB
Lo primero que ocurre es que el cliente y el servidor negocian el soporte de cifrado a utilizar. El cliente le muestra al servidor que protocolos puede aceptar y entonces el Servidor elige el mejor protocolo para la transferencia. Una cosa a tener en cuenta es que, en el enlace de sesión, el cifrado multicanal comparte la misma clave de cifrado y descifrado, al igual que en SMB 3.0.x. Una vez que cliente y servidor se han puesto de acuerdo, llega la hora de cifrar el mensaje, para eso lo primero es:
- El remitente encripta el mensaje con los siguientes detalles:
- El algoritmo de cifrado usando GCM o CCM, con las siguientes opciones:
- Clave AES,
- AES-Nonce O IV para CCM.
- AES128GCM para GCM.
- Datos de autenticación opciones.
- Clave AES,
- El algoritmo de cifrado usando GCM o CCM, con las siguientes opciones:
En la salida de los datos usando cualquiera de los dos protocolos AES-CCM o AES-GCM, el texto va cifrado y con código de autenticación. Una vez llega al destinatario, se produce el descifrado comprobando claves y códigos de autenticación.
Crear un servidor Samba desde cero
Lo primero que debemos hacer es instalar los paquetes necesarios en nuestro dispositivo. Para ello abriremos un terminal en nuestro sistema operativo o nos conectaremos a través de SSH para controlar el dispositivo de forma remota y escribiremos:
sudo apt-get install samba samba-common samba-common-bin
Esto instalará los paquetes necesarios. Una vez finalice la instalación debemos realizar unos pequeños ajustes en Samba para hacerlo funcionar, mejorar la seguridad y evitar que cualquier usuario no autorizado tenga acceso al sistema.
El paquete samba define una configuración mínima durante la instalación inicial. No obstante es muy recomendable adaptar la configuración a posteriori a nuestras necesidades, usando el siguiente comando:
dpkg-reconfigure samba-common
El instalador configura el grupo de trabajo por defecto que usa windows, llamado: workgroup
El instalador nos propone identificar el servidor WINS de la información provista por el demonio DHCP. Nosotros NO usaremos dicha opción, ya que vamos a utilizar el servidor Samba como servidor WINS.
Por tanto lo mejor es decirle NO y pulsar intro para continuar.
Durante la instalación de Samba se creará un archivo en /etc/samba llamado: smb.conf. En el que van todas las configuraciones necesarias del servidor, este fichero se encuentra muy bien comentado y explicado cada apartado.
Por defecto nos encontramos con una configuración estándar, en la cual se comparten las impresoras y las carpetas personales (/home/usuario) de los usuarios de GNU/Linux.
Nosotros podemos modificar dicha configuración según nuestras necesidades.
También podemos instalar algunas de estas herramientas gráficas (a elección de cada uno) para conectarnos y navegar por los directorios compartidos.
kdenetwork-filesharing smb4k sudo nano /etc/samba/smb.conf
Aquí debemos fijarnos concretamente en 2 líneas:
workgroup = [your_workgroup_name] wins support = yes
En la primera línea debemos colocar el grupo de trabajo con el que vamos a compartir las carpetas. Por defecto Windows crea un grupo de trabajo llamado Workgroup, por lo que si estamos utilizando este grupo de trabajo simplemente debemos introducir dicho valor en el apartado «workgroup».
La línea correspondiente a «wins support» generalmente aparece comentada con una almohadilla #, borramos dicho carácter para habilitar dicho valor.
El siguiente paso es buscar un apartado llamado «Share Definitions» dentro del archivo. Aquí vamos a crear las carpetas que vamos a compartir en red y a configurarlas según nuestras necesidades. En este apartado debemos pegar un párrafo similar al siguiente:
[pi_torrent] #Nombre del perfil que crearemos, por ejemplo, para compartir la carpeta del cliente Torrent comment= Pi Torrent #Descripción del perfil path=/home/pi/torrent #Ruta de la carpeta a la que accederemos desde la carpeta compartida browseable=Yes #Aparece al explorar la red writeable=Yes #Se puede escribir en dicha carpeta only guest=no #Requiere autenticación create mask=0777 #Permisos directory mask=0777 #Permisos public=no #Carpeta pública o privada
Con esto ya tenemos la configuración inicial creada. Para finalizar pulsamos control+O para guardar los cambios y control+X para cerrar y salir.
El último paso será establecer una contraseña al usuario Pi que nos será solicitada al entrar en la carpeta de Samba desde la red. Para ello tecleamos:
sudo smbpasswd -a pi
Y escribimos la contraseña 2 veces. Una vez hecho reiniciamos el servidor Samba con:
sudo service samba restart
Y ya está lista la carpeta compartida desde nuestro Raspberry Pi con otros sistemas operativos como Windows a través de la red y sin necesidad de utilizar FTP para ello.
Ahora tan solo necesitamos introducir las credenciales de usuario, y automáticamente accederemos a todas las carpetas compartidas que hemos configurado.
Arrancar el servidor samba usando systemd
Para arrancar el servidor samba, usamos uno de de estos dos comandos:
systemctl start smbd service smbd start
Con cada modificación que realicemos en el fichero smb.conf habrá que reiniciar el servicio smbd para que esa modificación entre en funcionamiento.
systemctl restart smbd service smbd restart
Para parar el servidor samba usamos uno de de estos dos comandos:
systemctl stop smbd service smbd stop
Añadir usuarios para acceder a los recursos compartidos
Cada usuario de Samba necesita una cuenta en el servidor.
Nota muy importante: Tenemos que registrar a los usuarios en la base de datos de Samba, en caso contrario NO podremos acceder a los recursos compartidos con contraseña, es muy obvio pero muchísima personas se olvidan de registrar a los usuarios en el servidor:
smbpasswd -a nombre_de_usuario
Primero tenemos que crear las cuentas de usuarios en GNU/Linux. (también podemos crear un grupo llamado «samba» y agregar a este grupo todos los usuarios que necesitemos que tengan acceso al servidor samba.)
Para agregar un nuevo usuario en GNU/Linux usamos el siguiente comando:
adduser nombre_del_nuevo_usuario
Luego necesitamos registrar a los usuarios en la base de datos de Samba. (Nos pedirá la clave que queremos utilizar para ese usuario y algunos datos que son opcionales.)
Supongamos que tenemos un usuario ya creado llamado «usuarioubuntu», lo vamos a registrar en el servidor Samba, para esto utilizamos el siguiente comando:
smbpasswd -a usuarioubuntu
NOTA: La clave que queremos que tenga ese usuario para ingresar en el servidor samba, puede ser distinta a la contraseña que el usuario tiene para entrar (logearse) en GNU/Linux.
Para cambiar la contraseña de un usuario ejecutamos el siguiente comando:
smbpasswd -a nombre_de_usuario
Para borrar un usuario del servidor samba ejecutamos:
smbpasswd -x nombre_de_usuario
Posibles problemas al crear un servidor Samba
Como toda configuración relativa a servidores, es importante saber de antemano que podremos tener algunos problemas a la hora de compartir archivos entre sistemas operativos. Vamos a echar un vistazo alguno de los más habituales
Falta de permisos
Un error típico es cuando se intenta acceder a una carpeta compartida pero no se tienen los permisos adecuados en el sistema de archivos de Linux o en los ajustes de Samba. Podremos solucionarlo chequeando precisamente que los permisos en el directorio compartido son correctos. El comando chmod ajusta los permisos de los archivos y directorios. Es decir, podremos usar chmod -R 777 /ruta/al/directorio si así lo necesitamos, y teniendo en cuenta siempre que no comprometemos en exceso la seguridad. Otra opción es revisar el archivo smb.conf y comprobar que las opciones create mask y directory mask están configuradas para reflejar los permisos deseados.
Dar los permisos a las carpetas compartidas
Es importante recordar que si no damos los permisos (de lectura y escritura) del directorio compartido en GNU/Linux, al intentar acceder a dicho recurso compartido, aunque hayamos especificado en el archivo smb.conf qué usuarios o grupos de usuarios samba pueden leer o escribir en dichos directorios, Debian GNU/Linux aplicará los permisos más restrictivos.
Por tanto, aplicamos permiso recursivo 777 al directorio (al ser recursivo se aplicará a los subdirectorios y ficheros que se creen después dentro de ese directorio), y cambiamos el propietario de los recursos al grupo que deseamos que tenga permisos de escritura; y después en Samba definimos los grupos que pueden leer y/o escribir.
Vamos a cambiar los permisos desde una consola de comandos, usando el siguiente comando:
chmod -R 777 nombre_del_directorio
Problemas de autenticación
Otro problema habitual es que aparezcan problemas de autenticación, es decir, que se impida el acceso a las comparticiones debido a que Samba no reconoce las credenciales. Esto pasa generalmente cuando no hemos añadido el usuario de Samba o porque las contraseñas no coinciden entre el sistema y Samba. Hay una opción para resolverlo rápidamente que es usando smbpasswd para añadir o cambiar la contraseña de un usuario en Samba.
Problemas al montar comparticiones
No poder montar comparticiones de Samba desde un cliente es otro de los fallos a los que podemos enfrentarnos. Ya sea en Windows o en otros sistema Linux, puede ser debido a problemas en la red o una mala configuración del firewall. Podremos ir paso a paso, verificando primero que el firewall no esté bloqueando el tráfico Samba (normalmente en los puertos 137-139 y 445). También es importante chequear que el servicio Samba esté activo y bien configurado en smb.conf. En Windows, tendremos que chequear si las credenciales están bien metidas en la conexión de red. Por último y dentro de Linux, podremos usar comandos como mount -t cifs //servidor/comparticion /punto/de/montaje -o user=usuario para montar la compartición manualmente y ver si hay errores concretos que se reporten.

