Samba : partage de fichiers Linux/Windows — Guide complet
Tout ce qu'il faut savoir sur Samba : installation, configuration de smb.conf, partages publics/privés/groupe, intégration Active Directory, sécurité SMB3 et dépannage.
Samba est le pont entre le monde Linux et le monde Windows. Grâce au protocole SMB/CIFS, il permet à des machines Linux de partager des fichiers, des imprimantes et des répertoires avec des postes Windows — et vice versa — comme si tout était sur le même réseau homogène. Ce guide couvre l'installation, la configuration de partages publics et privés, la gestion des utilisateurs, l'intégration dans un domaine Active Directory et les bonnes pratiques de sécurité.
Qu'est-ce que Samba ?
Samba est une implémentation libre du protocole SMB (Server Message Block), aussi appelé CIFS (Common Internet File System). Ce protocole, développé à l'origine par Microsoft, est le standard de partage de fichiers sous Windows. Samba permet à Linux (et macOS) de :
- Exposer des répertoires Linux en tant que partages réseau accessibles depuis Windows
- Servir de contrôleur de domaine Active Directory (AD DC) — remplacer un Windows Server
- Rejoindre un domaine Windows existant en tant que membre
- Partager des imprimantes réseau via CUPS
- Fournir une authentification centralisée (Kerberos, LDAP)
Samba supporte SMB1, SMB2 et SMB3. Désactivez toujours SMB1 en production — c'est le protocole exploité par WannaCry (EternalBlue). SMB3 apporte le chiffrement de bout en bout depuis Windows 8 / Windows Server 2012.
Installation sur Debian / Ubuntu
# Mise à jour du système
apt update && apt upgrade -y
# Installation de Samba et des utilitaires
apt install -y samba samba-common-bin smbclient cifs-utils
# Vérification de la version installée
smbd --version
# Samba version 4.x.x
# Statut des services (3 services Samba)
systemctl status smbd # démon principal SMB
systemctl status nmbd # résolution NetBIOS (noms machines)
systemctl status winbind # intégration domaine WindowsSauvegarder la configuration par défaut
Avant toute modification, sauvegardez le fichier de configuration d'origine — c'est une habitude à prendre systématiquement.
cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
# Afficher la configuration active (commentaires exclus)
testparm -sStructure de smb.conf
Le fichier /etc/samba/smb.conf est organisé en sections. La section [global] définit les paramètres globaux du serveur. Chaque autre section définit un partage (share).
[global]
workgroup = WORKGROUP # Nom du groupe de travail Windows
server string = Serveur Samba %v
netbios name = SERVEUR-LINUX
security = user # Authentification par utilisateur Samba
map to guest = bad user # Utilisateurs inconnus → guest
# Protocoles SMB autorisés (désactiver SMB1 obligatoire !)
server min protocol = SMB2
server max protocol = SMB3
# Logs
log file = /var/log/samba/log.%m
max log size = 1000
logging = file
# Performance
socket options = TCP_NODELAY IPTOS_LOWDELAY
read raw = yes
write raw = yes
use sendfile = yesCréer un partage public (sans mot de passe)
Un partage public est accessible à n'importe qui sur le réseau sans authentification. Utile pour un NAS domestique ou un serveur de fichiers en environnement de confiance.
# Créer le répertoire partagé
mkdir -p /srv/samba/public
chmod 0777 /srv/samba/public
chown nobody:nogroup /srv/samba/public# Ajouter dans /etc/samba/smb.conf
[Public]
path = /srv/samba/public
comment = Partage public accessible à tous
browseable = yes
writable = yes
guest ok = yes
create mask = 0664
directory mask = 0775# Vérifier la syntaxe et redémarrer
testparm
systemctl restart smbd nmbdCréer un partage privé avec authentification
Un partage privé nécessite un compte Samba. Important : les utilisateurs Samba sont distincts des utilisateurs Linux, mais doivent exister dans les deux systèmes.
# 1. Créer l'utilisateur Linux (sans shell de connexion pour la sécurité)
useradd -M -s /sbin/nologin azuka
# 2. Créer l'utilisateur Samba et définir son mot de passe
smbpasswd -a azuka
# New SMB password: ••••••••
# Retype new SMB password: ••••••••
# Added user azuka.
# 3. Activer le compte Samba
smbpasswd -e azuka
# Lister les utilisateurs Samba
pdbedit -L
# Créer le répertoire et les permissions
mkdir -p /srv/samba/azuka
chown azuka:azuka /srv/samba/azuka
chmod 0700 /srv/samba/azuka# Partage privé dans smb.conf
[Privé-Azuka]
path = /srv/samba/azuka
comment = Répertoire privé Azuka
browseable = no # N'apparaît pas dans la liste réseau
writable = yes
valid users = azuka # Seul azuka peut accéder
create mask = 0600
directory mask = 0700Partage partagé entre membres d'un groupe
Un scénario courant : une équipe (développeurs, comptabilité) partage un espace commun en lecture/écriture.
# Créer le groupe Linux
groupadd devteam
# Ajouter des utilisateurs au groupe
useradd -M -s /sbin/nologin alice
useradd -M -s /sbin/nologin bob
usermod -aG devteam alice
usermod -aG devteam bob
# Créer les comptes Samba
smbpasswd -a alice
smbpasswd -a bob
# Préparer le répertoire avec le sticky bit
mkdir -p /srv/samba/devteam
chown root:devteam /srv/samba/devteam
chmod 2775 /srv/samba/devteam
# Le sticky bit (2) fait que les nouveaux fichiers héritent du groupe[DevTeam]
path = /srv/samba/devteam
comment = Espace partagé équipe développement
browseable = yes
writable = yes
valid users = @devteam # @ désigne un groupe Linux
create mask = 0664
directory mask = 0775
force group = devteam # Nouveaux fichiers → groupe devteamPartager les répertoires home des utilisateurs
Samba permet à chaque utilisateur d'accéder à son /home via le réseau. C'est la section [homes] magique.
[homes]
comment = Répertoires personnels
browseable = no # Le partage homes n'apparaît pas
writable = yes
valid users = %S # %S = nom du partage = nom de l'utilisateur
create mask = 0600
directory mask = 0700Avec [homes], un utilisateur alice qui se connecte à \\SERVEUR\alice accède automatiquement à /home/alice. Élégant et sans configuration par utilisateur.
Sécuriser Samba
Désactiver SMB1 (critique)
[global]
server min protocol = SMB2
client min protocol = SMB2
# SMB1 est vulnérable à EternalBlue / WannaCry — ne jamais activerActiver le chiffrement SMB3
[global]
smb encrypt = required # Force le chiffrement SMB3 (Windows 8+)
# ou pour un partage spécifique :
[Confidentiel]
path = /srv/samba/confidentiel
smb encrypt = required
valid users = @managementRestreindre les IPs autorisées
[global]
hosts allow = 192.168.1.0/24 127.0.0.1
hosts deny = ALL
interfaces = eth0 lo
bind interfaces only = yesConfigurer le pare-feu UFW
# Ports Samba nécessaires
ufw allow from 192.168.1.0/24 to any port 139 proto tcp
ufw allow from 192.168.1.0/24 to any port 445 proto tcp
ufw allow from 192.168.1.0/24 to any port 137 proto udp
ufw allow from 192.168.1.0/24 to any port 138 proto udp
# Vérification
ufw status numberedSe connecter aux partages Samba
Depuis Windows
Dans l'Explorateur Windows, tapez dans la barre d'adresse :
\\192.168.1.100\Public
# ou avec authentification :
\\192.168.1.100\Privé-AzukaPour monter un partage de façon permanente (lecteur réseau Z:) :
net use Z: \\192.168.1.100\DevTeam /user:alice /persistent:yesDepuis Linux (smbclient)
# Lister les partages disponibles
smbclient -L //192.168.1.100 -U azuka
# Se connecter à un partage (shell interactif)
smbclient //192.168.1.100/Privé-Azuka -U azuka
# Commandes dans le shell smbclient
smb: > ls # lister
smb: > get fichier.txt # télécharger
smb: > put backup.tar # uploader
smb: > exitMonter un partage Samba sur Linux (mount.cifs)
apt install -y cifs-utils
# Montage temporaire
mount -t cifs //192.168.1.100/DevTeam /mnt/devteam -o username=alice,password=motdepasse,uid=1000,gid=1000,iocharset=utf8
# Montage permanent dans /etc/fstab
# Créer un fichier de credentials sécurisé
cat > /etc/samba/.credentials << 'EOF'
username=alice
password=motdepasse
domain=WORKGROUP
EOF
chmod 600 /etc/samba/.credentials
# Dans /etc/fstab :
//192.168.1.100/DevTeam /mnt/devteam cifs credentials=/etc/samba/.credentials,uid=1000,gid=1000,iocharset=utf8,_netdev 0 0
# Tester le montage
mount -aSamba comme contrôleur de domaine Active Directory
Samba 4 peut remplacer un Windows Server en jouant le rôle de contrôleur de domaine Active Directory (AD DC). Cela permet d'authentifier des postes Windows sans licence Windows Server.
# Packages nécessaires
apt install -y samba winbind krb5-user krb5-config
# Provisionner le domaine AD
samba-tool domain provision --realm=CORP.EXEMPLE.COM --domain=CORP --adminpass='MotDePasseAdmin123!' --server-role=dc --use-rfc2307 --dns-backend=SAMBA_INTERNAL
# Configurer Kerberos
cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
# Démarrer Samba AD DC
systemctl unmask samba-ad-dc
systemctl start samba-ad-dc
systemctl enable samba-ad-dc
# Vérifier le niveau fonctionnel du domaine
samba-tool domain level show
# Tester l'authentification Kerberos
kinit administrator@CORP.EXEMPLE.COM
klistSur un AD DC, smbd, nmbd et winbind ne doivent PAS tourner — uniquement samba-ad-dc. Désactivez les trois services avant de démarrer le DC : systemctl disable smbd nmbd winbind.
Rejoindre un domaine Windows existant
Pour qu'une machine Linux rejoigne un domaine Active Directory existant (Windows Server ou Samba AD DC) :
apt install -y samba winbind libnss-winbind libpam-winbind krb5-user
# smb.conf pour membre de domaine
cat > /etc/samba/smb.conf << 'EOF'
[global]
workgroup = CORP
realm = CORP.EXEMPLE.COM
security = ads
kerberos method = secrets and keytab
winbind use default domain = yes
winbind offline logon = yes
template shell = /bin/bash
template homedir = /home/%U
idmap config * : backend = tdb
idmap config * : range = 3000-7999
idmap config CORP : backend = rid
idmap config CORP : range = 10000-999999
EOF
# Configurer NSS pour utiliser winbind
sed -i 's/passwd:.*compat/passwd: compat winbind/' /etc/nsswitch.conf
sed -i 's/group:.*compat/group: compat winbind/' /etc/nsswitch.conf
# Rejoindre le domaine
net ads join -U administrator
# Password for administrator@CORP.EXEMPLE.COM: ••••••••
# Démarrer winbind
systemctl restart winbind
# Vérifier l'appartenance au domaine
wbinfo -u # lister les utilisateurs du domaine
wbinfo -g # lister les groupes du domaine
net ads infoDiagnostic et dépannage
# Tester la configuration (syntaxe de smb.conf)
testparm
# Lister les connexions actives
smbstatus
# Lister les partages et connexions
smbstatus --shares
smbstatus --locks
# Tester la connexion à son propre serveur
smbclient -L localhost -U% # partages anonymes
smbclient //localhost/Public -U%
# Tester l'authentification
smbclient //localhost/Privé-Azuka -U azuka
# Voir les logs en temps réel
tail -f /var/log/samba/log.smbd
# Modifier le niveau de verbosité des logs (0-10)
# Dans smb.conf [global] : log level = 3
# Vérifier les ports en écoute
ss -tlnp | grep -E '139|445|137|138'Erreurs fréquentes et solutions
- NT_STATUS_ACCESS_DENIED : vérifiez les permissions Linux du répertoire ET les droits Samba (valid users, read only)
- NT_STATUS_LOGON_FAILURE : le compte n'existe pas dans la base Samba — lancez smbpasswd -a username
- NT_STATUS_BAD_NETWORK_NAME : le nom de partage ne correspond pas — vérifiez avec testparm
- Le partage n'apparaît pas sur Windows : vérifiez que nmbd tourne et que les ports 137-138 UDP sont ouverts
- Fichiers créés sans les bonnes permissions : utilisez force create mode et force directory mode
Pour déboguer l'accès d'un utilisateur spécifique, augmentez temporairement le log level : echo '3' > /proc/sys/net/core/somaxconn puis consultez /var/log/samba/log.nom_machine.
Sources & références
- 1Samba.org — Documentation officielle
Documentation complète de référence Samba 4
- 2Red Hat — Deploying Samba as an AD DC
Guide Red Hat sur Samba comme contrôleur de domaine
- 3CVE-2017-7494 — SambaCry
Vulnérabilité critique Samba 3.5+ permettant l'exécution de code à distance
- 4smb.conf man page
Référence exhaustive de toutes les directives smb.conf
Testez vos configurations
Xytherion Tools propose des outils gratuits pour vérifier vos DNS, auditer votre SSL, tester SPF/DKIM/DMARC et bien plus — directement depuis votre navigateur.