Comando smbclient en Linux con Ejemplos Prácticos

LinuxBeginner
Practicar Ahora

Introducción

En este laboratorio, exploraremos el comando smbclient de Linux y sus aplicaciones prácticas. La utilidad smbclient es una herramienta poderosa que permite a los sistemas Linux interactuar con los recursos compartidos de archivos de Windows (recursos compartidos SMB/CIFS). SMB (Server Message Block) es un protocolo de red que Windows utiliza para compartir archivos, y smbclient permite a los usuarios de Linux acceder a estos recursos compartidos.

Comenzaremos instalando smbclient en nuestro sistema Ubuntu 22.04, aprenderemos la sintaxis básica del comando y luego demostraremos cómo conectarse a los recursos compartidos de Windows, navegar por directorios y transferir archivos.

Al final de este laboratorio, podrás:

  • Instalar y configurar la utilidad smbclient
  • Conectarte a los recursos compartidos de Windows desde Linux
  • Navegar y listar archivos en los recursos compartidos de Windows
  • Transferir archivos entre sistemas Linux y Windows

Hoja de trucos de comandos de Linux

Este es un Guided Lab, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel avanzado con una tasa de finalización del 24%. Ha recibido una tasa de reseñas positivas del 100% por parte de los estudiantes.

Instalación de smbclient en Ubuntu 22.04

El paquete smbclient es una herramienta de línea de comandos que permite a los sistemas Linux interactuar con los recursos compartidos de archivos SMB/CIFS, comúnmente utilizados en entornos Windows. En este paso, instalaremos este paquete en nuestro sistema Ubuntu.

Primero, actualicemos el índice de paquetes para asegurarnos de obtener la última versión:

sudo apt update

Deberías ver una salida similar a esta:

Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
Get:3 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [114 kB]
Get:4 http://archive.ubuntu.com/ubuntu jammy-backports InRelease [99.8 kB]
Fetched 324 kB in 1s (324 kB/s)
Reading package lists... Done

Ahora, instalemos el paquete smbclient:

sudo apt install -y smbclient

La salida se verá algo así:

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  libsmbclient
Suggested packages:
  samba-common
The following NEW packages will be installed:
  libsmbclient smbclient
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 479 kB of archives.
After this operation, 1,711 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu jammy/main amd64 libsmbclient amd64 2:4.15.5+dfsg-1ubuntu2 [222 kB]
Get:2 http://archive.ubuntu.com/ubuntu jammy/main amd64 smbclient amd64 2:4.15.5+dfsg-1ubuntu2 [257 kB]
Fetched 479 kB in 0s (1,030 kB/s)
Selecting previously unselected package libsmbclient.
(Reading database ... 26536 files and directories currently installed.)
Preparing to unpack .../libsmbclient_2%3a4.15.5+dfsg-1ubuntu2_amd64.deb ...
Unpacking libsmbclient (2:4.15.5+dfsg-1ubuntu2) ...
Selecting previously unselected package smbclient.
Preparing to unpack .../smbclient_2%3a4.15.5+dfsg-1ubuntu2_amd64.deb ...
Unpacking smbclient (2:4.15.5+dfsg-1ubuntu2) ...
Setting up libsmbclient (2:4.15.5+dfsg-1ubuntu2) ...
Setting up smbclient (2:4.15.5+dfsg-1ubuntu2) ...
Processing triggers for man-db (2.10.2-1) ...
Processing triggers for libc-bin (2.35-0ubuntu3) ...

Para verificar que smbclient se ha instalado correctamente, ejecuta:

smbclient --version

Deberías ver una salida que muestre la versión de smbclient que se instaló:

Version 4.15.5-Ubuntu

Ahora que hemos instalado smbclient, podemos comenzar a usarlo para interactuar con los recursos compartidos SMB/CIFS.

Comprender los conceptos básicos de smbclient

Ahora que hemos instalado smbclient, comprendamos su uso y sintaxis básicos antes de conectarnos a los recursos compartidos SMB reales.

Sintaxis del comando

La sintaxis básica para el comando smbclient es:

smbclient //server/share -U username%password [options]

Donde:

  • //server/share es la ruta UNC (Convención de Nombres Universal) al recurso compartido SMB
  • -U username%password especifica el nombre de usuario y la contraseña para la autenticación
  • [options] son parámetros adicionales que puedes proporcionar

Creación de un directorio local para la práctica

Creemos un directorio donde podamos almacenar archivos que podríamos querer transferir hacia o desde recursos compartidos SMB:

mkdir -p ~/project/smb-files

Creemos un archivo de muestra en este directorio que podemos usar más tarde:

echo "This is a test file for SMB transfer" > ~/project/smb-files/test.txt

Explorando la ayuda de smbclient

Para ver todas las opciones disponibles para smbclient, usa el comando de ayuda:

smbclient --help

Esto mostrará un texto de ayuda extenso con todas las opciones disponibles. Aquí hay un fragmento de lo que podrías ver:

Usage: smbclient [OPTION...] service <password>
  -M, --message=HOST                           Send message
  -I, --ip-address=IP                          Use this IP to connect to
  -E, --stderr                                 Write messages to stderr instead of stdout
  -L, --list=HOST                              Get a list of shares available on a host
  -T, --tar=<c|x>IXFvgbNan                     Command line tar
  -D, --directory=DIR                          Start from directory
...

Comandos comunes de smbclient

Cuando estás conectado a un recurso compartido SMB con smbclient, puedes usar varios comandos para navegar y operar en archivos. Aquí hay algunos comandos comunes:

  • ls o dir: Listar archivos y directorios
  • cd directory: Cambiar a un directorio diferente
  • get file [localfile]: Descargar un archivo del recurso compartido
  • put file [remotefile]: Subir un archivo al recurso compartido
  • mget files...: Descargar múltiples archivos
  • mput files...: Subir múltiples archivos
  • mkdir directory: Crear un directorio
  • rmdir directory: Eliminar un directorio
  • rm file: Eliminar un archivo
  • help o ?: Mostrar ayuda
  • quit o exit: Salir de smbclient

Ahora que entendemos los conceptos básicos de smbclient, en el siguiente paso, veremos cómo conectarnos a un recurso compartido SMB real.

Configuración de un entorno SMB de prueba

En un escenario del mundo real, te conectarías a un servidor Windows o Samba real. Sin embargo, para este laboratorio, simularemos un entorno SMB utilizando un servidor Samba local. Este enfoque nos permite practicar los comandos de smbclient sin requerir acceso a un servidor externo.

Instalación del servidor Samba

Primero, instalemos el paquete del servidor Samba:

sudo apt install -y samba

Deberías ver una salida que indica el proceso de instalación:

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  attr python3-dnspython python3-gpg python3-ldb python3-markdown python3-pygments python3-samba samba-common samba-common-bin samba-dsdb-modules samba-libs samba-vfs-modules tdb-tools
Suggested packages:
  bind9 bind9utils ctdb ldb-tools ntp | chrony python-markdown-doc python-pygments-doc
The following NEW packages will be installed:
  attr python3-dnspython python3-gpg python3-ldb python3-markdown python3-pygments python3-samba samba samba-common samba-common-bin samba-dsdb-modules samba-libs samba-vfs-modules tdb-tools
0 upgraded, 14 newly installed, 0 to remove and 0 not upgraded.
Need to get 10.1 MB of archives.
After this operation, 51.3 MB of additional disk space will be used.
...

Creación de un recurso compartido Samba

Ahora, creemos una configuración simple de recurso compartido Samba. Primero, hagamos una copia de seguridad del archivo de configuración original:

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup

Crea un directorio para compartir:

mkdir -p ~/project/samba-share

Creemos un archivo de prueba en este directorio compartido:

echo "This is a test file in our Samba share" > ~/project/samba-share/shared-test.txt

Ahora, creemos una configuración Samba simplificada:

sudo bash -c 'cat > /etc/samba/smb.conf << EOF
[global]
   workgroup = WORKGROUP
   server string = Samba Server
   log file = /var/log/samba/log.%m
   max log size = 50
   security = user
   map to guest = bad user

[testshare]
   path = /home/labex/project/samba-share
   browseable = yes
   read only = no
   guest ok = yes
   force user = labex
EOF'

Agrega el usuario actual a los usuarios de Samba y establece una contraseña para las pruebas:

sudo smbpasswd -a labex

Cuando se te solicite, ingresa una contraseña simple como password (tendrás que escribirla dos veces):

New SMB password:
Retype new SMB password:
Added user labex.

Reinicia el servicio Samba para aplicar los cambios:

sudo service smbd restart

Ahora tenemos un recurso compartido Samba local llamado testshare configurado en nuestro sistema. Podemos usar smbclient para conectarnos a él como si fuera un recurso compartido de Windows remoto.

Conexión a recursos compartidos SMB con smbclient

Ahora que tenemos nuestro entorno SMB de prueba configurado, conectémonos al recurso compartido usando smbclient.

Listado de recursos compartidos disponibles

Primero, enumeremos todos los recursos compartidos disponibles en nuestra máquina local:

smbclient -L localhost -U labex

Cuando se te solicite, ingresa la contraseña que configuraste para el usuario Samba (por ejemplo, password):

Enter WORKGROUP\labex's password:

Deberías ver una salida similar a esta:

        Sharename       Type      Comment
        ---------       ----      -------
        testshare       Disk
        IPC$            IPC       IPC Service (Samba Server)
Reconnecting with SMB1 for workgroup listing.

        Server               Comment
        ---------            -------
        UBUNTU               Samba Server

        Workgroup            Master
        ---------            -------
        WORKGROUP            UBUNTU

Esto muestra que nuestro recurso compartido testshare recién creado está disponible.

Conexión al recurso compartido

Ahora, conectémonos al recurso compartido testshare:

smbclient //localhost/testshare -U labex

Ingresa la contraseña cuando se te solicite:

Enter WORKGROUP\labex's password:

Tras una conexión exitosa, verás el prompt de smbclient:

Try "help" to get a list of possible commands.
smb: \>

Ahora que estamos conectados al recurso compartido, exploremos algunos comandos básicos:

Para listar los archivos en el directorio actual:

smb: \> ls

Deberías ver el archivo de prueba que creamos anteriormente:

  .                                   D        0  Tue Nov 30 12:00:00 2022
  ..                                  D        0  Tue Nov 30 12:00:00 2022
  shared-test.txt                     N       37  Tue Nov 30 12:00:00 2022

                8467839 blocks of size 4096. 3524491 blocks available

Creación de un directorio remoto

Creemos un nuevo directorio en el recurso compartido SMB:

smb: \> mkdir test-directory

Enumera el contenido nuevamente para verificar que el directorio se creó:

smb: \> ls

Deberías ver el nuevo directorio:

  .                                   D        0  Tue Nov 30 12:01:00 2022
  ..                                  D        0  Tue Nov 30 12:00:00 2022
  shared-test.txt                     N       37  Tue Nov 30 12:00:00 2022
  test-directory                      D        0  Tue Nov 30 12:01:00 2022

                8467839 blocks of size 4096. 3524491 blocks available

Cambio de directorios

Cambiemos al directorio que acabamos de crear:

smb: \> cd test-directory

Verifica que estamos en el nuevo directorio:

smb: \test-directory\> ls

La salida debería mostrar un directorio vacío:

  .                                   D        0  Tue Nov 30 12:01:00 2022
  ..                                  D        0  Tue Nov 30 12:01:00 2022

                8467839 blocks of size 4096. 3524491 blocks available

Para volver al directorio principal:

smb: \test-directory\> cd ..

Obtención de ayuda dentro de smbclient

Para ver los comandos disponibles dentro de smbclient:

smb: \> help

Verás una lista de todos los comandos disponibles:

?              allinfo        altname        archive        backup
blocksize      cancel         case_sensitive cd             chmod
chown          close          del            dir            du
echo           exit           get            getfacl        geteas
hardlink       help           history        iosize         lcd
link           lock           lowercase      ls             l
mask           md             mget           mkdir          more
mput           newer          notify         open           posix
posix_encrypt  posix_open     posix_mkdir    posix_rmdir    posix_unlink
print          prompt         put            pwd            q
queue          quit           readlink       rd             recurse
reget          rename         reput          rm             rmdir
showacls       setea          setmode        stat           symlink
tar            tarmode        timeout        translate      unlock
volume         vuid           wdel           logon          listconnect
showconnect    tcon           tdis           tid            utimes
logoff         ..             !

Cuando hayas terminado de explorar, puedes salir de la sesión de smbclient:

smb: \> quit

En el siguiente paso, aprenderemos a transferir archivos entre el sistema Linux y los recursos compartidos SMB.

Transferencia de archivos con smbclient

En este paso final, aprenderemos a transferir archivos entre nuestro sistema Linux y el recurso compartido SMB.

Reconexión al recurso compartido

Conectémonos de nuevo a nuestro recurso compartido SMB:

smbclient //localhost/testshare -U labex

Ingresa la contraseña cuando se te solicite:

Enter WORKGROUP\labex's password:

Deberías ver el prompt de smbclient:

Try "help" to get a list of possible commands.
smb: \>

Carga de archivos al recurso compartido

Subamos el archivo de prueba que creamos anteriormente al recurso compartido SMB. Primero, necesitamos verificar nuestro directorio local actual:

smb: \> !pwd

Esto ejecuta el comando pwd en tu sistema local y debería mostrar:

/home/labex/project

Necesitamos cambiar al directorio donde se encuentra nuestro archivo de prueba:

smb: \> lcd ~/project/smb-files

Verifica que estamos en el directorio correcto:

smb: \> !ls

Deberías ver:

test.txt

Ahora, subamos el archivo al recurso compartido SMB:

smb: \> put test.txt

Deberías ver un mensaje que indica que el archivo fue transferido:

putting file test.txt as \test.txt (38.5 kb/s) (average 38.5 kb/s)

Verifica que el archivo se subió:

smb: \> ls

Deberías ver:

  .                                   D        0  Tue Nov 30 12:02:00 2022
  ..                                  D        0  Tue Nov 30 12:00:00 2022
  shared-test.txt                     N       37  Tue Nov 30 12:00:00 2022
  test-directory                      D        0  Tue Nov 30 12:01:00 2022
  test.txt                            N       33  Tue Nov 30 12:02:00 2022

                8467839 blocks of size 4096. 3524491 blocks available

Descarga de archivos desde el recurso compartido

Ahora, descarguemos un archivo del recurso compartido SMB a nuestro sistema local. Primero, creemos un nuevo directorio para almacenar los archivos descargados:

smb: \> !mkdir -p ~/project/smb-downloads

Cambia a ese directorio:

smb: \> lcd ~/project/smb-downloads

Ahora, descarga el archivo:

smb: \> get shared-test.txt

Deberías ver un mensaje que indica que el archivo fue transferido:

getting file \shared-test.txt of size 37 as shared-test.txt (37.0 KiloBytes/sec) (average 37.0 KiloBytes/sec)

Verifica que el archivo se descargó:

smb: \> !ls

Deberías ver:

shared-test.txt

Uso de mget y mput para múltiples archivos

Los comandos mget y mput te permiten transferir múltiples archivos a la vez. Intentemos crear algunos archivos más en nuestro sistema local:

smb: \> !cd ~/project/smb-files && touch file1.txt file2.txt file3.txt

Ahora, subamos todos los archivos .txt a la vez:

smb: \> lcd ~/project/smb-files
smb: \> mput *.txt

Para cada archivo, se te pedirá confirmación. Escribe Y para confirmar cada transferencia:

mput test.txt? Y
putting file test.txt as \test.txt (38.5 kb/s) (average 38.5 kb/s)
mput file1.txt? Y
putting file file1.txt as \file1.txt (0.0 kb/s) (average 19.2 kb/s)
mput file2.txt? Y
putting file file2.txt as \file2.txt (0.0 kb/s) (average 12.8 kb/s)
mput file3.txt? Y
putting file file3.txt as \file3.txt (0.0 kb/s) (average 9.6 kb/s)

Si deseas transferir todos los archivos sin confirmación, puedes desactivar la solicitud:

smb: \> prompt
smb: \> mput *.txt

De manera similar, para descargar múltiples archivos:

smb: \> lcd ~/project/smb-downloads
smb: \> mget *.txt

Cuando hayas terminado, sal de la sesión de smbclient:

smb: \> quit

Comandos no interactivos

También puedes usar smbclient para ejecutar comandos sin entrar en el shell interactivo. Por ejemplo, para listar el contenido de un recurso compartido:

smbclient //localhost/testshare -U labex -c 'ls'

Ingresa la contraseña cuando se te solicite, y verás el listado del directorio:

Enter WORKGROUP\labex's password:
  .                                   D        0  Tue Nov 30 12:03:00 2022
  ..                                  D        0  Tue Nov 30 12:00:00 2022
  file1.txt                           N        0  Tue Nov 30 12:03:00 2022
  file2.txt                           N        0  Tue Nov 30 12:03:00 2022
  file3.txt                           N        0  Tue Nov 30 12:03:00 2022
  shared-test.txt                     N       37  Tue Nov 30 12:00:00 2022
  test-directory                      D        0  Tue Nov 30 12:01:00 2022
  test.txt                            N       33  Tue Nov 30 12:03:00 2022

                8467839 blocks of size 4096. 3524491 blocks available

Para descargar un archivo en un solo comando:

smbclient //localhost/testshare -U labex -c 'get test.txt /home/labex/project/test-download.txt'

Este comando descarga el archivo test.txt del recurso compartido y lo guarda como test-download.txt en tu directorio de proyecto.

Ahora tienes una buena comprensión de cómo usar smbclient para conectarte a recursos compartidos SMB, navegar por directorios y transferir archivos. Estas habilidades son esenciales cuando se trabaja en entornos mixtos Windows/Linux.

Resumen

En este laboratorio, exploramos el comando smbclient en Linux, que proporciona una herramienta esencial para conectar sistemas Linux a recursos compartidos de archivos de Windows (SMB/CIFS). Cubrimos varios aspectos clave del trabajo con smbclient:

  1. Instalación: Instalamos el paquete smbclient en Ubuntu 22.04, que incluía sus dependencias.

  2. Conceptos básicos del comando: Aprendimos sobre la sintaxis básica y los comandos disponibles en smbclient, incluyendo cómo conectarse a recursos compartidos y navegar dentro de ellos.

  3. Configuración de un entorno de prueba: Creamos un entorno SMB de prueba utilizando un servidor Samba local para practicar nuestros comandos sin requerir acceso a un servidor Windows externo.

  4. Conexión a recursos compartidos: Nos conectamos a nuestro recurso compartido SMB de prueba y exploramos comandos de navegación como ls, cd y mkdir.

  5. Transferencia de archivos: Aprendimos a subir archivos a un recurso compartido SMB usando put y a descargar archivos usando get. También exploramos las transferencias de múltiples archivos con mput y mget.

Las habilidades que has adquirido en este laboratorio son directamente aplicables a escenarios del mundo real donde necesitas interactuar con sistemas o servidores Windows desde entornos Linux. Ya sea que estés transfiriendo archivos entre sistemas, automatizando copias de seguridad o integrando sistemas Linux en redes Windows, smbclient proporciona una potente interfaz de línea de comandos para estas tareas.

Para operaciones de archivos más complejas o frecuentes, es posible que desees explorar el montaje de recursos compartidos SMB directamente en tu sistema de archivos Linux usando el comando mount con el tipo de sistema de archivos cifs, que se basa en los conceptos que hemos aprendido aquí.

Hoja de referencia de comandos de Linux