Einführung
In diesem Lab werden wir den Linux-Befehl smbclient und seine praktischen Anwendungen untersuchen. Das Dienstprogramm smbclient ist ein leistungsstarkes Werkzeug, das es Linux-Systemen ermöglicht, mit Windows-Dateifreigaben (SMB/CIFS-Freigaben) zu interagieren. SMB (Server Message Block) ist ein Netzwerkprotokoll, das Windows für die Dateifreigabe verwendet, und smbclient ermöglicht es Linux-Benutzern, auf diese Freigaben zuzugreifen.
Wir beginnen mit der Installation von smbclient auf unserem Ubuntu 22.04-System, lernen die grundlegende Syntax des Befehls und demonstrieren dann, wie man sich mit Windows-Freigaben verbindet, Verzeichnisse navigiert und Dateien überträgt.
Am Ende dieses Labs werden Sie in der Lage sein:
- Das Dienstprogramm
smbclientzu installieren und zu konfigurieren - Sich von Linux aus mit Windows-Freigaben zu verbinden
- Dateien auf Windows-Freigaben zu navigieren und aufzulisten
- Dateien zwischen Linux- und Windows-Systemen zu übertragen
Installation von smbclient auf Ubuntu 22.04
Das Paket smbclient ist ein Befehlszeilen-Tool, das es Linux-Systemen ermöglicht, mit SMB/CIFS-Dateifreigaben zu interagieren, die üblicherweise in Windows-Umgebungen verwendet werden. In diesem Schritt installieren wir dieses Paket auf unserem Ubuntu-System.
Zuerst aktualisieren wir den Paketindex, um sicherzustellen, dass wir die neueste Version erhalten:
sudo apt update
Die Ausgabe sollte in etwa so aussehen:
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
Nun installieren wir das Paket smbclient:
sudo apt install -y smbclient
Die Ausgabe sieht in etwa so aus:
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) ...
Um zu überprüfen, ob smbclient korrekt installiert wurde, führen Sie aus:
smbclient --version
Sie sollten eine Ausgabe sehen, die die Version von smbclient anzeigt, die installiert wurde:
Version 4.15.5-Ubuntu
Nachdem wir smbclient installiert haben, können wir damit beginnen, mit SMB/CIFS-Freigaben zu interagieren.
Grundlagen von smbclient verstehen
Nachdem wir smbclient installiert haben, wollen wir seine grundlegende Verwendung und Syntax verstehen, bevor wir uns mit tatsächlichen SMB-Freigaben verbinden.
Befehlssyntax
Die grundlegende Syntax für den Befehl smbclient lautet:
smbclient //server/share -U username%password [options]
Wobei:
//server/shareder UNC-Pfad (Universal Naming Convention) zur SMB-Freigabe ist-U username%passwordden Benutzernamen und das Passwort für die Authentifizierung angibt[options]zusätzliche Parameter sind, die Sie angeben können
Erstellen eines lokalen Verzeichnisses für Übungszwecke
Erstellen wir ein Verzeichnis, in dem wir Dateien speichern können, die wir möglicherweise von oder zu SMB-Freigaben übertragen möchten:
mkdir -p ~/project/smb-files
Erstellen wir eine Beispieldatei in diesem Verzeichnis, die wir später verwenden können:
echo "This is a test file for SMB transfer" > ~/project/smb-files/test.txt
Erkunden der smbclient-Hilfe
Um alle verfügbaren Optionen für smbclient anzuzeigen, verwenden Sie den Hilfe-Befehl:
smbclient --help
Dadurch wird ein langer Hilfetext mit allen verfügbaren Optionen angezeigt. Hier ist ein Ausschnitt davon:
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
...
Häufige smbclient-Befehle
Wenn Sie mit smbclient mit einer SMB-Freigabe verbunden sind, können Sie verschiedene Befehle verwenden, um Dateien zu navigieren und zu bearbeiten. Hier sind einige gängige Befehle:
lsoderdir: Dateien und Verzeichnisse auflistencd directory: In ein anderes Verzeichnis wechselnget file [localfile]: Eine Datei von der Freigabe herunterladenput file [remotefile]: Eine Datei auf die Freigabe hochladenmget files...: Mehrere Dateien herunterladenmput files...: Mehrere Dateien hochladenmkdir directory: Ein Verzeichnis erstellenrmdir directory: Ein Verzeichnis entfernenrm file: Eine Datei löschenhelpoder?: Hilfe anzeigenquitoderexit: smbclient beenden
Nachdem wir die Grundlagen von smbclient verstanden haben, werden wir im nächsten Schritt sehen, wie man sich mit einer tatsächlichen SMB-Freigabe verbindet.
Einrichten einer Test-SMB-Umgebung
In einem realen Szenario würden Sie sich mit einem tatsächlichen Windows- oder Samba-Server verbinden. Für dieses Labor simulieren wir jedoch eine SMB-Umgebung mithilfe eines lokalen Samba-Servers. Dieser Ansatz ermöglicht es uns, smbclient-Befehle zu üben, ohne Zugriff auf einen externen Server zu benötigen.
Installieren des Samba-Servers
Zuerst installieren wir das Samba-Server-Paket:
sudo apt install -y samba
Sie sollten eine Ausgabe sehen, die den Installationsprozess anzeigt:
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.
...
Erstellen einer Samba-Freigabe
Nun erstellen wir eine einfache Samba-Freigabekonfiguration. Zuerst sichern wir die ursprüngliche Konfigurationsdatei:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup
Erstellen Sie ein Verzeichnis, das freigegeben werden soll:
mkdir -p ~/project/samba-share
Erstellen wir eine Testdatei in diesem freigegebenen Verzeichnis:
echo "This is a test file in our Samba share" > ~/project/samba-share/shared-test.txt
Nun erstellen wir eine vereinfachte Samba-Konfiguration:
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
guest ok = yes
force user = labex
EOF'
Fügen Sie den aktuellen Benutzer zu den Samba-Benutzern hinzu und legen Sie ein Passwort für Tests fest:
sudo smbpasswd -a labex
Geben Sie bei Aufforderung ein einfaches Passwort wie password ein (Sie müssen es zweimal eingeben):
New SMB password:
Retype new SMB password:
Added user labex.
Starten Sie den Samba-Dienst neu, um die Änderungen zu übernehmen:
sudo service smbd restart
Jetzt haben wir eine lokale Samba-Freigabe namens testshare auf unserem System eingerichtet. Wir können smbclient verwenden, um sich damit zu verbinden, als wäre es eine Remote-Windows-Freigabe.
Verbinden mit SMB-Freigaben mit smbclient
Nachdem wir unsere Test-SMB-Umgebung eingerichtet haben, verbinden wir uns mit der Freigabe mithilfe von smbclient.
Auflisten der verfügbaren Freigaben
Zuerst listen wir alle verfügbaren Freigaben auf unserer lokalen Maschine auf:
smbclient -L localhost -U labex
Geben Sie bei Aufforderung das Passwort ein, das Sie für den Samba-Benutzer festgelegt haben (z. B. password):
Enter WORKGROUP\labex's password:
Sie sollten eine Ausgabe ähnlich dieser sehen:
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
Dies zeigt, dass unsere neu erstellte testshare-Freigabe verfügbar ist.
Verbinden mit der Freigabe
Verbinden wir uns nun mit der testshare-Freigabe:
smbclient //localhost/testshare -U labex
Geben Sie das Passwort ein, wenn Sie dazu aufgefordert werden:
Enter WORKGROUP\labex's password:
Nach erfolgreicher Verbindung sehen Sie die smbclient-Eingabeaufforderung:
Try "help" to get a list of possible commands.
smb: \>
Navigieren und Auflisten von Dateien
Nachdem wir mit der Freigabe verbunden sind, wollen wir einige grundlegende Befehle erkunden:
Um Dateien im aktuellen Verzeichnis aufzulisten:
smb: \> ls
Sie sollten die Testdatei sehen, die wir zuvor erstellt haben:
. 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
Erstellen eines Remote-Verzeichnisses
Erstellen wir ein neues Verzeichnis auf der SMB-Freigabe:
smb: \> mkdir test-directory
Listen Sie den Inhalt erneut auf, um zu überprüfen, ob das Verzeichnis erstellt wurde:
smb: \> ls
Sie sollten das neue Verzeichnis sehen:
. 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
Verzeichniswechsel
Wechseln wir in das Verzeichnis, das wir gerade erstellt haben:
smb: \> cd test-directory
Überprüfen Sie, ob wir uns im neuen Verzeichnis befinden:
smb: \test-directory\> ls
Die Ausgabe sollte ein leeres Verzeichnis anzeigen:
. 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
Um zurück zum übergeordneten Verzeichnis zu gelangen:
smb: \test-directory\> cd ..
Hilfe innerhalb von smbclient abrufen
Um die verfügbaren Befehle innerhalb von smbclient anzuzeigen:
smb: \> help
Sie sehen eine Liste aller verfügbaren Befehle:
? 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 .. !
Wenn Sie mit dem Erkunden fertig sind, können Sie die smbclient-Sitzung beenden:
smb: \> quit
Im nächsten Schritt erfahren wir, wie man Dateien zwischen dem Linux-System und SMB-Freigaben überträgt.
Übertragen von Dateien mit smbclient
In diesem letzten Schritt erfahren wir, wie man Dateien zwischen unserem Linux-System und der SMB-Freigabe überträgt.
Erneutes Verbinden mit der Freigabe
Verbinden wir uns erneut mit unserer SMB-Freigabe:
smbclient //localhost/testshare -U labex
Geben Sie das Passwort ein, wenn Sie dazu aufgefordert werden:
Enter WORKGROUP\labex's password:
Sie sollten die smbclient-Eingabeaufforderung sehen:
Try "help" to get a list of possible commands.
smb: \>
Hochladen von Dateien in die Freigabe
Laden wir die Testdatei, die wir zuvor erstellt haben, in die SMB-Freigabe hoch. Zuerst müssen wir unser aktuelles lokales Verzeichnis überprüfen:
smb: \> !pwd
Dies führt den Befehl pwd auf Ihrem lokalen System aus und sollte Folgendes anzeigen:
/home/labex/project
Wir müssen in das Verzeichnis wechseln, in dem sich unsere Testdatei befindet:
smb: \> lcd ~/project/smb-files
Überprüfen Sie, ob wir uns im richtigen Verzeichnis befinden:
smb: \> !ls
Sie sollten Folgendes sehen:
test.txt
Laden wir nun die Datei in die SMB-Freigabe hoch:
smb: \> put test.txt
Sie sollten eine Meldung sehen, die anzeigt, dass die Datei übertragen wurde:
putting file test.txt as \test.txt (38.5 kb/s) (average 38.5 kb/s)
Überprüfen Sie, ob die Datei hochgeladen wurde:
smb: \> ls
Sie sollten Folgendes sehen:
. 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
Herunterladen von Dateien von der Freigabe
Laden wir nun eine Datei von der SMB-Freigabe auf unser lokales System herunter. Erstellen wir zuerst ein neues Verzeichnis, um die heruntergeladenen Dateien zu speichern:
smb: \> !mkdir -p ~/project/smb-downloads
Wechseln Sie in dieses Verzeichnis:
smb: \> lcd ~/project/smb-downloads
Laden Sie nun die Datei herunter:
smb: \> get shared-test.txt
Sie sollten eine Meldung sehen, die anzeigt, dass die Datei übertragen wurde:
getting file \shared-test.txt of size 37 as shared-test.txt (37.0 KiloBytes/sec) (average 37.0 KiloBytes/sec)
Überprüfen Sie, ob die Datei heruntergeladen wurde:
smb: \> !ls
Sie sollten Folgendes sehen:
shared-test.txt
Verwenden von mget und mput für mehrere Dateien
Die Befehle mget und mput ermöglichen es Ihnen, mehrere Dateien gleichzeitig zu übertragen. Versuchen wir, ein paar weitere Dateien auf unserem lokalen System zu erstellen:
smb: \> !cd ~/project/smb-files && touch file1.txt file2.txt file3.txt
Laden wir nun alle .txt-Dateien gleichzeitig hoch:
smb: \> lcd ~/project/smb-files
smb: \> mput *.txt
Für jede Datei werden Sie nach einer Bestätigung gefragt. Geben Sie Y ein, um jede Übertragung zu bestätigen:
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)
Wenn Sie alle Dateien ohne Bestätigung übertragen möchten, können Sie die Abfrage deaktivieren:
smb: \> prompt
smb: \> mput *.txt
Ebenso zum Herunterladen mehrerer Dateien:
smb: \> lcd ~/project/smb-downloads
smb: \> mget *.txt
Wenn Sie fertig sind, beenden Sie die smbclient-Sitzung:
smb: \> quit
Nicht-interaktive Befehle
Sie können smbclient auch verwenden, um Befehle auszuführen, ohne die interaktive Shell aufzurufen. Um beispielsweise den Inhalt einer Freigabe aufzulisten:
smbclient //localhost/testshare -U labex -c 'ls'
Geben Sie das Passwort ein, wenn Sie dazu aufgefordert werden, und Sie sehen die Verzeichnisauflistung:
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
Um eine Datei mit einem einzigen Befehl herunterzuladen:
smbclient //localhost/testshare -U labex -c 'get test.txt /home/labex/project/test-download.txt'
Dieser Befehl lädt die Datei test.txt von der Freigabe herunter und speichert sie als test-download.txt in Ihrem Projektverzeichnis.
Sie haben jetzt ein gutes Verständnis dafür, wie man smbclient verwendet, um sich mit SMB-Freigaben zu verbinden, Verzeichnisse zu navigieren und Dateien zu übertragen. Diese Fähigkeiten sind unerlässlich, wenn Sie in gemischten Windows/Linux-Umgebungen arbeiten.
Zusammenfassung
In diesem Lab haben wir den Befehl smbclient in Linux untersucht, der ein wichtiges Werkzeug zum Verbinden von Linux-Systemen mit Windows (SMB/CIFS)-Dateifreigaben bereitstellt. Wir haben verschiedene wichtige Aspekte der Arbeit mit smbclient behandelt:
Installation: Wir haben das Paket
smbclientauf Ubuntu 22.04 installiert, das seine Abhängigkeiten enthielt.Grundlagen der Befehle: Wir haben die grundlegende Syntax und die in
smbclientverfügbaren Befehle kennengelernt, einschließlich der Verbindung zu Freigaben und der Navigation innerhalb dieser.Einrichten einer Testumgebung: Wir haben eine Test-SMB-Umgebung mit einem lokalen Samba-Server erstellt, um unsere Befehle zu üben, ohne Zugriff auf einen externen Windows-Server zu benötigen.
Verbinden mit Freigaben: Wir haben uns mit unserer Test-SMB-Freigabe verbunden und Navigationsbefehle wie
ls,cdundmkdirerkundet.Übertragen von Dateien: Wir haben gelernt, wie man Dateien mit
putin eine SMB-Freigabe hochlädt und Dateien mitgetherunterlädt. Wir haben auch die Übertragung mehrerer Dateien mitmputundmgetuntersucht.
Die Fähigkeiten, die Sie in diesem Lab erworben haben, sind direkt auf reale Szenarien anwendbar, in denen Sie mit Windows-Systemen oder -Servern aus Linux-Umgebungen interagieren müssen. Ob Sie Dateien zwischen Systemen übertragen, Backups automatisieren oder Linux-Systeme in Windows-Netzwerke integrieren, smbclient bietet eine leistungsstarke Befehlszeilenschnittstelle für diese Aufgaben.
Für komplexere oder häufigere Dateioperationen sollten Sie in Erwägung ziehen, SMB-Freigaben direkt in Ihr Linux-Dateisystem mit dem Befehl mount mit dem Dateisystemtyp cifs einzubinden, der auf den hier gelernten Konzepten aufbaut.



