ABE, ça vous parle ?

Derrière ce nom bizarre se cache une fonctionnalité très intéressante apparue avec Windows Server 2003 R2 (eh oui, ça date un peu ) – L’ABE pour Access Based Enumeration, ou, en français dans le texte,  « l’accès basé sur l’énumération » (j’ajouterais « NTFS » à cette traduction littérale) ne vous parle peut être pas plus. En clair, c’est la faculté d’un serveur de fichier Windows, à contrôler les privilèges de l’utilisateur lorsqu’il se présente sur un partage et de lui afficher uniquement les dossiers et fichiers sur lesquels cet utilisateur dispose d’au moins un droit de lecture. (cqfd !)

Avec ABE, fini les messages « accès refusé », les dossiers et fichiers disparaissent purement et simplement de la vue des utilisateurs non autorisés. 😉

Comment ça marche ?

En fait, cette faculté est même arrivée avec le service pack 1 de Windows Server 2003 (donc aussi R2), mais probablement que beaucoup d’entre-vous l’ignore surement du fait qu’il n’y avait pas d’interface pour le gérer. (Heureusement depuis Windows Server 2008, c’est intégré par défaut – mais pas implicitement activé ! J’y reviendrais plus loin dans cet article)

Un petit rappel des fondamentaux s’impose. Lorsqu’un utilisateur accède sur un partage situé sur un poste ou serveur Windows, les autorisations de partage sont d’abord évaluées, puis c’est au tour des autorisations NTFS d’affiner ce contrôle d’accès.

Il y a parfois débat sur les autorisations de partage mais de nos jours, rares sont les ressources encore  en FAT et ces autorisations présentent à mon avis, plus d’inconvénients que d’avantages. Une surcharge de gestion, des incohérences potentielles avec les autorisations NTFS, et en plus, elles sont perdues en cas de renommage du dossier. Donc, sauf cas particulier, sur les partages de ressources utilisateurs, on affecte le « contrôle total » à « tout le monde » et on se focalise sur les autorisations NTFS pour le reste.

Concernant l’ABE, il n’est pas activé par défaut, et sur Windows 2003, vous devrez préalablement télécharger le petit package « ABEUI.msi » (~500Ko) à l’adresse suivante. http://www.microsoft.com/en-us/download/details.aspx?id=17510 en fonction de l’architecture souhaitée x86, x64 ou IA64.


Mise en œuvre sur Windows Server 2003 sp1 / R2

Lancez l’installation du package MSI et dans le doute, conservez les valeurs par défaut. Surtout la dernière option qui vous propose d’activer l’ABE au cas par cas et non sur tous les partages existants.

ABE0

Une fois  installé, rendez vous sur un dossier partagé, et accédez aux propriétés de celui-ci. Un nouvel onglet « Access-based Enumeration » devrait apparaitre. (A moins que le dossier ne soit pas partagé)

ABE1

Cochez la première option puis cliquez sur « OK » et c’est fini. (N’utilisez pas la seconde option qui vous propose d’activer l’ABE sur tous les partages existants, comme lors de l’installation)

Notez que l’outil est également disponible en ligne de commande:

abecmd [/enable | /disable] [/server <servername>] {/all | <sharename>}

Note : Les comptes Administrateurs ne sont pas concernés par le filtrage ABE.(et c’est tant mieux)

Vous n’avez plus qu’a faire des tests pour vérifier l’efficacité de l’ABE.

Tests à partir d’une invite de commande

Sélectionner un dossier partagé et activer l’accès basé sur l’énumération

Créer un compte de test

Copier des fichiers et répertoire dans le dossier partagé

Modifier la sécurité NTFS de certains fichiers afin que le compte de test n’ai plus le droit de lecture

MD C:\TEMP
NET SHARE TEMP=C:\TEMP
ABECMD /ENABLE TEMP
ECHO "Contenu fichier 1" > C:\TEMP\FIC1.TXT
ECHO "Contenu fichier 2" > C:\TEMP\FIC2.TXT
NET USER TEST Pa$$w0rd /ADD
ICACLS C:\TEMP\FIC1.TXT /deny "TEST":RX
NET USE Z: \\LOCALHOST\TEMP /USER:TEST Pa$$w0rd
DIR Z:

Mise en œuvre sur Windows 7 ou Windows Server 2008 / R2

Depuis Windows Server 2008, il n’y a rien à installer pour utiliser l’ABE puisque la fonctionnalité est incluse par défaut (Installer le rôle « Serveur de fichier ») . Il convient toutefois d’utiliser la console « Gestion du partage et stockage », sélectionner le partage concerné puis « Propriétés ».

En effet, si vous créez un partage via l’explorateur ou en ligne de commande (« Net Share Partage=C:\Partage »), vous ne bénéficierez pas de l’ABE. (Vous pourrez cependant l’activer ultérieurement via la console appropriée)

Note : La fonctionnalité ABE est activée par défaut sur Windows 7 et Windows Server 2008/R2 à condition que le partage soit effectué via l’assistant de partage. (Partage simplifié ou menu contextuel « Partager avec … »)

ABE2a ABE2b ABE2c

Sur Windows 8/8.1 et Server 2012 / R2, le comportement est similaire mais il faudra impérativement passer par la console du « Gestionnaire de serveur … Services de fichiers et du stockage … Partages »

ABE3


Bonus 😉

Je vous propose un petit script de vérification des partages sur lesquels ABE est actif

Principe : L’activation ABE affecte la valeur « 2048 » (2^11) dans la clé de registre CSCFlags propre à chaque partage

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\Shares
[REG_MULTI_SZ] NomDuPartage

Tableau des valeurs de CSCFlags

0……….Manual caching for documents
16………Automatic caching for documents
32…….. Automatic caching of programs and documents
48 ……..Caching disabled
2048…..Access based enumeration enabled

Le script

' CheckABE.vbs
' C.Mandin
const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "." 
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_ 
   strComputer & "\root\default:StdRegProv")

strKeyPath = "SYSTEM\CurrentControlSet\Services\lanmanserver\Shares"
oReg.EnumValues HKEY_LOCAL_MACHINE, strKeyPath, arrValueNames, arrValueTypes
On Error Resume next 
result = "Share(s)" & vbTab & "[ABE]" & vbCrLf
result = result & String (21,"-") & vbCrLf
For i=0 To UBound(arrValueNames)
   result = result & arrValueNames(i)
   oReg.GetMultiStringValue HKEY_LOCAL_MACHINE, strKeyPath, arrValueNames(i), arrValues
   For Each strValue In arrValues
     if  instr(strValue, "CSCFlags") Then 
       Value = Split(strValue,"=")
       If CInt(Value(1)) > 2047 Then 
           result = result & vbTab & vbTab & "[YES]" & vbCrLf
       Else
           result = result & vbTab & vbTab & "[NO ]" & vbCrLf
       End If
     End If 
   Next
Next
WScript.Echo result

Conclusion

A ceux que me rétorquent que l’ABE engendre une surcharge sensible du serveur, je répondrais par 2 questions :

  • Est-ce que vérifier les droits avant de renvoyer un résultat  n’est pas le rôle fondamental que l’on attend d’un serveur de fichiers digne de ce nom ?
  • Que pensez-vous du trafic réseau engendré par un résultat contenant une liste de 3000 dossiers, pour une dizaine auxquels l’utilisateur est habilité ?

Je suis intimement convaincu que cette fonctionnalité doit être activée sur les partages de votre organisation. Mais faites attention à bien communiquer sur ce changement auprès de vos utilisateurs; certains pourraient être surpris, voire inquiets. Mettez-vous à la place de M. ZWINOSKI qui devrait balayer les dizaines de dossiers des autres utilisateurs avant de voir son dossier personnel et qui du jour au lendemain ne voit plus que son propre dossier (et éventuellement quelques autres). A votre avis, il panique ou pas ?

Note : Cette fonctionnalité est disponible sur les serveurs Samba (Linux) et s’active dans le fichier de définition d’un partage via la directive « hide unreadable = yes« 

Bonne continuation

Christophe

1 Commentaire

  1. clem

    Merci bcp pour ces explications 🙂

    Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *