• 12 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 15/12/2020

Partagez vos fichiers sur un réseau hétérogène avec Samba

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Historiquement, les systèmes Windows utilisent leur propre protocole de partage de fichiers : SMB/CIFS. Le logiciel Samba a été développé pour permettre aux systèmes UNIX (dont Linux et Mac OS X) d’utiliser également ce protocole. Comme il est souvent plus facile d’utiliser Samba sous UNIX que de configurer NFS sous Windows, il est courant de préférer l’utilisation de Samba dans des environnements comportant des clients Windows.

Pour que vous saisissiez les zones d’intervention possibles de Samba, vous devez vous pencher un peu sur les spécificités de Windows. Dans le monde Windows, vous trouvez deux types de réseaux :

  • des groupes de travail (workgroup) qui sont des réseaux d’ordinateurs sans gestion centralisée. Pour se connecter d’un ordinateur à l’autre du réseau, il faut que tous les comptes utilisateurs existent sur tous les ordinateurs du réseau avec les mêmes identifiants. Pour un petit réseau, c’est très bien parce qu’il n’y a pas de serveur central à gérer mais dès que le nombre d’utilisateurs et de machines augmente, ça devient vite compliqué à gérer.

  • des domaines de type NT4 ou Active Directory (AD). Les domaines, peu importe leur type, sont des réseaux d’ordinateurs gérés par une autorité d’authentification centrale appelée contrôleur de domaine. Sur de gros réseaux, c’est bien pratique de gérer tous les comptes utilisateurs sur un seul serveur :).

Samba peut jouer le rôle d’un contrôleur de domaine NT4 ou AD mais dans ce chapitre, vous allez simplement monter un serveur de partage de fichiers pour un groupe de travail. Le partage ressemblera un peu à ce que vous avez mis en place avec NFS :

  • un répertoire commun, sans authentification ouvert à tous les utilisateurs du réseau

  • un répertoire personnel à chaque utilisateur avec authentification

Commençons par configurer le serveur.

Configurez le serveur

Avant tout chose, vous devez installer le serveur samba par la commande :

$ sudo apt-get install samba

Puis, pour configurer votre partage samba, il vous faudra éditer le fichier  /etc/samba/smb.conf  . Dans ce fichier, toutes les lignes commençant par  ;  ou  #  sont des commentaires.

Le fichier comporte des sections : la configuration globale commence par  [global]  puis ensuite la configuration de chaque partage est aussi définie dans une section dont le nom est entre crochets  []  . Je vais vous expliquer quelques uns des paramètres de ce fichier. Pour plus d’informations, consultez la page de manuel de  smb.conf  :

[global]
workgroup = WORKGROUP

Le premier paramètre de la section globale est le groupe de travail. Par défaut sous Windows, il est à WORKGROUP donc si vos clients Windows ne l’ont pas changé, vous pouvez laisser le nom par défaut.

interfaces = 127.0.0.0/8 enp0s8
bind interfaces only = yes

Par défaut, samba écoute, c’est-à-dire qu’il accepte les connexions, sur toutes les interfaces. Samba est un système de partage de fichiers pour réseau local donc je vous conseille de le configurer pour qu’il n’écoute que sur votre interface locale. Vous pouvez configurer l’interface par son adresse ou par son nom.

server role = standalone server
map to guest = bad use

Ici, vous configurez votre serveur Samba comme un serveur indépendant (standalone server) plutôt que comme un contrôleur de domaine. Le deuxième paramètre définit qu’un échec d’authentification pour un utilisateur inconnu connectera l’utilisateur avec le compte invité. vous pourrez ensuite définir pour chaque partage si vous autorisez les comptes invités ou non.

# Commenter les sections [printers] et [print$]

Un serveur Samba peut faire office de serveur d’impression pour votre réseau. Si vous n’avez pas d’imprimante connectée à votre serveur, commentez les sections  [printers]  et   [print$]  en mettant un  ;  au début de chaque ligne pour les transformez en commentaires, non lus par le programme lors de son fonctionnement.

[home]
path = /export/home/%u
read only = no
guest ok = no
force create mode = 0660
force directory mode = 2770
valid users = @sambashare

[shared]
path = /export/shared
read only = no
guest ok = yes
force create mode = 0660
force directory mode = 2770
force user = nobody
force group = nogroup

En fin de fichier, rajoutez la configuration de vos deux partages. Pour chaque partage, il faut indiquer son nom entre crochets et les paramètres du partage sur les lignes suivantes. Voici le détail des paramètres utilisés ici :

path

indique le chemin du répertoire partagé. Dans toutes les sections du fichier de configuration, il est possible d’utiliser certaines variables. Ici, vous utilisez  %u  qui sera automatiquement remplacé dans le chemin par le nom de l’utilisateur. C’est très pratique car sans ça, il aurait fallu créer un partage pour chaque utilisateur.

read only

un  no  indique que le partage sera en lecture-écriture, un  yes  indique que le partage sera en lecture seule. Il est possible de configurer un partage en lecture seule et ensuite de configurer des exceptions pour certains utilisateurs en ajoutant ensuite le paramètre  write list = user1 user2  .

guest ok

indique si les comptes invités sont autorisés à accéder au partage

force create mode  et  force directory mode

indiquent les droits donnés respectivement aux nouveaux fichiers et répertoires créés sur le partage

valid users

indique les noms des utilisateurs autorisés à accéder au partage. Vous pouvez également indiquer des noms de groupes qui commencent par  @  . Sur Ubuntu, le groupe  sambashare  est créé automatiquement à l’installation de samba. Ici seuls les utilisateurs appartenant à ce groupe pourront accéder au partage  [home]

force user  et  force group

indiquent l’utilisateur et le groupe système auquel sera associé l’utilisateur distant qui se connecte. Comme pour le partage NFS, ici tous les utilisateurs qui accèdent à  /export/shared  seront reconnus comme  nobody:nogroup  .

Voilà, enregistrez votre fichier de configuration et pour prendre en compte les changements, redémarrez le serveur par la commande :

$ sudo systemctl restart smbd

Si votre utilisateur système (pour moi c’est etienne) ne fait pas parti du groupe sambashare, ajoutez le par la commande :

$ sudo usermod -aG sambashare etienne

Les comptes système utilisés pour accéder aux partages doivent ensuite être enregistrés dans la base d’utilisateurs de Samba. Ajoutez votre utilisateur système et pensez aussi à l’utilisateur  nobody  qu’on utilise pour le partage  [shared]  . Un mot de passe vous est demandé, remplissez le même mot de passe que celui du compte système (laissez vide pour nobody) :

$ sudo pdbedit -a etienne
$ sudo pdbedit -a nobod

Si vous vouliez créer un nouvel utilisateur sambatest avec son propre partage  [home]  , vous pourriez le faire comme ceci :

$ sudo useradd -M -s /bin/false -g sambashare sambatest #Création d’un compte système sans répertoire home et sans shell de connexion
$ sudo pdbedit -a sambatest #Ajout de sambatest à la base Samba
$ cd /export/home
$ sudo mkdir sambatest #Création du répertoire de partage [home]
$ sudo chown sambatest sambatest #On donne les droits au répertoire pour sambates

Voici également quelques commandes utiles :

$ sudo pdbedit -L #Liste des utilisateurs de la base Samba
$ sudo pdbedit -x -u sambatest #Suppression de sambatest de la base Samb

Vos partages sont prêts, il est temps de les utiliser sur votre client.

Configurez le client

Sur votre client, commencez par installer les paquets nécessaires à l’utilisation de Samba :

$ sudo apt-get install smbclient cifs-utils

Ensuite, vous allez pouvoir tester deux moyens d’accéder à vos partages :

  • par l’utilisation du client en lignes de commandes smbclient

  • en montant les partages réseaux

Pour accéder au répertoire de l’utilisateur etienne, tapez la commande suivante :

$ smbclient -U etienne //vm-serveur/home

après avoir entré votre mot de passe, vous êtes connecté dans une console interactive. Vous pouvez voir la liste des commandes en tapant  help  . Ensuite pour avoir des informations sur une commande tapez  help la_commande  . Par exemple, pour savoir à quoi sert la commande  get  et comment l’utiliser, tapez  help get.

Pour accéder au répertoire partagé, vous pouvez simplement taper :

$ smbclient //vm-serveur/shared

Laissez le mot de passe vide et vous serez connecté au partage  [shared]  en tant qu’invité.

Vous pouvez vous amuser à créer des fichiers ou des répertoires pour vérifier les droits des fichiers créés.

Pour monter les répertoires partagés, créez les points de montage sur votre client

$ sudo mkdir -p /mnt/samba/home
$ sudo mkdir -p /mnt/samba/share

et montez les partages par les commandes :

$ sudo mount -t cifs -o rw,guest //vm-serveur/shared /mnt/samba/shared
$ sudo mount -t cifs -o rw,user=etienne,uid=etienne,gid=etienne //vm-serveur/home /mnt/samba/hom

Ici le type de système de fichier à choisir est  cifs  qui est le nom du protocole utilisé par Samba. Pour les options :

rw

indique de monter le partage en lecture-écriture

guest

indique de se connecter en utilisateur invité et de ne pas demander de mot de passe

user

précise le login de connexion au partage

uid  et  gid

précisent les UID et GID à donner aux répertoires et fichiers qui sont montés puisqu’il n’y a pas de lien entre les utilisateurs du serveur et ceux du client. Vous pouvez utiliser des noms ou des valeurs numériques. Par défaut, les fichiers montés appartiennent à  root:root

Pour automatiser ce montage au démarrage de la machine, vous pouvez rajouter les lignes suivantes dans votre fichier /etc/fstab :

//vm-serveur/shared /mnt/samba/shared cifs rw,guest,_netdev 0 0
//vm-serveur/home /mnt/samba/home cifs rw,uid=etienne,gid=etienne,credentials=/root/.smbcredentials,_netdev 0 

Pour fournir les identifiants automatiquement vous utiliserez l’option  credentials  qui indique d’aller les chercher dans le fichier  /root/.smbcredentials  . Créez donc ce fichier avec le contenu suivant :

username=IDENTIFIANT
password=MOTDEPASS

Vous remplacerez évidemment   IDENTIFIANT  et  MOTDEPASSE  par vos identifiants et vous donnerez des droits minimum à ce fichier pour que personne ne puisse accéder à ces informations sensibles :

$ sudo chmod 600 /root/.smbcredentials

Bravo, vous avez monté votre premier serveur ! Vous permettez aux utilisateurs de votre réseau local de stocker leurs fichiers en réseau par NFS ou par Samba sur des partitions sécurisées par du RAID 1.

En résumé

  • Samba permet aux systèmes Unix d’utiliser le protocole de partage de fichiers SMB/CIFS développé par Microsoft

  • La configuration du serveur se fait dans le fichier  /etc/samba/smb.conf

  • Les utilisateurs Unix du serveur n’ont pas besoin d’être les mêmes que ceux des clients

  • L’accès aux partages se fait par login/mot de passe ou par l’utilisation d’un compte invité

Exemple de certificat de réussite
Exemple de certificat de réussite