Le serveur Samba
1. Introduction à Samba
1.1 Qu'est-ce que Samba ?
Samba est un ensemble de programmes libres (sous licence GPL) qui implémente le protocole SMB/CIFS (Server Message Block/Common Internet File System).
Ces protocoles sont historiquement utilisés par les systèmes Microsoft Windows pour le partage de fichiers et d'imprimantes en réseau.
Samba permet donc à un serveur Linux/Unix de :
- Partager des répertoires et des imprimantes avec des machines Windows, macOS et d'autres systèmes Linux.
- Participer à un réseau de type Windows (workgroup, domaine NT4, ou encore Active Directory).
- Offrir des fonctionnalités avancées d'authentification et de gestion des permissions, similaires à celles des serveurs Windows.
1.2 Contexte et historique
- Création : Le projet Samba a été initié au début des années 1990 par Andrew Tridgell.
Il cherchait à comprendre le protocole SMB utilisé par les machines Windows.
- Évolution : Au fil des ans, Samba a évolué pour supporter les différentes versions du protocole SMB (SMB1, SMB2, SMB3) et inclure des fonctionnalités de plus en plus riches, jusqu'à devenir un composant clé de l'intégration Linux/Windows.
- Objectif principal : Garantir l'interopérabilité entre les environnements hétérogènes, que ce soit pour de simples partages de fichiers/imprimantes ou pour mettre en place des contrôleurs de domaine complets (AD/DC).
1.3 Avantages de Samba
- Interopérabilité : Permet de connecter des clients Windows, macOS et Linux à des partages de fichiers ou d'imprimantes hébergés sur un serveur Linux.
- Coût : Samba est open source et gratuit, ce qui peut représenter une économie substantielle comparé à des solutions propriétaires.
- Personnalisation : Configuration flexible, permettant de s'adapter à des environnements variés (TPE, PME, grands groupes).
- Sécurité : Prise en charge des mécanismes d'authentification modernes (Kerberos, LDAP) et du chiffrement SMB (SMB3).
2. Architecture et composants de Samba
Samba se compose de plusieurs démons (services) et outils en ligne de commande :
- smbd :
- C'est le service principal qui gère les connexions SMB/CIFS, le partage de fichiers et d'imprimantes, ainsi que l'authentification des utilisateurs.
- nmbd :
- Gère la résolution de noms NetBIOS et la fonction de « Master Browser » (utile dans les réseaux Windows traditionnels sans DNS ou AD).
- winbindd :
- Permet l'intégration à des domaines Windows (NT4 ou AD). Il assure la résolution des SID (Security Identifiers) Windows en identifiants Unix, et inversement.
- samba (dans un rôle AD/DC) :
- Regroupe les fonctionnalités nécessaires pour agir en tant que contrôleur de domaine Active Directory.
- Outils administratifs :
- smbpasswd, testparm, smbclient, smbstatus, samba-tool, etc.
3. Installation et configuration de base
3.1 Installation
Debian/Ubuntu
sudo apt update
sudo apt install samba
Les fichiers de configuration se situent généralement dans /etc/samba/.
CentOS/RHEL/Fedora
ou
La configuration par défaut est placée dans /etc/samba/smb.conf.
3.2 Configuration de base
Le fichier smb.conf est le fichier de configuration principal de Samba. Il se compose généralement de deux grandes sections :
- Global : Contient les paramètres généraux (nom du workgroup, mode d'authentification, etc.).
- Partages : Définit les répertoires ou imprimantes à partager.
Exemple minimal :
[global]
workgroup = WORKGROUP
server string = Serveur Samba
security = user
map to guest = Bad User
[partage]
path = /srv/partage
browseable = yes
read only = no
guest ok = yes
3.3 Démarrage des services
Après toute modification du fichier de configuration, il est conseillé de tester la validité de la configuration, puis de redémarrer les services Samba :
sudo testparm
sudo systemctl restart smbd
sudo systemctl restart nmbd
4. Concepts clés
4.1 Partages de fichiers
- Partage classique : Définir un répertoire sur le serveur auquel des clients peuvent se connecter via l'explorateur Windows ou un client SMB sous Linux/macOS.
- Permissions d'accès : Gérées à la fois par les permissions Unix (ou ACL) sur le système de fichiers et par Samba (via la configuration du partage).
4.2 Authentification et comptes Samba
- Utilisateurs Unix vs Utilisateurs Samba :
Pour qu'un utilisateur se connecte à un partage Samba, il faut :
- Qu'il existe en tant qu'utilisateur Unix (ex. : via /etc/passwd ou via un répertoire centralisé comme LDAP).
- Qu'il possède un mot de passe Samba (stocké dans /var/lib/samba/private/, géré avec smbpasswd -a utilisateur).
- Modes d'authentification :
- security = user : Mode le plus courant, chaque utilisateur s'authentifie sur le serveur Samba.
- security = domain : Le serveur Samba est membre d'un domaine NT4 ou AD.
- security = ads : Le serveur Samba rejoint un domaine Active Directory (utilise Kerberos et LDAP).
4.3 Protocoles SMB (SMB1, SMB2, SMB3)
- SMB1 : Ancien protocole (CIFS), moins sécurisé, souvent désactivé par défaut dans les systèmes récents pour des raisons de sécurité.
- SMB2 / SMB3 : Améliorations de performance et de sécurité (signature, chiffrement). À privilégier.
5. Configuration avancée
5.1 Exemple de configuration d'un partage simple
[monpartage]
path = /srv/monpartage
browseable = yes
read only = no
valid users = utilisateur
- path : Chemin physique du partage sur le serveur.
- browseable = yes : Le partage sera visible dans l'explorateur réseau.
- read only = no : Autorise l'écriture.
- valid users = utilisateur : Seul l'utilisateur « utilisateur » (qui doit exister localement ou dans une base de comptes centralisée) peut se connecter.
5.2 Configuration d'un partage public
[public]
path = /srv/public
browseable = yes
read only = no
guest ok = yes
- guest ok = yes : Autorise l'accès anonyme (sans mot de passe).
Attention : il convient de restreindre ce type de partage pour des raisons de sécurité (par exemple en lecture seule).
5.3 Contrôle fin des permissions
- create mask et directory mask :
Définissent les permissions Unix par défaut sur les fichiers et répertoires créés via Samba.
Exemple :
create mask = 0660
directory mask = 0770
Ici, l'utilisateur et le groupe peuvent lire/écrire, et aucune permission pour « others ».
force user et force group :
Permettent de forcer tous les fichiers créés via ce partage à appartenir à un utilisateur ou groupe spécifique.
Exemple :
force user = partage_user
force group = partage_group
5.4 Chiffrement du partage (SMB3)
Depuis la version 4.0 de Samba, il est possible d'activer le chiffrement SMB3 :
[secure]
path = /srv/secure
browseable = yes
read only = no
smb encrypt = required
- smb encrypt = required : Le client doit supporter le chiffrement (SMB3).
- Il est possible de mettre smb encrypt = desired pour autoriser à la fois les clients supportant le chiffrement et ceux qui ne le supportent pas.
6. Gestion des utilisateurs et des groupes
6.1 Création d'utilisateurs Samba
Créer l'utilisateur au niveau du système (s'il n'existe pas) :
Ajouter l'utilisateur à la base Samba :
sudo smbpasswd -a utilisateur
Le mot de passe spécifié ici sera celui utilisé pour l'accès SMB.
6.2 Modification ou suppression d'un utilisateur Samba
- Changer le mot de passe :
sudo smbpasswd utilisateur
- Supprimer l'utilisateur de la base Samba :
sudo smbpasswd -x utilisateur
6.3 Groupes Samba
- Samba peut se baser sur la configuration des groupes Unix.
- L'utilisation conjointe de valid users = @groupe peut permettre de gérer les autorisations par groupe.
Exemple :
[groupe_partage]
path = /srv/groupe_partage
valid users = @mon_groupe
read only = no
7. Maintenance et dépannage
7.1 Vérification de la configuration
Utilisez testparm pour valider votre fichier smb.conf :
S'il y a une erreur de syntaxe, l'outil la signalera.
7.2 Journaux (logs)
- Les journaux Samba se trouvent généralement dans /var/log/samba/.
- Plusieurs fichiers peuvent exister (ex. : log.smbd, log.nmbd, log.winbindd, ou encore des logs spécifiques par machine cliente).
7.3 Redémarrer Samba
Sur la plupart des distributions modernes utilisant systemd :
sudo systemctl restart smbd
sudo systemctl restart nmbd
ou
sudo systemctl restart samba
(si le service est géré globalement par le binaire samba dans le rôle AD/DC).
7.4 Commandes utiles de dépannage
- smbclient :
Client Samba en ligne de commande. Permet de tester la connexion au partage depuis le serveur lui-même.
smbclient //localhost/monpartage -U utilisateur
- smbstatus :
Affiche les partages actifs, les utilisateurs connectés, les fichiers ouverts, etc.
8. Sécurité et bonnes pratiques
8.1 Restreindre l'accès réseau
- Configurer un pare-feu (iptables, ufw, firewalld, etc.) pour n'autoriser l'accès aux ports SMB (TCP 139, 445) qu'aux réseaux/machines de confiance.
- Sur certains serveurs, il peut être pertinent d'utiliser la directive hosts allow = 192.168.1.0/24 dans smb.conf pour restreindre l'accès aux hôtes d'un sous-réseau spécifique.
8.2 Utiliser le chiffrement SMB
- Privilégier les protocoles SMB2 et SMB3 pour leur meilleure sécurité et performance.
- Désactiver SMB1 si possible, en ajoutant par exemple :
server min protocol = SMB2
dans la section [global].
8.3 Mise à jour régulière
- Samba étant un service réseau exposé, il est essentiel de mettre à jour régulièrement le système et Samba pour corriger d'éventuelles failles de sécurité.
8.4 Gestion des mots de passe
- Encourager l'utilisation de mots de passe complexes.
- Mettre en place des politiques de changement de mots de passe (lors de l'utilisation en tant que serveur AD/DC).
9. Intégration avancée
9.1 Samba comme contrôleur de domaine (Active Directory)
Depuis la version 4, Samba peut agir comme contrôleur de domaine Active Directory (AD DC), permettant :
- L'authentification centralisée des postes Windows.
- La gestion des stratégies de groupe (GPO).
- L'administration via les outils Microsoft (Active Directory Users and Computers, etc.).
Configuration de base
- Installer le paquet samba avec le support AD/DC.
- Utiliser samba-tool pour la configuration initiale :
sudo samba-tool domain provision --use-rfc2307 --interactive
- Démarrer le service samba et désactiver smbd et nmbd (car le binaire samba inclut ces fonctions dans le mode DC).
9.2 Intégration dans un domaine Active Directory
- En mode membre de domaine, on configure Samba pour utiliser security = ads.
- On rejoint le domaine via la commande net ads join -U Administrateur.
- On configure winbind pour la résolution des utilisateurs et groupes AD.
9.3 Intégration LDAP / Kerberos
- Possibilité d'utiliser un serveur LDAP externe pour stocker les comptes d'utilisateurs et de groupes.
- Kerberos permet l'authentification unique (Single Sign-On).
- Samba s'intègre alors avec le KDC (Key Distribution Center) existant et n'a plus besoin d'utiliser smbpasswd.
10. Outils supplémentaires
10.1 smbclient
Permet de se connecter à un partage SMB en ligne de commande, de lister les fichiers, télécharger, etc. Très pratique pour diagnostiquer les problèmes de connexion ou de droits.
10.2 smbstatus
Affiche des informations sur les sessions actives, les fichiers ouverts, les verrous (locks).
10.3 samba-tool
- Outil polyvalent pour administrer un serveur Samba, notamment dans le rôle AD/DC (gestion des comptes, DNS interne, délégation d'autorité, etc.).
- Exemple de commande : samba-tool user add <userName> <password>.
10.4 testparm
Vérifie la syntaxe du fichier de configuration smb.conf et affiche un résumé des paramètres.
11. Performances et optimisation
- Tuning des buffers et paramètres réseau :
Ajuster certains paramètres Samba (ex. : socket options, read raw = yes, write raw = yes) peut améliorer les performances, mais les gains dépendent souvent du système d'exploitation hôte et de la configuration réseau.
- Utilisation d'ACL :
Si votre système de fichiers prend en charge les ACL POSIX (ext4, XFS, btrfs), vous pouvez les activer pour une granularité plus fine des droits.
- Migration vers SMB3 :
SMB3 inclut un meilleur mécanisme de multiplexage, de chiffrement et de performances globales, surtout sous Windows 8/10 et supérieur.
12. Études de cas pratiques
- Serveur de fichiers pour PME
- Un serveur Samba avec des partages ciblés (Comptabilité, RH, etc.), chaque partage étant restreint au groupe approprié.
- Chiffrement des transferts pour éviter l'écoute sur le réseau.
- Sauvegardes régulières du répertoire /srv et de la configuration Samba.
- Contrôleur de domaine pour un parc mixte Windows/Linux
- Mise en place d'un serveur Samba AD/DC pour centraliser les comptes utilisateurs.
- Mise en œuvre de GPO pour configurer automatiquement les postes clients Windows.
- Intégration Single Sign-On pour les postes Linux via Kerberos.
- Partage public dans un réseau local restreint
- Partage anonyme accessible à tous en lecture/écriture avec un guest ok = yes, mais uniquement accessible depuis le réseau local (pare-feu bloquant l'accès externe).
13. Conclusion
Samba est un pilier fondamental pour l'intégration hétérogène dans de nombreux environnements professionnels et personnels. De la simple configuration de partages de fichiers à la mise en place d'un contrôleur de domaine complet type Active Directory, Samba offre une flexibilité et une puissance considérables.
- Clés de réussite :
- Bien comprendre les modes de sécurité (user, domain, ads).
- Gérer correctement les utilisateurs et groupes.
- Sécuriser les accès et chiffrer autant que possible (SMB3).
- Surveiller et mettre à jour régulièrement le service.
Avec une configuration adaptée à vos besoins et un suivi rigoureux, Samba vous permettra de bâtir une solution de partage de ressources robuste, fiable et parfaitement intégrée aux environnements Windows, macOS et Linux.