8.3. Sécuriser le service NFS
Vous pouvez sécuriser la version 4 du système de fichiers réseau (NFSv4) en authentifiant et en chiffrant toutes les opérations du système de fichiers à l'aide de Kerberos. Lorsque vous utilisez NFSv4 avec un NAT (Network Address Translation) ou un pare-feu, vous pouvez désactiver les délégations en modifiant le fichier /etc/default/nfs
. La délégation est une technique par laquelle le serveur délègue la gestion d'un fichier à un client.
En revanche, NFSv3 n'utilise pas Kerberos pour le verrouillage et le montage des fichiers.
Le service NFS envoie le trafic en utilisant TCP dans toutes les versions de NFS. Le service prend en charge l'authentification des utilisateurs et des groupes Kerberos, dans le cadre du module du noyau RPCSEC_GSS
.
NFS permet aux hôtes distants de monter des systèmes de fichiers sur un réseau et d'interagir avec ces systèmes de fichiers comme s'ils étaient montés localement. Vous pouvez fusionner les ressources sur des serveurs centralisés et personnaliser les options de montage NFS dans le fichier /etc/nfsmount.conf
lors du partage des systèmes de fichiers.
8.3.1. Options d'exportation pour sécuriser un serveur NFS
Le serveur NFS détermine une structure de liste de répertoires et d'hôtes concernant les systèmes de fichiers à exporter vers les hôtes dans le fichier /etc/exports
.
Des espaces supplémentaires dans la syntaxe du fichier d'exportation peuvent entraîner des changements importants dans la configuration.
Dans l'exemple suivant, le répertoire /tmp/nfs/
est partagé avec l'hôte bob.example.com
et dispose d'autorisations de lecture et d'écriture.
/tmp/nfs/ bob.example.com(rw)
L'exemple suivant est le même que le précédent, mais il partage le même répertoire avec l'hôte bob.example.com
avec des autorisations de lecture seule et le partage avec l'hôte world avec des autorisations de lecture et d'écriture en raison d'un seul caractère d'espace après le nom d'hôte.
/tmp/nfs/ bob.example.com (rw)
Vous pouvez vérifier les répertoires partagés de votre système en entrant la commande showmount -e <hostname>
.
Utilisez les options d'exportation suivantes sur le fichier /etc/exports
:
Exporter un système de fichiers entier, car l'exportation d'un sous-répertoire d'un système de fichiers n'est pas sécurisée. Un pirate peut éventuellement accéder à la partie non exportée d'un système de fichiers partiellement exporté.
- ro
-
Utilisez l'option
ro
pour exporter le volume NFS en lecture seule. - rw
Utilisez l'option
rw
pour autoriser les demandes de lecture et d'écriture sur le volume NFS. Utilisez cette option avec prudence, car le fait d'autoriser l'accès en écriture augmente le risque d'attaques.NoteSi votre scénario nécessite de monter les répertoires avec l'option
rw
, assurez-vous qu'ils ne sont pas accessibles en écriture à tous les utilisateurs afin de réduire les risques éventuels.- racine_squash
-
Utilisez l'option
root_squash
pour faire correspondre les requêtes provenant deuid
/gid
0 avec les requêtes anonymesuid
/gid
. Cela ne s'applique pas aux autresuids
ougids
qui pourraient être tout aussi sensibles, comme l'utilisateurbin
ou le groupestaff
. - no_root_squash
-
Utilisez l'option
no_root_squash
pour désactiver l'écrasement de la racine. Par défaut, les partages NFS remplacent l'utilisateurroot
par l'utilisateurnobody
, qui est un compte d'utilisateur non privilégié. Le propriétaire de tous les fichiers créés parroot
devientnobody
, ce qui empêche le téléchargement de programmes dont le bitsetuid
est défini. Lorsque l'optionno_root_squash
est utilisée, les utilisateurs root distants peuvent modifier n'importe quel fichier sur le système de fichiers partagé et laisser des applications infectées par des chevaux de Troie à d'autres utilisateurs. - sécurisé
-
L'option
secure
permet de limiter les exportations aux ports réservés. Par défaut, le serveur n'autorise la communication avec les clients que par l'intermédiaire des ports réservés. Cependant, sur de nombreux réseaux, il est facile pour n'importe qui de devenir un utilisateurroot
sur un client, de sorte qu'il est rarement sûr pour le serveur de supposer que la communication via un port réservé est privilégiée. Par conséquent, la restriction aux ports réservés n'a qu'une valeur limitée ; il est préférable de s'appuyer sur Kerberos, les pare-feu et la restriction des exportations à des clients particuliers.
En outre, il convient de tenir compte des meilleures pratiques suivantes lors de l'exportation d'un serveur NFS :
- L'exportation des répertoires personnels présente un risque car certaines applications stockent les mots de passe en texte clair ou dans un format faiblement crypté. Vous pouvez réduire ce risque en révisant et en améliorant le code de l'application.
- Certains utilisateurs ne définissent pas de mots de passe sur les clés SSH, ce qui entraîne à nouveau des risques avec les répertoires personnels. Vous pouvez réduire ces risques en imposant l'utilisation de mots de passe ou en utilisant Kerberos.
-
Limitez les exportations NFS aux seuls clients nécessaires. Utilisez la commande
showmount -e
sur le serveur NFS pour vérifier ce que le serveur exporte. N'exportez rien qui ne soit pas spécifiquement requis. - Pour réduire le risque d'attaques, n'autorisez pas les utilisateurs inutiles à se connecter à un serveur. Vous pouvez vérifier périodiquement qui et quoi peut accéder au serveur.
Ressources supplémentaires
- Sécuriser NFS avec Kerberos lors de l'utilisation de Red Hat Identity Management
- Configuration du serveur NFS.
-
exports(5)
etnfs(5)
pages de manuel
8.3.2. Options de montage pour sécuriser un client NFS
Vous pouvez ajouter les options suivantes à la commande mount
afin d'améliorer la sécurité des clients NFS :
- nosuid
-
Utilisez l'option
nosuid
pour désactiver les bitsset-user-identifier
ouset-group-identifier
. Cela empêche les utilisateurs distants d'obtenir des privilèges plus élevés en exécutant un programmesetuid
et vous pouvez utiliser cette option à l'inverse de l'optionsetuid
. - noexec
-
L'option
noexec
permet de désactiver tous les fichiers exécutables sur le client. Cette option permet d'éviter que les utilisateurs n'exécutent accidentellement des fichiers placés dans le système de fichiers partagés. - nodev
-
Utilisez l'option
nodev
pour empêcher le client de traiter les fichiers de périphérique comme un périphérique matériel. - resvport
-
Utilisez l'option
resvport
pour restreindre la communication à un port réservé et vous pouvez utiliser un port source privilégié pour communiquer avec le serveur. Les ports réservés sont réservés aux utilisateurs et processus privilégiés tels que l'utilisateurroot
. - sec
-
Utilisez l'option
sec
sur le serveur NFS pour choisir la saveur de sécurité RPCGSS pour l'accès aux fichiers sur le point de montage. Les saveurs de sécurité valides sontnone
,sys
,krb5
,krb5i
etkrb5p
.
Les bibliothèques MIT Kerberos fournies par le paquetage krb5-libs
ne prennent pas en charge l'algorithme Data Encryption Standard (DES) dans les nouveaux déploiements. Pour des raisons de sécurité et de compatibilité, l'algorithme DES est déprécié et désactivé par défaut dans les bibliothèques Kerberos. Utilisez des algorithmes plus récents et plus sûrs au lieu de DES, à moins que votre environnement n'exige DES pour des raisons de compatibilité.
Ressources supplémentaires
8.3.3. Sécuriser NFS avec un pare-feu
Pour sécuriser le pare-feu d'un serveur NFS, ne laissez ouverts que les ports nécessaires. N'utilisez pas les numéros de port de la connexion NFS pour un autre service.
Conditions préalables
-
Le paquet
nfs-utils
est installé. -
Le paquet
firewalld
est installé et fonctionne.
Procédure
-
Sur NFSv4, le pare-feu doit ouvrir le port TCP
2049
. Sur NFSv3, ouvrez quatre ports supplémentaires avec
2049
:rpcbind
attribue les ports NFS de manière dynamique, ce qui peut poser des problèmes lors de la création de règles de pare-feu. Pour simplifier ce processus, utilisez le fichier/etc/nfs.conf
pour spécifier les ports à utiliser :-
Définir le port TCP et UDP pour
mountd
(rpc.mountd
) dans la section[mountd]
au formatport=<value>
format. -
Définir le port TCP et UDP pour
statd
(rpc.statd
) dans la section[statd]
au formatport=<value>
format.
-
Définir le port TCP et UDP pour
Définissez les ports TCP et UDP pour le gestionnaire de verrous NFS (
nlockmgr
) dans le fichier/etc/nfs.conf
:-
Définissez le port TCP pour
nlockmgr
(rpc.statd
) dans la section[lockd]
au formatport=value
. Vous pouvez également utiliser l'optionnlm_tcpport
dans le fichier/etc/modprobe.d/lockd.conf
. -
Définissez le port UDP pour
nlockmgr
(rpc.statd
) dans la section[lockd]
au formatudp-port=value
. Vous pouvez également utiliser l'optionnlm_udpport
dans le fichier/etc/modprobe.d/lockd.conf
.
-
Définissez le port TCP pour
Verification steps
Liste des ports actifs et des programmes RPC sur le serveur NFS :
$ rpcinfo -p
Ressources supplémentaires
- Sécuriser NFS avec Kerberos lors de l'utilisation de Red Hat Identity Management
-
exports(5)
etnfs(5)
pages de manuel