Objectifs pédagogiques

Les objectifs principaux de ce sujet de travaux pratiques sont d'exécuter et de comprendre la procédure d'installation et la mise en œuvre d'un serveur de fichiers et d'un serveur FTP, permettant à des utilisateurs de partager des ressources hors de leur machine.

Un objectif secondaire est de consolider la pratique des interfaces de commande de ligne déjà abordée dans le sujet de TP R2‑2.

Pour traiter ces exercices, il est recommandé d'avoir étudié le chapitre R2‑V du cours. Des renvois aux principaux éléments de cours ou à des pages web d'information générale sont donnés au fur et à mesure des questions.

Mise en situation

Environnement et matériel

Les manipulations demandées sont à accomplir sur un réseau local utilisant la pile de protocoles TCP/IP et disposant de tous les services attendus : passerelle vers l'Internet, serveur DHCP, résolveur DNS.

La présence d'un serveur proxy comme ceux mis en œuvre par les DSI académiques de l'Éducation nationale peut sérieusement compliquer les procédures d'installation.

On requiert le matériel listé ci‑dessous :

  • pour jouer le rôle de client, un poste de travail – de préférence un PC Linux, sinon un PC Windows avec service ssh activé dans le terminal Powershell (cela évite de recourir à un logiciel tiers comme PuTTY) ;
  • pour jouer le rôle de serveur, un nano‑ordinateur de type Raspberry Pi 4 (ou éventuellement 3B), son bloc d'alimentation au secteur et une carte microSD de 8 Go minimum pour installer son système d'exploitation et ses logiciels ;
  • et associé à ce serveur, une clef USB pour jouer le rôle de support de stockage de masse et ainsi simuler un NAS (cf. chap. R2‑V ).

Ces deux machines doivent être l'une et l'autre raccordées au réseau local – typiquement, via un switch comme sur la figure ci‑dessus – et se voir attribuer chacune une adresse IP sur le même segment pour pouvoir communiquer – ce qui est assuré avec la présence d'un serveur DHCP sur le réseau local et la configuration appropriée des machines (cf. chap R2‑II ). Évidemment, il faut connaître la plage d'adresses IP dynamiques paramétrée par l'administrateur du réseau.

Pour des questions pédagogiques, pour contrôler la carte Raspberry Pi, plutôt que de lui raccorder spécifiquement un écran et un clavier, on fait le choix d'une connexion ssh via un terminal de commandes en ligne sur le poste de travail. C'est en effet la solution usuellement adoptée dans un contexte professionnel, et tout particulièrement dans le domaine du cloud computing.

Travail demandé

Effectuer toutes les manipulations méticuleusement dans l'ordre indiqué. Saisir les commandes en ligne par copier‑coller des commandes pour éviter les fautes de frappe et d'inattention. Dans une perspective de consolidation des connaissances, il est recommandé de bien comprendre le rôle de chaque commande, en consultant éventuellement les pages web données en référence.

Répondre aux explications demandées sur un cahier ou dans un fichier.

Travail préparatoire

  1. Préparation du poste de travail
  2. On applique la même procédure que dans le sujet de TP R2‑2 , à laquelle on se référera si le poste de travail fourni n'est pas prêt, en particulier s'il ne dispose pas de l'utilitaire de gravage Raspberry Pi Imager et d'un logiciel de scan de réseau comme par exemple Angry IP Scanner.
    De plus, on doit s'assurer que le poste de travail dispose d'un logiciel client pour le protocole FTP . Si tel n'est pas le cas, installer FileZilla. Avec le système Linux Mint, ce logiciel d'usage très courant est disponible via la logithèque.
  3. Préparation du système d'exploitation du serveur
  4. On applique la même procédure que dans le sujet de TP R2‑2 , à laquelle on se référera si le système d'exploitation du serveur n'est pas prêt sur la carte MicroSD fournie.
  5. Mise en service et paramétrage du serveur
  6. On applique la même procédure de mise en service, paramétrage (date, locale) que dans le sujet de TP R2‑2 , à laquelle on se référera.
    Rappelons que dans tous les cas :
    1. Il faut scanner le réseau local pour identifier l'adresse IP de la carte Raspberry Pi ; on peut alors établir une connexion en ssh via un terminal de commandes en ligne sur le poste de travail.
    2. Il est recommandé d'effectuer une mise à jour du système et des logiciels installés .

Installation et test d'un serveur de fichiers

Cette procédure est inspirée de celle proposée au lien suivant , avec toutefois un ordre différent d'exécution des opérations : les droits d'accès au répertoire public sont modifiés après le montage sur le support de masse, sinon ces modifications sont perdues lors du redémarrage du système.

  1. Installation et paramétrage du logiciel Samba
    1. En connexion ssh avec la carte Raspberry Pi, installer le logiciel serveur de fichiers samba (cf. chap. R2‑IV ) :
    2.     
      sudo apt install samba -y
    3. Éditer le fichier de configuration de samba, en activant la numérotation des lignes de l'éditeur nano :
    4.     
      sudo nano -l /etc/samba/smb.conf
      • Pour instaurer un contrôle d'accès, rechercher (à l'aide de la commande Ctrl-W de l'éditeur nano) la section # Authentication # et ajouter à fin de la section la ligne ci‑dessous :
      •   security = user
        
      • Pour autoriser l'accès en écriture au répertoires principaux de stockage, rechercher la section [homes] et paramétrer :
      •   read only = no
        
      • Pour configurer la partie publique, aller à la fin du fichier et ajouter une nouvelle section :
      • [public]
          comment = Public Storage
          path = /home/shares/public
          valid users = @users
          force group = users
          create mask = 0660
          directory mask = 0771
          read only = no
        
    5. Sauvegarder les modifications du fichier (Crlt-S), quitter l'édition (Ctrl-X) et relancer le logiciel samba :
    6.     
      sudo /etc/init.d/smbd restart
    7. Ajouter l'utilisateur pi au logiciel samba :
    8.     
      sudo smbpasswd -a pi
      en saisissant et confirmant le même mot de passe que celui pour se connecter à la carte Raspberry Pi (en cas de doute, demander à l'enseignant).
  2. Installation et paramétrage du support de stockage de masse
    1. Brancher la clef USB fournie sur un port USB2 de la carte Raspberry Pi.
    2. Déterminer l'identifiant attribué par le système à ce périphérique (storage device) :
          
      dmesg | grep "sd"
      Typiquement, on doit obtenir une ligne comme sda: sda1 où sda1 est l'identifiant cherché.
    3. Si ce n'est pas déjà fait, démonter le volume puis formater la clef avec une partition ext4 W :
    4.     
      umount /dev/sda1
      sudo mkfs.ext4 /dev/sda1
      Remarquer que la led intégrée à la clef USB clignoter durant le formatage.
    5. Dans le système de fichier de la carte, créer le répertoire public et le futur point de montage de la clef :
    6.     
      sudo mkdir -p /home/shares/public/disk1
      sachant que pour le moment, le répertoire share appartient à l'utilisateur root et au groupe root et n'est pas accessible en écriture aux autres utilisateur – ce que l'on peut vérifier via la commande :
            
      ls -l /home/shares/
      Ces propriétés et droits seront modifiés après montage du volume (question 2.e).
    7. Monter le volume sda1 à son point de montage (le répertoire /home/shares/public/disk1) :
    8.     
      sudo mount /dev/sda1 /home/shares/public/disk1
      puis rendre le montage automatique au démarrage de la carte, en éditant le fichier fstab (file systems table) :
          
      sudo nano /etc/fstab
      et tout à la fin du fichier, en ajoutant la ligne :
      /dev/sda1 /home/shares/public/disk1 auto noatime,nofail 0 0
      
      Sauvegarder les modifications du fichier (Crlt-S), quitter l'édition (Ctrl-X).
    9. Autoriser l'accès en lecture et écriture dans ce répertoire public aux utilisateurs du groupe users dont pi fait partie. Pour cela, attribuer le groupe users et avec les droits d'écriture à au répertoire (et tous ses enfants) :
    10.     
      sudo chown -R root:users /home/shares/public
      sudo chmod -R 775 /home/shares/public
      Vérifier que ce paramétrage est effectif :
          
      ls -l /home/shares/
      ls -l /home/shares/public
      Vérifier également que l'utilisateur pi appartient bien au groupe users avec la commande groups pi.
    11. Redémarrer la carte (sudo reboot), renouveler la connexion ssh et vérifier à l'aide de la commande :
    12.     
      df | grep sda1 # disk-free
      que le volume est bien monté automatiquement au démarrage.
      À l'aide de la même commande qu'à la question 2.e supra, vérifier que les propriétés et droits du répertoire public n'ont pas changé.
    13. Sur la racine du volume disk1, créer un fichier vide testFile1.txt :
    14.     
      touch /home/shares/public/disk1/testFile1.txt
      Dans ce fichier vide, ajouter le message de bienvenue « Welcome to the NAS » :
          
      echo 'Welcome to the NAS!' >> /home/shares/public/disk1/testFile1.txt
      Quelle commande aurait permis d'obtenir le même résultat que les deux commandes précédentes ?
      Vérifier que cet ajout est effectif :
          
      cat /home/shares/public/disk1/testFile1.txt
  3. Exploitation du serveur de fichiers
  4. Les manipulations sont à effectuer avec un PC à système Linux et Windows.
    1. Sur un poste de travail Linux Mint (bureau Cinnamon), dans le panneau latéral d'une fenêtre d'explorateur de fichiers, cliquer sur le lien Réseau et ouvrir l'accès au volume disk1 via une procédure d'authentification pour l'utilisateur pi.
    2. Sur un poste de travail Windows, la procédure est similaire, il faut passer par la commande ajouter un emplacement réseau .
    3. Sur le poste de travail, ouvrir le fichier testFile1.txt avec un éditeur (par exemple, Sublime Text), puis modifier son texte (par exemple, ajouter un point d'exclamation), sauvegarder et quitter.
    4. Sur la carte Raspberry Pi, vérifier que cette modification est effective en affichant le contenu du fichier testFile1.txt dans le terminal de commandes en ligne.
    5. Sur le poste de travail, créer un nouveau fichier vide testFile2.txt.
    6. Sur la carte Raspberry Pi, vérifier que ce fichier apparaît dans le volume disk1.

Installation et test d'un serveur FTP

La procédure indiquée permet de mettre en place un serveur FTP (cf. chap. R2‑V ) avec contrôle d'accès sur le volume disk1 créé à la section 2. Deux approches sont successivement proposées :

  • avec le protocole FTP, donc sans chiffrement des échanges client‑serveur ;
  • avec le protocole FTPS, donc avec chiffrement des échanges client‑serveur par le protocole TLS.
  1. Installation et paramétrage du paquet vsftpd en mode FTP
    1. En connexion ssh avec la carte Rasberry Pi, commencer par installer le paquet vsftpd (cf. chap. R2‑V ) :
    2.     
      sudo apt install vsftpd -y
    3. Ensuite, avant toute configuration, il est recommandé de sauvegarder une copie du fichier de configuration vsftpd.conf, pour y revenir en cas de dysfonctionnement :
    4.     
      sudo cp /etc/vsftpd.conf /etc/vsftpd.conf_back
      On peut alors éditer ce fichier de configuration, en activant la numérotation des lignes de l'éditeur nano :
          
      sudo nano -l /etc/vsftpd.conf
      sachant que les différents paramètres à modifier ne sont pas regroupés. Il est donc commode de les rechercher à l'aide de la commande Ctrl-W de l'éditeur nano.
    5. La configuration par défaut de l'application VsFTPD est restrictive. Les accès sont prévus mais peu sont autorisés. Pour rendre le serveur fonctionnel, il faut donc dé‑commenter la ligne d'affectation de chaque paramètre d'accès souhaité et/ou changer la valeur d'affectation pour obtenir les lignes suivantes.
    6. write_enable=YES
      
      Cela permet aux utilisateurs d'ajouter ou de supprimer des fichiers sur le serveur.
      idle_session_timeout=600
      
      Cela fixe à 10 min (600 s) le délai maximal entre deux commandes que le client doit respecter, sinon il perd la connexion au serveur (cela évite qu'un client inactif reste connecté indéfiniment.)
      ftpd_banner=Welcome to CIELx FTP service
      
      où x est un numéro attribué par l'enseignant.
      Le message de bienvenue est alors affiché au début d'une connexion.
      utf8_filesystem=YES
      
      Les noms des dossiers et des fichiers transférés peuvent alors être composés avec des caractères pris dans l'UCS et encodés au format UTF‑8 (cf. chap. C3‑IX ).
      De plus, à la fin du fichier, ajouter la ligne suivante :
       local_root=/home/shares/public/disk1/ 
      pour définir le dossier d'accès dans le système de fichiers du serveur FTP.
      Pour finir, sauvegarder (Ctrl-S) et quitter (Ctrl‑X) l'édition.
    7. Redémarrer le service pour prendre en compte ces modifications :
    8.     
      sudo systemctl restart vsftpd
      et vérifier qu'il s'exécute bien en tâche de fond :
          
      systemctl status vsftpd
  2. Utilisation du serveur FTP via la commande ftp et avec FileZilla
    1. Sur le poste de travail, dans un terminal de commandes en lignes créer un répertoire et des fichiers de test en exécutant la série de commandes ci‑dessous :
    2.     
      mkdir FTP_LOCAL_1 && cd FTP_LOCAL_1 && echo "Test FTP ASCII 1" > ftpTest1 && touch ftpTest2 && echo "Test FTP UTF-8 (nom du fichier)" > fichierSécurité && mkdir FTP_LOCAL_2 && ls -l
      Lire attentivement l'affichage obtenu pour la dernière commande (ls -l) et vérifier l'exécution correcte de toutes les commandes précédentes.
    3. Ensuite, établir une connexion au serveur FTP en tant qu'utilisateur pi avec le même mot de passe que pour se connecter en SSH :
    4.       
      ftp pi@adresse IP de la carte
      Le message paramétré dans le fichier de configuration s'affiche‑il ?
    5. Maintenant, exécuter les commandes suivantes une par une, en expliquant ce que fait chacune. Veiller à ne pas supprimer d'autres fichiers ou dossiers que ceux mis en œuvre dans le cadre de ce TP, tant sur le poste de travail que sur le serveur :
      1. pwd puis ls
      2. mk FTP (ou mkdir) puis ls puis cd FTP puis pwd
      3. lpwd (ou !pwd) puis !ls
      4. put ftpTest1 puis ls
      5. del ftpTest1 puis ls
      6. mput ftpTest1 ftpTest2 en confirmant par a (all) puis ls
      7. mk TEST_DIR puis cd TEST_DIR puis pwd
      8. mput * en confirmant par p (prompt off) puis ls
      9. mdel * puis ls
      10. cd .. puis ls
      11. ls TEST_DIR puis rm TEST_DIR (ou rmdir) puis ls
      12. lcd FTP_LOCAL_2 puis !ls -l
      13. get ftpTest1 puis !ls -l
      14. !rm ftpTest1 puis !ls -l
      15. mget ftpTest1 ftpTest2 puis !ls -l
      16. !rm ftp* puis !ls -l puis lcd ..
      17. !rmdir FTP_LOCAL_2 (et non pas !rm) puis !ls -l
      18. cd ../.. puis pwd
      19. quit (ou exit)
    6. Sur le poste de travail, lancer l'application FileZilla. Dans le menu Fichier, paramétrer une connexion au serveur via la commande Gestionnaire de site…, en cliquant sur le bouton Nouveau site.
      • Donner à la connexion le nom RPIx où x est le même numéro que celui renseigné à la question 1.c (cf. supra ) pour la bannière d'accueil.
      • Renseigner tous les paramètres de l'onglet Général comme sur la capture d'écran ci‑dessus, en saisissant dans la rubrique Hôte l'adresse IP du serveur FTP
      • Remarque : il n'est pas nécessaire de renseigner le nº de port, sauf si l'on souhaite utiliser un port non standard.
      Et pour finir, cliquer directement sur le bouton Connexion.
      Quel message s'affiche lors de l'établissement de la connexion ?
    7. Dans le navigateur du site local (colonne de gauche), retrouver et ouvrir le dossier FTP_LOCAL_1. Effectuer alors des manipulations  – création de dossiers, transferts de fichiers dans un sens et dans l'autre, suppression de fichiers, etc. (comme cela était demandé à la question 2.c avec la commande en ligne ftp).
    8. Pour finir, terminer la connexion au serveur en cliquant sur le bouton de déconnexion dans la barre d'outils.
    9. Expérimenter la connexion FTP au serveur depuis le poste de travail en utilisant les fonctionnalités du navigateur de fichiers Nemo, comme expliqué dans le cours, chap. R2‑V . Une fois la connexion établie :
      • Effectuer les mêmes manipulations de fichiers que précédemment avec l'interface graphique.
      • Dans la fenêtre de navigation, ouvrir un terminal de commandes en lignes et opérer ainsi quelques manipulations de fichiers pour vérifier qu'elles sont possible également de cette manière.
      Conclure quant à la facilité d'emploi de cette méthode comparativement aux précédentes.
  3. Paramétrage et utilisation du paquet vsftpd en mode FTPS
    1. En connexion ssh avec la carte Raspberry Pi, éditer à nouveau le fichier de configuration vsftpd.conf :
    2.     
      sudo nano -l /etc/vsftpd.conf
      et activer le chiffrement avec le paramétrage ci‑dessous :
      ssl_enable=YES
      
      Sauvegarder (Ctrl-S) et quitter (Ctrl‑X) l'édition puis redémarrer le service pour prendre en compte cette modification :
          
      sudo systemctl restart vsftpd
    3. Sur le poste de travail, relancer l'application FileZilla. Dans le menu Fichier, sélectionner la commande Gestionnaire de site… pour modifier la connexion RPIx. Choisir pour la rubrique Chiffrement :
      Connexion explicite sur TLS
      puis cliquer directement sur le bouton Connexion.
    4. Vérifier que toutes les manipulations effectuées à la question 2.d sont faisables normalement avec ce protocole sécurisé par chiffrement.