Cómo compartir carpetas en red con Samba

compartir carpetas con samba

 

Aquí vamos a ver cómo compartir carpetas en red con Samba desde la línea de comandos. Con este tutorial, podremos compartir carpetas con cualquier Sistema Operativo, sea Linux o no.

compartir carpetas con samba
Samba. Crédito: linuxwolfpack.com

 

 

Ajá.. Pero… ¿Qué es Samba?

Bien, como siempre, empecemos por el principio: Samba es un fabuloso programa Open Source que nos permite compartir impresoras y archivos a través del protocolo SMB/CIFS de forma fácil. Este peculiar programa, destaca porque, además de ser gratis y de código abierto, permite operar entre varios Sistemas Operativos sin ningún tipo de limitación. Podemos compartir ficheros desde Linux y acceder por red desde Windows o Mac. Aparte de compartir archivos y carpetas, también podemos compartir impresoras en red. Samba cuenta con un asistente gráfico para compartir carpetas desde Ubuntu, pero nosotros vamos a centrarnos en hacerlo todo desde la línea de comandos, que siempre es más preciso 😉 

 


Instalando
 Sambacompartir carpetas con samba

Para instalar Samba desde Ubuntu y derivados, escribiremos el siguiente comando: sudo apt-get install samba

Para instalar Samba desde Archlinux y derivados, escribiremos este otro: sudo pacman -S samba

 

¿Cómo funciona Samba?

Una vez hayamos instalado Samba nos preguntaremos: Bien, ¿Y ahora como empiezo a compartir carpetas? Vale, empecemos.

Como ya hemos dicho anteriormente, vamos a utilizar Samba para compartir ficheros, bien. Debemos saber que esos ficheros (carpetas básicamente) tienen unos permisos (los cuales podemos ver con ls -l), pues en Samba, vamos a poder asignar también permisos a las carpetas compartidas, pero mucho ojo con esto, que aquí mucha gente se lía: los permisos del archivo prevalecen sobre los permisos de Samba. ¿Qué quiere decir esto? (Si quieres aprender sobre permisos, haz click aquí) Si nuestra carpeta compartida NO tiene permisos de lectura, escritura ni ejecución con respecto al grupo al que pertenece y en la configuración de Samba hemos puesto que dicho grupo pueda acceder a la carpeta y tenga permisos de escritura, cuando intentemos acceder (si pertenecemos a ese grupo) a dicha carpeta, aunque en Samba tengamos permiso de lectura y escritura NO nos dejará acceder a la carpeta, ¿Por qué? Muy sencillo, porque los permisos de la carpeta en sí prevalecen con respecto a los permisos que otorga Samba. Tenemos que tener eso muy en cuenta si queremos evitarnos dolores de cabeza. Y dicho esto, al lío.

compartir carpetas con samba
Logo Oficial Samba

Samba funciona de la siguiente forma: Primero editamos su archivo de configuración, donde añadimos la carpeta y los parámetros que queremos que tenga. Después iniciamos el servicio y (opcionalmente) lo habilitamos para que esté presente en cada inicio del Sistema. Por último, configuramos la contraseña del usuario que va a acceder al recurso compartido. Vamos allá.

 

1.- Editando el archivo de configuración de Samba

  1. Antes que nada, abrimos el archivo de configuración de Samba con nuestro editor favorito. Dicho archivo se ubica en /etc/samba/smb.conf. En mi caso, utilizaré vim. vim /etc/samba/smb.conf (Atención: Si no tenéis el archivo smb.conf, pero en su defecto tenéis un archivo llamado smb.conf.default, podéis simplemente renombrarlo a smb.conf)
    El contenido del archivo de configuración será algo similar a esto: 
    Configuración Samba

    # This is the main Samba configuration file. You should read the
    # smb.conf(5) manual page in order to understand the options listed
    # here. Samba has a huge number of configurable options (perhaps too
    # many!) most of which are not shown in this example
    #
    # Any line which starts with a ; (semi-colon) or a # (hash)
    # is a comment and is ignored. In this example we will use a #
    # for commentry and a ; for parts of the config file that you
    # may wish to enable
    #
    # NOTE: Whenever you modify this file you should run the command "testparm"
    # to check that you have not made any basic syntactic errors.
    #
    #======================= Global Settings =====================================
    [global]

    # workgroup = NT-Domain-Name or Workgroup-Name
    workgroup = MYGROUP

    # server string is the equivalent of the NT Description field
    server string = Samba Server

    # This option is important for security. It allows you to restrict
    # connections to machines which are on your local network. The
    # following example restricts access to two C class networks and
    # the "loopback" interface. For more examples of the syntax see
    # the smb.conf man page
    ; hosts allow = 192.168.1. 192.168.2. 127.

    # if you want to automatically load your printer list rather
    # than setting them up individually then you'll need this
    printcap name = /etc/printcap
    load printers = yes

    # It should not be necessary to spell out the print system type unless
    # yours is non-standard. Currently supported print systems include:
    # bsd, sysv, plp, lprng, aix, hpux, qnx
    ; printing = bsd

    # Uncomment this if you want a guest account, you must add this to /etc/passwd
    # otherwise the user "nobody" is used
    ; guest account = pcguest

    # this tells Samba to use a separate log file for each machine
    # that connects
    log file = /var/log/samba/%m.log

    # Put a capping on the size of the log files (in Kb).
    max log size = 50

    # Security mode. Most people will want user level security. See
    # security_level.txt for details.
    security = user
    # Use password server option only with security = server
    ; password server = <NT-Server-Name>

    # Password Level allows matching of _n_ characters of the password for
    # all combinations of upper and lower case.
    ; username level = 8

    # You may wish to use password encryption. Please read
    # ENCRYPTION.txt, Win95.txt and WinNT.txt in the Samba documentation.
    # Do not enable this option unless you have read those documents
    ; encrypt passwords = yes
    ; smb passwd file = /etc/samba/smbpasswd

    # The following are needed to allow password changing from Windows to
    # update the Linux sytsem password also.
    # NOTE: Use these with 'encrypt passwords' and 'smb passwd file' above.
    # NOTE2: You do NOT need these to allow workstations to change only
    # the encrypted SMB passwords. They allow the Unix password
    # to be kept in sync with the SMB password.
    ; unix password sync = Yes
    ; passwd program = /usr/bin/passwd %u
    ; passwd chat = *New*UNIX*password* %n\n *ReType*new*UNIX*password* %n\n *passwd:*all*authentication*tokens*updated*successfully*

    # Unix users can map to different SMB User names
    ; username map = /etc/samba/smbusers

    # Using the following line enables you to customise your configuration
    # on a per machine basis. The %m gets replaced with the netbios name
    # of the machine that is connecting
    ; include = /etc/samba/smb.conf.%m

    # Configure Samba to use multiple interfaces
    # If you have multiple network interfaces then you must list them
    # here. See the man page for details.
    ; interfaces = 192.168.12.2/24 192.168.13.2/24

    # Configure remote browse list synchronisation here
    # request announcement to, or browse list sync from:
    # a specific host or from / to a whole subnet (see below)
    ; remote browse sync = 192.168.3.25 192.168.5.255
    # Cause this host to announce itself to local subnets here
    ; remote announce = 192.168.1.255 192.168.2.44

    # Browser Control Options:
    # set local master to no if you don't want Samba to become a master
    # browser on your network. Otherwise the normal election rules apply
    ; local master = no

    # OS Level determines the precedence of this server in master browser
    # elections. The default value should be reasonable
    ; os level = 33

    # Domain Master specifies Samba to be the Domain Master Browser. This
    # allows Samba to collate browse lists between subnets. Don't use this
    # if you already have a Windows NT domain controller doing this job
    ; domain master = yes

    # Preferred Master causes Samba to force a local browser election on startup
    # and gives it a slightly higher chance of winning the election
    ; preferred master = yes

    # Use only if you have an NT server on your network that has been
    # configured at install time to be a primary domain controller.
    ; domain controller = <NT-Domain-Controller-SMBName>

    # Enable this if you want Samba to be a domain logon server for
    # Windows95 workstations.
    ; domain logons = yes

    # if you enable domain logons then you may want a per-machine or
    # per user logon script
    # run a specific logon batch file per workstation (machine)
    ; logon script = %m.bat
    # run a specific logon batch file per username
    ; logon script = %U.bat

    # Where to store roving profiles (only for Win95 and WinNT)
    # %L substitutes for this servers netbios name, %U is username
    # You must uncomment the [Profiles] share below
    ; logon path = \\%L\Profiles\%U

    # All NetBIOS names must be resolved to IP Addresses
    # 'Name Resolve Order' allows the named resolution mechanism to be specified
    # the default order is "host lmhosts wins bcast". "host" means use the unix
    # system gethostbyname() function call that will use either /etc/hosts OR
    # DNS or NIS depending on the settings of /etc/host.config, /etc/nsswitch.conf
    # and the /etc/resolv.conf file. "host" therefore is system configuration
    # dependant. This parameter is most often of use to prevent DNS lookups
    # in order to resolve NetBIOS names to IP Addresses. Use with care!
    # The example below excludes use of name resolution for machines that are NOT
    # on the local network segment
    # - OR - are not deliberately to be known via lmhosts or via WINS.
    ; name resolve order = wins lmhosts bcast

    # Windows Internet Name Serving Support Section:
    # WINS Support - Tells the NMBD component of Samba to enable it's WINS Server
    ; wins support = yes

    # WINS Server - Tells the NMBD components of Samba to be a WINS Client
    # Note: Samba can be either a WINS Server, or a WINS Client, but NOT both
    ; wins server = w.x.y.z

    # WINS Proxy - Tells Samba to answer name resolution queries on
    # behalf of a non WINS capable client, for this to work there must be
    # at least one WINS Server on the network. The default is NO.
    ; wins proxy = yes

    # DNS Proxy - tells Samba whether or not to try to resolve NetBIOS names
    # via DNS nslookups. The built-in default for versions 1.9.17 is yes,
    # this has been changed in version 1.9.18 to no.
    dns proxy = no

    # Case Preservation can be handy - system default is _no_
    # NOTE: These can be set on a per share basis
    ; preserve case = no
    ; short preserve case = no
    # Default case is normally upper case for all DOS files
    ; default case = lower
    # Be very careful with case sensitivity - it can break things!
    ; case sensitive = no

    #============================ Share Definitions ==============================
    [homes]
    comment = Home Directories
    browseable = no
    writable = yes

    # Un-comment the following and create the netlogon directory for Domain Logons
    ; [netlogon]
    ; comment = Network Logon Service
    ; path = /home/netlogon
    ; guest ok = yes
    ; writable = no
    ; share modes = no

    # Un-comment the following to provide a specific roving profile share
    # the default is to use the user's home directory
    ;[Profiles]
    ; path = /home/profiles
    ; browseable = no
    ; guest ok = yes

    # NOTE: If you have a BSD-style print system there is no need to
    # specifically define each individual printer
    [printers]
    comment = All Printers
    path = /var/spool/samba
    browseable = no
    # Set public = yes to allow user 'guest account' to print
    guest ok = no
    writable = no
    printable = yes

    # This one is useful for people to share files
    ;[tmp]
    ; comment = Temporary file space
    ; path = /tmp
    ; read only = no
    ; public = yes

    # A publicly accessible directory, but read only, except for people in
    # the "staff" group
    ;[public]
    ; comment = Public Stuff
    ; path = /home/samba
    ; public = yes
    ; read only = yes
    ; write list = @staff

    # Other examples.
    #
    # A private printer, usable only by fred. Spool data will be placed in fred's
    # home directory. Note that fred must have write access to the spool directory,
    # wherever it is.
    ;[fredsprn]
    ; comment = Fred's Printer
    ; valid users = fred
    ; path = /homes/fred
    ; printer = freds_printer
    ; public = no
    ; writable = no
    ; printable = yes

    # A private directory, usable only by fred. Note that fred requires write
    # access to the directory.
    ;[fredsdir]
    ; comment = Fred's Service
    ; path = /usr/somewhere/private
    ; valid users = fred
    ; public = no
    ; writable = yes
    ; printable = no

    # a service which has a different directory for each machine that connects
    # this allows you to tailor configurations to incoming machines. You could
    # also use the %u option to tailor it by user name.
    # The %m gets replaced with the machine name that is connecting.
    ;[pchome]
    ; comment = PC Directories
    ; path = /usr/pc/%m
    ; public = no
    ; writable = yes

    # A publicly accessible directory, read/write to all users. Note that all files
    # created in the directory by users will be owned by the default user, so
    # any user with access can delete any other user's files. Obviously this
    # directory must be writable by the default user. Another user could of course
    # be specified, in which case all files would be owned by that user instead.
    ;[public]
    ; path = /usr/somewhere/else/public
    ; public = yes
    ; only guest = yes
    ; writable = yes
    ; printable = no

    # The following two entries demonstrate how to share a directory so that two
    # users can place files there that will be owned by the specific users. In this
    # setup, the directory should be writable by both users and should have the
    # sticky bit set on it to prevent abuse. Obviously this could be extended to
    # as many users as required.
    ;[myshare]
    ; comment = Mary's and Fred's stuff
    ; path = /usr/somewhere/shared
    ; valid users = mary fred
    ; public = no
    ; writable = yes
    ; printable = no
    ; create mask = 0765

    [collapse]

 En el código por defecto, podréis ver que ya existen ciertos recursos predefinidos, como por ejemplo, el que pone [homes].
Este recurso predefinido hace referencia a la carpeta personal de cada usuario. Si comentamos dicha línea, se inhabilitará. Lo que está entre corchetes ([]), como habréis podido deducir, es el nombre del recurso compartido. Por defecto, cada usuario podrá acceder a su carpeta home personal en red escribiendo la ruta concreta. Vamos a explicar qué significa cada cosa.

Ubiquémonos en esta parte: 

[homes]
comment = Home Directories
browseable = no
writable = yes

 ¿Qué significa cada cosa?

comment es simplemente un comentario orientativo para saber qué estamos compartiendo. En este caso, nos dice que son las carpetas home de cada usuario.
browseable nos quiere decir si dicha carpeta será visible cuando entremos a la ubicación de red o, sin embargo, para acceder a ella tendremos que escribir la ruta completa en la barra de dirección.
writable nos dice si el fichero tendrá permisos de escritura o no. Recordad que los permisos de la carpeta prevalecen a los de samba.

 

Lo que hemos visto aquí es un ejemplo de un recurso compartido predefinido, ahora, vamos a crear el nuestro propio con más opciones y vamos a ver cómo acceder a el desde Linux y Windows.

Lo primero que debemos hacer, es irnos al final del código del archivo de configuración. Pulsamos enter y creamos una línea nueva. Ahí empezamos a escribir:

[Mi recurso compartido]

comment = Mi carpeta compartida
path = /home/kevin/LinuxForTheFuture
browseable = yes
guest ok = no
writable = yes
valid users = kevin
workgroup = WORKGROUP

Analicemos lo que acabamos de escribir:

[Mi recurso compartido] es el nombre del recurso compartido como hemos dicho anteriormente.

comment =: aquí pondremos un comentario que nos recuerde qué carpeta estamos compartiendo
path =: aquí pondremos la ruta absoluta de la carpeta a compartir.
browseable =: esto determinará si cuando accedamos al recurso compartido en red nos saldrá la carpeta visible o tendremos que acceder a ella escribiendo su nombre en la barra de direcciones.
guest ok =: si aquí escribimos yes, habilitaremos el acceso a usuarios invitados, por tanto, podremos acceder a la carpeta sin necesidad de logearnos. A estos usuarios se les aplicaría los permisos de “otros”.
writable =: aquí estamos diciendo si queremos que se pueda escribir en dicha carpeta compartida o no. Recordad que los permisos de la carpeta prevalecen ante los de Samba.
valid users =: mucho ojo con esto: aquí podremos poner un usuario o varios separados por una coma. Sin embargo, si ponemos por ejemplo @users en vez de kevin, los usuarios válidos serán los que pertenezcan al grupo users. Fácil, ¿Verdad? compartir carpetas con samba
workgroup =: aquí pondremos el grupo de trabajo. El predeterminado es WORKGROUP

 

Nos debería quedar algo así:

compartir carpetas con samba
Mi configuración en un servidor CentOS 7

 

 

Una vez hayáis entendido la sintaxis y hayáis creado vuestra propia carpeta, vamos a proceder al siguiente paso.

 

 

 

 

2.- Iniciando el servicio y configurando la contraseña del usuario.

Una vez hayamos configurado nuestra propia carpeta, tenemos que iniciar el servicio y habilitarlo si así lo deseamos. Esto lo haremos de la siguiente forma: sudo systemctl start smb && sudo systemctl start nmb  y si queremos habilitarlo sudo systemctl enable smb && sudo systemctl enable nmb

Con samba activaremos el servicio de samba y con nmb, activaremos los servicios de nombre de dominio de NetBios, para poder acceder al recurso compartido a través de la dirección IP interna.

Nos debería quedar algo así:  compartir carpetas con samba

compartir carpetas con samba
Servicios activados y habilitados en CentOS 7

 

 

Una vez hayamos iniciado los servicios, debemos asignarle una contraseña al usuario que va a acceder a la carpeta. Debemos tener en cuenta que la contraseña del usuario y la contraseña que va utilizar para acceder a un directorio compartido con Samba son completamente diferentes. Para asignarle una contraseña a dicho usuario, escribiremos el siguiente comando: sudo smbpasswd usuario. Cuando nos lo pregunte, escribimos la contraseña y listo, esa será la contraseña que usará el usuario que hayamos especificado para acceder a una carpeta compartida con Samba.

 

compartir carpetas con samba
Cambiando contraseña de Samba con smbpasswd

 

3.- ¡Accediendo al recurso compartido!

El paso final (y el más deseado :P) es por fin acceder al recurso compartido. Si estamos en Linux, bastará con abrir nuestro explorador de archivos y escribir en la barra de dirección: smb:\\192.168.1.21 (Para saber nuestra IP interna, escribiremos ifconfig o iwconfig si usamos una tarjeta de red inalámbrica). Algo así: compartir carpetas con samba

compartir carpetas con samba
Accediendo a un recurso compartido desde el explorador de archivos PCManFM
compartir carpetas con samba
Logeándonos en el recurso compartido

En el Login, si elegimos conectarnos de forma anónima (si tenemos activado guest ok), accederemos de forma anónima aplicando los permisos de la carpeta para “others”. Si le damos a conectar como usuario, podremos acceder con el usuario especificado en la configuración, o en su defecto, con un usuario que pertenezca al grupo especificado en la configuración de Samba. Si en browseable hemos puesto que no, nuestra carpeta no saldrá ahí. Tendríamos que escribir smb://192.168.1.21/micarpetaescondida compartir carpetas con samba

Si estamos en Windows, deberemos abrir el explorador de archivos y escribir en la barra de dirección: \\192.168.1.21 (IP del servidor Samba). Nos saldrá algo similar a las imágenes que hemos visto anteriormente, sólo que no nos permitirá (a simple vista) logearnos como usuario invitado. Para hacerlo, tan solo habría que pulsar intro sin escribir ningún login. Si no nos lo permite, es que no lo tendríamos activado. 

 

¡Extra!

¡Extra, extra! ¿Que sería un artículo tan largo sin un extra? 😛
Aquí os traigo un vídeo que consta de dos partes donde, si por lo que sea no te has terminado de enterar cómo funciona Samba, este vídeo despejará todas tus dudas 😉

 

Conclusión Final

Si has llegado hasta aquí, quiero felicitarte personalmente por haberte tomado el tiempo y la molestia de haber leído este artículo entero. Aprovecho también para decirte que, si tienes alguna duda o algo no te ha quedado claro, me puedes dejar un comentario justo aquí abajo y estaré encantado de responderte cuanto antes. 
Me gustaría recordar también que aunque no tengáis ninguna duda también podéis comentar eh ;P

Personalmente, he utilizado Samba en varias ocasiones para compartir archivos pesados por Wifi con un vecino. Como por ejemplo, películas o juegos, y puedo decir que a mi me ha funcionado perfectamente y le veo mucha utilidad. La gran ventaja es que, tengas el SO que tengas, con un buen servidor Samba despídete de las barreras 😉

About Kevin 26 Articles
Fanático de Linux ante todo. Técnico en Sistemas Microinformáticos y redes. Soy curioso por naturaleza, me gusta investigar sobre aquello que no sé, en especial sobre tecnología. La sabiduría es poder.

7 Comments on Cómo compartir carpetas en red con Samba

  1. Una pregunta si yo quiero que sea un recurso abierto a to quisqui la linea de “valid users” en el samba la omito o tengo de tener un usuario específico para ello ?

    • ¡Hola!
      Si quieres que sea un recurso abierto para todo el mundo puedes omitir la línea valid users y centrarte en la línea guest ok. Si tienes activado el guest ok cualquier usuario podrá entrar sin necesidad de logearse, simplemente entrando como invitado.
      Espero que eso resuelva tu duda, ¡Un saludo!

  2. Buenas Kevin.
    He intentado seguir tus pasos pero en la parte para configurar e iniciar los servicios samba me aparece como que no encuentra dichos procesos de servicio. Ni el de smb ni el de nmb. ¿Tienes alguna idea del por qué?

    Gracias por tu empeño en el tutorial!

Leave a Reply

Tu dirección de correo no será publicada.


*