Historique de Samba Active Directory

Le protocole NETBIOS

Au début des années 1980 le monde de l’informatique a subit une révolution avec l’arrivée de la micro-informatique. Historiquement, l’informatique était basée sur des gros serveurs Main Frame qui faisaient tourner les programmes dans la salle serveur, et des terminaux passifs sans intelligence et sans puissance CPU qui se contentaient de faire l’affichage et la saisie des utilisateurs.

Avec l’arrivée de la micro-informatique, ce modèle a été chamboulé, les micro-ordinateurs (IBM-PC, Apple Macintosh, Commodore, Amiga, etc.) devenaient dotés d’une certaine capacité de calcul qui permettait de faire tourner en local directement sur la machine les programmes, comme le traitement de texte, le logiciel de comptabilité, etc.

Ce changement a généré notamment deux besoins :

  • Partage de fichiers : auparavant tous les utilisateurs fonctionnaient sur la même machine, donc les fichiers étaient naturellement partagés. Maintenant que les utilisateurs sont sur des machines différentes, il faut trouver une manière d’accéder à aux fichiers stockés sur la machine du voisin ;

  • Authentification mutuelle : auparavant les utilisateurs se connectaient tous sur la même machine, donc l’authentification était naturellement centralisée et facile à mettre en place. Maintenant qu’il y a plein de machines indépendantes, comment peut on savoir qu’on se connecte à la bonne machine ? Comment sait-on que la personne qui essaye de se connecter a réellement le droit ?

Il y a eu différentes tentatives pour répondre à ces problèmes. Nous allons d’abord parler du premier.

Partage de fichiers en réseau local

En 1983 la société Sytek a développé un nouveau protocole, le NetBIOS, pour faciliter la communication entre machines. Le protocole NetBIOS permet une couche d’abstraction entre la couche applicative (par ex. le partage de fichiers) et la couche de transport (TCP/IP, TokenRing, IPX, etc). En effet à cette époque il y avait plus de diversité dans les protocoles de transport.

Une API LAN standard étant disponible, un protocole de couche supérieure, SMB est lancé par IBM en 1985. C’est un protocole de partage de ressources. SMB fonctionne via une structure de client / serveur : le client envoie des requêtes spécifiques et le serveur lui répond. Plusieurs entités reprennent le standard d’IBM et le réadaptent. Un sérieux challenger à SMB fut Novell avec son produit NetWare. Pour concurrencer NetWare et son serveur de fichiers performant, Microsoft en collaboration avec IBM et 3COM développe LAN Manager intégré à OS/2. LAN Manager inclut le protocole SMB d’IBM et NetBEUI permettant à OS/2 de partager des fichiers, imprimantes et d’autres ressources réseau.

Le protocole NETBIOS sera référencé en tant que RFC1001 en 1987.

IBM a rapidement vu l’intérêt de la chose et a adopté la technologie pour ses IBM-PC. A cette époque IBM était le Microsoft des années 1990-2000 ou le Google d’aujourd’hui. C’est IBM qui définissait les standards. Donc les autres entreprises informatiques, dont Microsoft, ont toutes développé leur couche NetBIOS pour s’interfacer avec les autres systèmes.

Au début le protocole NetBIOS était très limité, avec 80 machines au maximum. Le nom des machines était défini sur 16 octet, avec le dernier octet réservé pour définir le suffixe qui définit le type de machine (serveur de fichiers, poste utilisateurs, etc.). C’est pour cette raison qu’aujourd’hui on ne peut pas avoir de nom de machine de plus de 15 caractères !

Principes de sécurité

Avec l’arrivée d’environnements clients-serveur, il a fallu s’assurer que le client et le serveur se reconnaissaient.

Pour cela, trois notions ont été introduites :

  • L’identification qui consiste à établir l’identité de l’utilisateur ou de la machine.

  • L’authentification qui consiste à vérifier l’identité de l’utilisateur ou de la machine.

  • Les autorisations qui autorisent l’utilisateur ou la machine à accéder ou non à certaines ressources.

C’est sur ces trois principes que se base LAN Manager pour sécuriser l’accès à ses données. De ces idées naîtrons plus tard les projets Kerberos ou NTLM.

Historique de Kerberos

Le projet Athena

Le projet Athena, soutenu par un consortium d’acteurs de la sphère informatique, est lancé en mai 1983 pour une durée de 5 ans. Son but était de développer des stratégies, ainsi que des logiciels, dans le cadre d’un système réseau client / serveur. Athena devait à l’origine être uniquement utilisé par le MIT.

Vont ainsi être conçus des systèmes et des protocoles encore utilisés de nos jours, comme par exemple le NFS et le serveur X (base de l’interface graphique des systèmes Unix).

L’idée d’un système d’authentification a germé au sein du MIT lorsqu’il est devenu évident que les étudiants allaient être autorisés à accéder à des serveurs de fichiers sur un réseau de grande valeur avec leurs propres ordinateurs.

Le développement du mécanisme d’identification et d’authentification a alors été raccroché au projet Athena. L’objectif de ce projet était de développer un protocole réseau d’authentification ; celui-ci devait centraliser la gestion de la confiance sur quelques machines étroitement surveillées et contrôlées.

Les communications d’authentification entre ces serveurs de confiance et les autres ordinateurs du réseau seraient cryptées afin de ne pas pouvoir être interceptées (sécurisation).

Depuis sa conception au sein du projet Athena, le protocole Kerberos a subi d’importantes modifications, le rendant plus facile d’utilisation, plus modulaire et plus sûr.

Introduction à Samba

Le projet Samba est identifié sur son site web officiel comme une suite de logiciels permettant l’interopérabilité entre les environnements Windows et les environnements UNIX / Linux. La technologie au coeur de cette interopérabilité est le protocole de communication et de partage de fichiers SMB, d’où le nom du logiciel : Samba. La présence répandue de Microsoft dans les entreprises, le secteur public et le secteur de l’enseignement, couplée à la qualité de l’implémentation du logiciel libre Samba, permettra au protocole SMB de d’imposer progressivement comme standard pour échanger des fichiers sur des réseaux Windows, Linux et Mac.

Cela inclut :

  • La gestion centralisée de l’identification et de l’authentification en mode domaine Active Directory et NT4.

  • La gestion centralisée des groupes.

  • Le partage de fichiers en fonction de la version du protocole Microsoft SMB.

  • La gestion centralisée des droits d’accès aux fichiers et répertoires.

  • Le partage d’imprimantes.

Samba1

La version Samba1 est sortie au début des années 1990 et fournissait une implémentation simple des protocoles LAN Manager et le support des groupes de travail (WorkGroup).

Samba2

Avec la version Samba2.2 sortie en 2002, Samba a commencé à fournir les services de contrôleur de domaine à la mode NT4 aux postes Windows membres d’un domaine.

Samba3

Les différentes versions de Samba3 ont amélioré le support des fonctionnalités des domaines NT4 et le support des nouvelles versions du protocole SMB (SMB2.2, SMB3).

Samba4

Le projet Samba4 est lancé en 2008. L’objectif initial était de réécrire complètement Samba en s’appuyant sur les spécifications officielles dévoilées par Microsoft suite au procès de l’Union Européenne contre Microsoft pour abus de position dominante.

Simultanément, il avait été jugé également à l’époque que la base de code Samba3 devenait trop difficile à maintenir. Jusqu’alors, Samba avait été développé progressivement en pratiquant les méthodes de rétroingénierie des protocoles Microsoft ; les développeurs Samba étudiaient comment les postes Windows et les serveurs communiquaient ensemble, et à partir des données recueillies ils développaient Samba empiriquement pour reproduire le comportement des protocoles.

Depuis, le projet bénéficie d’un accès plus libre aux spécifications officielles de Microsoft, ce qui facilite les développements. Pour consolider la démarche d’interopérabilité, les différents acteurs et parties prenantes des protocoles SMB se retrouvent chaque année à un événement nommé PlugFest pour tester leurs différentes implémentations du protocole SMB. L’intérêt pour Samba4 a décollé à partir des années 2010-2011 quand les différents acteurs ont compris que les objectifs assez ambitieux d”Andrew Bartlett commençaient à aboutir.

En 2012, alors que l’intérêt pour Samba4 croissait, il est apparu que l’implémentation exclusivement à partir des spécifications Microsoft du protocole SMB n’était pas fonctionnelle et que le protocole SMB implémenté par Microsoft était bien plus complexe et assez mal documenté.

La version Samba3 avait été développée empiriquement et non pas à partir d’une documentation officielle. Samba3 fonctionnait donc comme il fallait pour les fonctions de partage de fichiers et d’imprimantes. Historiquement, Microsoft a été très prudent en matière de rétro-compatibilité et les comportements des serveurs en versions antérieures sont reportés dans les nouvelles versions.

La réécriture de Samba4 impliquait 3 composants majeurs :

  • Le composant Active Directory.

  • Le composant partage de fichier smbd.

  • Le composant de mapping utilisateur winbindd.

En septembre 2012, il a été décidé de reprendre la base de code smbd3 pour fournir les fonctions de partage de fichiers et d’imprimantes. Le code Samba4 quant à lui fournirait uniquement la fonction Active Directory. Le travail de réintégration de la base de code Samba3 dans Samba4 a permis ainsi d’obtenir une première version stable de Samba4 en version 4.0.0 en décembre 2012.

Politique de maintenance corrective et de sécurité de Samba

Les effectifs du projet Samba ne permettent pas de tenir à jour un grand nombre de versions de Samba en mode maintenance corrective.

C’est pourquoi le projet Samba a adopté le fonctionnement suivant :

  • Version en développement, considérée comme non stable N+1, actuellement 4.20.

  • Version en production stable N, actuellement 4.19.

  • Version en maintenance corrective et sécurité N-1, actuellement la 4.19.

  • version en maintenance de sécurité, N-2, actuellement la 4.18.

Toutefois, un écosystème commercial existe autour du logiciel Samba, et des entreprises ayant un intérêt particulier dans une version de Samba peuvent investir des ressources de développement et backporter un bug spécifique dans une version non officiellement maintenue.

Samba3 n’est plus maintenu ; il est donc nécessaire de préparer une migration à Samba4. La base de code Samba3 étant intégrée à Samba4, il est possible d’utiliser Samba4 même en fonctionnement NT4. Cela permet de bénéficier des correctifs et des nouvelles fonctionnalités devenues disponibles depuis la fin du support des versions 3.x.

Samba4 et les distributions Linux

Le fait que Samba4 ait incorporé la base de code de Samba3 a provoqué une grande confusion parmi les individus et les équipes se chargeant de packager les distributions Linux. La plupart des distributions ne voulaient pas abandonner tout de suite leur version de Samba3, avec laquelle leurs utilisateurs étaient familiers. Et donc les paquets Linux Samba4, qui réintègrent en partie du code Samba3, sont en conflit avec les paquets Linux Samba3. Un bon exemple de cette confusion ayant abouti à un conflit de version est le paquet Debian samba4.0rc2, complètement inutilisable.

Le protocole SMB

Architecture client-serveur

le SMB est un protocole de partage de ressources fichiers / imprimantes défini par IBM en 1985 par Barry Feigenbaum. SMB fonctionne via une structure de client / serveur, le client va envoyer des requêtes spécifiques et le serveur de fichiers va y répondre. Le protocole est optimisé pour une utilisation dans un réseau local, mais il peut aussi être utilisé sur Internet.

Les différentes implémentations du protocole

Plusieurs entreprises ou entités reprennent le standard et le réadaptent :

  • Samba de Andrew Tridgell, le père fondateur de Samba ;

  • Microsoft Windows Workgroups 3.x ;

  • Microsoft Windows NT ;

  • LAN Server d’IBM ;

  • La famille de produits PATHWORKS de Digital ;

  • LAN Manager ;

  • VisionFS ;

  • TotalNET Advanced Server ;

  • Advanced Server pour Unix ;

CIFS est l’une des dernières définition de ce protocole. Elle est développée par Microsoft et d’autres vendeurs tels que Digital Equipment, Data General, SCO, Network Appliance Corp. etc. Cette version est publique. Depuis Windows Vista, il est appelé SMB2.

Les différentes versions du protocole SMB

SMB a été initialement conçu pour fonctionner au-dessus de l’API NetBIOS / NetBEUI (généralement mis en œuvre avec NetBIOS sur IPX / SPX). Depuis Windows 2000, SMB s’exécute, par défaut, avec une couche mince, au-dessus de TCP, en utilisant le port TCP 445 plutôt que le port TCP 139, une caractéristique connue sous le nom « d’hôte SMB direct ».

SMB1

Le protocole SMBv1 remonte au début des années 80. C’est un protocole ancien et très verbeux assez limité sur les réseaux modernes. Il ne supporte pas bien la latence sur les réseaux VPN et son caractère verbeux fait que l’on ne peut pas complètement exploiter la bande passante des réseaux modernes.

De plus les différentes couches du protocole font que son architecture est compliqué et qu’il est assez buggé, notamment avec des trous de sécurité (par ex. la faille Wannacry). Il est recommandé de supprimer ce protocole sur les réseaux d’entreprise pour améliorer la sécurité. Les dernières versions de Windows désactive ce protocole par défaut, idem pour Samba.

SMB2

Microsoft introduit SMB2 avec Windows Vista en 2006, et l’améliore plus tard dans Windows 7, avec de grandes révisions ultérieures de 2.1 et 3.0 à partir de 2012. SMB2 réduit le bavardage du protocole SMB 1.0 par la réduction du nombre de commandes, il a des mécanismes de traitement en pipeline, c’est à dire qu’il envoie des demandes supplémentaires avant que la réponse à une demande précédente arrive, améliorant ainsi les performances sur des liaisons à latence élevée. SMB2 inclut le support pour les liens symboliques.

Windows Vista / Server 2008 et versions ultérieures utilisent SMB2 lors de la communication avec d’autres machines aussi capables d’utiliser SMB2.

SMB1 continue d’être utilisé pour les connexions avec les anciennes versions de Windows, ainsi que des systèmes tels que Samba et NAS. Samba 3.5 comprend aussi un support expérimental pour SMB2. Samba 3.6 soutient pleinement SMB2, à l’exception de la modification des quotas de l’utilisateur en utilisant les outils de gestion des quotas de Windows.

SMB 2.1 est introduit avec Windows 7 et Server 2008 R2, il apporte des améliorations de performance mineures.

SMB3

SMB 3.0 (précédemment nommé SMB 2.2) a été introduit avec Windows 8 et Windows Server 2012.

Le protocole introduit plusieurs changements importants, tels que le protocole SMB Direct (SMB sur RDMA) et SMB multicanaux (plusieurs connexions par session SMB), qui visent à ajouter des fonctionnalités et améliorer les performances SMB2, notamment dans les centres de données virtualisés.

Il introduit également plusieurs améliorations à la sécurité, comme le chiffrement de bout-en-bout et un nouvel algorithme de signature basé AES.