Comment offrir des ressources via SMB

Cette page vise à vous indiquer comment (continuer à) offrir des ressources via SAMBA et ceci en ne faisant plus appel au dialecte désuet et dangereux SMBv1. Les instructions à exécuter en ligne de commande sont en police Courrier; elles pourraient malheureusement subir une césure due à la charte graphique et nous vous prions de prendre garde à bien copier l’intégralité de ces dernières.

Windows

Si votre machine est dans le domaine intranet ou si vous êtes administrateur AD, veuillez vous référer à la page dédiée.

Les points qui vont suivre concernent uniquement les postes de travail hors domaine pour lesquels vous disposez de pouvoirs administratifs.

SMBv1

Détection SMBv1:

Get-WindowsOptionalFeature –Online –FeatureName SMB1Protocol

Désactivation SMBv1:

Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol

Activation SMBv1:

Enable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol

SMB v2/v3

Détection SMBv2/3

Get-SmbServerConfiguration | Select EnableSMB2Protocol

Désactivation SMBv2/3

Set-SmbServerConfiguration –EnableSMB2Protocol $false

Activation SMBv2/3

Set-SmbServerConfiguration –EnableSMB2Protocol $true

La mise en conformité de la machine passe par la désactivation de SMBv1 et l’activation de SMBv2/3, soit, en pratique:

  1. Ouvrez une console PowerShell en tant qu’administrateur
  2. Désactivez le dialecte SMBv1 : Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
  3. Activez le dialecte SMBv2/3 :  Set-SmbServerConfiguration –EnableSMB2Protocol $true
  4. Vérifiez la bonne application des changements : Get-SmbServerConfiguration | Select EnableSMB1Protocol,EnableSMB2Protocol
  5. Redémarrez la machine
  1. Lancez le gestionnaire des fonctionnalités de Windows (Turn Windows features on or off)
  2. Décochez “SMB1.0/CIFS…”
  3. Validez par OK
  4. Redémarrez la machine

Windows 8 et Windows Server 2012 introduisent la nouvelle applet de commande Windows PowerShell Set-SMBServerConfiguration. Cette applet de commande permet d’activer ou de désactiver les protocoles SMBv1, SMBv2 et SMBv3 sur le composant serveur. Il n’est pas obligatoire de redémarrer l’ordinateur après avoir exécuté l’applet de commande Set-SMBServerConfiguration.

SMBv1

Détection SMBv1:

Get-SmbServerConfiguration | Select EnableSMB1Protocol

Désactivation SMBv1:

Set-SmbServerConfiguration -EnableSMB1Protocol $false

Activation SMBv1:

Set-SmbServerConfiguration -EnableSMB1Protocol $true

SMBv2/3

Détection SMBv2/3:

Get-SmbServerConfiguration | Select EnableSMB2Protocol

Désactivation SMBv2/3:

Set-SmbServerConfiguration -EnableSMB2Protocol $false

Activation SMBv2/3:

Set-SmbServerConfiguration -EnableSMB2Protocol $true

La mise en conformité de la machine passe par la désactivation de SMBv1 et l’activation de SMBv2/3, soit, en pratique:

  1. Ouvrez une console PowerShell en tant qu’administrateur
  2. Désactivez le dialecte SMBv1 : Set-SmbServerConfiguration -EnableSMB1Protocol $false
  3. Activez le dialecte SMBv2/3 :  Set-SmbServerConfiguration -EnableSMB2Protocol $true
  4. Vérifiez la bonne application des changements : Get-SmbServerConfiguration | Select EnableSMB1Protocol,EnableSMB2Protocol

  5. Comme mentionné précédemment, il n’est pas nécessaire de redémarrer la machine.

Pour activer ou désactiver les différents dialectes SMB sur une machine Windows 7 qui offre des ressources, vous pouvez utiliser Windows PowerShell ou l’éditeur de registre en vous basant sur les exemples ci-dessous. Nous nous limiterons à l’approche utilisant PowerShell, bien plus rapide et moins sujette à des erreurs de retranscription.

PowerShell (nécessite PowerShell 2.0 ou ultérieur)

SMBv1

Détection SMBv1:

Get-Item HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters | ForEach-Object {Get-ItemProperty $_.pspath}

Configuration par défaut : SMBv1 activé (donc aucune clé de registre n’est présente), donc aucune valeur SMB1 n’est renvoyée

Désactivation SMBv1:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 0 –Force

Activation SMBv1:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 1 –Force

SMBv2/3

Détection SMBv2/3:

Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters | ForEach-Object {Get-ItemProperty $_.pspath}

Désactivation SMBv2/3:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB2 -Type DWORD -Value 0 –Force

Activation SMBv2/3:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB2 -Type DWORD -Value 1 –Force

La désactivation de SMBv1 et l’activation de SMBv2+ sur cet OS s’effectue donc comme suit :

  1. Ouvrez une console PowerShell en tant qu’administrateur
  2. Désactivez le dialecte SMBv1 : Set-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters” SMB1 -Type DWORD -Value 0 –Force
  3. Activez le dialecte SMBv2/3 :  Set-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters” SMB2 -Type DWORD -Value 1 –Force
  4. Vérifiez la bonne application des changements : Get-Item HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters | ForEach-Object {Get-ItemProperty $_.pspath} ; Le paramètre SMB1 doit avoir la valeur “0
  5. Redémarrez la machine

Linux

Toutes les machines offrant des ressources via SAMBA ont malheureusement le dialecte SMBv1 activé par défaut. Afin de ne plus y faire appel, il suffit de modifier le fichier de configuration du service SAMBA et de redémarrer les services liés. En pratique :

  1. Editez le fichier de configuration de SAMBA, /etc/samba/smb.conf
  2. Trouvez la section [global] et ajoutez la directive min protocol = SMB2 à la fin de cette dernière
  3. Redémarrez le service SAMBA
    1. sudo systemctl restart smb.service (Fedora/RedHat/CentOS récents)
    2. sudo systemctl restart smbd.service (Debian/Ubuntu récents)

Vous avez la possibilité de vérifier que le dialecte SMBv1 ait bien été désactivé à l’aide de nmap selon nmap –host-timeout 10 –script smb-protocols.nse -Pn -p139,445 128.178.x.y

NT LM 0.12 (SMBv1) [dangerous, but default]” ne devrait plus figurer dans la liste des dialectes offerts retournée par cette analyse:

SMBv1 désactivé SMBv1 toujours actif

MacOS

Ce cas de figure étant très rare, nous n’allons pas documenter la procédure permettant de désactiver le dialecte SMBv1. De plus, toutes les moutures récentes de MacOS n’y font plus appel.