# Samba (informatique)

Samba est un logiciel d'interopérabilité qui implémente le protocole propriétaire SMB/CIFS de Microsoft Windows (plus souvent connu sous le sigle SMB) dans les ordinateurs tournant sous le système d'exploitation Unix et ses dérivés de manière à partager des imprimantes et des fichiers dans un réseau informatique. Samba facilite l'interopérabilité entre systèmes hétérogènes Windows-Unix. Il offre la possibilité aux ordinateurs d'un réseau d'accéder aux imprimantes et aux fichiers des ordinateurs sous Unix et permettent aux serveurs Unix de se substituer à des serveurs Windows.
Il s'agit d'une réimplémentation des protocoles SMB/CIFS sous GNU/Linux et d'autres variantes d'Unix par ingénierie inverse. Samba a été initialement développée par l'Australien Andrew Tridgell et distribuée sous licence libre GNU GPL 3. Son nom provient du nom du protocole standard de Microsoft, SMB (Server Message Block), auquel ont été ajoutées les deux voyelles a : « SaMBa ».
À partir de la version 3, Samba fournit des fichiers et services d'impression pour divers clients Windows et peut s'intégrer à un domaine Active Directory en tant que membre du domaine. Samba3 peut aussi être configuré en tant que PDC (Primary Domain Controller (en)) en mode domaine NT4.
À partir de la version 4, Samba peut servir de contrôleur de domaine Active Directory et fournir les services d'authentification AD à des postes Windows, des postes Linux et des serveurs membres.
Il fonctionne sur la plupart des systèmes Unix, comme GNU/Linux, Solaris, AIX et les variantes BSD, y compris Apple, Mac OS X Server (qui a été ajoutée au client Mac OS X en version 10.2). Samba est livré dans presque toutes les distributions GNU/Linux.

## Historique

Andrew Tridgell a développé la première version de Samba Unix, en 1992, à l'Australian National University, en utilisant un analyseur de paquets pour réaliser une analyse réseau du protocole utilisé par le logiciel de DEC PATHWORKS, nbserver 1.5, publié en décembre 1993. Tridgell a découvert plus tard que le protocole était en grande partie identique à celui utilisé par d'autres systèmes de partage de fichiers, y compris celui de Microsoft. Il a ensuite décidé de se concentrer sur une compatibilité du réseau Microsoft. Samba reçoit aujourd'hui les contributions d'une vingtaine de développeurs originaires du monde entier sous sa coordination.
Auparavant, les PC équipés de DOS et des premières versions de Windows, devaient parfois installer une pile TCP/IP, et un ensemble de logiciels d'origine Unix : un client NFS, FTP, telnet, lpr, etc. Cela était lourd et pénalisant pour les compatibles PC de l'époque, et il obligeait par ailleurs leurs utilisateurs à contracter un double jeu d'habitudes, ajoutant celles d'UNIX à celles de Windows. Samba adopte donc la démarche inverse.
À l'origine, Samba était appelé SMBServer. Le nom a dû être changé en raison de l'opposition de la société "Syntaxe", qui vendait un produit nommé TotalNet Advanced Server et propriétaire de la marque "SMBServer". Le nom « Samba » a été donné en choisissant un nom voisin de SMB en interrogeant un dictionnaire Unix, par la commande grep : grep -i '^s.*m.*b' /usr/share/dict/words.

## Fonctionnalités

Samba est la mise en œuvre d'une dizaine de services et d'une douzaine de protocoles. Il comprend le protocole de partage de fichiers et d'imprimantes SMB, le protocole d'appel distant DCE/RPC (en) ou, plus spécifiquement MSRPC (en), les protocoles intervenant dans le fonctionnement d'Active Directory, la couche d'interopérabilité NetBIOS sur TCP/IP (NBT). La suite de protocoles du voisinage réseau, un serveur WINS aussi connu sous le nom de NetBIOS Naming Service (NBNS). Les protocoles d'un domaine NT qui comprend l'ouverture d'une session NT, une base de données Security Account Manager (SAM), un service Local Security Authority (LSA), un service d'impression (Spoolss) et plus récemment l'ouverture de session Active Directory comprenant une version modifiée de Kerberos et de LDAP. Samba peut voir et partager des imprimantes.
Le protocole NTLM n'est plus utilisé dans les dernières versions de Samba car jugé obsolète et son retour n'est pas souhaité par les développeurs.
Samba configure des partages réseaux pour les répertoires Unix (y compris le contenu de tous les sous-répertoires). Ils apparaissent pour les utilisateurs de Windows comme des dossiers Windows classiques accessibles via le réseau. Les utilisateurs d'Unix peuvent lire les partages avec le smbclient (libsmb) installé avec Samba. Chaque répertoire peut avoir des privilèges d'accès différents. Par exemple : les répertoires ayant un accès en lecture/écriture pour tous les utilisateurs définis, permettent à chacun d'eux d'accéder à leurs propres fichiers. Mais ils n'ont pas accès aux dossiers des autres, sauf si une autorisation est définie. À noter que le partage netlogon (/etc/samba/netlogon), généralement accessible en lecture, est le répertoire par défaut pour les scripts d'ouverture de session utilisateur.
La configuration est réalisée par l'édition d'un fichier unique (généralement installé dans /etc/smb.conf ou /etc/samba/smb.conf). Samba peut aussi fournir des scripts d'ouverture de session utilisateur et une mise en place de groupes de stratégies via poledit.
Dans les versions antérieures à la version 4.1, Samba incluait un outil d'administration web appelé SWAT (Samba Web Administration Tool).
La comparaison des performances entre Samba et les autres systèmes de partage de fichiers UNIX comme NFS n'est plus pertinente comme elle a pu l'être dans le passé. En effet Samba implémente désormais les protocoles SMB2 et SMB3, et bien que la première version SMB1 (aussi connu sous le nom CIFS) était relativement lente en raison de sa verbosité, les versions SMB2 puis SMB3 du protocole permettent à Samba d'avoir des performances comparables à celles que l'on peut avoir avec un système NFS, iSCSI ou FiberChannel.
La version 3.2 apporte le support de IPv6 et ajoute la possibilité de stocker les partages Samba dans la base de registre ainsi que l'expérimentation du clustering et d'autres améliorations.

## Interopérabilité

Le protocole Samba permet d'assurer l'interopérabilité entre plates-formes différentes et régions différentes par une gestion adéquate de l'encodage des noms de fichiers.
Le 20 décembre 2007, Microsoft signe un accord d'information technique à la suite d'un procès perdu contre l'Union européenne.

## Samba en Workgroup

Samba permet à un client Linux ou BSD de fonctionner dans un groupe de travail (workgroup) comme un client Microsoft Windows et partager des fichiers et des imprimantes ou accéder à des ressources sur d'autres postes. À partir de Windows 7 la découverte du voisinage réseau en workgroup passe par le protocole LLMNR. Samba n'implémente pas de serveur LLMNR mais peut s'appuyer sur un client implémentant ce protocole comme WSSD2

## Samba PDC NT4

Samba intègre à partir de la version 2.2 sortie en 2001 un support partiel du rôle de contrôleur de domaine PDC NT4 (Primary Domain Controler). Cette fonctionnalité devient vraiment mature avec la version 3.0 sortie fin 2003.
Samba PDC NT4 peut utiliser un serveur LDAP ou des fichiers TDB (Trivial Database) comme base de stockage des comptes utilisateurs. L'utilisation de OpenLDAP en mode master/slave permet de configurer des contrôleurs de domaine (Backup Domain Controler, BDC). Si l'on utilise OpenLDAP en mode multi-master, il est possible d'utiliser Samba en mode multi-PDC, tant qu'il n'y a pas plus d'un PDC par site.
Microsoft a arrêté le support de Windows NT4 fin 2004, et par là même le support du rôle PDC NT4. Contrairement aux PDC sous Windows, les serveurs PDC NT4 Samba ont continué de bénéficier des améliorations techniques, comme le support SMB2 puis SMB3, l'amélioration de la sécurité avec le NTLM signing et sealing, etc. Ces améliorations de sécurité font que les domaines de type Samba NT4 sont encore utilisés aujourd'hui. D'ailleurs avec la version Windows 10 1803, quand Microsoft a supprimé la possibilité d'intégrer les postes à un domaine de type NT4, ce même support a été réintégré en octobre 2018 avec la mise à jour cumulative KB4458469 pour la version Windows 10 1809.
On associe souvent la version Samba 4 au support Active Directory. Il est important de souligner que le support de la fonctionnalité PDC NT4 est toujours présent dans Samba 4. On peut donc avoir un contrôleur de domaine Samba 4 PDC NT4, ou un contrôleur de domaine Samba 4 AD.

## Samba Active Directory

Avec la sortie de la version 4.0 le 2 novembre 2012, Samba a désormais la capacité de servir de contrôleur de domaine Active Directory. Depuis cette version, le projet Samba a sorti une nouvelle version environ tous les 9 mois puis plus récemment tous les 6 mois.

### Heimdal Kerberos vs MIT Kerberos

Le serveur Kerberos est une brique fondamentale du serveur Active Directory. Au début du projet Samba 4, les développeurs ont choisi d'utiliser l'implémentation Heimdal Kerberos plutôt que l'implémentation MIT Kerberos. Heimdal Kerberos est plus facilement intégrable comme bibliothèque et le projet était plus dynamique lors du lancement de Samba 4 au milieu des années 2000. Il y a eu des efforts à partir de 2013 de la part de l'équipe Samba pour porter le code de Samba Active Directory sous MIT Kerberos. En effet, les distributions Linux « Entreprise », comme Red Hat ou SUSE Linux, imposent que les logiciels kerbérisé supportés soient compilés avec la bibliothèque MIT Kerberos. La première version de Samba avec un support officiel partiel de MIT Kerberos est la verison 4.7.
Le projet Samba n'utilise pas la version Upstream (développement logiciel) (en) de Heimdal Kerberos. En effet, la version de Heimdal qui est actuellement intégrée dans Samba correspond à la version Heimdal de 2012 avec les patchs de sécurité backportés. Il ne s'agit pas d'un fork à proprement parler, mais plus d'une facilité, et le projet Samba essaye actuellement de revenir sur la version upstream pour permettre d'intégrer le support des fonctionnalités Kerberos plus avancées, comme le FAST, les claims, les silos, etc.

### Samba et OpenLDAP

Les premières versions de Samba-AD ont utilisé OpenLDAP comme backend LDAP. Toutefois, lors de la création d'Active Directory, Microsoft a mis en place des extensions au protocole LDAP pour que celui-ci gère au mieux les contraintes d'un environnement Windows. Par exemple, Active Directory permet de s'authentifier avec un User Principal Name (UPN, par exemple utilisateur@AD.MONDOMAINE.FR) plutôt qu'un Distinguished Name (DN, par exemple CN=utilisateur,OU=users,DC=ad,DC=mondomaine,DC=fr).
Le besoin d'avancer dans l'implémentation des protocoles Active Directory a poussé le projet Samba à ré-implémenter son propre serveur LDAP au sein de Samba en 2008. À partir de la version Samba 4.9, le projet décide de ré-utiliser le moteur de base de données LMDB d'OpenLDAP pour le stockage Active Directory. Le serveur LDAP reste néanmoins celuis de Samba, seul le moteur de stockage a été remplacé.
En 2015, un travail de fond est réalisé par la société Symas pour à nouveau réintégrer OpenLDAP comme un backend viable au sein du serveur Samba Active Directory.

## Samba 4

Samba 4 est une version de la suite Samba développée en parallèle avec la branche stable 3.x. Une des nouveautés majeures de cette version est le support des protocoles d'authentification utilisés par Windows 2000 et plus.

### Nouveautés

Samba 4 supporte le côté serveur dans un environnement Active Directory utilisé par Windows 2000. Il est ainsi possible de joindre complètement des clients Windows à un domaine et effectuer des opérations d'ouverture de session.
Il inclut un serveur LDAP et un centre de distribution de clés Kerberos (KDC).

## Principales versions

| Version | Date de sortie | Note |
| 1.9.17 | 26 août 1997 | Première version publique |
| 2.0.0 | 16 janvier 1999 | Correction de failles importantes |
| 2.2.0 | 17 avril 2001 | Gestion 64 bits complète |
| 3.0.0 | 24 septembre 2003 | Corrections failles importantes et nouvelles fonctions |
| 3.0.26 | 11 septembre 2007 | Corrections failles importantes et nouvelles fonctions |
| 3.2.0 | 1er juillet 2008 | Corrections des failles de sécurité |
| 3.3.0 | 27 janvier 2009 | |
| 3.4.0 | 3 juillet 2009 | 1re version combinant les code de Samba 3 et Samba 4 |
| 3.4.17 | 30 avril 2012 | Dernière version stable de la branche Samba 3.4 |
| 3.5.0 | 1er mars 2010 | 1re version avec support expérimental pour SMB2 |
| 3.6.0 | 9 août 2011 | 1re branch incluant le support complet de SMB2 |
| 4.0.0 | 11 décembre 2012 | SMB v2.1 |
| 4.1.0 | 11 octobre 2013 | SMB3 |
| 4.2.0 | 4 mars 2015 | Compression Btrfs |
| 4.3.0 | 8 septembre 2015 | Nouvelle fonction de connexion SMB3.1.1 |
| 4.4.0 | 22 mars 2016 | Requête flush asynchrone |
| 4.5.8 | 31 mars 2017 | Please see https://bugzilla.samba.org/show_bug.cgi?id=12721 for details |
| 4.6.0 | 7 septembre 2017 | |
| 4.7.0 | 20 September 2017 | Amélioration du fonctionnement avec Active Directory (LDAP) ChangeLog https://www.samba.org/samba/history/samba-4.7.0.html |
| 4.8.0 | 13 mars 2018 | Support partiel des trusts inter-domaine, amélioration des index Samba-AD Changelog https://www.samba.org/samba/history/samba-4.8.0.html |
| 4.9.0 | 13 septembre 2018 | Introduction du backend LMDB, amélioration de l'audit, outil de backup et de renommage de domaine Changelog https://www.samba.org/samba/history/samba-4.9.0.html |