Je détaillerai la création du point de montage NFS sur un client Windows 10 dans la partie 2 de cette série. Pour l'instant, concentrons-nous sur un serveur Ubuntu offrant un stockage NFS et un client Ubuntu essayant de s'y connecter.
La mise en place
Mon serveur NFS va être basé sur Ubuntu 18.04 LTS. Vous pouvez utiliser votre distribution Linux préférée ou FreeBSD, ou tout autre système d'exploitation prenant en charge OpenZFS. Ma raison d'utiliser Ubuntu 18.04 est qu'il est assez populaire et réduirait considérablement la barrière d'entrée.
Le NFS est censé être disponible uniquement sur mon réseau local qui a le masque de sous-réseau de 255.255.255.0 et 192.168.0.1 comme passerelle par défaut. En clair, cela signifie que tous les appareils connectés à mon réseau domestique (WiFi et Ethernet, et autres) auront des adresses IP allant de 192.168.0.2 à 192.168.0.254.
Le serveur NFS sera configuré pour permettre uniquement aux appareils avec uniquement l'adresse IP susmentionnée d'avoir accès au serveur NFS. Cela garantirait que seuls les appareils connectés à mon réseau local accèdent à mes fichiers et que le monde extérieur ne puisse pas y accéder. Si vous avez une configuration « Wifi ouvert » ou si la sécurité du point de terminaison de votre routeur est douteuse, cela ne garantira aucune sécurité.
Je ne recommanderais pas d'exécuter NFS sur Internet public sans mesure de sécurité supplémentaire.
Enfin, les commandes exécutées sur le serveur NFS ont l'invite, server $ et les commandes à exécuter côté client ont l'invite client $
Création d'un pool et d'un jeu de données OpenZFS
1. Création de zpool
Si vous avez déjà un zpool opérationnel, ignorez cette étape. Sur mon serveur NFS, qui exécute Ubuntu 18.04 Serveur LTS, j'installe d'abord OpenZFS.
serveur $ sudo apt installer zfsutils-linuxEnsuite, nous allons lister tous les périphériques de blocs disponibles, pour voir les nouveaux disques (et partitions) en attente de formatage avec zfs.
$ lsblkNOM MAJ:MIN RM TAILLE RO TYPE POINT DE MONTAGE
boucle0 7:0 0 89.5 M 1 boucle/snap/core/6130
boucle1 7:1 0 86.9 M 1 boucle/snap/core/4917
boucle2 7:2 0 91.1M 1 boucle/snap/core/6259
sda 8:0 0 50G 0 disque
├─sda1 8:1 0 1M 0 partie
└─sda2 8:2 0 50G 0 partie /
sdb 8:16 0 931G 0 disque
sdc 8:32 0 931G 0 disque
sr0 11:0 1 1024M 0 rom
Un exemple typique est montré ci-dessus, mais votre convention de nommage peut être très différente. Vous devrez utiliser votre propre jugement et être très prudent à ce sujet. Vous ne voulez pas formater accidentellement votre disque OS. Par exemple, la partition sda1 a clairement le système de fichiers racine comme point de montage, il n'est donc pas sage d'y toucher. Si vous utilisez de nouveaux disques, il est probable qu'ils n'auront pas de point de montage ou de partitionnement.
Une fois que vous connaissez le nom de vos périphériques, nous utiliserons la commande zpool create pour formater quelques-uns de ces périphériques de bloc (appelés sdb et sdc) dans un zpool avec un seul vdev composé de deux disques en miroir.
serveur $ sudo zpool créer réservoir miroir sdb sdcserveur $ sudo zpool status tank
réservoir d'état zpool
piscine : réservoir
état : EN LIGNE
analyse : aucune demandée
configuration :
NOM ÉTAT LIRE ÉCRIRE CKSUM
réservoir EN LIGNE 0 0 0
mirror-0 EN LIGNE 0 0 0
sdb EN LIGNE 0 0 0
sdc EN LIGNE 0 0 0
erreurs : aucune erreur de données connue
À l'avenir, vous pouvez ajouter des disques par groupes de deux (appelés vdev) pour augmenter la taille de ce zpool, les nouveaux disques apparaîtront sous les noms mirror-1, mirror-2, etc. Vous n'êtes pas obligé de créer votre zpool comme je l'ai fait, vous pouvez utiliser la mise en miroir avec plus de disques, vous pouvez utiliser le striping sans redondance mais de meilleures performances, ou vous pouvez utiliser RAIDZ. Vous pouvez en savoir plus ici.
En fin de compte, ce qui compte, c'est que nous ayons créé un zpool nommé tank. Sur lequel le NFS partagé vivra. Créons un jeu de données qui sera partagé. Assurez-vous d'abord que la piscine, nommée 'réservoir', est montée. Le point de montage par défaut est '/tank' .
serveur $ sudo zfs mount tankserver $ sudo zfs create tank/nfsshare #créer un nouveau jeu de données au-dessus du pool
Définition des autorisations
Lors du partage d'un répertoire NFS, le superutilisateur sur le système client n'a accès à rien sur le partage. Alors que le superutilisateur côté client est capable de faire n'importe quoi sur la machine cliente, le montage NFS ne fait techniquement pas partie de la machine cliente. Ainsi, autoriser les opérations au nom du superutilisateur côté client mappé en tant que superutilisateur côté serveur peut entraîner des problèmes de sécurité. Par défaut, NFS mappe les actions du superutilisateur côté client sur personne : utilisateur et groupe d'utilisateurs. Si vous avez l'intention d'accéder aux fichiers montés en tant que root, alors l'ensemble de données sur notre serveur NFS devrait également avoir les mêmes autorisations,
serveur $ sudo chown personne:nogroup /tank/nfsshareLe serveur NFS exécutera toute action de la racine côté client en tant qu'utilisateur personne, donc l'autorisation ci-dessus permettra aux opérations de se dérouler.
Si vous utilisez un nom d'utilisateur différent (normal), il est souvent pratique d'avoir un utilisateur avec le même nom d'utilisateur exact des deux côtés.
Création d'un partage NFS
Une fois que vous avez créé Zpool, vous devez installer le package du serveur nfs à partir de votre gestionnaire de packages :
serveur $ sudo apt installer nfs-kernel-serverTraditionnellement, le serveur NFS utilise le fichier /etc/exports pour obtenir la liste des clients approuvés et les fichiers auxquels ils auront accès. Cependant, nous utiliserons la fonctionnalité intégrée de ZFS pour obtenir le même résultat.
Utilisez simplement la commande :
serveur $ sudo zfs set sharenfs = "on" /tank/nfssharePlus tôt, j'ai fait allusion au fait de ne donner l'accès qu'à certaines IP. Vous pouvez le faire comme suit :
serveur $ sudo zfs set sharenfs="[email protected]/24" tank/nfsshareLe « rw » signifie les autorisations de lecture-écriture, suivi de la plage d'adresses IP. Assurez-vous que les numéros de port 111 et 2049 sont ouverts sur votre pare-feu. Si vous utilisez ufw, vous pouvez le vérifier en exécutant :
état du serveur $ ufwNotez l'adresse IP de votre serveur sur le réseau local, en utilisant la commande ifconfig ou ip addr. Appelons-le serveur.ip
Montage côté client
Une fois le partage créé, vous pouvez le monter sur votre machine cliente, en exécutant la commande :
client $ mount -t serveur nfs.ip:/tank/nfsshare /mntCela montera le partage NFS sur le dossier /mnt mais vous auriez tout aussi bien pu choisir n'importe quel autre point de montage de votre choix.
Conclusion
Le partage de fichiers est probablement l'aspect le plus important de l'administration du système. Cela améliore votre compréhension de la pile de stockage, de la mise en réseau, des autorisations et privilèges des utilisateurs. Vous vous rendrez rapidement compte de l'importance du principe du moindre privilège - c'est-à-dire de ne donner à un utilisateur que l'accès le plus restreint possible à son travail.
Vous découvrirez également l'interopérabilité entre les différents systèmes d'exploitation. Les utilisateurs Windows peuvent accéder aux fichiers NFS, de même que les utilisateurs Mac et BSD. Vous ne pouvez pas vous limiter à un seul système d'exploitation lorsque vous traitez avec un réseau de machines ayant toutes leurs propres conventions et langues vernaculaires. Alors allez-y et expérimentez avec votre partage NFS. j'espère que tu as appris quelque chose.