Inicio
Artículos
Categorias
Etiquetas
Compartiendo recursos con Samba en Debian 10 Buster
publicado el: 2020-10-14   actualizado el: 2020-10-14   incluido en: Sistemas Operativos
palabras totales: 2031   tiempo de lectura: 10 mins  

Ya que tengo un pequeño servidor casero lo voy a aprovechar para conectar a el los discos duros donde guardamos copias simples de los datos de los ordenadores de casa y las copias de seguridad.

En un principios todos los ordenadores que tendrán acceso a los recursos compartidos utilizan como S.O. GNU/Linux pero no quiero cerrar el acceso a un posible uso por parte de usuarios con equipos Windows por lo que utilizaré Samba como implementación de código abierto del protocolo de red SMB/CIFS para montar un servidor Samba independiente.

Requisitos de usuarios y recursos a cumplir:

  • Cada usuario tendrá al menos una carpeta compartida personal y privada;
  • Todos los usuarios deben tener acceso de lectura y escritura a un recurso compartido de archivos común;
  • Existirá un usuario administrador con acceso de lectura y escritura a todos los recursos compartidos personales y con la propiedad del recurso compartido común.

Los recursos compartidos van a estar en discos duros externos, por lo que debo de montarlos y configurar el servidor para que en cada arranque los monte automáticamente. Para cada disco procederé de la siguiente manera:

Conecto el disco duro al servidor, me aseguro que este desmontado y desde el terminal ejecuto el comando blkid para determinar el UUID del disco.

1
2
3
4
5
6
7
usuario@servidor:~$ sudo umount /dev/sdb1
usuario@servidor:~$ sudo blkid -c /dev/null
/dev/sda1: UUID="b60367ee-e2bf-46d0-b6aa-f6239e589ca5" TYPE="ext4" PARTUUID="de864ffb-01"
/dev/sda2: LABEL="datos" UUID="6f38a642-5086-48f1-9946-39c96a86f8d9" TYPE="ext4" PARTUUID="de864ffb-02"
/dev/sda3: UUID="cb3341c2-8272-4a57-8441-0c47922b3c77" TYPE="swap" PARTUUID="de864ffb-03"
/dev/sdb5: LABEL="Respaldo_1" UUID="ff3605bc-0e85-4308-82f7-76be171eb044" TYPE="ext4" PARTUUID="5b7ccb58-05"
/dev/sdc5: LABEL="exchange_data" UUID="be134147-7220-4c05-bcec-e3c5bf65e32c" TYPE="ext4" PARTUUID="c7da918e-05"

En este ejemplo tengo conectado a mi servidor un disco duro (sdc5) en formato EXT4, con la etiqueta o nombre "exchange_data" que voy a agregarlo al fstab del servidor, para que en el arranque el disco duro siempre se monte en la carpeta compartida “datos_intercambio”.

Edito el fstab y agrego el UUID

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
usuario@servidor:~$ sudo nano /etc/fstab 
#/etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=b60367ee-e2bf-46d0-b6aa-f6239e589ca5 /               ext4    errors=remount-ro 0       1
# swap was on /dev/sda3 during installation
UUID=cb3341c2-8272-4a57-8441-0c47922b3c77 none            swap    sw              0       0
UUID=6f38a642-5086-48f1-9946-39c96a86f8d9	/mnt/datos	ext4	defaults	0	0
UUID=be134147-7220-4c05-bcec-e3c5bf65e32c   /media/datos_intercambio ext4    errors=remount-ro,auto,exec,rw,user 0       0
UUID=ff3605bc-0e85-4308-82f7-76be171eb044   /media/respaldo ext4    errors=remount-ro,auto,exec,rw,user 0       0

Creo las carpetas donde montaré los discos sdb y sdc

1
2
usuario@servidor:~$ sudo mkdir /media/datos_intercambio
usuario@servidor:~$ sudo mkdir /media/respaldo

Monto todos los sistemas de archivos mencionados en fstab entre ellos sdb

1
usuario@servidor:~$ sudo mount -a

Ahora ya puedo crear las carpetas que voy a compartir

1
2
3
4
5
usuario@servidor:~$ sudo mkdir /media/datos_intercambio/intercambios
usuario@servidor:~$ sudo mkdir /media/datos_intercambio/cosas_de_usuario1
usuario@servidor:~$ sudo mkdir /media/datos_intercambio/cosas_de_usuario2
usuario@servidor:~$ sudo mkdir /media/respaldo/respaldo_usuario1
usuario@servidor:~$ sudo mkdir /media/respaldo/respaldo_usuario2

Instalo Samba.

1
usuario@servidor:~$ sudo apt-get install samba

Este comando instalará e iniciará tanto el servidor Samba smbd como el servidor Samba NetBIOS nmbd.

Configurando UFW

Configuro el cortafuegos del servidor para permitir el tráfico de Samba dentro de la red local.

1
usuario@servidor:~$ sudo ufw allow from 192.168.100.0/24 to any app Samba

Compruebo las reglas del cortafuegos.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
usuario@servidor:~$ sudo ufw status
Status: active

To                           Action          From
--                            ------         ----
9000                          ALLOW          192.168.100.0/24          
2011                          ALLOW          192.168.100.0/24          
10000                         ALLOW          192.168.100.0/24          
Anywhere                      ALLOW          192.168.100.136           
Samba                         ALLOW          192.168.100.0/24 

Compruebo que funciona.

1
2
3
4
5
usuario@servidor:~$ sudo netstat -tulpn | grep smb
tcp        0      0 127.0.0.1:139                 0.0.0.0:*               LISTEN      4054/smbd           
tcp        0      0 192.168.100.132:139           0.0.0.0:*               LISTEN      4054/smbd           
tcp        0      0 127.0.0.1:445                 0.0.0.0:*               LISTEN      4054/smbd           
tcp        0      0 192.168.100.132:445           0.0.0.0:*               LISTEN      4054/smbd  

Creando usuarios y permisos

Creo un usuario “usuario1” en el servidor. Este usuario no tendrá directorio home ni podrá acceder mediante ssh al servidor.

1
2
3
usuario@servidor:~$ sudo groupadd sambauser
usuario@servidor:~$ sudo useradd -c "usuario1" -s /usr/sbin/nologin usuario1
usuario@servidor:~$ sudo usermod -G sambauser -a usuario1

Agrego el usuario usuario1 al servidor Samba.

1
2
3
4
5
6
usuario@servidor:~$ sudo smbpasswd -a usuario1
New SMB password:
Retype new SMB password:
Added user usuario1.
usuario@servidor:~$ sudo smbpasswd -e usuario1
Enabled user usuario1.

Repito estos pasos para el segundo usuario usuario2.

1
2
3
4
5
6
7
8
usuario@servidor:~$ sudo useradd -c "usuario2" -s /usr/sbin/nologin usuario2
usuario@servidor:~$ sudo usermod -G sambauser -a usuario2
usuario@servidor:~$ sudo smbpasswd -a usuario2
New SMB password:
Retype new SMB password:
Added user ito.
usuario@servidor:~$ sudo smbpasswd -e usuario2
Enabled user usuario2.

Y para el usuario administrador sambaadmins.

1
2
3
4
5
6
7
8
9
usuario@servidor:~$ sudo groupadd sambaadmins
usuario@servidor:~$ sudo useradd -c "adminsamba" -s /usr/sbin/nologin adminsamba
usuario@servidor:~$ sudo usermod -G sambaadmins -a adminsamba
usuario@servidor:~$ sudo smbpasswd -a adminsamba
New SMB password:
Retype new SMB password:
Added user adminsamba.
usuario@servidor:~$ sudo smbpasswd -e adminsamba
Enabled user adminsamba.

compruebo los usuarios en Samba.

1
2
3
4
usuario@servidor:~$ sudo pdbedit -L
usuario1:1002:usuario1
adminsamba:1004:adminsamba
usuario2:1003:usuario2

Ahora que los usuarios del sistema usuario1, usuario2 y adminsamba existen, puedo establecer la propiedad y los permisos en el directorio de inicio de Samba:  

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
usuario@servidor:~$ sudo chown adminsamba:sambauser /media/datos_intercambio/intercambios
usuario@servidor:~$ sudo chmod 2770 /media/datos_intercambio/intercambios

usuario@servidor:~$ sudo chown usuario1:sambauser /media/datos_intercambio/cosas_de_usuario1/
usuario@servidor:~$ sudo chmod 2770 /media/datos_intercambio/cosas_de_usuario1/
usuario@servidor:~$ sudo chown usuario1:sambauser /media/datos_intercambio/cosas_de_usuario2/
usuario@servidor:~$ sudo chmod 2770 /media/datos_intercambio/cosas_de_usuario2/

usuario@servidor:~$ sudo chown usuario1:sambauser /media/respaldo/respaldo_usuario1/
usuario@servidor:~$ sudo chmod 2770 /media/respaldo/respaldo_usuario1/
usuario@servidor:~$ sudo chown usuario2:sambauser /media/respaldo/respaldo_usuario2/
usuario@servidor:~$ sudo chmod 2770 /media/respaldo/respaldo_usuario2/

Establecer los permisos del directorio en 2770 significa que los nuevos archivos o directorios creados en /media/datos_intercambio/cosas_de_usuario1 heredarán la propiedad del grupo del directorio principal en lugar del grupo primario del usuario que creó el archivo o directorio. Esto significa, por ejemplo, que si el usuario administrador adminsamba creara un nuevo directorio en el recurso compartido de usuario1, usuario1 podría leerlo y escribir en el.

Configurando Samba

Lo siguiente es hacer una copia del archivo de configuración del servidor Samba y editarlo:

1
2
usuario@servidor:~$ sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.old
usuario@servidor:~$ sudo nano /etc/samba/smb.conf

Dentro de el establezco el nombre del grupo de trabajo (por defecto “WORKGROUP”):

1
2
# Change this to the workgroup/NT-domain name your Samba server will part of
   workgroup = WORKGROUP

Deshabilito la definición de share para los homes de usuarios:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
;[homes]
;   comment = Home Directories
;   browseable = no

# By default, the home directories are exported read-only. Change the
# next parameter to 'no' if you want to be able to write to them.
;   read only = yes

# File creation mask is set to 0700 for security reasons. If you want to
# create files with group=rw permissions, set next parameter to 0775.
;   create mask = 0700

# Directory creation mask is set to 0700 for security reasons. If you want to
# create dirs. with group=rw permissions, set next parameter to 0775.
;   directory mask = 0700

# By default, \\server\username shares can be connected to by anyone
# with access to the samba server.
# The following parameter makes sure that only "username" can connect
# to \\server\username
# This might need tweaking when using external authentication schemes
;   valid users = %S

Deshabilito compartir impresoras:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
;[printers]
;   comment = All Printers
;   browseable = no
;   path = /var/spool/samba
;   printable = yes
;   guest ok = no
;   read only = yes
;   create mask = 0700

# Windows clients look for this share name as a source of downloadable
# printer drivers
;[print$]
;   comment = Printer Drivers
;   path = /var/lib/samba/printers
;   browseable = yes
;   read only = yes
;   guest ok = no

Y al final del archivo de configuración, incluyo un archivo de definición de shares personalizado (para simplificar la configuración): include = /etc/samba/smb.conf.shares Guardo los cambios y cierro el archivo. Luego, defino el nuevo share en el archivo personalizado:

1
usuario@servidor:~$ sudo nano /etc/samba/smb.conf.shares

Inserto la siguiente configuración:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
  GNU nano 3.2                          /etc/samba/smb.conf.shares                                      

[intercambios]
   comment = Directorio de intercambio
   path = /media/datos_intercambio/intercambios/
   valid users = @sambauser @sambaadmins

   browseable = yes
   read only = no

   force directory mode = 2770
   force create mode = 0770

[Cosas de Usuario1]
   comment = Directorio personal de Usuario1
   path = /media/datos_intercambio/cosas_de_usuario1
   valid users = usuario1 @sambaadmins

   browseable = yes
   read only = no

   force directory mode = 2770
   force create mode = 0770

[Respaldo de Usuario1]
   comment = Directorio copias de seguridad de Usuario1
   path = /media/respaldo/respaldo_usuario1
   valid users = usuario1 @sambaadmins

   browseable = yes
   read only = no

   force directory mode = 2770
   force create mode = 0770

[Cosas de Usuario2]
   comment = Directorio personal de Usuario2
   path = /media/datos_intercambio/cosas_de_usuario2
   valid users = usuario2 @sambaadmins

   browseable = yes
   read only = no

   force directory mode = 2770
   force create mode = 0770

[Respaldo de Usuario2]
   comment = Directorio copias de seguridad de Usuario2
   path = /media/respaldo/respaldo_usuario2
   valid users = usuario2 @sambaadmins

   browseable = yes
   read only = no

   force directory mode = 2770
   force create mode = 0770

Guardo los cambios y antes de reiniciar Samba compruebo con el programa de test testparm que no hay ningún fallo dentro de la configuracion del archivo.

1
2
usuario@servidor:~$ sudo testparm
usuario@servidor:~$ sudo systemctl restart smbd

Acceso al servidor Samba desde la linea de comandos

Se puede usar una herramienta llamada smbclient para acceder a Samba desde la línea de comandos. Este paquete no está incluido de manera predeterminada en la mayoría de las distribuciones de Linux, por lo que se debería instalar con el administrador de paquetes local apt.

En Debian y Ubuntu, se instala smbclient con el siguiente comando:

1
2
usuario@usuariopc:~$ sudo apt-get update
usuario@usuariopc:~$ sudo apt-get install smbclient

Para montar, en el sistema de archivos de mi ordenador personal con Debian, recursos de redes CIFS compartidos en máquinas remotas, debo instalar las Utilidades Comunes para Sistemas de Archivos de Internet ,“Common Internet File System utilities” cifs-utils:

1
usuario@usuariopc:~$ sudo apt -y install cifs-utils

smbclient usa el siguiente formato para acceder a los recursos compartidos de Samba:

1
smbclient //ip_samba_hostname_o_server_ip/share -U username

Después de ejecutar el comando smbclient, me pide la contraseña de Samba y me registra en una interfaz de línea de comandos que recuerda la interfaz de texto FTP:

1
smb: \>

Esta interfaz es más útil para probar nombres de usuario y contraseñas y acceso de lectura y escritura. Por ejemplo, puedo crear un directorio y enumerar su contenido de la siguiente manera:

1
2
smb: \> mkdir prueba
smb: \> ls

Para eliminar el directorio puedo escribir:

smb: \> rmdir test

Si quiero acceder como usuario1 al recurso compartido común intercambios, cambio el comando a:

1
smbclient //samba.ejemplo.com/intercambios -U usuario1

o al recurso compartido Cosas de Usuario1:

1
2
3
4
5
6
usuario@usuariopc:~$ smbclient //servidor-nombre.local/'Cosas de Usuario1' -U usuario1
mkdir failed on directory /var/run/samba/msg.lock: Permiso denegado
Unable to initialize messaging context
Enter WORKGROUP\usuario1's password: 
Try "help" to get a list of possible commands.
smb: \> 

Veo que aparece un error, no me permite acceder al directorio /var/run/samba/msg.lock. es un bug reportado para la version de Samba 4.9.5 que porta Debian Buster

Realizo un test de velocidad para conocer la velocidad de transferencia entre los distintos discos

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
usuario@servidor:~$ sudo hdparm -t /dev/sdc
/dev/sdc:
 Timing buffered disk reads:  92 MB in  3.05 seconds =  30.17 MB/sec

usuario@servidor:~$ sudo hdparm -t /dev/sdb
/dev/sdb:
 Timing buffered disk reads: 288 MB in  3.01 seconds =  95.56 MB/sec
 
usuario@servidor:~$ sudo hdparm -t /dev/sda
/dev/sda:
 Timing buffered disk reads: 1296 MB in  3.00 seconds = 431.78 MB/sec

 

ESC
«No se puede enseñar nada a un hombre; sólo se le puede ayudar a encontrar la respuesta dentro de sí mismo». Galileo Galilei (1564 - 1642)
Tabla de contenidos
Artículos relacionados
Instalando Conky System Monitor y Conky Manager en Debian Buster

Proceso de instalación del monitor de sistemas Conky y la interface gráfica Conky Manager para manejar de una forma mas cómoda Conky.

2020-6-12
Instalación de Autofirma en Debian 10 Buster

Otra herramienta útil en la tramitación de documentación de manera telemática ante la administración es Autofirma. Según nos indican en la sede electrónicoa del gobierno de España.

2020-8-14
Instalación de DNI electrónico (DNIe) en Debian 10 Buster

Para facilitar algunos de mis trámites con la administración pública, tanto local como estatal, voy a instalar un lector de DNIe en mi máquina con Debian Buster y los certificados de dicho documento en el navegador web Firefox 68.12.0esr (64-bit).

2020-8-14
Instalando GitKraken en Debian Buster

Instalo GitKraken siguiendo los pasos de la página de soporte del sitio web de Gitkraken. Entre otras razones para su instalación esta que no se requieren herramientas Git para GitKraken, por lo que una vez instalado, se puede abrir la aplicación y comenzar a trabajar con el.

2020-6-10
Obtención del certificado de la Real Casa de la Moneda para persona física

Una de las formas de acreditar nuestra identidad a la hora de realizar distintos trámites con la administración pública española es utilizando el certificado de la Real Casa de la Moneda para personas físicas. En este artículo describo la secuencia de pasos que he tenido que seguir para poder obtenerlo usando mi DNIe e instalarlo en un ordenador con sistema operativo Gnu/linux.

2023-11-10