rss logo

Monter des Partages Windows en utilisant l'Authentification Kerberos sur Debian GNU/Linux

Tux logo

Dans un environnement Microsoft Windows, il est possible de monter facilement un partage réseau depuis GNU/Linux en utilisant la commande mount et l'utilitaire cifs. L'avantage réside dans la simplicité du processus de configuration. Cependant, l'inconvénient est qu'il repose sur l'utilisation du protocole NTLM (v1 et v2) pour l'authentification qui est obsolète et peu sécurisé pour l'authentification des utilisateurs, ce qui présente des risques en terme de sécurité en raison de son ancienneté et de son manque de robustesse.

Heureusement, il existe une méthode alternative pour le montage de partages Windows depuis Linux qui offre une sécurité nettement renforcée grâce à l'utilisation de Kerberos. Contrairement à NTLM, Kerberos est un protocole d'authentification plus récent et nettement plus sécurisé. Bien que sa mise en œuvre nécessite une configuration plus complèxe, les améliorations substantielles en matière de sécurité qu'il offre font qu'ils devrait être utilisé en priorité.

Cet article est dédié à vous guider étape par étape dans le processus d'établissement et de configuration de l'authentification basée sur Kerberos, vous permettant de monter en toute sécurité des partages Windows sur les systèmes GNU/Linux.

Architecture du Réseau

  • Pour cet exemple, nous utiliserons l'architecture suivante :
    • Un domaine Windows : std.local
    • Un partage Windows : hébergé sur un serveur Active Directory, accessible via \\ad.std.local\SHARE\
    • Un utilisateur Windows avec des droits d'accès au partage : j.valmer@std.local
    • Un client GNU/Linux : une installation standard de Debian
    • Le partage sera monté depuis l'utilisateur john sur le système Debian
Schéma réseau représentant une station Linux et un partage de fichiers sur un serveur Windows

Installation et Configuration

⚠️ Prérequis : Assurez-vous que l'horloge des serveurs Windows et Debian est synchronisée. ⚠️

  • Installer les prérequis :
root@desktop:~# apt update && apt install cifs krb5-user ntp
  • Modifier le fichier /etc/resolv.conf et ajouter le serveur AD en tant que DNS principal :
domain std.local search std.local nameserver 192.168.1.200
  • Éditer le fichier /etc/krb5.conf :
[libdefaults] default_realm = STD.LOCAL ticket_lifetime = 1d renew_lifetime = 7d dns_lookup_realm = false dns_lookup_kdc = true [realms] STD.LOCAL = { kdc = ad.std.local admin_server = ad.std.local }

Montage

Prérequis

  • Identifier l'ID utilisateur :
john@desktop:~$ id -u 1000
  • Identifier l'ID de groupe :
john@desktop:~$ id -g 1000
  • Identifier son nom d'utilisateur :
john@desktop:~$ echo $USER john
  • Créer la destination du montage :
john@desktop:~$ sudo mkdir /mnt/win_share

Montage Classique avec Authentification NTLM

  • Comprendre les options suivantes :
    • domain= : définit le domaine de l'utilisateur
    • uid= : définit l'UID qui sera propriétaire de tous les fichiers ou répertoires du système de fichiers monté lorsque le serveur ne fournit pas d'informations de propriété.
    • gid= : définit le GID qui sera propriétaire de tous les fichiers ou répertoires du système de fichiers monté lorsque le serveur ne fournit pas d'informations de propriété.
john@desktop:~$ sudo mount -t cifs username=j.valmer,domain=std.local,uid=1000,gid=1000 //192.168.1.200/SHARE /mnt/win_share

Montage avec Authentification Kerberos

  • Obtenir un ticket ; attention car sensible à la casse :
john@desktop:~$ kinit j.valmer@STD.LOCAL Mot de passe pour j.valmer@STD.LOCAL :
  • Vérifier que le ticket a bien été obtenu :
john@desktop:~$ klist Ticket cache: FILE:/tmp/krb5cc_1000 Default principal: j.valmer@STD.LOCAL Valid starting Expires Service principal 09/08/2023 18:19:54 10/08/2023 04:19:54 krbtgt/STD.LOCAL@STD.LOCAL renew until 10/08/2023 18:19:50 09/08/2023 18:19:59 10/08/2023 04:19:54 cifs/ad.std.local@ renew until 10/08/2023 18:19:50 Ticket server: cifs/ad.std.local@STD.LOCAL
  • Comprendre les options suivantes :
    • Utiliser le SPN (Nom Principal de Service) du nom du serveur pour indiquer le chemin du partage ; ne pas l'adresse IP. Cela est utilisé pour l'authentification avec Kerberos.
    • cruid=arg : Définit l'UID du propriétaire du cache d'informations d'identification. C'est principalement utile avec sec=krb5.
    • sec=krb5i : Utilise l'authentification Kerberos version 5 et active de force la signature des paquets. (krb5 seul n'active pas la signature des paquets).
john@desktop:~$ sudo mount -t cifs cruid=john,user=john,sec=krb5i,uid=1000,gid=1000 //ad.std.local/SHARE /mnt/win_share
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Contact :

contact mail address