Introduction
Dans ce laboratoire, nous allons explorer la commande Linux smbclient et ses applications pratiques. L'utilitaire smbclient est un outil puissant qui permet aux systèmes Linux d'interagir avec les partages de fichiers Windows (partages SMB/CIFS). SMB (Server Message Block) est un protocole réseau utilisé par Windows pour le partage de fichiers, et smbclient permet aux utilisateurs Linux d'accéder à ces partages.
Nous commencerons par installer smbclient sur notre système Ubuntu 22.04, apprendrons la syntaxe de base de la commande, puis démontrerons comment se connecter aux partages Windows, naviguer dans les répertoires et transférer des fichiers.
À la fin de ce laboratoire, vous serez capable de :
- Installer et configurer l'utilitaire
smbclient - Se connecter aux partages Windows depuis Linux
- Naviguer et lister les fichiers sur les partages Windows
- Transférer des fichiers entre les systèmes Linux et Windows
Installation de smbclient sur Ubuntu 22.04
Le paquet smbclient est un outil en ligne de commande qui permet aux systèmes Linux d'interagir avec les partages de fichiers SMB/CIFS couramment utilisés dans les environnements Windows. Dans cette étape, nous allons installer ce paquet sur notre système Ubuntu.
Commençons par mettre à jour l'index des paquets pour nous assurer d'obtenir la dernière version :
sudo apt update
Vous devriez voir une sortie similaire à celle-ci :
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
Maintenant, installons le paquet smbclient :
sudo apt install -y smbclient
La sortie ressemblera à ceci :
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) ...
Pour vérifier que smbclient a été installé correctement, exécutez :
smbclient --version
Vous devriez voir une sortie indiquant la version de smbclient qui a été installée :
Version 4.15.5-Ubuntu
Maintenant que nous avons installé smbclient, nous pouvons commencer à l'utiliser pour interagir avec les partages SMB/CIFS.
Comprendre les bases de smbclient
Maintenant que nous avons installé smbclient, comprenons son utilisation et sa syntaxe de base avant de nous connecter à des partages SMB réels.
Syntaxe de la commande
La syntaxe de base de la commande smbclient est la suivante :
smbclient //server/share -U username%password [options]
Où :
//server/shareest le chemin UNC (Universal Naming Convention) vers le partage SMB-U username%passwordspécifie le nom d'utilisateur et le mot de passe pour l'authentification[options]sont des paramètres supplémentaires que vous pouvez fournir
Création d'un répertoire local pour la pratique
Créons un répertoire où nous pourrons stocker les fichiers que nous pourrions vouloir transférer vers ou depuis des partages SMB :
mkdir -p ~/project/smb-files
Créons un exemple de fichier dans ce répertoire que nous pourrons utiliser plus tard :
echo "This is a test file for SMB transfer" > ~/project/smb-files/test.txt
Exploration de l'aide de smbclient
Pour voir toutes les options disponibles pour smbclient, utilisez la commande d'aide :
smbclient --help
Cela affichera un texte d'aide détaillé avec toutes les options disponibles. Voici un extrait de ce que vous pourriez voir :
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
...
Commandes smbclient courantes
Lorsque vous êtes connecté à un partage SMB avec smbclient, vous pouvez utiliser diverses commandes pour naviguer et opérer sur les fichiers. Voici quelques commandes courantes :
lsoudir: Lister les fichiers et les répertoirescd directory: Changer de répertoireget file [localfile]: Télécharger un fichier depuis le partageput file [remotefile]: Télécharger un fichier vers le partagemget files...: Télécharger plusieurs fichiersmput files...: Télécharger plusieurs fichiersmkdir directory: Créer un répertoirermdir directory: Supprimer un répertoirerm file: Supprimer un fichierhelpou?: Afficher l'aidequitouexit: Quitter smbclient
Maintenant que nous comprenons les bases de smbclient, dans l'étape suivante, nous verrons comment nous connecter à un partage SMB réel.
Configuration d'un environnement SMB de test
Dans un scénario réel, vous vous connecteriez à un serveur Windows ou Samba réel. Cependant, pour ce laboratoire, nous allons simuler un environnement SMB en utilisant un serveur Samba local. Cette approche nous permet de pratiquer les commandes smbclient sans avoir besoin d'accéder à un serveur externe.
Installation du serveur Samba
Tout d'abord, installons le paquet du serveur Samba :
sudo apt install -y samba
Vous devriez voir une sortie indiquant le processus d'installation :
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.
...
Création d'un partage Samba
Maintenant, créons une configuration de partage Samba simple. Tout d'abord, sauvegardons le fichier de configuration d'origine :
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup
Créez un répertoire à partager :
mkdir -p ~/project/samba-share
Créons un fichier de test dans ce répertoire partagé :
echo "This is a test file in our Samba share" > ~/project/samba-share/shared-test.txt
Maintenant, créons une configuration Samba simplifiée :
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'
Ajoutez l'utilisateur actuel aux utilisateurs Samba et définissez un mot de passe pour les tests :
sudo smbpasswd -a labex
Lorsque vous y êtes invité, entrez un mot de passe simple comme password (vous devrez le taper deux fois) :
New SMB password:
Retype new SMB password:
Added user labex.
Redémarrez le service Samba pour appliquer les modifications :
sudo service smbd restart
Nous avons maintenant un partage Samba local appelé testshare configuré sur notre système. Nous pouvons utiliser smbclient pour nous y connecter comme s'il s'agissait d'un partage Windows distant.
Connexion aux partages SMB avec smbclient
Maintenant que notre environnement SMB de test est configuré, connectons-nous au partage en utilisant smbclient.
Lister les partages disponibles
Tout d'abord, listons tous les partages disponibles sur notre machine locale :
smbclient -L localhost -U labex
Lorsque vous y êtes invité, entrez le mot de passe que vous avez défini pour l'utilisateur Samba (par exemple, password) :
Enter WORKGROUP\labex's password:
Vous devriez voir une sortie similaire à celle-ci :
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
Cela montre que notre partage testshare nouvellement créé est disponible.
Connexion au partage
Maintenant, connectons-nous au partage testshare :
smbclient //localhost/testshare -U labex
Entrez le mot de passe lorsque vous y êtes invité :
Enter WORKGROUP\labex's password:
Après une connexion réussie, vous verrez l'invite de smbclient :
Try "help" to get a list of possible commands.
smb: \>
Navigation et liste des fichiers
Maintenant que nous sommes connectés au partage, explorons quelques commandes de base :
Pour lister les fichiers dans le répertoire courant :
smb: \> ls
Vous devriez voir le fichier de test que nous avons créé précédemment :
. 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
Création d'un répertoire distant
Créons un nouveau répertoire sur le partage SMB :
smb: \> mkdir test-directory
Listez à nouveau le contenu pour vérifier que le répertoire a été créé :
smb: \> ls
Vous devriez voir le nouveau répertoire :
. 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
Changement de répertoire
Changeons de répertoire vers celui que nous venons de créer :
smb: \> cd test-directory
Vérifiez que nous sommes dans le nouveau répertoire :
smb: \test-directory\> ls
La sortie devrait afficher un répertoire vide :
. 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
Pour revenir au répertoire parent :
smb: \test-directory\> cd ..
Obtenir de l'aide dans smbclient
Pour voir les commandes disponibles dans smbclient :
smb: \> help
Vous verrez une liste de toutes les commandes 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 .. !
Lorsque vous avez terminé d'explorer, vous pouvez quitter la session smbclient :
smb: \> quit
Dans l'étape suivante, nous apprendrons à transférer des fichiers entre le système Linux et les partages SMB.
Transfert de fichiers avec smbclient
Dans cette dernière étape, nous allons apprendre à transférer des fichiers entre notre système Linux et le partage SMB.
Reconnexion au partage
Connectons-nous à nouveau à notre partage SMB :
smbclient //localhost/testshare -U labex
Entrez le mot de passe lorsque vous y êtes invité :
Enter WORKGROUP\labex's password:
Vous devriez voir l'invite de smbclient :
Try "help" to get a list of possible commands.
smb: \>
Téléversement de fichiers vers le partage
Téléversons le fichier de test que nous avons créé précédemment vers le partage SMB. Tout d'abord, nous devons vérifier notre répertoire local actuel :
smb: \> !pwd
Cela exécute la commande pwd sur votre système local et devrait afficher :
/home/labex/project
Nous devons changer de répertoire vers celui où se trouve notre fichier de test :
smb: \> lcd ~/project/smb-files
Vérifiez que nous sommes dans le bon répertoire :
smb: \> !ls
Vous devriez voir :
test.txt
Maintenant, téléversons le fichier vers le partage SMB :
smb: \> put test.txt
Vous devriez voir un message indiquant que le fichier a été transféré :
putting file test.txt as \test.txt (38.5 kb/s) (average 38.5 kb/s)
Vérifiez que le fichier a été téléversé :
smb: \> ls
Vous devriez voir :
. 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éléchargement de fichiers depuis le partage
Maintenant, téléchargeons un fichier du partage SMB vers notre système local. Tout d'abord, créons un nouveau répertoire pour stocker les fichiers téléchargés :
smb: \> !mkdir -p ~/project/smb-downloads
Changez de répertoire vers celui-ci :
smb: \> lcd ~/project/smb-downloads
Maintenant, téléchargez le fichier :
smb: \> get shared-test.txt
Vous devriez voir un message indiquant que le fichier a été transféré :
getting file \shared-test.txt of size 37 as shared-test.txt (37.0 KiloBytes/sec) (average 37.0 KiloBytes/sec)
Vérifiez que le fichier a été téléchargé :
smb: \> !ls
Vous devriez voir :
shared-test.txt
Utilisation de mget et mput pour plusieurs fichiers
Les commandes mget et mput vous permettent de transférer plusieurs fichiers à la fois. Essayons de créer quelques fichiers supplémentaires sur notre système local :
smb: \> !cd ~/project/smb-files && touch file1.txt file2.txt file3.txt
Maintenant, téléversons tous les fichiers .txt à la fois :
smb: \> lcd ~/project/smb-files
smb: \> mput *.txt
Pour chaque fichier, vous serez invité à confirmer. Tapez Y pour confirmer chaque transfert :
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 vous souhaitez transférer tous les fichiers sans confirmation, vous pouvez désactiver l'invite :
smb: \> prompt
smb: \> mput *.txt
De même, pour télécharger plusieurs fichiers :
smb: \> lcd ~/project/smb-downloads
smb: \> mget *.txt
Lorsque vous avez terminé, quittez la session smbclient :
smb: \> quit
Commandes non interactives
Vous pouvez également utiliser smbclient pour exécuter des commandes sans entrer dans l'interpréteur de commandes interactif. Par exemple, pour lister le contenu d'un partage :
smbclient //localhost/testshare -U labex -c 'ls'
Entrez le mot de passe lorsque vous y êtes invité, et vous verrez la liste des répertoires :
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
Pour télécharger un fichier en une seule commande :
smbclient //localhost/testshare -U labex -c 'get test.txt /home/labex/project/test-download.txt'
Cette commande télécharge le fichier test.txt du partage et l'enregistre sous le nom test-download.txt dans votre répertoire de projet.
Vous avez maintenant une bonne compréhension de la façon d'utiliser smbclient pour vous connecter aux partages SMB, naviguer dans les répertoires et transférer des fichiers. Ces compétences sont essentielles lorsque vous travaillez dans des environnements mixtes Windows/Linux.
Résumé
Dans ce laboratoire, nous avons exploré la commande smbclient sous Linux, qui fournit un outil essentiel pour connecter les systèmes Linux aux partages de fichiers Windows (SMB/CIFS). Nous avons couvert plusieurs aspects clés de l'utilisation de smbclient :
Installation : Nous avons installé le paquet
smbclientsur Ubuntu 22.04, ce qui incluait ses dépendances.Principes de base des commandes : Nous avons appris la syntaxe de base et les commandes disponibles dans
smbclient, y compris comment se connecter aux partages et naviguer à l'intérieur.Configuration d'un environnement de test : Nous avons créé un environnement SMB de test en utilisant un serveur Samba local pour pratiquer nos commandes sans avoir besoin d'accéder à un serveur Windows externe.
Connexion aux partages : Nous nous sommes connectés à notre partage SMB de test et avons exploré les commandes de navigation telles que
ls,cdetmkdir.Transfert de fichiers : Nous avons appris à téléverser des fichiers vers un partage SMB en utilisant
putet à télécharger des fichiers en utilisantget. Nous avons également exploré les transferts de fichiers multiples avecmputetmget.
Les compétences que vous avez acquises dans ce laboratoire sont directement applicables aux scénarios réels où vous devez interagir avec des systèmes ou des serveurs Windows à partir d'environnements Linux. Que vous transfériez des fichiers entre des systèmes, automatisiez des sauvegardes ou intégriez des systèmes Linux dans des réseaux Windows, smbclient fournit une interface en ligne de commande puissante pour ces tâches.
Pour des opérations de fichiers plus complexes ou fréquentes, vous souhaiterez peut-être explorer le montage des partages SMB directement dans votre système de fichiers Linux en utilisant la commande mount avec le type de système de fichiers cifs, qui s'appuie sur les concepts que nous avons appris ici.



