Giới thiệu
Trong lab này, chúng ta sẽ khám phá lệnh smbclient
của Linux và các ứng dụng thực tế của nó. Tiện ích smbclient
là một công cụ mạnh mẽ cho phép các hệ thống Linux tương tác với các chia sẻ tệp của Windows (chia sẻ SMB/CIFS). SMB (Server Message Block) là một giao thức mạng mà Windows sử dụng để chia sẻ tệp và smbclient
cho phép người dùng Linux truy cập các chia sẻ này.
Chúng ta sẽ bắt đầu bằng cách cài đặt smbclient
trên hệ thống Ubuntu 22.04 của mình, tìm hiểu cú pháp cơ bản của lệnh và sau đó trình bày cách kết nối với các chia sẻ Windows, điều hướng thư mục và truyền tệp.
Khi kết thúc lab này, bạn sẽ có thể:
- Cài đặt và cấu hình tiện ích
smbclient
- Kết nối với các chia sẻ Windows từ Linux
- Điều hướng và liệt kê các tệp trên các chia sẻ Windows
- Truyền tệp giữa các hệ thống Linux và Windows
Cài đặt smbclient trên Ubuntu 22.04
Gói smbclient
là một công cụ dòng lệnh cho phép các hệ thống Linux tương tác với các chia sẻ tệp SMB/CIFS thường được sử dụng trong môi trường Windows. Trong bước này, chúng ta sẽ cài đặt gói này trên hệ thống Ubuntu của mình.
Trước tiên, hãy cập nhật chỉ mục gói để đảm bảo chúng ta nhận được phiên bản mới nhất:
sudo apt update
Bạn sẽ thấy đầu ra tương tự như sau:
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
Bây giờ, hãy cài đặt gói smbclient
:
sudo apt install -y smbclient
Đầu ra sẽ trông giống như sau:
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) ...
Để xác minh rằng smbclient
đã được cài đặt chính xác, hãy chạy:
smbclient --version
Bạn sẽ thấy đầu ra hiển thị phiên bản của smbclient đã được cài đặt:
Version 4.15.5-Ubuntu
Bây giờ chúng ta đã cài đặt smbclient
, chúng ta có thể bắt đầu sử dụng nó để tương tác với các chia sẻ SMB/CIFS.
Tìm hiểu các khái niệm cơ bản về smbclient
Bây giờ chúng ta đã cài đặt smbclient
, hãy tìm hiểu cách sử dụng và cú pháp cơ bản của nó trước khi kết nối với các chia sẻ SMB thực tế.
Cú pháp lệnh
Cú pháp cơ bản cho lệnh smbclient
là:
smbclient //server/share -U username%password [options]
Trong đó:
//server/share
là đường dẫn UNC (Universal Naming Convention) đến chia sẻ SMB-U username%password
chỉ định tên người dùng và mật khẩu để xác thực[options]
là các tham số bổ sung mà bạn có thể cung cấp
Tạo thư mục cục bộ để thực hành
Hãy tạo một thư mục nơi chúng ta có thể lưu trữ các tệp mà chúng ta có thể muốn truyền đến hoặc từ các chia sẻ SMB:
mkdir -p ~/project/smb-files
Hãy tạo một tệp mẫu trong thư mục này mà chúng ta có thể sử dụng sau này:
echo "This is a test file for SMB transfer" > ~/project/smb-files/test.txt
Khám phá Trợ giúp về smbclient
Để xem tất cả các tùy chọn có sẵn cho smbclient
, hãy sử dụng lệnh help:
smbclient --help
Điều này sẽ hiển thị một văn bản trợ giúp dài với tất cả các tùy chọn có sẵn. Dưới đây là một đoạn mã về những gì bạn có thể thấy:
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
...
Các lệnh smbclient phổ biến
Khi bạn được kết nối với một chia sẻ SMB bằng smbclient
, bạn có thể sử dụng nhiều lệnh khác nhau để điều hướng và thao tác trên các tệp. Dưới đây là một số lệnh phổ biến:
ls
hoặcdir
: Liệt kê các tệp và thư mụccd directory
: Thay đổi sang một thư mục khácget file [localfile]
: Tải xuống một tệp từ chia sẻput file [remotefile]
: Tải lên một tệp lên chia sẻmget files...
: Tải xuống nhiều tệpmput files...
: Tải lên nhiều tệpmkdir directory
: Tạo một thư mụcrmdir directory
: Xóa một thư mụcrm file
: Xóa một tệphelp
hoặc?
: Hiển thị trợ giúpquit
hoặcexit
: Thoát smbclient
Bây giờ chúng ta đã hiểu các khái niệm cơ bản về smbclient
, trong bước tiếp theo, chúng ta sẽ xem cách kết nối với một chia sẻ SMB thực tế.
Thiết lập môi trường SMB thử nghiệm
Trong một kịch bản thực tế, bạn sẽ kết nối với một máy chủ Windows hoặc Samba thực tế. Tuy nhiên, đối với lab này, chúng ta sẽ mô phỏng một môi trường SMB bằng cách sử dụng một máy chủ Samba cục bộ. Cách tiếp cận này cho phép chúng ta thực hành các lệnh smbclient mà không cần truy cập vào một máy chủ bên ngoài.
Cài đặt Máy chủ Samba
Đầu tiên, hãy cài đặt gói máy chủ Samba:
sudo apt install -y samba
Bạn sẽ thấy đầu ra cho biết quá trình cài đặt:
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.
...
Tạo một chia sẻ Samba
Bây giờ, hãy tạo một cấu hình chia sẻ Samba đơn giản. Đầu tiên, hãy sao lưu tệp cấu hình gốc:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup
Tạo một thư mục để chia sẻ:
mkdir -p ~/project/samba-share
Hãy tạo một tệp thử nghiệm trong thư mục chia sẻ này:
echo "This is a test file in our Samba share" > ~/project/samba-share/shared-test.txt
Bây giờ, hãy tạo một cấu hình Samba đơn giản:
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'
Thêm người dùng hiện tại vào người dùng Samba và đặt mật khẩu để thử nghiệm:
sudo smbpasswd -a labex
Khi được nhắc, hãy nhập một mật khẩu đơn giản như password
(bạn sẽ cần nhập hai lần):
New SMB password:
Retype new SMB password:
Added user labex.
Khởi động lại dịch vụ Samba để áp dụng các thay đổi:
sudo service smbd restart
Bây giờ chúng ta đã có một chia sẻ Samba cục bộ có tên là testshare
được thiết lập trên hệ thống của chúng ta. Chúng ta có thể sử dụng smbclient
để kết nối với nó như thể nó là một chia sẻ Windows từ xa.
Kết nối với Chia sẻ SMB bằng smbclient
Bây giờ chúng ta đã thiết lập môi trường SMB thử nghiệm, hãy kết nối với chia sẻ bằng smbclient
.
Liệt kê các Chia sẻ Có sẵn
Đầu tiên, hãy liệt kê tất cả các chia sẻ có sẵn trên máy cục bộ của chúng ta:
smbclient -L localhost -U labex
Khi được nhắc, hãy nhập mật khẩu bạn đã đặt cho người dùng Samba (ví dụ: password
):
Enter WORKGROUP\labex's password:
Bạn sẽ thấy đầu ra tương tự như sau:
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
Điều này cho thấy chia sẻ testshare
mới được tạo của chúng ta hiện đã khả dụng.
Kết nối với Chia sẻ
Bây giờ, hãy kết nối với chia sẻ testshare
:
smbclient //localhost/testshare -U labex
Nhập mật khẩu khi được nhắc:
Enter WORKGROUP\labex's password:
Khi kết nối thành công, bạn sẽ thấy dấu nhắc smbclient:
Try "help" to get a list of possible commands.
smb: \>
Điều hướng và Liệt kê Tệp
Bây giờ chúng ta đã kết nối với chia sẻ, hãy khám phá một số lệnh cơ bản:
Để liệt kê các tệp trong thư mục hiện tại:
smb: \> ls
Bạn sẽ thấy tệp thử nghiệm chúng ta đã tạo trước đó:
. 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
Tạo Thư mục Từ xa
Hãy tạo một thư mục mới trên chia sẻ SMB:
smb: \> mkdir test-directory
Liệt kê lại nội dung để xác minh thư mục đã được tạo:
smb: \> ls
Bạn sẽ thấy thư mục mới:
. 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
Thay đổi Thư mục
Hãy thay đổi sang thư mục chúng ta vừa tạo:
smb: \> cd test-directory
Xác minh chúng ta đang ở trong thư mục mới:
smb: \test-directory\> ls
Đầu ra sẽ hiển thị một thư mục trống:
. 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
Để quay lại thư mục gốc:
smb: \test-directory\> cd ..
Nhận Trợ giúp Trong smbclient
Để xem các lệnh có sẵn trong smbclient:
smb: \> help
Bạn sẽ thấy một danh sách tất cả các lệnh có sẵn:
? 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 .. !
Khi bạn đã khám phá xong, bạn có thể thoát khỏi phiên smbclient:
smb: \> quit
Trong bước tiếp theo, chúng ta sẽ tìm hiểu cách truyền tệp giữa hệ thống Linux và chia sẻ SMB.
Truyền Tệp với smbclient
Trong bước cuối cùng này, chúng ta sẽ tìm hiểu cách truyền tệp giữa hệ thống Linux của chúng ta và chia sẻ SMB.
Kết nối lại với Chia sẻ
Hãy kết nối lại với chia sẻ SMB của chúng ta:
smbclient //localhost/testshare -U labex
Nhập mật khẩu khi được nhắc:
Enter WORKGROUP\labex's password:
Bạn sẽ thấy dấu nhắc smbclient:
Try "help" to get a list of possible commands.
smb: \>
Tải tệp lên Chia sẻ
Hãy tải tệp thử nghiệm mà chúng ta đã tạo trước đó lên chia sẻ SMB. Đầu tiên, chúng ta cần kiểm tra thư mục cục bộ hiện tại của mình:
smb: \> !pwd
Lệnh này chạy lệnh pwd
trên hệ thống cục bộ của bạn và sẽ hiển thị:
/home/labex/project
Chúng ta cần thay đổi sang thư mục nơi tệp thử nghiệm của chúng ta được đặt:
smb: \> lcd ~/project/smb-files
Xác minh chúng ta đang ở trong thư mục chính xác:
smb: \> !ls
Bạn sẽ thấy:
test.txt
Bây giờ, hãy tải tệp lên chia sẻ SMB:
smb: \> put test.txt
Bạn sẽ thấy một thông báo cho biết tệp đã được truyền:
putting file test.txt as \test.txt (38.5 kb/s) (average 38.5 kb/s)
Xác minh tệp đã được tải lên:
smb: \> ls
Bạn sẽ thấy:
. 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
Tải xuống tệp từ Chia sẻ
Bây giờ, hãy tải xuống một tệp từ chia sẻ SMB vào hệ thống cục bộ của chúng ta. Đầu tiên, hãy tạo một thư mục mới để lưu trữ các tệp đã tải xuống:
smb: \> !mkdir -p ~/project/smb-downloads
Thay đổi sang thư mục đó:
smb: \> lcd ~/project/smb-downloads
Bây giờ, hãy tải xuống tệp:
smb: \> get shared-test.txt
Bạn sẽ thấy một thông báo cho biết tệp đã được truyền:
getting file \shared-test.txt of size 37 as shared-test.txt (37.0 KiloBytes/sec) (average 37.0 KiloBytes/sec)
Xác minh tệp đã được tải xuống:
smb: \> !ls
Bạn sẽ thấy:
shared-test.txt
Sử dụng mget và mput cho nhiều tệp
Các lệnh mget
và mput
cho phép bạn truyền nhiều tệp cùng một lúc. Hãy thử tạo thêm một vài tệp trên hệ thống cục bộ của chúng ta:
smb: \> !cd ~/project/smb-files && touch file1.txt file2.txt file3.txt
Bây giờ, hãy tải lên tất cả các tệp .txt cùng một lúc:
smb: \> lcd ~/project/smb-files
smb: \> mput *.txt
Đối với mỗi tệp, bạn sẽ được yêu cầu xác nhận. Nhập Y
để xác nhận mỗi lần truyền:
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)
Nếu bạn muốn truyền tất cả các tệp mà không cần xác nhận, bạn có thể tắt lời nhắc:
smb: \> prompt
smb: \> mput *.txt
Tương tự, để tải xuống nhiều tệp:
smb: \> lcd ~/project/smb-downloads
smb: \> mget *.txt
Khi bạn đã hoàn tất, hãy thoát khỏi phiên smbclient:
smb: \> quit
Các lệnh không tương tác
Bạn cũng có thể sử dụng smbclient
để thực thi các lệnh mà không cần vào shell tương tác. Ví dụ: để liệt kê nội dung của một chia sẻ:
smbclient //localhost/testshare -U labex -c 'ls'
Nhập mật khẩu khi được nhắc và bạn sẽ thấy danh sách thư mục:
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
Để tải xuống một tệp trong một lệnh duy nhất:
smbclient //localhost/testshare -U labex -c 'get test.txt /home/labex/project/test-download.txt'
Lệnh này tải xuống tệp test.txt
từ chia sẻ và lưu nó dưới dạng test-download.txt
trong thư mục project của bạn.
Bây giờ bạn đã hiểu rõ về cách sử dụng smbclient
để kết nối với các chia sẻ SMB, điều hướng thư mục và truyền tệp. Các kỹ năng này rất cần thiết khi làm việc trong môi trường Windows/Linux hỗn hợp.
Tóm tắt
Trong lab này, chúng ta đã khám phá lệnh smbclient
trong Linux, cung cấp một công cụ thiết yếu để kết nối các hệ thống Linux với các chia sẻ tệp Windows (SMB/CIFS). Chúng ta đã đề cập đến một số khía cạnh chính của việc làm việc với smbclient
:
-
Cài đặt: Chúng ta đã cài đặt gói
smbclient
trên Ubuntu 22.04, bao gồm các phần phụ thuộc của nó. -
Các khái niệm cơ bản về lệnh: Chúng ta đã tìm hiểu về cú pháp và lệnh cơ bản có sẵn trong
smbclient
, bao gồm cách kết nối với các chia sẻ và điều hướng bên trong chúng. -
Thiết lập Môi trường Thử nghiệm: Chúng ta đã tạo một môi trường SMB thử nghiệm bằng cách sử dụng một máy chủ Samba cục bộ để thực hành các lệnh của chúng ta mà không cần truy cập vào một máy chủ Windows bên ngoài.
-
Kết nối với các Chia sẻ: Chúng ta đã kết nối với chia sẻ SMB thử nghiệm của chúng ta và khám phá các lệnh điều hướng như
ls
,cd
vàmkdir
. -
Truyền Tệp: Chúng ta đã học cách tải tệp lên một chia sẻ SMB bằng
put
và tải xuống tệp bằngget
. Chúng ta cũng đã khám phá việc truyền nhiều tệp vớimput
vàmget
.
Các kỹ năng bạn đã có được từ lab này có thể áp dụng trực tiếp vào các kịch bản thực tế, nơi bạn cần tương tác với các hệ thống hoặc máy chủ Windows từ môi trường Linux. Cho dù bạn đang truyền tệp giữa các hệ thống, tự động hóa sao lưu hay tích hợp các hệ thống Linux vào mạng Windows, smbclient
cung cấp một giao diện dòng lệnh mạnh mẽ cho các tác vụ này.
Đối với các thao tác tệp phức tạp hoặc thường xuyên hơn, bạn có thể muốn khám phá việc gắn các chia sẻ SMB trực tiếp vào hệ thống tệp Linux của mình bằng lệnh mount
với loại hệ thống tệp cifs
, được xây dựng dựa trên các khái niệm mà chúng ta đã học ở đây.