Cómo configurar un recurso compartido con Samba para una pequeña organización con Ubuntu

Samba y Ubuntu. Tutorial

Introducción

Samba es una implementación de código abierto del protocolo de red SMB/CIFS utilizado en entornos Windows para servicios compartidos como el acceso a archivos e impresoras y Active Directory.

Samba también se puede usar para crear archivos compartidos multiplataforma en una configuración llamada servidor independiente.

En esta guía, instalará y configurará un servidor Samba independiente para proporcionar almacenes de archivos en red o recursos compartidos para una pequeña organización hipotética llamada ejemplo.com.

Esta organización tiene varios requisitos para sus archivos compartidos:

  1. Cada empleado necesita un archivo compartido personal y privado;
  2. Todos los empleados deben tener acceso de lectura y escritura a un recurso compartido de archivos común;
  3. Un usuario administrativo debe tener acceso de lectura y escritura a todos los recursos compartidos personales y la propiedad del recurso compartido común.

EL servidor Samba que se configurará cumplirá con todos estos requisitos.

También aprenderá cómo acceder a los recursos compartidos desde Windows, Linux y macOS.

Prerrequisitos

Antes de comenzar esta guía, necesitará lo siguiente:

  • Un servidor Ubuntu 18.04 con un usuario sudo no root. Samba tiene requisitos modestos de RAM y CPU y funcionará bien en un servidor de 1GB. Es más probable que se quede sin espacio de almacenamiento, por lo que esta debería ser de su consideración principal elegir el tamaño de espacio en disco de su servidor.

  • Se permiten conexiones TCP entrantes en el puerto 445. Si está utilizando el firewall UFW, consulte Cómo configurar un firewall con UFW en un Ubuntu y Debian en Google para obtener orientación. Si está u Consulte la guía de configuración inicial del servidor Ubuntu 16.04 para obtener más informacióntilizando un firewall diferente o externo, consulte la documentación correspondiente.

Paso 1 - Instalando Samba

Comencemos instalando Samba usando el sistema de administración de paquetes de Ubuntu.

Antes de instalar nuevos paquetes, vamos a actualizar el índice del paquete local para baincluir las versiones más actualizadas de los repositorios de Ubuntu:

sudo apt-get update

A continuación, instale Samba:

sudo apt-get install samba

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

nmbd no es necesario para este tutorial, por lo que, en aras de la seguridad, puede detenerlo y deshabilitarlo con systemctl:

sudo systemctl stop nmbd.service
sudo systemctl disable nmbd.service

Para evitar problemas de seguridad que pueden surgir al ejecutar un servicio no configurado y habilitado para la red, detengamos el servidor Samba hasta que los detalles de configuración estén en su lugar:

sudo systemctl stop smbd.service

Samba ahora está instalado y listo para ser configurado.

Paso 2: configuración de las opciones globales de Samba

Definamos cómo se comportará el servidor Samba modificando su archivo de configuración, ubicado en /etc/samba/smb.conf.

Este archivo tiene dos partes: una sección [global] y una sección [shares].

La sección [global] configura el comportamiento del servidor Samba, y las secciones [shares] configuran los archivos compartidos.

Comencemos estableciendo directivas en la sección [global].

En lugar de editar /etc/samba/smb.conf directamente, cámbiele el nombre a smb.conf.original y cree un nuevo archivo con el nombre smb.conf:

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

Antes de editar /etc/samba/smb.conf, verifiquemos las interfaces disponibles para decirle a Samba cuál debe reconocer. Escriba lo siguiente:

ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 0c:9d:92:ca:7a:ef brd ff:ff:ff:ff:ff:ff

Esta salida indica que lo es la interfaz de bucle invertido y enp2s0 es la interfaz de red externa, aunque su interfaz externa puede diferir.

Tome nota de ambos: los incluirá con la directiva de interfaces en la sección [global] del archivo smb.conf.

Comencemos a editar este archivo con nano o su editor favorito:

sudo nano /etc/samba/smb.conf

La sección [global] de este archivo definirá el nombre del servidor, el rol y otros detalles, incluidas las interfaces de red:

[global]
        server string = samba_server
        server role = standalone server
        interfaces = lo <<su_interface>>
        bind interfaces only = yes
        disable netbios = yes
        smb ports = 445
        log file = /var/log/samba/smb.log
        max log size = 10000

Estas directivas especifican lo siguiente:

  • server string: esta es la información de identificación que se proporcionará a los usuarios durante las conexiones. Puede usar samba_server u otro nombre que identifique su servidor. A lo largo de este tutorial, verá la cadena samba.ejemplo.com para denotar el recurso compartido Samba para la organización ejemplo.com.
  • server role: define qué tipo de servidor Samba se creará. En este caso es un servidor independiente, es decir, un recurso compartido de archivos. Otros tipos de servidores incluyen servidores miembros de dominio y controladores de dominio.
  • interfaces: estas son las interfaces de red a las que se unirá Samba. lo es la interfaz de bucle invertido (127.0.0.1) y es obligatorio. También deberá incluir la interfaz de red externa que generó anteriormente. Esto suele ser eth0, o en este tutorial se vio que es enp2s0 .
  • bind interfaces only: esto garantiza que Samba solo se una a las interfaces enumeradas en la línea de interfaces. Como medida de seguridad, esto hace que Samba ignore los paquetes que no corresponden a las interfaces especificadas.
  • disable netbios: deshabilita todas las funciones de NetBIOS que no son necesarias en un servidor independiente. Hacer esto simplifica el proceso de resolución del nombre del servidor y el transporte del tráfico SMB.
  • smb ports: establece el puerto en el que Samba escuchará. El puerto 445 es el puerto estándar para Samba.
  • log file: establece el nombre y la ubicación del archivo de registro de Samba.
  • max log size: establece un límite de tamaño en el archivo de registro. El número listado está en bytes y equivale a 10 MB. Algunas cosas a tener en cuenta al establecer este límite de tamaño: cuando se alcanza, Samba generará un nuevo archivo de registro y moverá el contenido anterior a un duplicado con una extensión .old. Si se supera nuevamente el límite, se destruirá el archivo .old existente. Esto evita que el espacio en disco/partición se vea desbordado con el contenido de un único archivo de registro. Por lo tanto, debe definir un tamaño de archivo que tenga sentido para los recursos de su sistema.

Si desea un registro más detallado mientras configura el servidor, agregue la siguiente línea a la sección [global]:

log level = 3 passdb:5 auth:5

Esto establece el nivel de registro en 3 (información), aumentando la granularidad de la información de registro desde la configuración predeterminada de 1.

La configuración más alta es 5 para las clases de depuración passdb y auth que proporciona más información relacionada con la autenticación del usuario.

Guarde y cierre el archivo cuando haya terminado de crear esta sección.

Siempre que edite smb.conf, debe ejecutar la utilidad de Samba testparm para verificar que no haya errores de sintaxis:

testparm

La ejecución del comando testparm contra el archivo smb.conf produce el siguiente resultado:

Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

Al presionar ENTER se produce la siguiente salida:

# Global parameters
[global]
        server string = samba_server
        interfaces = lo <<su_interface>>
        bind interfaces only = Yes
        server role = standalone server
        log file = /var/log/samba/smb.log
        max log size = 10000
        smb ports = 445
        disable netbios = Yes
        idmap config * : backend = tdb

Si testparm informa que el archivo de servicios cargados está bien, entonces no hay errores de sintaxis que detengan el inicio del servidor Samba.

La configuración de la sección [global] es todo lo que se requiere para iniciar el servidor Samba.

Sin embargo, su funcionalidad estará limitada sin configuraciones compartidas.

Un recurso compartido consta de dos partes, un usuario y un directorio, los cuales deben crearse y configurarse para permitir inicios de sesión y pruebas.

La siguiente sección explicará cómo crear usuarios que puedan acceder a los recursos compartidos.

Paso 3 - Crear usuarios

En este paso, crearemos usuarios que puedan acceder a los recursos compartidos. Necesitarán acceso como usuarios de Samba y del sistema para autenticarse con el servidor de Samba cuando inicien sesión y lean y escriban en el sistema de archivos.

En la compañía hipotética ejemplo.com hay cuatro empleados que deben agregarse al servidor Samba y crearse como usuarios en el sistema Linux: Carlos, Nancy, Pedro y Sara.

Además de estos cuatro, habrá un usuario administrador que podrá acceder y administrar los recursos compartidos personales.

Este usuario también será propietario de los recursos compartidos comunes a los que todos pueden acceder.

El primer paso para agregar usuarios del sistema es crear directorios de inicio para cada uno de ellos.

En lugar de utilizar los directorios de inicio estándar en /home/<<usuario>>, los directorios y datos de Samba se ubicarán en /samba/.

Mantener los datos de Samba en una sola ubicación y separados de otros datos de usuario facilitará las tareas de administración futuras, como las copias de seguridad.

Nota: Los usuarios creados en esta guía no están destinados a tener inicios de sesión por SSH. Si sus usuarios ya tienen cuentas en el servidor, debe crear un usuario de Samba dedicado para seguir esta guía.

La siguiente sección explicará el proceso para agregar el primer usuario, Carlos, pero deberá repetir este proceso para Nancy,Pedro y Sara.

El primer paso es crear el directorio donde se almacenarán los datos de Samba, en la raíz del sistema de archivos.

Este directorio se llamará /samba/, y la propiedad de su grupo se establecerá en sambashare, un grupo que se creó cuando instaló Samba.

Ejecute los siguientes comandos para crear el directorio /samba/ y establecer la propiedad del grupo en sambashare:

sudo mkdir /samba/
sudo chown :sambashare /samba/

A continuación, cree el directorio de inicio de Carlos en el directorio /samba/:

sudo mkdir /samba/carlos

Ahora, agregue a Carlos como usuario del sistema con el siguiente comando:

sudo adduser --home /samba/carlos --no-create-home --shell /usr/sbin/nologin --ingroup sambashare carlos

Las opciones hacen lo siguiente:

  • –home : Establece la ubicación del directorio de inicio del usuario.
  • –no-create-home : Esto detiene el comando adduser de crear el directorio de inicio de carlos. Si el sistema creara este directorio, se rellenaría con archivos de configuración como .bash_history que no son necesarios para la configuración actual.
  • –shell : Esto establece qué shell se le asignará a carlos cuando inicie sesion via SSH. No se necesita un inicio de sesión SSH para acceder a un recurso compartido de Samba; establecer esto a /usr/sbin/nologin deshabilitará los inicios de sesión SSH
  • –in-group sambashare : Esto agrega al usuario al grupo sambashare, dándole acceso de lectura y escritura a sus propios recursos compartidos y al recurso compartido común.

Se le solicitará una contraseña cuando ejecute este comando. Elija una contraseña única, no basada en diccionario de 10 caracteres o más.

Ahora que el usuario del sistema carlos existe, puede establecer la propiedad y los permisos en su directorio de inicio de Samba:

sudo chown carlos:sambashare /samba/carlos/
sudo chmod 2770 /samba/carlos/

Establecer los permisos del directorio en 2770 significa que los nuevos archivos o directorios creados en /samba/carlos/ 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 creara un nuevo directorio en el recurso compartido de Carlos, Carlos podría leerlo y escribirle.

A continuación, agregue Carlos al servidor Samba.

Samba mantiene su propia base de datos de usuarios y contraseñas, que utiliza para autenticar inicios de sesión.

Para iniciar sesión, todos los usuarios deben agregarse al servidor Samba y habilitarse.

Ejecute los siguientes comandos smbpasswd para realizar estas dos tareas:

sudo smbpasswd -a carlos
sudo smbpasswd -e carlos

Las opciones utilizadas aquí hacen lo siguiente:

  • -a : Esto agrega al usuario al servidor Samba sin habilitarlo. -e : Esto habilita un usuario agregado previamente.

La contraseña que ingrese aquí se utilizará para acceder al recurso compartido Samba y puede diferir de la contraseña del sistema.

El usuario Carlos ahora existe como un usuario del sistema sin la capacidad de SSH en el servidor.

Tiene un directorio de inicio en /samba/david, y está registrado y habilitado como usuario de Samba.

Repita este proceso para cada usuario de Samba (Nancy, Pedro y Sara).

Para crear el usuario administrador, ejecute los siguientes comandos, cambiando el directorio de inicio a /samba/todos/:

$ sudo mkdir /samba/todos
$ sudo adduser --home /samba/todos --no-create-home --shell /usr/sbin/nologin --ingroup sambashare admin
$ sudo chown admin:sambashare /samba/todos/
$ sudo chmod 2770 /samba/todos/
$ sudo smbpasswd -a admin
$ sudo smbpasswd -e admin

Además de crear el usuario administrador (admin), creemos un grupo llamado administradores para facilitar la administración del servidor.

Con permisos de lectura y escritura para cada recurso compartido, este grupo puede simplificar el trabajo de agregar y eliminar usuarios.

Por ejemplo, si los usuarios individuales funcionan como usuarios administradores y luego abandonan la organización, deben eliminarse individualmente de cada recurso compartido.

Los nuevos administradores también deben agregarse manualmente a cada recurso compartido.

Crear un grupo de administradores y darle a este grupo acceso de lectura y escritura a los recursos compartidos significa que agregar y eliminar usuarios requiere solo un comando.

Ejecute los siguientes comandos para crear un nuevo grupo llamado administradores (admins) y agregue el usuario administrador a este grupo:

sudo groupadd admins
sudo usermod -G admins admin

Se pueden agregar usuarios adicionales al grupo de administradores ejecutando el segundo comando, sudo usermod -G admins admin, y sustituyendo a otro usuario en lugar de admin.

Las configuraciones del sistema ahora están completas, con los usuarios de la organización ejemplo.com configurados como usuarios del sistema y Samba.

Pasemos a configurar el servidor Samba para que estos usuarios puedan acceder a sus directorios compartidos.

Paso 4: configuración de las acciones de Samba

Cada recurso compartido tendrá su propia sección en el archivo de configuración principal de Samba, /etc/samba/smb.conf, siguiendo los parámetros globales.

Estas secciones definirán cómo funcionará cada recurso compartido.

Use el editor de nano texto nuevamente para abrir y editar este archivo:

sudo nano /etc/samba/smb.conf

El siguiente bloque de configuración definirá el recurso compartido personal de cada usuario:

...
[share_name]
        path =
        browseable =
        read only =
        force create mode =
        force directory mode =
        valid users =

Estas opciones incluyen:

  • share_name: este es el nombre del recurso compartido que usará al iniciar sesión.
  • path: esta es la ruta absoluta al recurso compartido en el sistema de archivos.
  • browseable: establece si otros usuarios pueden ver o no el recurso compartido. Habilitar esta opción solo permite que otros usuarios del servidor Samba vean la existencia del recurso compartido. No confiere ningún permiso de lectura o escritura.
  • read only: establece si los usuarios válidos pueden escribir en el recurso compartido.
  • force create mode: esto fuerza los permisos para cualquier archivo escrito en el recurso compartido.
  • force directory mode: esto fuerza los permisos para cualquier directorio creado en el recurso compartido.
  • valid users: esta es una lista de los usuarios que tienen acceso al recurso compartido. Esta configuración puede tomar nombres de usuario o grupos de sistemas como administradores. Los grupos deben estar listados con una @ en el frente, por ejemplo: @admins.

Agregue el siguiente bloque de configuración de recursos compartidos para Carlos, definiendo su directorio de inicio, los permisos para la propiedad del grupo de este directorio y los usuarios que deberían tener acceso a su recurso compartido:

[carlos]
        path = /samba/carlos
        browseable = no
        read only = no
        force create mode = 0660
        force directory mode = 2770
        valid users = carlos @admins

Tenga en cuenta que los permisos del directorio establecen la propiedad del grupo a la del directorio principal.

Crea un bloque compartido para Nancy, Pedro y Sara.

Cambie solo el recurso compartido [nombre], la ruta y los usuarios válidos para reflejar cada uno de los nombres de los usuarios.

El recurso compartido [todos] diferirá de los demás en [nombre], ruta, usuarios válidos y opciones navegables, y se verá así:

...
[todos]
        path = /samba/todos
        browseable = yes
        read only = no
        force create mode = 0660
        force directory mode = 2770
        valid users = @sambashare @admins

Darle al grupo sambashare acceso de lectura-escritura al recurso compartido permite que todos los usuarios tengan acceso al recurso compartido, ya que se agregaron a este grupo cuando se crearon.

El archivo smb.conf completo se verá así:

[global]
        server string = samba_server
        server role = standalone server
        interfaces = lo <<su_interface>>
        bind interfaces only = yes
        disable netbios = yes
        smb ports = 445
        log file = /var/log/samba/smb.log
        max log size = 10000

[carlos]
        path = /samba/carlos
        browseable = no
        read only = no
        force create mode = 0660
        force directory mode = 2770
        valid users = carlos @admins

[nancy]
        path = /samba/nancy
        browseable = no
        read only = no
        force create mode = 0660
        force directory mode = 2770
        valid users = nancy @admins

[pedro]
        path = /samba/pedro
        browseable = no
        read only = no
        force create mode = 0660
        force directory mode = 2770
        valid users = pedro @admins

[sara]
        path = /samba/sara
        browseable = no
        read only = no
        force create mode = 0660
        force directory mode = 2770
        valid users = sara @admins

[todos]
        path = /samba/todos
        browseable = yes
        read only = no
        force create mode = 0660
        force directory mode = 2770
        valid users = @sambashare @admins

Con la comprobación de configuración completa, iniciemos el servidor Samba con systemctl:

sudo systemctl start smbd.service

Paso 5 - Iniciar sesión en el servidor Samba

En esta sección, cubriremos cómo acceder a los recursos compartidos de Samba que creamos desde Linux, Windows y macOS.

Linux - La línea de comando

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 deberá instalarlo con su administrador de paquetes local.

En los servidores Debian y Ubuntu, instale smbclient con el siguiente comando:

sudo apt-get update
sudo apt-get install smbclient

En los sistemas Fedora, use lo siguiente:

sudo dnf update
sudo samba-client

Y en CentOS:

sudo yum update
sudo yum install samba-client

Nota: En algunas distribuciones de Linux, smbclient fallará con el siguiente mensaje de error:

smbclient: Can't load /etc/samba/smb.conf - run testparm to debug it

Si ve este mensaje de error, asegúrese de haber creado el archivo en /etc/samba/smb.conf.

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

smbclient //ip_samba_hostname_o_server_ip/share -U username

Si Carlos quiere acceder al recurso compartido común (todos), cambie el comando a:

smbclient //samba.ejemplo.com/todos -U carlos

Después de ejecutar el comando smbclient, se le pedirá la contraseña de Samba y se registrará en una interfaz de línea de comandos que recuerda la interfaz de texto FTP:

smb: \>

Esta interfaz es más útil para probar nombres de usuario y contraseñas y acceso de lectura y escritura.

Por ejemplo, puede crear un directorio y enumerar su contenido de la siguiente manera:

smb: \> mkdir prueba
smb: \> ls

Para eliminar el directorio escriba:

smb: \> rmdir test

MacOS - línea de comando

MacOS viene preinstalado con herramientas de línea de comandos que puede usar para acceder a un recurso compartido de Samba.

Abra la terminal con Launchpad haciendo clic en el ícono Terminal.

Esto abrirá una terminal de línea de comando en su directorio de inicio.

Para montar el recurso compartido Samba, puede crear un nuevo directorio que actuará como punto de montaje para el recurso compartido.

Un punto de montaje es la ubicación donde se unen dos sistemas de archivos: en este caso, su sistema de archivos local y el sistema de archivos Samba remoto.

Cree un nuevo directorio llamado samba:

mkdir samba

A continuación, monte el recurso compartido Samba en el nuevo directorio samba.

Este comando tiene la forma:

sudo mount_smbfs //username@su_samba_hostname_o_server_ip/share ./punto_montaje

Sustituir los detalles de ejemplo.com con el usuario carlos se ve así:

sudo mount_smbfs //carlos@samba.ejemplo.com/carlos ./samba

El directorio samba ahora mostrará el contenido del recurso compartido carlos en el servidor Samba de ejemplo.com.

Los archivos y directorios pueden manipularse con las herramientas normales como ls, rm y mkdir; sin embargo, el directorio samba será propiedad de root después de que se haya montado el recurso compartido.

Por lo tanto, deberá usar sudo para acceder al directorio de samba y sus contenidos.

Para desmontar el recurso compartido Samba, ejecute el comando umount desde el mismo directorio donde ejecutó el comando mkdir:

 umount samba

Windows 10 - línea de comando

Montar un recurso compartido Samba desde la línea de comandos de Windows solo requiere un solo comando:

 net use letra_discp\\su_samba_hostname_o_server_ip \share

Sustituya las variables del recurso compartido del usuario carlos y configure la letra de la unidad en X:

 uso net X: \\samba.ejemplo.com\carlos

Cuando ingrese este comando, se le solicitará el nombre de usuario y la contraseña de Carlos.

Después de ingresarlos, recibirá un reconocimiento de que el recurso compartido se montó correctamente:

Ingrese el nombre de usuario para 'samba.ejemplo.com': carlos
Ingrese la contraseña para samba.ejemplo.com:
El comando se completó con éxito.

Ahora podrá explorar el recurso compartido Samba en el Explorador de Archivos y manipular los archivos y directorios como si fueran locales en su computadora.

Conclusión

En este artículo, ha creado archivos compartidos multiplataforma en línea utilizando el servidor Samba.

También ha accedido a estos recursos compartidos desde Windows, Linux y macOS.

Los recursos compartidos de Samba se han vuelto tan comunes que muchas aplicaciones pueden acceder a los datos almacenados en ellos.

Estas aplicaciones pueden ampliar la funcionalidad y la utilidad de sus recursos compartidos de Samba.

Por ejemplo, la versión móvil del reproductor multimedia VLC puede conectarse y transmitir música y videos desde su recurso compartido Samba.

Para acceder, seleccione abrir MRL y use la URL estándar de Samba: smb://username@su_samba_hostname_o_server_ip /share.

También puede usar un recurso compartido Samba como destino para sus copias de seguridad con la utilidad de copia de seguridad multiplataforma BackupPC.

Además de actuar como un simple recurso compartido de archivos, Samba puede trabajar con Windows Active Directory como Controlador de Dominio o como miembro de un Dominio. La documentación del usuario de Samba Wiki contiene más información sobre cómo hacer esto.

Tengo otros articulos relacionados que puede consultar:

Avatar
Carlos Dagorret
CTO Facultad de Ciencias Económicas

My research interests include distributed robotics, mobile computing and programmable matter.

Relacionado

comments powered by Disqus