SMB
SMB est un protocole permettant de partager des fichiers et des imprimantes sur un réseau domestique, ou un petit réseau d'entreprise.
Le partage de dossiers et d'imprimantes dans un réseau local est une fonctionnalité des systèmes d'exploitation modernes permettant d'accéder à des ressources d'un ordinateur (dossiers de données et imprimantes) à partir d'un autre ordinateur situé dans un même réseau local (réseau domestique ou d'entreprise).
Dans l'ensemble des articles concernant les réseaux, retenez ces quelques notions :
- Le Groupe désigne un ensemble de machines ayant des affinités communes (exemple : le nom de famille, de l'entreprise ou d'un service), auxquelles l'accès sera plus direct.
- Sous Windows™, il s'agit du Groupe de travail et cette information se trouve dans les Propriétés de l'ordinateur.
- Sous Ubuntu, cette information est le paramètre
workgroup
du fichier de configuration Samba.
- L'Ordinateur désigne une machine, identifiée par son nom et sa description (exemple : le modèle et l'emplacement de la machine).
- Sous Windows™, il s'agit du Nom de l'ordinateur et de sa Description, et ces informations se trouvent dans les Propriétés de l'ordinateur.
- Sous Ubuntu, le Nom de l'ordinateur est un paramètre réseau global, alors que la Description se trouve dans le paramètre server string du fichier de configuration Samba.
- Les Utilisateurs ont accès à des Répertoires (contenant des fichiers) ou des Ressources (imprimantes, lecteur de CD-Rom).
- La casse doit impérativement être respectée en ce qui concerne le nom de domaine. Par exemple "WORKGROUP" ne sera pas considéré de la même manière que "workgroup".
- Le nom de la machine ne doit pas dépasser 16 caractères pour être visible quand on parcourt le réseau, le nom de la machine (serveur) qui partage un dossier ne doit pas dépasser 15 caractères (et ne peut contenir que des lettres non accentuées, chiffres et signes -).
Sinon elle sera accessible uniquement par son adresse IP (et donc invisible autrement).
Pour le nom de la machine cf. hosts
Sans ce nommage, on pourra rencontrer des problèmes du type :
Your hostname could not be resolved , pour plus d'infos, cf. aussi dns.
les clients SMB (SMBClient, GNOME Fichiers, rclone, fuseSMB, etc.), et les accès aux partages SMB en général.
Accéder à des ressources dans un réseau local
Cette partie décrit la manière d'accéder à des dossiers partagés entre différents ordinateurs, cela suppose qu'il y ait déjà des dossiers partagés sur d'autres PC. Pour partager des ressources rendez-vous directement à cette partie de la page.
D'Ubuntu vers un dossier partagé sur un autre Ubuntu
Depuis votre navigateur de fichier cliquez sur Réseau dans le panneau latéral gauche. Sous Lubuntu allez dans le menu Allez à…→Network.
Les ordinateurs de votre groupe de travail sont listés dans cette interface. Sélectionnez l'ordinateur distant de votre groupe de travail pour accéder à ses dossiers partagés. Vous voyez les dossiers partagés par cet ordinateur.
Accéder à un dossier partagé sous Windows depuis un poste Ubuntu
La procédure est la même que dans le point plus haut.
Pour scanner les partages samba sur le réseau local vous pouvez utiliser la commande smbtree
:
smbtree -N
Néanmoins l'explorateur de réseau peut ne pas afficher les postes Windows avec les versions récentes d'Ubuntu (>18.04). L'accès reste possible (vérifié avec Windows 7) avec la méthode manuelle décrite plus bas en 4 mais avec une subtilité !
Ouvrez Nautilus (Fichiers) et sélectionnez '+ Autres emplacements' dans le bas du bandeau à gauche. Dans la fenêtre, apparaît alors en bas une zone 'Connexion à un serveur'. Saisissez l'adresse
smb://Adresse IP poste Windows/NomPartageDossierWindows/
La subtilité est là : si vous ne mettez que l'adresse IP du poste Windows, vous n'avez qu'un message d'erreur au lieu de la liste des dossiers partagés. Il faut donc bien ajouter le nom de partage du dossier que vous avez défini dans Windows.
Ensuite, il peut vous être demandé le nom d'utilisateur et le mot de passe de votre session Windows pour accéder au contenu.
Pour rappel, pour connaître l'adresse IP d'un poste Windows, tapez cmd dans la zone de recherche de Windows puis tapez :
ipconfig /all
dans la fenêtre de commande. Une adresse IP fixe est toujours plus pratique pour ce type de procédure.
Si vous n'arrivez pas à accéder à un partage Windows 7 sous Ubuntu, même en saisissant correctement vos informations d'identification du poste distant ceci est apparemment dû à une incompatibilité entre les modes de partage de Windows 7 et ceux des précédentes versions de Windows (sur lesquels se base Samba). Pour corriger la situation, vous devez modifier certains paramètres concernant la gestion des partages par Windows 7.
- Dans votre ordinateur fonctionnant sous Windows 7, ouvrez une session à l'aide d'un compte d'administrateur;
- Ouvrez l'éditeur de base de registre. Appuyez sur le bouton Démarrer, puis dans le champ Rechercher les programmes ou fichiers, inscrivez regedit et appuyez sur la touche [Entrée] de votre clavier;
- Développez l'arborescence jusqu'à la clé de registre
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\
puis:- Modifiez la valeur de la clé
everyoneincludesanonymous
de 0 vers 1; - Modifiez la valeur de la clé
NoLmHash
de 1 vers 0;
- Développez l'arborescence jusqu'à la clé de registre
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanServer\Parameters
, puis:- Modifiez la valeur de la clé
restrictnullsessaccess
de 1 vers 0;
- Redémarrez votre ordinateur.
Partages protégés par mot de passe
Accéder à un ordinateur membre d'un groupe de travail différent
Les partages SMB et CIFS sont dans la sous-catégorie Réseau Windows
Pour accéder à des ordinateurs d'autres groupes de travail de votre réseau local, allez dans ce dossier Réseau Windows. Les groupes de travail de votre réseau local s'affichent (par défaut seulement WORKGROUP) ; sélectionnez le groupe de travail dans lequel se trouve l'ordinateur auquel vous désirez accéder. Sélectionnez ensuite l'ordinateur distant pour lequel vous souhaitez accéder à ses ressources. Vous voyez les dossiers partagés par cet ordinateur.
Accéder manuellement à un dossier partagé
Il est parfois possible qu'un ordinateur distant n'apparaisse pas dans la liste des ordinateurs proposant des ressources partagées. Dans ces cas-là, vous pouvez saisir manuellement les informations de connexion pour accéder au partage distant.
- Ouvrir Nautilus, dans Fichier→Se Connecter à un serveur… ou directement par le raccourcis dans le panneau latéral gauche,
- Dans le champ Adresse du serveur, après avoir entré smb:.. ajoutez l'adresse IP de l'ordinateur du réseau local ou son nom d'ordinateur dans le réseau local ;
- Appuyez sur le bouton Se connecter pour afficher les dossiers partagés.
Voir les miniatures sur les partages samba dans nautilus
Ouvrir nautilus et aller dans le menu Éditions → Préférences → Aperçu. Puis indiquez l'option Toujours pour Afficher les vignettes (par défaut : "Uniquement les fichiers locaux"). Vous pouvez faire de même pour les Dossiers.
Penser au Pare-feu
En cas de problème de connexion, si par exemple, en essayant de parcourir votre réseau, vous obtenez ce message d'erreur: "L'obtention de la liste des partages du serveur a échoué" , regardez la configuration du pare-feu de chaque machine. Vous pouvez consulter ses logs ou le désactiver temporairement, pour vérifier si le problème vient bien de là, avant de le paramétrer par exemple à l'aide d'ufw. Les ports à ouvrir sont indiqués dans le paragraphe Ports liés au partage de fichiers par les protocoles SMB et CIFS.
Si l'erreur "L'obtention de la liste des partages du serveur a échoué" persiste, c'est qu'il n'y a pas de serveur WINS sur votre réseau. Pour activer cette fonction de Samba, Ouvrez le fichier /etc/samba/smb.conf en remplaçant:
wins support = no
par:
wins support = yes
puis redémarrez Samba
sudo systemctl restart smbd
Aller plus loin...
Monter manuellement ou automatiquement un dossier partagé dans le système de fichiers
Il est possible de monter un dossier partagé dans un point de montage de l'arborescence d'un système Ubuntu, tout comme il est possible de le faire avec une partition de disque dur. Ceci est intéressant, par exemple, pour partager des ressources entre plusieurs postes dans une grande entreprise ou pour accéder de manière transparente à un serveur de stockage réseau (Network Attached Storage, ou NAS).
Les tâches suivantes doivent être exécutées par un administrateur. Assurez-vous que le paquet smbfs (ou cifs-utils depuis 12.10) est installé. De plus, assurez-vous de disposer d'un point de montage valide (un répertoire vide dans lequel devra être monté le dossier partagé).
Pour les exemples suivants, nous établirons que :
- le PC distant ou le NAS se nomme MACHINEDISTANTE ;
- le dossier partagé par l'ordinateur distant est Multimedia ;
- le point de montage dans l'ordinateur local est /media/MédiasPartagés/.
Montage manuel
Si aucune authentification n'est requise pour accéder au dossier partagé ou si vous ne possédez pas d'identifiant dans le poste distant :
sudo mount.cifs //MACHINEDISTANTE/Multimedia /media/MédiasPartagés -o guest
La connexion peut vous être refusée si l'authentification est nécessaire, ou certaines actions peuvent ne pas être disponibles pour vous en tant qu'invité.
Si une authentification dans le poste distant est requise pour accéder au dossier partagé ou pour débloquer certaines actions autorisées pour votre compte dans le poste distant :
sudo mount -t cifs //MACHINEDISTANTE/Multimedia /media/MédiasPartagés -o guest,rw,nosetuids,sec=ntlmv2
Montage automatique
Modifiez, avec les droits d'administration le fichier /etc/fstab/ afin d'ajouter une nouvelle règle de montage. Si aucune authentification n'est requise pour accéder au dossier partagé ou si vous ne possédez pas d'identifiant dans le poste distant, inscrivez la règle suivante, sur une seule ligne :
//MACHINEDISTANTE/Multimedia /media/MédiasPartagés cifs _netdev,guest 0 0
Le montage peut vous être refusé si l'authentification est nécessaire, ou certaines actions peuvent ne pas être disponibles pour vous en tant qu'invité.
Si une authentification dans le poste distant est requise pour accéder au dossier partagé ou pour débloquer certaines actions autorisées pour votre compte dans le poste distant, inscrivez la règle suivante, sur une seule ligne :
//MACHINEDISTANTE/Multimedia /media/MédiasPartagés cifs _netdev,credentials=/root/.smbcredentials 0 0
De plus, créez un fichier /root/.smbcredentials contenant le texte suivant – et uniquement ce texte-là :
username=IDENTIFIANT password=MOTDEPASSE
Remplacez IDENTIFIANT par votre identifiant dans le poste distant et MOTDEPASSE par le mot de passe de votre compte dans le poste distant. Il peut être nécessaire de mettre comme identifiant IDENTIFIANT@WORKGROUP. Des guillemets peuvent être utilisées.
Un redémarrage de l'ordinateur est nécessaire pour que le dossier partagé soit monté automatiquement dans le point de montage sélectionné.
(L'option de montage _netdev
indique au système d'attendre que la liaison au réseau local soit établie avant de tenter le montage de ce dossier partagé.) Cependant la commande "sudo mount -a" monte automatiquement tous les systèmes de fichiers énumérés dans /etc/fstab immédiatement.
Dans le cas où le nom de partage contient des espaces on remplace les espaces par \040. Exemple avec un nom de partage Dossier Multimedia :
//MACHINEDISTANTE/Dossier\040Multimedia /media/MédiasPartagés cifs _netdev,credentials=/root/.smbcredentials 0 0
Ports liés au partage de fichiers par les protocoles SMB et CIFS
Si vos postes clients et serveurs ont de la difficulté à communiquer entre eux, il est possible qu'une des causes soit qu'un logiciel de pare-feu soit installé dans l'un ou l'autre des ordinateurs et que celui-ci bloque les communications entrantes ou sortantes utilisés par Samba. Si tel est votre cas, assurez-vous que votre pare-feu laisse passer les communications sur ces ports ; à ce sujet, reportez-vous au manuel d'administration de votre logiciel de pare-feu.
Voici la liste des ports TCP et UDP utilisés par les protocoles SMB et CIFS pour le partage de fichiers et d'imprimantes.
Port | Protocole | Nom du service |
---|---|---|
135 | TCP et UDP | Localisateur de services RPC |
137 | TCP et UDP | NetBIOS Name Service (nbname) |
138 | UDP | NetBIOS Datagram Service (nbdatagram) |
139 | TCP | NetBIOS Session Service (nbsession) |
445 | TCP et UDP | Services de dossiers partagés Windows |
Par défaut, le service de pare-feu UFW est installé et actif dans Ubuntu. à moins d'utiliser un autre logiciel de pare-feu ou d'avoir complètement désactivé UFW, vous devez mettre à jour également la section suivante dans le fichier
/etc/default/ufw
: # extra connection tracking modules to load \\ # ajout de nf_conntrack_netbios_ns pour Samba \\ IPT_MODULES="nf_conntrack_ftp nf_nat_ftp nf_conntrack_irc nf_nat_irc nf_conntrack_netbios_ns"
Problèmes connus
Impossible de se connecter à un partage réseau via gestionnaire de fichier Ubuntu
Ce problème peut avoir de nombreuses causes. Une raison courante est l'utilisation, par la machine qui partage, si elle est ancienne, d'un protocole obsolète et dangereux : SMBv1.
Dans tous les cas, des outils en ligne de commande tels que smbclient
et avahi-browse
peuvent aider à y voir plus clair :
SMB version 1
Le vieux protocole SMBv1 est désormais désactivé par défaut sur tous les systèmes, seuls SMBv2 et SMBv3 sont utilisables. Certaines box non mises à jour par les fournisseurs d'accès, et les PC encore sous Windows XP, ne supportent que SMBv1. Le système de certains NAS doit aussi être mis à jour.
Il présente d'importantes failles de sécurité connues, ce qui le rend obsolète et extrêmement dangereux.1) Il est entre autre le vecteur de diffusion de WannaCry, le plus grand ransomware de l'histoire.2)
Il est donc impératif d'ignorer les instructions et tutoriels malavisés dangereusement répandus sur le Web, consistant à rétablir son utilisation (avec min protocol = NT1
) ! Essayez plutôt autant que possible de mettre à jour vos appareils, afin d'utiliser des versions plus récentes du protocole SMB, ou d'autres protocoles.
SMBClient
L'application en ligne de commande smblient peut permettre de tracer l'origine d'un problème de connexion, en suivant la procédure qui suit :
- s'assurer que le paquets suivant est installé : smbclient .
- vous pouvez dès lors ouvrir un terminal et tester la connexion en ligne de commande, en cas de problème des messages d'erreur parlants devraient être affichés :
smbclient -L //serveur -U utilisateur%mot_de_passe
où :
utilisateur
est à remplacer par le nom d'utilisateur SMB (pas Linux), tel que déclaré sur la machine distante (le serveur SMB)mot_de_passe
est à remplacer par le mot de passe associé à cet utilisateur (ou rien si il n'y a pas de mot de passe).
exemple :
smbclient -L //freebox_server -U freebox%
L'option -L
permet de lister les partages proposés par ce serveur.
→ Si tout va bien on peut ensuite se connecter à un partage en particulier avec la commande :
smbclient //serveur/partage -U utilisateur%mot_de_passe
- où
partage
est le nom du partage auquel on souhaite accéder.
Cette commande permet de se connecter et de parcourir le disque dur comme avec un shell similaire à bash (ls
pour lister les ressources, cd
pour naviguer dans les répertoires, help
pour la liste des commandes, etc. et q
pour quitter).
→ Si au contraire vous obtenez un message d'erreur que vous ne comprenez pas, n'hésitez pas à demander de l'aide sur le forum !
ZeroConf
En plus de cette application, vous pouvez aussi utiliser la commande :
avahi-browse -avr
pour lister les services diffusés sur votre réseau.
Pour plus d'information à ce sujet, voir la page concernant ZeroConf.
Exemple pratique de A à Z pour version Ubuntu 20.04 ou 22.04
Trouver l'adresse IP des ordinateurs
Sous ubuntu
- Cliquer tout en haut à droite sur le triangle équilatéral afin d'ouvrir une boite de dialogue.
- Cliquer sur Paramètres filaires.
- Cliquer sur l'engrenage situé à l'extrême droite de la description filaire. Une grille s'ouvre.
- Relever l'adresse IPv4. Elle sera certainement semblable à 192.168.0.n.
Ou utiliser la commande
hostname -I
En profiter pour vérifier que l'autre ordinateur est accessible. C'est en ligne de commande en remplaçant X par la bonne valeur:
ping -c4 192.168.0.x
Accéder au dossier de l'autre ordinateur
- Ouvrir l'application Fichiers.
- Cliquer sur + Autres emplacements.
- Mettre l'adresse du serveur à accéder dans la dernière ligne dans la zone Saisir l'adresse du serveur. La codification est semblable à smb://192.168.0.x
- Cliquer sur Se connecter.
- Double-Cliquer sur le dossier partagé souhaité (Le suffixe ajouté est un plus pour bien identifier).
- Cliquer sur Se connecter si la case Accès invité avait été cochée sinon:
- Cocher la case utilisateur enregistré.
- Remplir la case Nom d'utilisateur en mettant le nom distant.
- Remplir la case Mot de passe en mettant le mot de passe de l'utilisateur distant.
- Éventuellement, cocher la case Se souvenir pour toujours.
- Revenir cliquer sur Se connecter.
Il peut arriver que la connexion ne soit pas immédiatement réussie. Une seconde tentative est à faire. Voir même une troisième si les messages d'erreurs évoluent.
L'adresse de connexion est mémorisée et peut donc être retrouvée pour les connexions suivantes.
Monter automatiquement les dossiers au démarrage de ubuntu
- Installer le logiciel de montage avec cette commande
sudo apt install cifs-utils
- Ajouter une ligne de commande par dossier à monter automatiquement.
- Exemple de ligne pour un dossier dans une partition EXT4
//192.168.0.n/Utilisateur1-Partage /media/Utilisateur1-externe cifs uid=1000,password=Inutile
- Exemple de ligne pour un dossier dans une partition NTFS
//192.168.0.n/Donnees-Partage /media/Donnees-externe cifs credentials=/root/MPD1,uid=1000,gid=46
- La création du fichier décrivant un utilisateur windows peut se faire par ces commandes
echo username=XXXXXXXX | sudo tee /root/MDP1 echo password=ZZZZZZZZ | sudo tee -a /root/MDP1 echo domaine=WORKGROUP | sudo tee -a /root/MDP1 sudo chmod 700 /root/MDP1
Le mot de passe d'un utilisateur windows est celui défini à sa création. A ne pas confondre avec son code confidentiel qu'il utilise maintenant depuis pas mal de temps.
Le mot de passe de l'utilisateur ubuntu n'est pas contrôlé. Si on l'omet, la commande "Mount -av" le demande inutilement. On peut donc actuellement mettre n'importe quoi.
Les points de montage sous /media sont à créer avant d'effectuer le montage.
Les noms des répertoires distants sont ceux définis au moment du partage. Ils peuvent dont être différant du vrai nom du répertoire partagé.
Le montage en utilisant le nom de l'ordinateur distant semble ne pas fonctionner.