Como crear una compartición Samba

Alessio, Peter Lilley, Petr Bokoc Versión F32 Last review: 2020-12-01

Samba permite para Windows y otros clientes conectar a archivo de directorios compartidos en huéspedes Linux. Implementa el protocolo de bloque de mensaje de servidor (SMB). Esta guía cubre crear un lugar de archivo compartido en una máquina Fedora que puede ser accedida por otros equipos en la red local.

Instalar y habilitar Samba

Los siguientes comandos instalan Samba y lo pone para ejecutar vía systemctl. Esto además establece el cortafuegos para permitir acceso a Samba desde otros equipos.

sudo dnf install samba
sudo systemctl enable smb --now
firewall-cmd --get-active-zones
sudo firewall-cmd --permanent --zone=FedoraWorkstation --add-service=samba
sudo firewall-cmd --reload

Compartir un directorio dentro de /home

En este ejemplo compartirá un directorio dentro de su directorio home, accesible solo por su usuario.

Samba no utiliza los usuarios del sistema operativo para autenticación, por tanto su cuenta de usuario debe estar duplicada en Samba. Por tanto si su cuenta es jane en el equipo, el usuario jane debe además ser añadido a Samba. Mientras los nombres de usuario deben coincidir, las contraseñas pueden ser distintas.

Crear un usuario llamado jane en Samba:

sudo smbpasswd -a jane

Crear un directorio para estar la compartición para jane, y establecer el contexto correcto de SELinux:

mkdir /home/jane/share
sudo semanage fcontext --add --type "samba_share_t" "/home/jane/share(/.*)?"
sudo restorecon -R ~/share

La configuración viva de Samba dentro del archivo /etc/samba/smb.conf. Añadiento la sección seguida en el final del archivo mandará a Samba configurar una compartición para jane llamado "compartido" en el directorio /home/jane/share tan pronto que sea creado.

[share]
        comment = Mi Compartición
        path = /home/jane/share
        writeable = yes
        browseable = yes
        public = yes
        create mask = 0644
        directory mask = 0755
        write list = user

Reiniciar Samba para los cambios a tomar efecto:

sudo systemctl restart smb

Compartir un directorio para muchos usuarios

Dentro de este ejemplo, compartirá un directorio (externo a su directorio home) y crea un grupo de usuarios con la habilidad de leer y escribir a la compartición.

Remember that a Samba user must also be a system user, in order to respect filesystem permissions. This example creates a system group myfamily for two new users jack and maria.

sudo groupadd myfamily
sudo useradd  -G myfamily jack
sudo useradd  -G myfamily maria

Pudo crear estos usuarios sin una contraseña del sistema. Esto prevería acceso al sistema vía SSH o acceso local.

Agregue jack y maria a Samba y cree sus contraseñas:

sudo smbpasswd -a jack
sudo smbpasswd -a maria

Configure la carpeta compartida:

sudo mkdir /home/share
sudo chgrp myfamily /home/share
sudo chmod 770 /home/share
sudo semanage fcontext --add --type "samba_share_t" "/home/share(/.*)?"
sudo restorecon -R /home/share

Cada compartición está descrita por su propia sección dentro del archivo /etc/samba/smb.conf. Agrega esta sección para el final del archivo:

[family]
        comment = Compartir Familia
        path = /home/share
        writeable = yes
        browseable = yes
        public = yes
        valid users = @mifamilia
        create mask = 0660
        directory mask = 0770
        force group = +mifamilia

Explicación de lo anterior:

  • valid users: solo los usuarios del grupo family tiene derechos de accesos. El @ denota un nombre de grupo.

  • force group = +myfamily: se crean archivos y directorios con este grupo, en vez del grupo de usuario.

  • create mask = 0660: archivos dentro de compartición son creados con permisos para permitir a todos los usuarios del grupo leer y escribir archivos creados por otros usuarios.

  • directory mask = 0770: como antes, pero para directorios.

Reiniciar Samba para los cambios a tomar efecto:

sudo systemctl restart smb

Gestión de Usuarios de Samba

Cambia una contraseña del usuario samba

Recuerde: las contraseñas del usuario del sistema y el usuario Samba pueden ser diferentes. El usuario del sistema es necesario con el fin de manipular permisos del sistema de archivos.

sudo smbpasswd maria

=== Quita un usuario de samba

sudo smbpasswd -x maria

Si no necesita el usuario del sistema, retírelo también:

sudo userdel -r maria

== Soluciones de problemas y bitácoras

Los archivos de bitácora de Samba están localizados en /var/log/samba/

tail -f /var/log/samba/log.smbd

Puede incrementar la verborrea añadiendo esto a la sección [global] de /etc/samba/smb.conf:

[global]
        loglevel = 5

Para validar la sintaxis del archivo de configuración /etc/samba/smb.conf utilice el comando testparm. Salida de ejemplo:

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

Para exhibir las conexiones actuales de samba, utilice el comando smbstatus. Salida de ejemplo:

Samba version 4.12.3
PID     Usuario     Grupo        Máquina                  Versión                             Protocolo  Cifrado           Firma
----------------------------------------------------------------------------------------------------------------------------------------
7259    jack         jack         192.168.122.1 (ipv4:192.168.122.1:40148)  SMB3_11           -                    partial(AES-128-CMAC)

Service      pid     Machine       Connected at                     Encryption   Signing
---------------------------------------------------------------------------------------------
family       7259    192.168.122.1 Fri May 29 14:03:26 2020 AEST    -            -

No locked files

=== Problema con acceder a lo compartido

Algunas cosas para comprobar si no se puede acceder la compartición.

  1. Asegúrese que el usuario existe como un usuario del sistema así como un usuario de Samba

    Encuentre maria dentro de la base de datos de Samba:

    sudo pdbedit -L | grep maria
    
    maria:1002:

    Confirme que maria además existe como un usuario del sistema.

    cat /etc/passwd | grep maria
    
    maria:x:1002:1002::/home/maria:/bin/bash
  2. Compruebe si el directorio compartido y los subdirectorios tienen el contexto SELinux correcto.

    ls -dZ /home/share
    
    unconfined_u:object_r:samba_share_t:s0 /home/share
  3. Compruebe si el usuario del sistema tiene permiso de acceso al directorio compartido.

    ls -ld /home/share
    
    drwxrwx---. 2 root myfamily 4096 May 29 14:03 /home/share

    En este caso, el usuario estaría en el grupo myfamily.

  4. Compruebe en el archivo de configuración /etc/samba/smb.conf que el usuario y grupo tiene permiso de acceso.

    [family]
            comment = Compartir Familia
            path = /home/share
            writeable = yes
            browseable = yes
            public = yes
            valid users = @mifamilia
            create mask = 0660
            directory mask = 0770
            force group = +mifamilia

    En este caso, el usuario estaría en el grupo myfamily.

=== Problema con escritura dentro de la compartición

  1. Compruebe si el archivo de configuración de samba si el usuario/grupo tiene permiso de escritura.

    [family]
            comment = Compartir Familia
            path = /home/share
            writeable = yes
            browseable = yes
            public = yes
            valid users = @mifamilia
            create mask = 0660
            directory mask = 0770
            force group = +mifamilia

    En este caso, el usuario estaría dentro del grupo myfamily.

  2. Compruebe los permisos del directorio compartido.

    ls -ld /home/share
    
    drwxrwx---. 2 root myfamily 4096 May 29 14:03 /home/share

    Este ejemplo asume que el usuario es parte del grupo myfamily el cual tiene permisos de lectura, escritura y ejecución para la carpeta.