Samba : partage SMB/CIFS pour Windows et Linux

Samba : partage SMB/CIFS pour Windows et Linux

Samba implemente le protocole SMB/CIFS pour partager des fichiers et imprimantes entre Linux, Windows et macOS. Le standard pour les NAS et serveurs de fichiers d'entreprise.

Introduction

Samba :

  • Protocole SMB / CIFS (Windows native)
  • Partages fichiers multi-OS (Windows, macOS, Linux)
  • Active Directory : DC ou domain member
  • Compatible avec auth Windows
  • Performance : Samba 4.x gere SMB3 avec multichannel, encryption

Cas d'usage : NAS, serveur de fichiers bureau, partage de profils Windows, integration Active Directory.

Prerequis

  • VPS / serveur Linux Debian / Ubuntu
  • Acces root
  • LAN configure (pas d'exposition Internet sans firewall stricte!)

⚠️ Ne jamais exposer Samba directement sur Internet : SMB est cible n.1 ransomware. Restreignez aux IPs LAN.

Etape 1 : Installation

sudo apt update
sudo apt install -y samba smbclient
smbd --version

Etape 2 : Configuration de base

Backup la config :

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.orig
sudo nano /etc/samba/smb.conf

Config minimale :

[global]
   workgroup = WORKGROUP
   server string = VeryCloud File Server
   netbios name = vcfileserver
   security = user
   map to guest = bad user
   
   ; Restriction IPs (CRUCIAL)
   hosts allow = 192.168.50.0/24 127.0.0.1
   hosts deny = 0.0.0.0/0
   
   ; Logs
   log file = /var/log/samba/log.%m
   max log size = 1000
   logging = file
   
   ; Performance
   server min protocol = SMB2_10
   server signing = mandatory
   server smb encrypt = desired
   
   ; Disable printer sharing si pas besoin
   load printers = no
   printing = bsd
   printcap name = /dev/null
   disable spoolss = yes
   
   ; Disable NetBIOS (uniquement SMB direct sur 445)
   smb ports = 445
   disable netbios = yes

[partage]
   path = /srv/samba/partage
   browseable = yes
   read no
   guest ok = no
   valid users = @smbusers
   create mask = 0664
   directory mask = 0775
   force group = smbusers

Etape 3 : Creer le dossier et groupes

sudo mkdir -p /srv/samba/partage
sudo groupadd smbusers
sudo chgrp -R smbusers /srv/samba/partage
sudo chmod -R 2770 /srv/samba/partage   # setgid pour heriter du groupe

Etape 4 : Creer un utilisateur Samba

L'utilisateur doit exister en Linux ET avoir un mot de passe Samba (distinct).

sudo adduser --no-create-home --disabled-login mathys
sudo usermod -aG smbusers mathys
sudo smbpasswd -a mathys
# Tapez le mot de passe Samba 2 fois
sudo smbpasswd -e mathys    # enable

Lister :

sudo pdbedit -L

Etape 5 : Verifier la config et demarrer

sudo testparm
sudo systemctl restart smbd nmbd
sudo systemctl enable smbd nmbd

Etape 6 : Tester depuis Linux

smbclient -L localhost -U mathys

Liste les partages dispo. Pour acceder :

smbclient //localhost/partage -U mathys

Mount permanent :

sudo apt install -y cifs-utils
sudo mkdir /mnt/smb-partage
sudo mount -t cifs //IP_SERVEUR/partage /mnt/smb-partage -o username=mathys,password=xxx,vers=3.0

Dans /etc/fstab :

//192.168.50.10/partage /mnt/smb-partage cifs username=mathys,password=xxx,uid=1000,gid=1000,vers=3.0,_netdev 0 0

Mieux : utiliser un fichier de credentials :

sudo nano /etc/smb-creds
username=mathys
password=motdepasse
sudo chmod 600 /etc/smb-creds

fstab :

//192.168.50.10/partage /mnt/smb-partage cifs credentials=/etc/smb-creds,uid=1000,gid=1000,vers=3.0,_netdev 0 0

Etape 7 : Acces depuis Windows

Explorateur > Adresse :

\\192.168.50.10\partage

Entrez les credentials Samba. Mapper en lecteur reseau via clic droit > "Map network drive".

Etape 8 : Partage public (anonyme)

Si vraiment necessaire (rarement recommande) :

[public]
   path = /srv/samba/public
   browseable = yes
   read no
   guest ok = yes
   guest yes
   create mask = 0666
   directory mask = 0777
sudo mkdir /srv/samba/public
sudo chmod 777 /srv/samba/public
sudo systemctl restart smbd

Etape 9 : Multi-utilisateurs, ACL fines

Pour gerer des permissions plus fines, utilisez les ACL POSIX :

sudo apt install -y acl

Activez ACL dans le partage :

[partage]
   path = /srv/samba/partage
   read no
   inherit acls = yes
   inherit permissions = yes
   acl_xattr:ignore system acls = yes
   vfs objects = acl_xattr

Set des ACL :

sudo setfacl -R -m g:smbusers:rwX /srv/samba/partage
sudo setfacl -R -m d:g:smbusers:rwX /srv/samba/partage   # default ACL
sudo getfacl /srv/samba/partage

Les ACL sont visibles depuis Windows en clic droit > Properties > Security.

Etape 10 : Quotas et limites

[partage]
   path = /srv/samba/partage
   read no
   max disk size = 10240    ; 10 Go limite annonce au client

Pour de vraies quotas, utilisez les quotas filesystem (ZFS, Btrfs, ou ext4 quotas).

Etape 11 : Performance tuning

[global]
   ; Buffers reseau
   socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072
   
   ; Async I/O
   aio read size = 16384
   aio write size = 16384
   use sendfile = yes
   
   ; SMB Multi-channel (necessite SMB3+ cote client)
   server multi channel support = yes

Reboot Samba et testez avec un fichier de test :

dd if=/dev/zero of=/srv/samba/partage/test.bin bs=1M count=1024

Copie depuis Windows : vous devriez voir 100+ MB/s sur Gigabit.

Etape 12 : Active Directory

Pour rejoindre un domaine AD :

sudo apt install -y winbind libpam-winbind libnss-winbind

/etc/samba/smb.conf :

[global]
   workgroup = MONDOMAINE
   realm = MONDOMAINE.LOCAL
   security = ADS
   winbind use default domain = yes
   winbind enum users = yes
   winbind enum groups = yes
   template shell = /bin/bash
   template homedir = /home/%U
   idmap config * : range = 10000-99999
   idmap config MONDOMAINE : backend = rid
   idmap config MONDOMAINE : range = 100000-999999

Rejoindre le domaine :

sudo realm join mondomaine.local -U Administrator

Maintenant les utilisateurs AD peuvent acceder aux partages.

Pour faire un controleur de domaine Samba AD lui-meme, voir https://wiki.samba.org/index.php/Active_Directory_Domain_Services.

Depannage

"NT_STATUS_LOGON_FAILURE"

Mot de passe Samba incorrect. Reset :

sudo smbpasswd mathys

Ou utilisateur pas enabled :

sudo smbpasswd -e mathys

"Permission denied" cote client

Verifiez :

  • Permissions Linux (ls -la /srv/samba/partage)
  • force group dans la config
  • Utilisateur dans le bon groupe

Acces tres lent

Verifiez server min protocol = SMB2_10. SMB1 (deprecated) est lent et non-sur.

Cote client Windows, activer SMB direct si Gigabit+.

Partage invisible dans le voisinage reseau

NetBIOS desactive. Soit reactivez (disable netbios = no, smb ports = 139 445), soit faites le browsing par nom DNS.

Logs

sudo tail -f /var/log/samba/log.smbd
sudo tail -f /var/log/samba/log.nmbd

Commandes utiles

# Services
sudo systemctl status smbd nmbd
sudo systemctl restart smbd nmbd

# Test config
sudo testparm

# Users
sudo smbpasswd -a username       # ajouter
sudo smbpasswd -d username       # disable
sudo smbpasswd -e username       # enable
sudo smbpasswd -x username       # delete
sudo pdbedit -L                   # lister

# Tester partages
smbclient -L //IP_SERVEUR -U user
smbclient //IP_SERVEUR/partage -U user

# Lister connexions actives
sudo smbstatus
sudo smbstatus --shares
sudo smbstatus --locks

# Mount depuis Linux
sudo mount -t cifs //srv/share /mnt/point -o credentials=/etc/smb-creds,vers=3.0

# Logs
sudo tail -f /var/log/samba/log.smbd

Conclusion

Samba transforme votre serveur Linux en server de fichiers compatible Windows :

  • SMB3 securise et performant
  • Integration Active Directory
  • ACL fines
  • Multi-OS

Limites :

  • Complexite de config
  • Cible n1 de ransomwares (jamais exposer)
  • Performance moins bonne que NFS sur LAN Linux-only

Pour aller plus loin :

  • Pour Linux-only, prefere NFS (perf superieures)
  • Pour un NAS turnkey, regardez TrueNAS Scale ou OpenMediaVault
  • Pour la HA, deployez Ctdb (clustered Samba)

Ressources

Rejoignez notre serveur communautaire Discord

Pour toute question, suggestion ou simplement pour discuter avec la communauté, rejoignez-nous sur Discord !

900+Membres