Mon réseau d’entreprise
14.6 Le partage de fichiers
Le partage de fichiers est une notion relativement récente. Auparavant, il était question de système de fichiers réseaux (nfs, Network File System). Il existe plusieurs façons de distribuer les fichiers sur le réseau. Nous regarderons le début de la version la plus simple, le protocole nfs.
Depuis, d’autres façons de partager les fichiers existent. Pour les utilisateurs (qui ne sont pas adminstrateurs), il est possible d’utiliser les systèmes de fichiers en espace utilisateur : Fuse (Filesystem in USErspace). Ce système permet à un utilisateur de monter des ressources distantes, comme un système accessible par ssh, la freebox, les paquets Debian, Wikipedia, votre téléphone…
14.6.1 Montez des systèmes de fichier en espace utilisateur
Il n’est pas nécessaire d’être administrateur pour monter des systèmes de fichier distants.
Si depuis votre station, vous pouvez vous connecter sur un système distant par ssh, alors vous pouvez utiliser cette connexion pour faire apparaître les fichiers distants sur votre station. Ces fichiers ne seront accessible que pour l’utilisateur ayant lancé la commande. Même l’administrateur ne pourra pas voir ces fichiers.
Il faut d’abord pouvoir établir une connexion ssh. Donc, il faut un login sur la machine de départ : alice et une machine de départ : chip. Sur la machine d’arrivée, dale, il y a un login qui peut être différent du login de départ, ce sera : bob.
La commande pour se connecter en ssh est :
alice@chip:~$ ssh bob@dale ... résolution de mot de passe ou échange de clefs ... Linux dale 4.17.0-1-amd64 #1 SMP Debian 4.17.8-1 (2018-07-20) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Thu Sep 6 12:07:02 2018 from 10.8.0.10 bob@dale:~$
Pour monter un système de fichier, il faut un répertoire. Ce répertoire dans appartenir à l’utilisateur de départ. Ensuite, il faut utiliser la commande sshfs.
alice@chip:~$ mkdir /tmp/dalerootfs alice@chip:~$ mkdir /tmp/dalehome alice@chip:~$ sshfs bob@dale: /tmp/dalehome alice@chip:~$ sshfs bob@dale:/ /tmp/rootfs
La commande sshfs monte le répertoire distant sur le répertoire local. La syntaxe du répertoire distant est :
[user@]host:[dir]
Les parties entre crochets sont, classiquement, facultatives. Il faut obligatoirement fournir le nom ou l’adresse ip de l’hôte, suivie d’un “ :” (deux-points). Si l’utilisateur d’arrivée est le même que celui de départ, alors il peut être omis. Le répertoire d’arrivée est le chemin complet (commençant par /) ou relatif au répertoire d’accueil de l’utilisateur d’arrivée. Si le répertoire est omis, alors ce sera le répertoire d’accueil de l’utilisateur d’arrivée.
À partir de ce moment, jusqu’à la terminaison de la connexion, alice de chip aura le même accès que bob de dale.
La connexion terminera si un des ordinateurs reboote ou tue la connexion. La façon propre de terminer, c’est :
alice@chip:~$ fusermount -u /tmp/dalehome
La commande sshfs fait appel à plusieurs autres programmes. Les messages d’erreur affichés sont rarement explicites. Si vous avez une erreur, il faut tester la connexion ssh qui fournira le vrai message d’erreur ou terminer la connexion qui pourrait être
dans un état indéfini.
14.6.2 Systèmes de fichiers réseaux
Le protocole nfs est utilisé depuis des décennies pour pouvoir accéder à des fichiers distants. Un système de fichiers sur un serveur va être exporté. Puis, le ou les clients vont monter le système de fichiers en local. Il faut donc commencer par le serveur.
Nous allons placer le serveur sur l’ordinateur belial puis le monter sur l’ordinateur goblin. Sur le client, il faut ajouter le paquet nfs-common. Nous pourrons utiliser la commande showmount pour vérifier le serveur. Dans un premier temps, le serveur n’est pas configuré. C’est ce qu’indique la réponse :
root@goblin:~# showmount -e belial clnt_create: RPC: Program not registered
Il faut alors installer le paquet nfs-kernel-server sur le serveur. Le protocole est alors connu, mais rien n’est exporté :
root@goblin:~# showmount -e belial Export list for belial: root@goblin:~#
Sur le serveur, il va falloir exporter un système de fichiers ou une partie de celui-ci. Le fichier /etc/exports ne contient que des commentaires, nous allons ajouter une ligne permettant d’exporter le répertoire /home.
/home *(rw)
Il faut alors relancer le serveur :
root@belial:~# service nfs-kernel-server restart
L’exportation aparaît sur le client potentiel.
root@goblin:~# showmount -e belial Export list for belial: /home * root@goblin:~#
Il est alors possible de monter le répertoire distant.
root@goblin:~# mkdir -p /net/belial root@goblin:~# mount belial:/home /net/belial root@goblin:~# df -h /net/belial/ Filesystem Size Used Avail Use% Mounted on belial:/home 46G 53M 44G 1% /net/belial root@goblin:~#
Il faut que le répertoire existe. Il est préférable qu’il soit vide, par exemple juste créé. Les noms vont rapidement poser un problème. La nomenclature risque de devenir délicate si de nombreux serveurs exportent de nombreux systèmes de fichiers montés par de très nombreux clients.
Dans la description du fichier, il y a un numéro qui identifie le propriétaire du fichier. Ce numéro renvoie à la ligne considérée du fichier /etc/exports. Nous allons créer deux utilisateurs pour montrer ce point.
Nous créons gargamel, avec l’uid 2345 sur goblin.
root@goblin:~# adduser --uid 2345 gargamel Adding user `gargamel' ... ... root@goblin:~# id gargamel uid=2345(gargamel) gid=2345(gargamel) groups=2345(gargamel)
Puis nous créons l’utilisateur billy sur belial avec le même uid.
root@belial:~# adduser --uid 2345 billy Ajout de l'utilisateur billy ... ... root@belial:~# id billy uid=2345(billy) gid=2345(billy) groupes=2345(billy)
L’utilisateur billy crée un fichier :
billy@belial:~$ echo coucou > pourgargamel billy@belial:~$ ls -l total 4 -rw-r--r-- 1 billy billy 7 sept. 6 15:50 pourgargamel
L’utilisateur gargamel se déplace sur le répertoire monté.
gargamel@goblin:~$ echo coucou > fichiergargamel gargamel@goblin:~$ cd /net/belial/ gargamel@goblin:/net/belial$ ls arno billy lost+found nagios stud gargamel@goblin:/net/belial$ cd billy gargamel@goblin:/net/belial/billy$ ls -l total 4 -rw-r--r-- 1 gargamel gargamel 7 Sep 6 15:50 pourgargamel
Le fichier créé par billy appartient à billy sur le serveur et à gargamel sur le client.
Le service nfs n’est sécurisé que dans certains contextes. Tous les ordinateurs doivent être administrés par la même équipe et personne ne peut intercepter les communications.
Plusieurs options permettent de sécuriser le service. Le système de fichier peut être exporté en lecture seule, l’adminstrateur de la machine cliente ne sera pas adminstrateur sur le systèmes de fichiers monté, etc.
Il est possible d’activer des éléments cryptographiques pour authentifier le serveur et les clients et chiffrer les communications.
14.6.3 Les autres systèmes
Pour être complet, il faut mentionner d’autres systèmes de fichiers réseaux. Le protocole smb ou cifs est implémenté par Samba. Samba permet d’utiliser un client Linux avec un serveur Windows ou servir de serveur pour ces clients.
Samba est conçu pour être compatible. Cela signifie qu’il est affligé des mêmes vulnérabilités définies dans le protocole. Le cert-fr a publié une alerte sur ces vulnérabilités non corrigées depuis des années.