Configurer le Pi et le sécuriser

Notre Raspberry Pi est installé, mais il nous reste à le « mettre à notre main » pour qu’il soit adapté à l’usage que nous voulons en faire. A vrai dire, il n’y a plus grand chose à faire mais nous pouvons encore améliorer quelques points notamment pour améliorer sa sécurité.

Nous allons ici :

  • configurer le Pi,
  • modifier le port ssh,
  • procéder à un échange de clés.

Le paramétrage du Pi

Si nous ne sommes pas connecté, nous tapons

ssh k-sper.fr@raspberrypi.local

Le premier point sera de nous approprier la commande raspi-config, qui permet comme son nom l’indique de personnaliser sa configuration. Nous allons l’appeler par

sudo raspi-config

Vous voyez que les options sont nombreuses. Je vous conseille, à ce stade de votre progression, de voyager dans les différentes options afin d’adapter votre Raspberry à vos propres besoins, voire simplement de vous approprier cet outil.

Nous irons notamment modifier, dans Performance Options, le paramètre « P2 Overlay File System », qui va nous permettre d’étendre l’espace utilisé par le système à l’ensemble de notre carte micro-SD et de gagner ainsi beaucoup d’espace de stockage sur cette carte. Il faut pour cela naviguer avec les flèches de votre clavier jusqu’à « 6 Advanced Options », taper Entrée, puis aller à « A1 Expand File System », à nouveau Entrée, choisir Yes et à nouveau Entrée.

Ensuite nous allons choisir nos variables régionales dans « Localisation Options ». L’option « L1 Locale » est établie par défaut à « en_GB.UTF-8 UTF-8 », c’est-à-dire à l’anglais. Nous allons désélectionner cette option en choisissant cette ligne et en tapant sur la barre d’espacement, puis nous allons descendre à « fr_FR.UTF-8 UTF-8 » et choisir l’option, toujours avec la barre d’espacement. puis nous tapons Ok et choisissons « fr_FR.UTF-8 ».

Nous pouvons vérifier dans « L2 Timezone » que notre fuseau horaire a été bien paramétré.

Les autres options intéresseront les personnes qui disposent d’un clavier ou d’une connexion en wi-fi. Je ne doute pas qu’elles arriveront à trouver la réponse à leur besoin.

Nous sélectionnons Back, puis Finish.

A cette invite, nous validons le redémarrage afin que nos paramétrages soient bien pris en compte.

Comme le Pi redémarre, il faut s’y reconnecter après une minute ou deux.

ssh k-sper.fr@raspberrypi.local

Le changement de port SSH

Nous allons maintenant changer le port SSH. Le port est un numéro compris entre 1 et 65536, qui constitue un canal de communication, comme peut l’être une longueur d’onde pour les radiofréquences. Si vous essayez de communiquer sur un port et que votre interlocuteur écoute sur un autre port, vous n’avez aucune chance de communiquer.

Comme le SSH est très sensible, puisqu’il permet de prendre la main sur votre Raspberry pour le commander, je vous propose d’accroître la sécurité en modifiant le port SSH. Par défaut, il est à 22. Les ports disponibles librement (c’est-à-dire non-affectés automatiquement par le système) sont compris entre 1024 et 65536. Dans notre exemple, nous allons retenir le port 2345. Il ne s’agit que d’un exemple, choisissez-en un autre, que vous retiendrez. A quoi cela sert-il de modifier ce port ? A ce que quelqu’un qui voudrait vous attaquer par force brute, c’est-à-dire en essayant un grand nombre de mots de passe successifs, ne connaisse en réalité pas le port sur lequel notre Pi écoute.

Pour cela, nous allons éditer un fichier. L’éditeur de fichiers que nous utilisons sur notre Pi est nano. Le fichier qui va nous intéresser est /etc/ssh/sshdconfig. La commande sera donc

sudo nano /etc/ssh/sshd_config

Lorsque nous l’ouvrons, nous allons chercher la ligne

#Port 22

Vous l’aurez compris, c’est la ligne qui désigne le port utilisé pour la communication SSH. Le symbole dièse signifie que cette ligne est « commentée », en d’autres termes désactivée : elle est juste présente pour la lecture humaine. Il est d’ailleurs probable qu’elle apparaisse colorée dans votre console, selon un code couleur qui signifie qu’elle n’est pas interprétée. En effet, le port 22 étant le port SSH par défaut, il est inutile de le préciser. Nous allons maintenant modifier cette valeur.

Nous allons supprimer le signe dièse et remplacer 22 par 2345, qui sera notre nouveau port SSH.

Port 2345

A la suppression du symbole dièse, la ligne passe en blanc, signifiant qu’elle va être utilisée. Les premières lignes de mon fichier /etc/ssh/sshdconfig ressemblent désormais à ceci (elles peuvent être différentes chez vous compte tenu d’évolutions du modèle du fichier) :

Nous allons maintenant enregistrer le fichier en tapant la combinaison CTRL+O, valider le nom de fichier /etc/ssh/sshd_config en tapant entrée, puis sortir de l’éditeur nano en tapant CTRL+X.

Maintenant il faut relancer le processus sshd pour que les changements prennent effet. Nous faisons cela en tapant :

sudo service sshd restart

Maintenant nous allons vérifier que tout s’est bien passé : nous nous déconnectons du Raspberry en tapant

exit

Et nous nous reconnectons en tapant

ssh -p 2345 k-sper.fr@raspberrypi.local

Vous noterez que nous avons ajouté la mention « -p 2345 » (vous remplacerez 2345 par le numéro du port que vous avez choisi). Cette mention signifie que nous voulons désormais nous connecter via le port 2345 pour la commande ssh. Nous devrons systématiquement l’indiquer lors de nos prochaines connexions. Cette notation avec un ou deux tiret(s) suivi(s) d’une ou plusieurs lettre(s) ou de mots est un standard pour indiquer les options des commandes Linux.

L’échange de clés

Ensuite nous allons procéder à un échange de clés. Le principe est le suivant : nous allons créer sur l’ordinateur qui nous sert à piloter le Pi deux longues chaînes de caractère appelées clé publique et clé privée. Ces deux chaînes ont certaines caractéristiques mathématiques qui leur permettent en quelque sorte de se reconnaître. Une fois ces clés mises en place, nous pourrons contrôler notre Pi via SSH sans mot de passe, de manière plus sécurisée. Attention : si vous voulez accéder au Pi à partir de plusieurs appareils distincts, vous devrez appliquer cette procédure sur chacun des postes concernés. Re-attention : la procédure est appliquée pour partie sur le poste « client » (celui sur lequel vous avez physiquement accès) et sur le Pi ou poste serveur.

Nous allons donc dans un premier temps sortir de notre Pi en tapant

exit

Nous somme donc sur Powershell ou le terminal Linux. Nous avons la chance de pouvoir utiliser la même commande dans l’un et l’autre cas. Nous allons générer un couple de clés publique/privée :

ssh-keygen -t rsa -b 4096

L’option -t rsa indique que nous voulons utiliser l’algithme RSA pour la constitution du couple de clés, et l’option -b 4096 indique une clé codée sur 4096 bits. La génération de la clé prend quelques secondes.

Nous laissons ensuite l’emplacement de la clé tel que proposé en appuyant sur Entrée. Si nous sommes les seuls à avoir accès au poste client, nous pouvons éviter de saisir un mot de passe. Sinon, nous pouvons en saisir un pour accroître encore le niveau de sécurité. Dans les prochains articles, nous partirons sur l’hypothèse d’une absence de mot de passe.

Les clés sont stockées dans le répertoire ~/.ssh, où ~ représente l’accès au répertoire utilisateur (dans notre cas, sous Linux /home/<utilisateur>, et sous Windows C:Users\<utilisateur>\.ssh). Nous pouvons vérifier leur présence en tapant

ls ~/.ssh

Le fichier id_rsa est la clé privée qui va rester uniquement sur ce poste, et id_rsa.pub est la clé publique, que nous allons transmettre à notre Pi.

Ici, la procédure devient différente selon que le poste client est sous Windows ou sous Linux.

Sous Linux, il suffit de saisir la commande :

ssh-copy-id -p 2345 k-sper.fr@raspberrypi.local

Cette commande va copier notre clé publique id_rsa.pub de notre poste client vers le fichier authorized_keys au sein du répertoire ~/.ssh du Pi.

Nous pouvons maintenant effectuer notre première connexion avec les nouvelles clés au Raspberry.

ssh -p 2345 k-sper.fr@raspberrypi.local

Le système nous demandera alors de confirmer l’authenticité du serveur, nous répondons yes et nous sommes connectés sans mot de passe.

La procédure est plus complexe sous Windows. Nous allons nous connecter au Pi pour vérifier s’il dispose d’un répertoire .ssh et d’un fichier authorized_keys :

ssh -p 2345 k-sper.fr@raspberrypi.local

ls

Si vous avez suivi les articles de ce blog dans l’ordre, cette commande ne devrait renvoyer aucun contenu.

Dans ce cas, nous allons créer le répertoire .ssh et un fichier authorized_keys vide :

mkdir .ssh

touch .ssh/authorized_keys

Après quoi nous sortons du Raspberry.

exit

Et nous copions le contenu de la clé publique du poste client vers le Pi.

cat ~/.ssh/id_rsa.pub | ssh -p 2345 k-sper.fr@raspberrypi.local "cat >> ~/.ssh/authorized_keys"

Nous saisissons notre mot de passe et le tour est joué. Nous effectuons une première reconnexion avec l’utilisation des clés :

ssh -p 2345 k-sper.fr@raspberrypi.local

Et nous devrions être connecté sans avoir saisi de mot de passe

Nous pouvons désormais interdire l’accès au Raspberry avec mot de passe. Attention, dans ce cas, nous ne pourrons plus accéder au Pi qu’avec les postes clients avec lesquels nous avons procédé à un échange de clés.

sudo nano /etc/ssh/sshd_config

Nous cherchons la ligne « #PasswordAuthentication yes »

Nous allons la décommenter (retirer le symbole #) et remplacer yes par no.

Nous enregistrons le fichier par CTRL+O et sortons par CTRL+X.

Et nous relançons le processus SSH.

sudo service sshd restart

Notre Raspberry n’est désormais plus accessible que par le poste avec lequel nous avons installé les clés. Attention : si ce poste n’est plus utilisable, nous n’avons plus aucun accès au Pi.

Vous l’aurez compris, pour retrouver un accès avec mot de passe, il suffit de revenir à « PasswordAuthentication yes » dans le fichier /etc/ssh/sshd_config.


Si vous avez apprécié cet article, n’hésitez pas à laisser à son auteur un petit commentaire : il l’encouragera à le maintenir et à le développer.


Commentaires

8 réponses à “Configurer le Pi et le sécuriser”

  1. Erreur dans le tuto « copier la clé privée » mais la commande utilise le fichier rsa.pub donc la clé publique?

    1. Bonjour et merci pour la remarque. Erreur corrigée.

  2. Avatar de Arslan

    The « « » characters in the command « cat ~/.ssh/id_rsa.pub | ssh -p 2345 k-sper.fr@raspberrypi.local « cat >> ~/.ssh/authorized_keys » » must be replaced with the «  » » characters … I don’t know how to write this correctly) In general, instead of Christmas trees there are double quotes. At least that’s how it works for me

    1. Right, thank you ! Corrected !

  3. Avatar de Arslan

    text formatting of the site turns quotes into Christmas trees… I hope you understood my previous message

    1. Yes got it, thank you ! I have controlled all the articles and found no other occurrence of the problem.

  4. Avatar de Arslan

    Also in my case (on the latest current version of Raspbian), instead of the command sudo nano /etc/ssh/sshdconfig, I write the command sudo nano /etc/ssh/sshd_config

    1. You’re absolutely Goddam right !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *