Команда smbclient в Linux: Практические примеры

LinuxLinuxBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этой лабораторной работе мы рассмотрим команду Linux smbclient и ее практическое применение. Утилита smbclient — это мощный инструмент, позволяющий системам Linux взаимодействовать с общими файловыми ресурсами Windows (SMB/CIFS shares). SMB (Server Message Block) — это сетевой протокол, который Windows использует для совместного доступа к файлам, а smbclient позволяет пользователям Linux получать доступ к этим ресурсам.

Мы начнем с установки smbclient в нашей системе Ubuntu 22.04, изучим базовый синтаксис команды, а затем продемонстрируем, как подключаться к общим ресурсам Windows, перемещаться по каталогам и передавать файлы.

К концу этой лабораторной работы вы сможете:

  • Устанавливать и настраивать утилиту smbclient
  • Подключаться к общим ресурсам Windows из Linux
  • Перемещаться и просматривать файлы на общих ресурсах Windows
  • Передавать файлы между системами Linux и Windows

Шпаргалка по командам Linux

Это Guided Lab, который предоставляет пошаговые инструкции, чтобы помочь вам учиться и практиковаться. Внимательно следуйте инструкциям, чтобы выполнить каждый шаг и получить практический опыт. Исторические данные показывают, что это лабораторная работа уровня продвинутый с процентом завершения 27%. Он получил 100% положительных отзывов от учащихся.

Установка smbclient в Ubuntu 22.04

Пакет smbclient — это инструмент командной строки, который позволяет системам Linux взаимодействовать с общими файловыми ресурсами SMB/CIFS, обычно используемыми в средах Windows. На этом шаге мы установим этот пакет в нашей системе Ubuntu.

Сначала обновим индекс пакетов, чтобы убедиться, что мы получаем последнюю версию:

sudo apt update

Вы должны увидеть вывод, похожий на этот:

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

Теперь установим пакет smbclient:

sudo apt install -y smbclient

Вывод будет выглядеть примерно так:

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) ...

Чтобы убедиться, что smbclient установлен правильно, выполните:

smbclient --version

Вы должны увидеть вывод, показывающий версию установленного smbclient:

Version 4.15.5-Ubuntu

Теперь, когда мы установили smbclient, мы можем начать использовать его для взаимодействия с общими ресурсами SMB/CIFS.

Основы работы с smbclient

Теперь, когда мы установили smbclient, давайте разберемся с его базовым использованием и синтаксисом, прежде чем подключаться к реальным общим ресурсам SMB.

Синтаксис команды

Базовый синтаксис команды smbclient выглядит следующим образом:

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

Где:

  • //server/share — это путь UNC (Universal Naming Convention) к общему ресурсу SMB
  • -U username%password указывает имя пользователя и пароль для аутентификации
  • [options] — это дополнительные параметры, которые вы можете предоставить

Создание локального каталога для практики

Давайте создадим каталог, в котором мы сможем хранить файлы, которые мы, возможно, захотим передать на общие ресурсы SMB или с них:

mkdir -p ~/project/smb-files

Создадим в этом каталоге пример файла, который мы сможем использовать позже:

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

Изучение справки smbclient

Чтобы увидеть все доступные опции для smbclient, используйте команду help:

smbclient --help

Это отобразит длинный текст справки со всеми доступными опциями. Вот фрагмент того, что вы можете увидеть:

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
...

Общие команды smbclient

Когда вы подключены к общему ресурсу SMB с помощью smbclient, вы можете использовать различные команды для навигации и работы с файлами. Вот некоторые распространенные команды:

  • ls или dir: Вывести список файлов и каталогов
  • cd directory: Перейти в другой каталог
  • get file [localfile]: Загрузить файл с общего ресурса
  • put file [remotefile]: Загрузить файл на общий ресурс
  • mget files...: Загрузить несколько файлов
  • mput files...: Загрузить несколько файлов
  • mkdir directory: Создать каталог
  • rmdir directory: Удалить каталог
  • rm file: Удалить файл
  • help или ?: Отобразить справку
  • quit или exit: Выйти из smbclient

Теперь, когда мы понимаем основы smbclient, на следующем шаге мы увидим, как подключиться к реальному общему ресурсу SMB.

Настройка тестовой среды SMB

В реальном сценарии вы бы подключились к фактическому серверу Windows или Samba. Однако для этой лабораторной работы мы смоделируем среду SMB, используя локальный сервер Samba. Этот подход позволяет нам практиковать команды smbclient, не требуя доступа к внешнему серверу.

Установка сервера Samba

Сначала установим пакет сервера Samba:

sudo apt install -y samba

Вы должны увидеть вывод, указывающий на процесс установки:

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.
...

Создание общего ресурса Samba

Теперь давайте создадим простую конфигурацию общего ресурса Samba. Сначала создадим резервную копию исходного файла конфигурации:

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

Создайте каталог для общего доступа:

mkdir -p ~/project/samba-share

Создадим тестовый файл в этом общем каталоге:

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

Теперь давайте создадим упрощенную конфигурацию Samba:

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'

Добавьте текущего пользователя в пользователи Samba и установите пароль для тестирования:

sudo smbpasswd -a labex

При появлении запроса введите простой пароль, например password (вам нужно будет ввести его дважды):

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

Перезапустите службу Samba, чтобы применить изменения:

sudo service smbd restart

Теперь у нас есть локальный общий ресурс Samba под названием testshare, настроенный в нашей системе. Мы можем использовать smbclient, чтобы подключиться к нему, как если бы это был удаленный общий ресурс Windows.

Подключение к общим ресурсам SMB с помощью smbclient

Теперь, когда у нас настроена тестовая среда SMB, давайте подключимся к общему ресурсу, используя smbclient.

Вывод списка доступных общих ресурсов

Сначала выведем список всех доступных общих ресурсов на нашей локальной машине:

smbclient -L localhost -U labex

При появлении запроса введите пароль, который вы установили для пользователя Samba (например, password):

Enter WORKGROUP\labex's password:

Вы должны увидеть вывод, похожий на этот:

        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

Это показывает, что наш вновь созданный общий ресурс testshare доступен.

Подключение к общему ресурсу

Теперь давайте подключимся к общему ресурсу testshare:

smbclient //localhost/testshare -U labex

Введите пароль при появлении запроса:

Enter WORKGROUP\labex's password:

После успешного подключения вы увидите приглашение smbclient:

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

Навигация и вывод списка файлов

Теперь, когда мы подключены к общему ресурсу, давайте рассмотрим некоторые основные команды:

Чтобы вывести список файлов в текущем каталоге:

smb: \> ls

Вы должны увидеть тестовый файл, который мы создали ранее:

  .                                   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

Создание удаленного каталога

Давайте создадим новый каталог на общем ресурсе SMB:

smb: \> mkdir test-directory

Выведите список содержимого еще раз, чтобы убедиться, что каталог был создан:

smb: \> ls

Вы должны увидеть новый каталог:

  .                                   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

Смена каталогов

Давайте перейдем в каталог, который мы только что создали:

smb: \> cd test-directory

Убедитесь, что мы находимся в новом каталоге:

smb: \test-directory\> ls

Вывод должен показать пустой каталог:

  .                                   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

Чтобы вернуться в родительский каталог:

smb: \test-directory\> cd ..

Получение справки внутри smbclient

Чтобы увидеть доступные команды внутри smbclient:

smb: \> help

Вы увидите список всех доступных команд:

?              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         ..             !

Когда вы закончите изучение, вы можете выйти из сеанса smbclient:

smb: \> quit

На следующем шаге мы узнаем, как передавать файлы между системой Linux и общими ресурсами SMB.

Передача файлов с помощью smbclient

На этом заключительном этапе мы узнаем, как передавать файлы между нашей системой Linux и общим ресурсом SMB.

Повторное подключение к общему ресурсу

Давайте снова подключимся к нашему общему ресурсу SMB:

smbclient //localhost/testshare -U labex

Введите пароль при появлении запроса:

Enter WORKGROUP\labex's password:

Вы должны увидеть приглашение smbclient:

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

Загрузка файлов на общий ресурс

Давайте загрузим тестовый файл, который мы создали ранее, на общий ресурс SMB. Сначала нам нужно проверить наш текущий локальный каталог:

smb: \> !pwd

Это выполняет команду pwd в вашей локальной системе и должно отобразить:

/home/labex/project

Нам нужно перейти в каталог, где находится наш тестовый файл:

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

Убедитесь, что мы находимся в правильном каталоге:

smb: \> !ls

Вы должны увидеть:

test.txt

Теперь давайте загрузим файл на общий ресурс SMB:

smb: \> put test.txt

Вы должны увидеть сообщение, указывающее на то, что файл был передан:

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

Убедитесь, что файл был загружен:

smb: \> ls

Вы должны увидеть:

  .                                   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

Загрузка файлов с общего ресурса

Теперь давайте загрузим файл с общего ресурса SMB в нашу локальную систему. Сначала давайте создадим новый каталог для хранения загруженных файлов:

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

Перейдите в этот каталог:

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

Теперь загрузите файл:

smb: \> get shared-test.txt

Вы должны увидеть сообщение, указывающее на то, что файл был передан:

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

Убедитесь, что файл был загружен:

smb: \> !ls

Вы должны увидеть:

shared-test.txt

Использование mget и mput для нескольких файлов

Команды mget и mput позволяют передавать несколько файлов одновременно. Давайте попробуем создать еще несколько файлов в нашей локальной системе:

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

Теперь давайте загрузим все файлы .txt одновременно:

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

Для каждого файла вам будет предложено подтверждение. Введите Y, чтобы подтвердить каждую передачу:

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)

Если вы хотите передать все файлы без подтверждения, вы можете отключить запрос:

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

Аналогично, чтобы загрузить несколько файлов:

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

Когда вы закончите, выйдите из сеанса smbclient:

smb: \> quit

Неинтерактивные команды

Вы также можете использовать smbclient для выполнения команд без входа в интерактивную оболочку. Например, чтобы вывести список содержимого общего ресурса:

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

Введите пароль при появлении запроса, и вы увидите список каталогов:

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

Чтобы загрузить файл одной командой:

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

Эта команда загружает файл test.txt с общего ресурса и сохраняет его как test-download.txt в вашем каталоге проекта.

Теперь у вас есть хорошее понимание того, как использовать smbclient для подключения к общим ресурсам SMB, навигации по каталогам и передачи файлов. Эти навыки необходимы при работе в смешанных средах Windows/Linux.

Резюме

В этой лабораторной работе мы изучили команду smbclient в Linux, которая предоставляет важный инструмент для подключения систем Linux к общим файловым ресурсам Windows (SMB/CIFS). Мы рассмотрели несколько ключевых аспектов работы с smbclient:

  1. Установка (Installation): Мы установили пакет smbclient в Ubuntu 22.04, который включал его зависимости.

  2. Основы команд (Command Basics): Мы узнали об основном синтаксисе и командах, доступных в smbclient, включая способы подключения к общим ресурсам и навигации внутри них.

  3. Настройка тестовой среды (Setting Up a Test Environment): Мы создали тестовую среду SMB, используя локальный сервер Samba, чтобы практиковать наши команды, не требуя доступа к внешнему серверу Windows.

  4. Подключение к общим ресурсам (Connecting to Shares): Мы подключились к нашему тестовому общему ресурсу SMB и изучили команды навигации, такие как ls, cd и mkdir.

  5. Передача файлов (Transferring Files): Мы узнали, как загружать файлы на общий ресурс SMB с помощью put и загружать файлы с помощью get. Мы также изучили передачу нескольких файлов с помощью mput и mget.

Навыки, которые вы получили в этой лабораторной работе, напрямую применимы к реальным сценариям, где вам необходимо взаимодействовать с системами или серверами Windows из сред Linux. Независимо от того, передаете ли вы файлы между системами, автоматизируете резервное копирование или интегрируете системы Linux в сети Windows, smbclient предоставляет мощный интерфейс командной строки для этих задач.

Для более сложных или частых операций с файлами вы можете изучить возможность монтирования общих ресурсов SMB непосредственно в вашу файловую систему Linux, используя команду mount с типом файловой системы cifs, которая основана на концепциях, которые мы изучили здесь.

Шпаргалка по командам Linux (Linux Commands Cheat Sheet)