Introduction.
Samba est l'implémentation du protocole SMB (Server Message Block) sous Unix / Linux. Il sert à partager des fichiers et des imprimantes avec les réseaux Microsoft.
Site officiel : www.samba.org
Samba lance deux services : smbd et nmbd.
Le protocole SMB est tout sauf performant : il pollue le réseau par l'utilisation intensive du broadcast.
Samba utilise les ports 137 (netbios name service, nbname, en UDP), 138 (netbios datagram service nbdatagram, en UDP), 139 (netbios session service, nbsession, en TCP), et 445 ("direct-hosted" tcp, en tcp et udp). 
La méthode de connexion traditionnelle smb utilise les ports 137, 138 et 139 tandis que la nouvelle méthode (CIFS, sur Windows XP) n'utilise que le port 445.
Installation.
Pour installer Samba, on tape la commande suivante :
 # apt-get install samba smbclient smbfs winbind
Configuration.
Le fichier de configuration de Samba est /etc/samba/smb.conf.
Le programme testparm analyse le fichier smb.conf et signale les erreurs éventuelles.
Après avoir modifié la configuration, il faut relancer le service :
 # /etc/init.d/samba restart
Le fichier /etc/samba/smb.conf se divise en différentes sections :
On peut ensuite créer différentes sections, une par partage voulu.
Samba peut fonctionner de différentes manières. Voici quelques cas de figures courants.
Le partage par ressource sur un réseau Workgroup.
Voici un fichier /etc/samba/smb.conf permettant de partager une ressource (répertoire ou imprimante) sur un réseau Workgroup :
 # PARTAGE PAR RESSOURCES (share)
 # Il y a 2 cas possibles :
 # CAS n°1 : on partage une ressource totalement anonyme
 # CAS n°2 : on partage une ressource avec un mot de passe associé à la ressource
 # Section GLOBAL
 # Configuration globale de Samba
 [global]
 # Nom du groupe de travail
 workgroup = WORKGROUP
 # Nom Netbios de la machine (identification réseau)
 netbios name = PC230
 # Chaine de commentaire associé au serveur (voisinage réseau)
 server string = %h Serveur (Samba %v)
 # Utilisateurs interdits
 invalid users = root
 # Enregistre un fichier de log par machine cliente du réseau MS
 log file = /var/log/samba/log.%m
 # Taille maximale des logs : 1 Mo
 max log size = 1000
 # On n'utilise pas Syslog pour enregistrer les logs
 syslog = 0
 # On fait un partage par ressources
 security = share
 # On utilise les mots de passe encryptés
 # (attention, W95 et W98a fonctionnent avec les mdp en clair)
 encrypt passwords = true
 # Accélère les transferts réseaux
 socket options = TCP_NODELAY
 # Empeche nmbd de chercher à résoudre le nom netbios via le DNS
 dns proxy = no
 # Nom du compte invité qui va permettre de créer une
 # ressource partagée par mot de passe (celui du compte invite)
 guest account = invite
 # Emplacement du fichier contenant les logins et mdp samba
 smb passwd file = /etc/samba/smbpasswd
 # Pour récupérer les imprimantes définies dans CUPS
 printing = cups

# Section HOMES
 # Cette section est inutile ici car on utilise le mode share

# Section PRINTERS
 # Cette section permet de partager les imprimantes définies sur le serveur
 [printers]
 # Le commentaire associé à l'imprimante
 comment = Les imprimantes
 # Affiche les imprimantes dans la liste des partages du serveur
 browseable = yes
 # Dans le cas d'une imprimante, c'est l'emplacement 
 # des fichiers temporaires
 path = /tmp
 # Spécifie qu'il s'agit d'une imprimante et non un répertoire
 printable = yes
 # Partage l'imprimante de manière anonyme
 public = yes
 # Logique
 writable = no
 # Empeche d'autres utilisateurs de supprimer mes impressions
 create mode = 0700

# Sections REPERTOIRES PARTAGES
 # CAS n°1: un CDROM partagé anonymement
 [cdrom]
 # Le commentaire associé au CDROM
 comment = Le CDROM
 # Point de montage du CDROM
 # synonyme de directory =
 path = /cdrom
 # Empeche le bloquage d'un fichier par un utilisateur
 locking = no
 # Logique
 writable = no
 # Partage le CDROM de manière anonyme
 public = yes

# CAS n°2 : un répertoire partagé mais protégé par mot de passe
 [partage]
 # Le commentaire associé au répertoire
 comment = Un répertoire partagé mais protégé par mot de passe
 # Emplacement du répertoire partagé
 path = /home/partage
 # Support en lecture / écriture
 # synonyme de read only = no
 writable = yes
 # Partage anonyme désactivé (cas par défaut)
 # synonyme de guest ok = no
 public = no
 # Voir explication ci-dessous
 valid users = invite
 # Masque de création des fichiers et répertoires
 create mask = 0644
 directory mask = 0755
Dans le cas du mode share, pour pouvoir positionner un mot de passe sur une ressource, il faut créer un compte UNIX 'invite' :
 # adduser --shell /bin/false --disabled-login invite
On crée ensuite une entrée dans le fichier /etc/samba/smbpasswd :
 # smbpasswd -a invite
Le mot de passe saisi correspondra à celui du répertoire partagé.
NB : dans les versions récentes de Samba, il faut utiliser la commande pdbedit à la place de smbpasswd :
 # pdbedit -a invite
Il faut ensuite créer le répertoire partagé et donner l'arborescence partagée à l'utilisateur invite du groupe invite :
 # mkdir /home/partage
 # chown nobody.invite /home/partage
NB : il faut que l'utilisateur nobody ait le droit d'écriture sur le répertoire partagé.
Petit rappel : il est toujours utile de faire un testparm pour vérifier la cohérence du fichier de configuration, et ne pas oublier de relancer le service pour que les modifications soient prises en compte.
On peut tester la configuration avec la commande smbclient :
 # smbclient -L PC230
 Password:
 Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.0.24]
 Sharename Type Comment
 cdrom Disk Le CDROM
 partage Disk Un répertoire partagé mais protégé par mot de passe
 IPC$ IPC IPC Service (pc230 Serveur (Samba 3.0.24))
 HP_LaserJet_1200_LPT_parport0_HPLIP Printer HP LaserJet 1200
 Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.0.24]
 Server Comment
 PC230 pc230 Serveur (Samba 3.0.24)
 Workgroup Master
 ... ...
La commande smbclient demande un mot de passe, on tape entrée.
Le partage par utilisateur sur un réseau Workgroup.
Voici un fichier /etc/samba/smb.conf permettant de partager une ressource (répertoire ou imprimante) avec une authentification Utilisateur / Mot de passe sur un réseau Workgroup :
 # PARTAGE PAR UTILISATEUR (user) - Groupe de travail
 # Il y a 2 cas possibles :
 # CAS n°1 : on partage une ressource totalement anonyme
 # CAS n°2 : cas normal du mode user, on fait une authentification 
 # par login et mot de passe

# Section GLOBAL
 # Configuration globale de Samba
 [global]
 # Nom du groupe de travail
 workgroup = WORKGROUP
 # Nom Netbios de la machine (identification réseau)
 netbios name = PC230
 # Chaîne de commentaire associé au serveur (voisinage réseau)
 server string = %h Serveur (Samba %v)
 # Utilisateurs interdits
 invalid users = root
 # Enregistre un fichier de log par machine cliente du réseau MS
 log file = /var/log/samba/log.%m
 # Taille maximale des logs : 1 Mo
 max log size = 1000
 # On n'utilise pas Syslog pour enregistrer les logs
 syslog = 0
 # On fait un partage par utilisateur
 security = user
 # On utilise les mots de passe encryptés
 # (attention, W95 et W98a fonctionnent avec les mdp en clair)
 encrypt passwords = true
 # Accélère les transferts réseaux
 socket options = TCP_NODELAY
 # Empêche nmbd de chercher à résoudre le nom netbios via le DNS
 dns proxy = no
 # Nom du compte invité qui va permettre de créer une
 # ressource partagée par mot de passe (celui du compte invite)
 # POUR LE CAS n°1
 guest account = invite
 # Emplacement du fichier contenant les logins et mdp samba
 # concerne le CAS n°1 et n°2
 smb passwd file = /etc/samba/smbpasswd