Введение
В этой лабораторной работе мы рассмотрим команду 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
Установка 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:
Установка (Installation): Мы установили пакет
smbclientв Ubuntu 22.04, который включал его зависимости.Основы команд (Command Basics): Мы узнали об основном синтаксисе и командах, доступных в
smbclient, включая способы подключения к общим ресурсам и навигации внутри них.Настройка тестовой среды (Setting Up a Test Environment): Мы создали тестовую среду SMB, используя локальный сервер Samba, чтобы практиковать наши команды, не требуя доступа к внешнему серверу Windows.
Подключение к общим ресурсам (Connecting to Shares): Мы подключились к нашему тестовому общему ресурсу SMB и изучили команды навигации, такие как
ls,cdиmkdir.Передача файлов (Transferring Files): Мы узнали, как загружать файлы на общий ресурс SMB с помощью
putи загружать файлы с помощьюget. Мы также изучили передачу нескольких файлов с помощьюmputиmget.
Навыки, которые вы получили в этой лабораторной работе, напрямую применимы к реальным сценариям, где вам необходимо взаимодействовать с системами или серверами Windows из сред Linux. Независимо от того, передаете ли вы файлы между системами, автоматизируете резервное копирование или интегрируете системы Linux в сети Windows, smbclient предоставляет мощный интерфейс командной строки для этих задач.
Для более сложных или частых операций с файлами вы можете изучить возможность монтирования общих ресурсов SMB непосредственно в вашу файловую систему Linux, используя команду mount с типом файловой системы cifs, которая основана на концепциях, которые мы изучили здесь.



