La instalación de OpenMediaVault 5 en una Raspberry Pi 4 no funciona todo lo bien que esperaba y he decidido instalar Samba para compartir ficheros con los ordenadores Windows.

En la documentación de Raspberry.org se indican los comandos necesarios para instalar:

# Actualizar repositorios
sudo apt update

# Instalar servidor Samba
sudo apt install samba samba-common-bin -y

# (Opcional) Instalar cliente Samba
sudo apt install smbclient cifs-utils -y

Durante la instalación de los paquetes aparece el siguiente mensaje al cual hay que contestar No ya que no se utiliza WINS en esta instalación:

If your computer gets IP address information from a DHCP server on the network, the DHCP server may
also provide information about WINS servers ("NetBIOS name servers") present on the network.

This requires a change to your smb.conf file so that DHCP-provided WINS settings will automatically
be read from /var/lib/samba/dhcp.conf.

The dhcp-client package must be installed to take advantage of this feature.

Modify smb.conf to use WINS settings from DHCP?

Standalone Server

Se realizará la configuración de Samba como un Standalone Server con el nivel de seguridad de tipo Usuario.

Se paran los servicios mientras se realiza esta configuración:

sudo service nmbd stop
sudo service smbd stop

Se realiza una copia de seguridad del fichero original:

cd /etc/samba
sudo mv smb.conf smb.conf.orig

A continuación se crea un nuevo fichero /etc/samba/smb.conf con el siguiente contenido:

[global]
   server string = samba.home
   server role = standalone server
   interfaces = lo eth0
   bind interfaces only = yes
   disable netbios = yes
   smb ports = 445
   log file = /var/log/samba/smb.log
   max log size = 10000
   security = user

Añadir disco para datos

A continuación se detalla cómo particionar y formatear el disco /dev/sdb que se utilizará para almacenar los datos de este pequeño NAS.

Primero se instala la utilidad gdisk que permite particionar correctamente en formato GPT:

sudo apt install gdisk -y

A continuación se crea una partición que ocupa todo el disco (1TB):

sudo gdisk /dev/sdb
GPT fdisk (gdisk) version 1.0.3

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries.

Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y

Command (? for help): n
Partition number (1-128, default 1):
First sector (34-1953525134, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-1953525134, default = 1953525134) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

Command (? for help): p
Disk /dev/sdb: 1953525168 sectors, 931.5 GiB
Model: USB3.0
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 673344AA-2122-4F13-9131-15B6B926E126
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 1953525134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048      1953525134   931.5 GiB   8300  Linux filesystem

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.

Se formatea la partición /dev/sdb1 usando el sistema de ficheros Linux ext4:

sudo mkfs.ext4 -L data /dev/sdb1
mke2fs 1.44.5 (15-Dec-2018)
Creating filesystem with 244190385 4k blocks and 61054976 inodes
Filesystem UUID: 331658d1-b085-4830-92d3-5d5b72a4f620
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
        102400000, 214990848

Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done

Se crea un directorio para montar la partición:

sudo mkdir /data
sudo mount /dev/sdb1 /data

Y se añade la siguiente línea al fichero /etc/fstab para que se monte siempre que se reinicie el sistema operativo:

UUID=331658d1-b085-4830-92d3-5d5b72a4f620 /data ext4 defaults 0 0

Nota: El UUID se ha obtenido obtener usando los comandos df -hT, lsblk -o name,label,UUID /dev/sdb y blkid.

Carpeta para Samba

Se crea una carpeta donde estarán el resto de carpetas compartidas mediante Samba:

sudo mkdir /data/homes
sudo chown :sambashare /data/homes

Creación de usuario

Se crea el usuario que accederá a las carpetas compartidas, asignando la protección 2770 que incluye setgid:

# Crear home directory:
sudo mkdir /data/homes/manel

# Usuario sin home directory y sin acceso shell
sudo adduser --home /data/homes/manel --no-create-home --shell /usr/sbin/nologin --ingroup sambashare manel

# Cambiar las protecciones de los directorios
sudo chown manel:sambashare /data/homes/manel
sudo chmod 2770 /data/homes/manel

# Añadir el usuario a la BD de Samba y habilitarlo
sudo smbpasswd -a manel
sudo smbpasswd -e manel

# Añadir el usuario al grupo SambaShare
sudo usermod -aG sambashare $(whoami)
sudo usermod -aG sambashare manel

Carpetas compartidas

Y se añade la siguiente definición al fichero /etc/samba/smb.conf:

[manel]
   path = /data/homes/manel
   browseable = no
   read only = no
   force create mode = 0660
   force directory mode = 2770
   valid users = manel

Si se quisiera crear una carpeta compartida para cualquiera que pertenezca al grupo sambashare se podría hacer de la siguiente manera:

[everyone]
   path = /data/homes/everyone
   browseable = no
   read only = no
   force create mode = 0660
   force directory mode = 2770
   valid users = @sambashare

Reiniciar Samba

Finalmente, es necesario reiniciar el daemon de Samba para que se apliquen los cambios:

sudo service smbd restart

Nota: Al no utilizar NetBIOS en este entorno, se puede deshabilitar el daemon nmbd mediante el siguiente comando: sudo systemctl disable nmbd.

Acceder desde Windows

Y después se podría mapear una unidad desde el Explorador de Archivos (Computer > Map Network Drive) o desde la línea de comandos:

net use z: \\192.168.1.180\manel /user:manel

Referencias