miércoles, 16 de julio de 2025

Sistemas Operativos 8.- Compartir archivos mediante Samba

  ¿Te pierdes entre tantos temas? 📚✨ Descubre todo lo que ofrece este blog en un solo vistazo [👉 Ver índice completo]

 A diferencia de NFS (que comparte archivos a nivel de sistema o de equipos), Samba permite compartir carpetas por usuario, lo que lo hace ideal para entornos mixtos (Windows + Linux).

En este tutorial, veremos varios casos. El primero es cómo crear una carpeta pública en Windows (accesible desde Linux) donde todos los dispositivos de la red puedan leer y escribir sin necesidad de contraseña. Como siempre los equipos deben verse en la red así que lo primero es usar el comando ping entre las máquinas que quieras conectar y verificar que se vean. En Windows puedes ver la dirección de red con "ipconfig" y en linux con "ifconfig".

Compartir archivos entre Windows y Linux con Samba (Carpeta Pública)


1. Configurar Windows para compartir archivos

Antes de crear la carpeta pública, debemos ajustar la configuración de red en Windows:
    1. Ve a:
Panel de Control → Redes e Internet → Centro de redes y recursos compartidos → Cambiar configuración de uso compartido avanzado.
    2. Asegúrate de activar estas opciones en la sección Privado (perfil actual):
        ◦ ✔ Activar la detección de redes
        ◦ ✔ Activar la configuración automática de dispositivos conectados a la red
        ◦ ✔ Activar el uso compartido de archivos e impresoras
activación de red
    3. En la sección "Todas las redes":
        ◦ Desactivar el uso compartido con protección por contraseña (para acceso sin autenticación es decir sin usar contraseña).

desactivar contraseña


2. Crear y compartir la carpeta pública en Windows

Sigue estos pasos para configurar una carpeta compartida accesible por todos los dispositivos de la red:
Paso 1: Crear la carpeta
            ▪ Crea una carpeta nueva en el lugar que prefieras (ej. en el Escritorio o en C:\).
            ▪ Por ejemplo: C:\Compartida (o el nombre que desees).

Paso 2: Configurar el compartido en Windows
            ▪ Haz clic derecho en la carpeta → Propiedades → Pestaña "Compartir".
            ▪ Haz clic en "Compartir..." (dentro de la pestaña Compartir).
            ▪ En el desplegable, selecciona "Todos" → "Agregar".
            ▪ A la derecha, elige los permisos:
            ▪ Lectura/escritura (para permitir modificaciones).
            ▪ Pulsa "Compartir" → "Listo" (en la siguiente ventana).
compartir carpeta

            ▪ Verifica el uso compartido avanzado (opcional pero recomendado):
            ▪ En la pestaña "Compartir" de las propiedades, haz clic en "Uso compartido avanzado".
            ▪ Marca "Compartir esta carpeta".
            ▪ Pulsa "Aceptar" → "Cerrar".
uso compartido avanzado


3. Verificar la ruta de red (opcional)
Para acceder desde otro equipo (incluido Linux), necesitarás la ruta de red de la carpeta compartida:
            ▪ Normalmente sigue el formato:
             
      \\NOMBRE_PC_WINDOWS o dirección IP\Compartida

              (Reemplaza NOMBRE_PC_WINDOWS por el nombre de tu equipo en la red o también se puede usar su dirección de red).

3. Acceso desde Linux (Debian/Ubuntu)

Ahora que la carpeta está compartida en Windows, conectémonos desde Linux. Primero, instalamos los paquetes necesarios (válido tanto para cliente como en un futuro cuando Linux sea el servidor Samba):

sudo apt update
sudo apt install samba samba-common smbclient cifs-utils

a) Windows como servidor, Linux como cliente

1. Listar recursos compartidos de Windows

Para ver las carpetas compartidas por el equipo Windows, usa:

smbclient -L //IP_WINDOWS

Ejemplo:

smbclient -L //192.168.1.74

smbclient --list

Cuando pida contraseña, simplemente pulsa Enter. En el ejemplo anterior el equipo Windows tiene la dirección 192.168.1.74 y vemos que lo que comparte, entre otras cosas la carpeta pública llamada "Compartida". 

Si la carpeta no es pública como veremos más adelante, añade el usuario: -U usuario_de_windows para poder entrar en el sistema.

2. Acceder a la carpeta compartida (consola)

Para entrar en modo interactivo (similar a FTP):

sudo smbclient //IP_WINDOWS/Carpeta_Compartida

Ejemplo con carpeta pública:

sudo smbclient //192.168.1.74/Compartida

smbclient funcionando


            ▪ Cuando pida contraseña, pulsa Enter (carpeta pública).

Comandos útiles dentro de smbclient:

            ▪ ls: Listar archivos.
            ▪ get archivo: Descargar un archivo.  El archivo se descarga en el directorio actual desde donde ejecutaste el comando en tu terminal de Linux (no dentro de la carpeta compartida de Windows).
            ▪ put archivo: Subir un archivo a la carpeta compartida.
            ▪ exit: Salir.

b) Montar la carpeta en Linux (acceso permanente con permisos de usuario)


Para que la carpeta compartida de Windows sea accesible de forma permanente y con los permisos correctos para tu usuario en Linux, sigue estos pasos:

1. Crear el punto de montaje
Ejecuta:

sudo mkdir /samba

Si prefieres otra ruta (ej: /mnt/windows_share), ajusta los comandos.

2. Asignar permisos al directorio (opcional, pero recomendado)

Para evitar conflictos, asegúrate de que tu usuario (alumno en mi ejemplo) tenga control sobre /samba:

sudo chown alumno:alumnos /samba

3. Montar la carpeta compartida con permisos personalizados

Usa este comando para montar la carpeta con tu usuario y grupo, permitiendo lectura/escritura total (adapta el siguiente comando con la ip del servidor Windows, el nombre de tu carpeta pública compartida, la carpeta que sirve como punto de montaje en Linux y el nombre de tu usuario y su grupo):

montaje de la carpeta compartida

Pulsa Intro, simplemente, cuando te pida la contraseña ya que es una carpeta pública que no tiene contraseña.

Puedes ver si ha quedado montada usando el comando "df"

df


Explicación de opciones:
                • uid=alumno: Asigna la propiedad al usuario alumno.
                • gid=alumno: Asigna el grupo alumnos.
                • file_mode=0777 / dir_mode=0777: Permisos totales (ajusta a 0755 si prefieres restringir escritura).
                • username=guest: Para carpetas públicas (si Windows requiere autenticación, usa username=tu_usuario_windows,password=tu_contraseña).

4. Montaje automático al iniciar (fstab)

Para que la carpeta se monte automáticamente al arrancar el sistema, edita /etc/fstab:

sudo nano /etc/fstab

Añade esta línea al final (ajusta IP, nombres y rutas):

//192.168.1.74/Compartida  /samba  cifs uid=alumno,gid=alumno,file_mode=0777,dir_mode=0777,username=guest,password="",x-systemd.automount,nofail 0 0

Notas:
              En sistemas basados en systemd (como Raspberry Pi OS/Raspbian que es la que estoy usando para los ejemplos), el montaje de recursos de red como CIFS/SMB a veces no ocurre automáticamente en el arranque porque la red aún no está disponible cuando se procesan las entradas de fstab, (me ha ocurrido que no se montaba en el arranque y si, si lo hacia manualmente con mount -a) por lo que a las opciones anteriores he añadido:
  • x-systemd.automount: crea una unidad que se montará automáticamente al acceder a la ruta /samba
  • nofail: evita que el sistema se queje o bloquee el arranque si el recurso no está disponible.

 Los dos números al final de cada línea en /etc/fstab corresponden a estas opciones:

  1. Dump (primer número, en mi caso 0):
    Indica si se debe hacer un backup de la partición con el comando dump.

  • 0: No realizar backup.

  • 1: Incluir en backup.

Esto hoy en día casi siempre se deja en 0 porque dump ya no se suele usar.

  1. Pass (segundo número, en mi caso 0):
    Define el orden en que el sistema verifica el sistema de archivos con fsck durante el arranque:

  • 0: No verificar nunca con fsck.

  • 1: Verificar primero (usualmente reservado para / raíz).

  • 2: Verificar después del raíz, en orden.

Para sistemas de red como CIFS, este valor debe ser 0, porque no es un sistema local que fsck pueda verificar.

Prueba a reiniciar el sistema y entrar en la carpeta /samba. Debería montarse automáticamente y estar lista para utilizarse.

Acceso a Carpetas Compartidas desde el Gestor de Archivos (GUI) en Linux

Para acceder a la carpeta pública de Windows desde el gestor de archivos de Linux (como Nautilus, Thunar o Dolphin), sigue estos pasos:

1. Acceso Básico (Solo Lectura)

                • Abre el gestor de archivos (ej: Nautilus en GNOME, Thunar en XFCE).
                • En la barra de direcciones, escribe:
                 
       smb://IP_servidor_windows

smb con el admon de archivos

                 
                • Si pide credenciales:
                • Usuario: guest
                • Contraseña: (deja vacía o escribe cualquier cosa)
                  ⚠️ En algunas distribuciones, puede que no funcione con contraseña vacía. Prueba con guest + contraseña guest.
                • Verás todas las carpetas compartidas en Windows. Haz clic en la carpeta pública (Compartida).

vista de carpeta compartida



2. Acceso con Permisos de Escritura (Evitando Problemas de Permisos).

Si intentas crear, modificar o borrar archivos y recibes errores de permisos, hay dos soluciones:

Opción 1: Usar el Gestor de Archivos como Root (No recomendado para uso diario)
                • Abre una terminal y ejecuta el administrador de archivos que tengas instalado: 
                 
      sudo nautilus  # GNOME (Ubuntu/Debian)
      sudo thunar    # XFCE
      sudo dolphin   # KDE
      sudo pcmanfm (rapsbian)
                • En la ventana de root, navega a smb://IP_servidor_windows/Carpeta_compartida.
                • ⚠️ Precaución: Usar el gestor de archivos como root puede ser peligroso (borrado accidental de archivos críticos).


Opción 2: Montar la Carpeta con Permisos Correctos (Recomendado)
Sigue los pasos del apartado anterior para montar la carpeta con uid y gid de tu usuario:

sudo mount -t cifs //IP_Windows/Compartida /punto_de_montaje -o uid=tu_usuario,gid=tu_grupo,file_mode=0777,dir_mode=0777,username=guest

                • Luego accede desde el gestor de archivos a /samba sin necesidad de root.

Compartir archivos entre Windows y Linux con Samba (Carpeta Privada)

Si la carpeta la ha creado nuestro usuario de Windows, la hemos preparado para compartir pero solo ese usuario tiene permisos para leer - escribir en esa carpeta es decir cuando la carpeta compartida en Windows requiere autenticación (solo un usuario específico tiene permisos de lectura/escritura), debemos modificar los comandos para incluir las credenciales. Las opciones son todas las mismas que hemos visto anteriormente cuando la carpeta era pública, la única diferencia es que tendremos que entrar a Windows desde Linux con las opciones username=Tu_usuario y password=tu contraseña de Windows. Recuerda que Windows comparte para usuarios, mientras que Linux comparte para equipos.

Por ejemplo:

smbclient -U nombre_usuario%contraseña //IP_servidor/carpeta_compartida

o

mount -t cifs //IP_servidor/carpeta_compartida /pto_montaje -o username=nombre_usuario_windows,password=contraseña

Compartir archivos entre Linux (servidor) y Windows o Linux (clientes) con Samba 

Lo primero que tenemos que hacer es crear en Linux un directorio que será el punto de montaje y en principio, para practicar, es conveniente que le demos todos los permisos. (chmod 777)

1) Vamos a empezar creando una carpeta pública en Linux que se comparta con Windows, por ejemplo. Para ello tenemos que añadir al final del archivo /etc/samba/smb.conf una nueva sección por cada carpeta compartida:

[publica] --> Es el nombre que pondremos para acceder, aunque puedes poner el que quieras. Pero                             recuerda que es el que tendrás que utilizar para conectarte a la carpeta.
    comment = " " Comentario sobre la carpeta compartida.
    path = /ruta_absoluta_de_la_carpeta_a_compartir
    public = yes/no -> si la carpeta es publica o no
    writable = yes/no -> si se puede escribir o no en esa carpeta

otras opciones adicionales que se pueden utilizar son:
browseable = yes/no  # Visible en la red
guest ok = yes/no  # Permite acceso como invitado
create mask = 0777  # Permisos para nuevos archivos (todos los permisos)
directory mask = 0777  # Permisos para nuevos directorios (todos los permisos)

Por ejemplo:

Ejemplo de sección para samba en linux


Cada vez que añadamos una nueva sección a esta carpeta tenemos que reiniciar el servicio de samba.

service smbd start -> para iniciar el servidor samba
service smbd stop -> parar el servidor samba
service smbd restart -> cada vez que modifiquemos el archivo /etc/samba/smb.conf

El comando para ver si esta todo OK podemos utilizar el comando testparm

testparm

El ejemplo anterior es lo que saldría si todo esta bien.

Para acceder desde Windows a esta carpeta, aunque podemos hacerlo desde el explorador de Windows, lo más sencillo es hacer clic derecho, por ejemplo en el escritorio y crear un nuevo acceso directo. Al ser la carpeta pública no nos hace falta ni usuario ni contraseña. Dentro escribimos la dirección de red de la carpeta compartida.

acceso directo

Recuerda que en Windows se usan esas barras invertidas para las direcciones de red \\ y no las de Linux que son estas //.

carpeta compartida


Desde otro linux, podemos conectar con esta carpeta al igual que hicimos al principio del post. Vamos a recordarlo brevemente:
  • Desde el gestor de archivos -> smb://IPservidor/nombre_sección
  • Desde la consola -> smbclient //IPservidor/nombre_sección
    • Montándolo:
      1) Como root:
      sudo mount -t cifs //IPservidor/nombre_seccion /Pto_montaje. //Nos pedirá contraseña pero no hace falta introducirla.
      2) De forma automática o no por un usuario añadiendo la línea correspondiente en el archivo /etc/fstab
      //Ipservidor/nombre_seccion  /pto_montaje  cifs [auto/noauto],user,[rw/ro]
      Si queremos que al iniciar sesión, si hemos puesto la opción auto, (o cuando se monte como usuario) no pida la contraseña añade al final la opción password=""
2) Para acceder a una carpeta de un servidor-samba pero para determinados usuarios o grupos.

Para poder acceder a una carpeta para un usuario o grupo en Linux tenemos que tener presente dos requisitos:
  1. Tenemos que tener cuenta de usuario en el equipo que comparte, es decir en el servidor.
    sudo adduser nombre_usuario

    añadir usuario


  2. Tenemos que tener cuenta de usuario de samba también en ese equipo.
    sudo smbpasswd -a usuario (nos pedirá una nueva contraseña para usar samba)
añadir usuario a samba

Otras opciones del comando smbpasswd son:
-x Eliminar usuario de samba
-d Desabilitar usuario de samba
-e Habilitar usuario de samba.

Para ver los usuarios del equipo, que además son usuarios de samba usaremos:

pdbedit -w -L

3) Tenemos que crear la sección correspondiente de samba en el archivo /etc/samba/smb.conf. En el ejemplo anterior creare una sección para que solo pueda acceder a esa carpeta el miembro del ordenador de Linux llamado "usuario". Si fueran varios usuarios cada uno de ellos iría en el comando "valid users" separado por un espacio.

seccion samba

Para permitir el acceso a un grupo en Samba con la directiva "valid users", se usa el nombre del grupo precedido por le signo @.

4) Como siempre que se modifica un archivo de configuración tenemos que reiniciar el servicio samba.
sudo service smbd restart

y ya podemos acceder a la carpeta igual que cuando el servidor era Windows, teniendo en cuenta que necesitamos el nombre del usuario y su contraseña para poder entrar al servicio.

acceso a la carpeta samba por un usuario
credenciales de samba
Las credenciales son las de samba no las del usuario para entrar en el equipo Linux.

Si quisiéramos mostrar el estado de las conexiones actuales usaremos el comando:

sudo smbstatus 

El cual nos mostrará los usuarios conectados y los recursos compartidos.

smbstatus


No hay comentarios:

Publicar un comentario