Un hôte exporte un répertoire vers une adresse VPN, le montage réussit et la conception est consignée comme authentifiée. Ce que cette règle contraint réellement, c'est d'où les paquets semblent venir. Que la personne qui pilote l'opération de fichier soit bien celle qu'elle prétend être dépend du profil de sécurité NFS, et sur la plupart des exports de ce genre personne ne l'a changé par rapport à la valeur par défaut.

Trois identités peuvent apparaître dans une seule requête

Le pair VPN porte une identité enrôlée, comme un certificat client ou une clé de pair. Le paquet IP interne porte une adresse source. L'opération de fichier porte les identifiants utilisateur que fournit son mécanisme NFS. Une conception qui traite l'adresse comme un substitut des trois a silencieusement supposé précisément la partie qu'il fallait vérifier.

IdentityWhat it provesWhat it does not
VPN peerWhich peer was accepted by the tunnelWhich user runs on that machine
Inner source addressWhere the packet appears to originateThat only the intended client can use it
NFS credentialWhat the file service believes about the callerAnything, if the flavour only asserts local IDs

Écrire ces trois lignes, c'est tout l'exercice. L'essentiel du débat sur la sûreté d'un export s'effondre dès qu'on voit dans quelle ligne vit chaque contrôle.

La propriété de l'adresse est un détail d'implémentation

Une passerelle peut attribuer une adresse de tunnel à un pair accepté ou autoriser un sous-réseau routé pour lui. Que l'implémentation refuse ensuite un paquet dont la source interne appartient à un autre client est une propriété de cette implémentation, et il vaut la peine de le vérifier plutôt que de le supposer.

Le code serveur en espace utilisateur du Community classique OpenVPN peut, par exemple, rejeter une source associée à un autre client avant que le paquet ne soit livré via le périphérique TUN. C'est un contrôle de propriété d'adresse à la valeur réelle, et ce n'est toujours pas une authentification d'utilisateur NFS, car il ne dit rien du compte qui effectue l'opération.

La traduction de source érode même cela. Une passerelle NAT peut présenter chaque client comme une seule adresse, et une règle d'export ne peut alors plus distinguer les personnes derrière. La précision apparente de la règle devient alors une fiction entretenue par le schéma. Si l'export compte, gardez l'adressage explicite plutôt que de laisser un traducteur décider qui compte pour qui.

Lisez le profil de sécurité avant de faire confiance à l'export

Le guide NFS de Red Hat sépare sec=sys, qui utilise des UID et GID UNIX locaux via AUTH_SYS, des modes Kerberos. krb5 ajoute l'authentification de l'utilisateur, krb5i ajoute la protection de l'intégrité et krb5p ajoute la protection de la confidentialité du trafic.

L'identifiant AUTH_SYS contient des champs comme l'UID de l'appelant et les identifiants de groupe, et la RFC 5531 avertit clairement que ce profil ne procure aucune sécurité en lui-même et dépend d'une protection externe. L'exécuter dans un VPN assure une protection du transport et ne change rien à l'affirmation contenue dans le paquet.

exportfs -v
showmount -e nfs.example.internal

Lisez le profil dans cette sortie avant de lire la liste des clients. Un export qui paraît restreint peut ne l'être que par l'adresse alors que chaque appelant déclare encore l'UID qui lui plaît.

Choisissez le modèle, puis conservez les permissions

Choisissez le modèle d'authentification du service de fichiers adapté aux clients que vous administrez réellement. Kerberos exige une identité et un déploiement de service derrière elle, donc changer une option de montage n'est pas une migration et échouera simplement tant que le domaine Kerberos, les principaux et les keytabs n'existent pas.

Sous l'un ou l'autre modèle, conservez les permissions d'export et l'autorisation du système de fichiers qui limitent ce que le principal authentifié peut faire. L'authentification vous dit qui demande ; l'autorisation décide si la réponse doit être oui. Fondre les deux dans un seul réglage, c'est ainsi qu'une migration finit par accorder plus que l'ancienne configuration.

Utilisez la règle d'adresse pour son véritable objet

Restreindre le service au chemin et aux sources approuvés reste utile, y compris la politique d'entrée de l'hôte quand le point de terminaison VPN et le serveur NFS partagent une machine. Les règles qui acheminent le trafic ne régissent pas les requêtes adressées à un service exécuté localement sur le même hôte. Cette lacune explique un nombre surprenant d'exports censés être privés. Vérifiez explicitement la politique d'entrée locale au lieu de supposer que les règles du tunnel la couvrent.

Vérifiez qu'une autre interface ou une passerelle à traduction de source ne peut pas satisfaire la règle de façon inattendue, et traitez cela comme une raison d'établir la provenance, non comme l'affirmation que falsifier une adresse garantit un montage fonctionnel.

Exécutez trois cas d'acceptation plutôt qu'un. Commencez par un client approuvé agissant comme utilisateur approuvé, répétez ensuite depuis un pair qui n'a jamais été approuvé, puis tentez quelque chose que l'utilisateur approuvé n'est toujours pas autorisé à faire. Demandez ensuite ce qui change si un client autorisé est compromis, car l'authentification du transport ne rend pas chaque processus de cette machine digne de confiance. Un certificat volé et un compte local curieux sont des problèmes différents avec des contrôles différents.

Articles similaires