Installation générique d’un serveur Raspberry Pi

La première étape de la mise en place de mon système de sauvegarde automatisé est l’installation du serveur.

Celui-ci, qui sera allumé en permanence, et sur lequel seront branchés les disques durs, sera un mini-ordinateur Raspberry Pi B de première génération, qui me rend service depuis bien des années. Ce n’est pas un système professionnel sur base de baies de stockage, de NAS, de Raid. Ça n’offre pas les mêmes performances ni la même fiabilité, mais c’est fondamentalement moins cher et c’est amplement suffisant pour une utilisation personnelle.

Ci-dessous, je détaille l’ensemble des étapes que je réalise pour avoir un système basique mais entièrement configuré et sécurisé.

Prérequis et matériel

Le présent tutoriel nécessite qu’on ait à notre disposition :

  • Un Raspberry Pi (Modèle B de première génération dans mon cas) et son alimentation USB ;
  • Un câble RJ45 pour le relier au réseau ;
  • Une carte SD
  • Un ordinateur (ici mon portable nommé “laptop”)

Installation sur la carte SD

On va suivre la documentation officielle reprise ci-dessous.

On insère notre carte SD dans l’ordinateur, on s’assure qu’elle est bien accessible au chemin /dev/mmcblk0, et qu’elle est démontée :

user@laptop:~$ ls /dev/mmc*
/dev/mmcblk0  /dev/mmcblk0p1  /dev/mmcblk0p2

user@laptop:~$ mount | grep mmc
/dev/mmcblk0p1 on /media/vetetix/boot type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2)
/dev/mmcblk0p2 on /media/vetetix/rootfs type ext4 (rw,nosuid,nodev,relatime,uhelper=udisks2)

user@laptop:~$ umount /dev/mmcblk0p*

user@laptop:~$ mount | grep mmc

On télécharge la dernière version de Raspberry Pi OS (anciennement connue sous le nom de Raspbian) en version « lite » (serveur minimal) :

user@laptop:~$ wget -O raspbian.zip https://downloads.raspberrypi.org/raspbian_lite_latest

On installe Raspberry Pi OS sur la carte SD (Attention, la commande dd est dangereuse si elle est mal utilisée !) :

user@laptop:~$ unzip -p raspbian.zip | sudo dd of=/dev/mmcblk0 bs=4M status=progress conv=fsync

Mon serveur ne sera jamais connecté à un écran, donc il faut pouvoir y accéder via le réseau dès le premier démarrage en activant le serveur ssh. On doit donc monter la partition “boot” (/dev/mmcblk0p1) via Nautilus (ou par un sudo mount), puis créer un fichier vide nommé “ssh” à sa racine :

user@laptop:~$ sudo mkdir /media/vetetix/boot
user@laptop:~$ sudo mount /dev/mmcblk0p1 /media/vetetix/boot
user@laptop:~$ touch /media/vetetix/boot/ssh

Enfin, on finalise l’écriture des données avant d’extraire la carte mémoire :

user@laptop:~$ sync
user@laptop:~$ sudo umount /media/vetetix/boot

On peut maintenant insérer la carte SD dans le Raspberry Pi et démarrer sur ce système nouvellement installé. Le Raspberry Pi doit être relié au réseau avec un câble RJ45. Si ça ne démarre pas, il existe des documentations très complètes en ligne (en) pour identifier la source du problème.

Configuration et amélioration de la sécurité

Avant d’utiliser le serveur, il faut le configurer et le sécuriser, surtout s’il est amené à contenir des données sensibles ou être accessible depuis internet.

La documentation officielle contient une série de conseils de sécurité très utiles (en). J’en reprends certains ci-dessous.

On se connecte en ssh à notre machine (après avoir trouvé son adresse IP en consultant l’interface de son routeur ou via un sudo nmap -p 22 192.168.0.0/24). Le couple “user/password” par défaut est “pi/raspberry” :

user@laptop:~$ ssh pi@192.0.1.26

Mises à jour et sécurisation

Raspberry Pi OS est très mal sécurisé par défaut. Il est néanmoins facile de mettre en place une sécurité minimale :

# Mise à jour initiale :
pi@raspberry:~$ sudo apt update && sudo apt -y full-upgrade

# On met en place un pare-feu basique mais suffisamment restrictif pour être efficace :
pi@raspberry:~$ sudo apt install ufw
pi@raspberry:~$ sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
pi@raspberry:~$ sudo reboot

# On termine après le redémarrage :
pi@raspberry:~$ sudo ufw allow ssh
pi@raspberry:~$ sudo ufw limit ssh/tcp
pi@raspberry:~$ sudo ufw enable

# On vérifie que les bonnes règles ont été créées :
pi@raspberry:~$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     LIMIT       Anywhere
22/tcp (v6)                LIMIT       Anywhere (v6)

# On change le mot de passe de l’utilisateur "pi" :
pi@raspberry:~$ passwd

# On impose l’usage du mot de passe avec la commande sudo.
# Il faut la ligne : pi ALL=(ALL) PASSWD: ALL
pi@raspberry:~$ sudo visudo /etc/sudoers.d/010_pi-nopasswd

Réglage du fuseau horaire

Il est aussi nécessaire de configurer le bon fuseau horaire, qui est par défaut en “GMT” :

pi@raspberrypi:~ $ date
Thu 25 Mar 09:05:08 GMT 2021

pi@raspberrypi:~ $ sudo dpkg-reconfigure tzdata 
[sudo] password for pi:

Current default time zone: 'Europe/Paris'
Local time is now:      Thu Mar 25 10:08:46 CET 2021.
Universal Time is now:  Thu Mar 25 09:08:46 UTC 2021.

Réglages supplémentaires

Pour ce que j’en fais, j’en reste là, mais d’autres modifications sont envisageables :

  • désactivation de l’utilisateur “pi” après avoir créé un nouvel utilisateur principal (en) ;
  • renommage du serveur (en) (hostname) ;
  • activation de fail2ban ;
  • désactivation des accès ssh root, ou par mot de passe ;
  • utilisation de clés SSH et d’un fichier de configuration ssh (en) ~/.ssh/config afin que ssh pi@192.0.1.26 soit raccourci en un simple ssh rpi ;
  • Réglage d’une IP fixe (en dur ou en assignation manuelle au niveau du serveur DHCP du routeur).

Au besoin, il est possible de lancer l’utilitaire raspi-config, qui propose de nombreux réglages, dont la plupart de ceux traités ci-dessus.

Administration quotidienne du serveur

De temps en temps, il est nécessaire de se connecter au serveur afin de faire un sudo apt update puis un sudo apt full-upgrade.

Des outils existent pour réaliser les mises à jour automatiquement (unattended-upgrades) ou prévenir l’administrateur de leur existence (cron-apt).