Ce mémo a été publié le 21 avril 2018 et peut contenir des informations qui peuvent être incomplètes, non mises à jour voir erronées du fait de son ancienneté. N'hésitez pas à compléter votre recherche sur des articles plus récents.
4.9/5 - (7 votes)

Mémo pour démarrer rapidement l’installation et la configuration d’un Raspberry Pi 3 (Modèle B) en mode serveur.
C’est à dire sans écran ni clavier, ni interface graphique, etc.
Juste du SSH !

Note

Ce mémo va évoluer au fur et à mesure de mes besoins ou retours dans les commentaires.

Sommaire

Mis à jour avec Raspbian Debian 10 Buster.

Liste des sujets traités sur ce mémo :

  • Installer Raspbian
  • Activer le SSH
  • Premier démarrage
  • Le sudo
  • Arrêter / redémarrer le Raspberry Pi
  • Mettre à jour raspi-config
  • Mise à jour du firmware : rpi-update
  • Étendre la capacité de stockage
  • Changer la langue
  • Changer le clavier de QWERTY à AZERTY
  • Date et heure
  • Récupérer un max de mémoire vive
  • Mise à jour
  • Sécuriser (un peu) l’accès SSH
  • Désactiver le matériel inutile
  • Changer le nom
  • Adresse ip fixe
  • Désactiver l’ipv6
  • Recevoir des e-mails du Raspberry Pi
  • Recevoir les mises à jour par e-mail
  • Utiliser un peu plus la mémoire
  • Mot de la fin

Installer Raspbian

Sur le site officiel raspberrypi.org, télécharger « Raspbian Stretch Lite ».

Que l’on soit sous Windows ou Linux ou Mac, utiliser Etcher pour transférer l’image sur la carte microSD.

Activer le SSH

Avant d’insérer la carte microSD dans le Raspberry PI, il faut créer un fichier nommé « ssh » sans extension à la racine de la partition boot.

Sous Linux un simple « touch ssh » suffit.

Premier démarrage

  1. Insérer la carte microSD dans le Raspberry Pi.
  2. Connecter un câble réseau RJ45 au Raspberry Pi et au switch (ou box internet).
  3. Alimenter le Raspberry Pi.

Au bout de quelques secondes, le Raspberry Pi doit être visible dans la liste des équipements connectés à partir de l’interface du switch ou de la box.
Récupérer son adresse IP et ouvrir une session ssh avec l’utilisateur pi :

Le mot de passe par défaut est « raspberry ».
A changer rapidement bien entendu !

Résultat :

Le sudo

Sudo or not sudo ?

Accorder sudo à un utilisateur c’est accordé les droits d’administrateur (root) sans fournir le mot de passe root.
Sur une machine multi-admin, ça peut être utile.

Personnellement, je considère qu’un utilisateur qui est dans le groupe sudo génère une situation à risque surtout si cette machine est accessible via internet.
Un piratage par force brut du mot de passe ou une récupération de clé SSH (négligemment stockée en clair sur une clé USB, un smartphone ou un cloud) et zop, le serveur vole en éclat.

A vous de faire votre choix.

Si pas sudo alors

Activer le mot de passe root :

Ensuite il suffit de se connecter avec l’utilisateur normal, puis de taper cette commande pour être root :

On peut alors supprimer l’utilisateur du groupe sudo (et adm pour plus de sécurité) :

Plus d’information sur les groupes sur le wiki de Debian : https://wiki.debian.org/SystemGroups

Editer le fichier /etc/sudoers.d/010_pi-nopasswd  :

Et commenter la ligne :

Sécuriser le fichier :

Relancer bien le Raspberry Pi, sinon, l’utilisateur pi sera toujours autorisé à exécuter des commandes sudo.

Du coup, si vous tentez d’utiliser sudo avec l’utilisateur pi, Raspbian vous demande un mot de passe puis vous refuse l’accès :

Si sudo alors

Dans le cas où vous voulez tout de même utiliser sudo.
Je ne sais pas vous, mais j’ai tendance à oublier d’ajouter « sudo » devant les commandes qui ont besoin d’avoir les droits root.
Petite astuce pour ne plus avoir à le faire :

A partir de là, plus besoin d’ajouter « sudo » à toutes les commandes.

Si vous ne vous êtes pas déconnecté après avoir changé le mot de passe, vous devriez avoir ce message :

Utiliser « Ctrl+d » 2 fois pour se déconnecter du sudo puis de la connexion ssh.
Puis se reconnecter au Raspberry Pi en SSH.
Le message devrait avoir disparu à la connexion sudo.

Sauf avis contraire dans la suite de ce mémo, les commandes sont exécutées avec l’utilisateur root (le vrai, donc sans sudo 😉 ).

Arrêter / redémarrer le Raspberry Pi

Petite mise au point avant de commencer.

Je vois pas mal d’utilisateurs qui relancent leur Raspberry en débranchant la prise puis en la rebranchant.
!! A NE FAIRE QUAND CAS D’ABSOLUE NÉCESSITÉ !!
Vous risquez de perdre des données sinon.
Faut réfléchir un peu bon sang, c’est pas une console de jeux mais un ordinateur.

La bonne méthode pour redémarrer est :

La commande « reboot » marche aussi.

Depuis Debian 10 Buster (et sûrement Debian 9), il est recommandé d’utiliser cette commande :

(Eviter –force en argument, les services ne sont pas arrêtés proprement)

La commande pour arrêter :

Il existe aussi la commande « init 0 », mais elle est un peu brutale à mon goût (genre kill -9).

Depuis Debian 10 Buster (et sûrement Debian 9), il est recommandé d’utiliser cette commande :

 

Mettre à jour raspi-config

Exécuter raspi-config :

Sélectionner l’option « 8 Update » et attendre la fin du processus.

Ou directement avec cette commande :

Raspi-Config se chargera à la fin du processus.

Mise à jour du firmware : rpi-update

« Un moyen plus facile d’obtenir le dernier firmware pour votre Raspberry Pi. »

Page officielle : https://github.com/Hexxeh/rpi-update

Comme expliqué sur le site, rpi-update va mettre à jour le firmware du Raspberry Pi 3.

!! NE PAS DÉBRANCHER LE RASPBERRY PI LORS DE LA MISE A JOUR !!

Exécuter rpi-update :

Résultat :

Comme indiqué, relancer le Raspberry Pi 3 :

Étendre la capacité de stockage

A priori sous Debian 10, cette opération est effectuée au premier boot automatiquement, même sur une clé USB.

Ne fonctionne que si Raspbian est sur une carte MicroSD, pas sur une clé USB ou un disque dur externe.

Exécuter raspi-config :

  1. Sélectionner l’option « 7 Advanced Options »
  2. Sélectionner l’option « A1 Expand Filesystem »
  3. Sortir de raspi-config et confirmer le reboot.

Changer la langue

Par défaut, Raspbian est en anglais « en_GB.UTF-8 » :

Pour changer vers fr_FR.UTF-8 UTF-8, exécuter raspi-config :

  1. Sélectionner l’option « 4 Localisation Options »
  2. Puis « I1 Change Locale ».
  3. Dans la liste rechercher et cocher avec la barre espace « fr_FR.UTF-8 UTF-8 ».
  4. A la question « Default locale for the system environment: », sélectionner « fr_FR.UTF-8 » et valider.

La prise en compte se fera au redémarrage du Raspberry Pi :

Vérification :

La commande « Debian-Like » est :

Changer le clavier de QWERTY à AZERTY

Par défaut, le clavier du Raspberry Pi est en QWERTY.
Si on ne se connecte qu’en SSH, ça sert à rien vous me direz.
Eh ben si on se trompe dans sa configuration réseau, ça peut servir !

Cette manipulation est à faire sans passer par SSH.

Dans raspi-config :

  1. Sélectionner « 4 Localisation Options »
  2. Puis « I3 Change Keyboard Layout »
  3. Garder « PC générique 105 touches (intl) » et valider
  4. Sélectionner « Autre » et valider
  5. Chercher « Français » et valider
  6. Sélectionner « Français » dans la disposition du clavier et valider
  7. Garder « Disposition par défaut pour le clavier » et valider
  8. Garder « Pas de touche « compose » » et valider

Date et heure

Changer le fuseau horaire

Par défaut, le Raspberry Pi fraichement installé est sur le fuseau UTC.

Dans raspi-config :

  1. Sélectionner « 4 Localisation Options »
  2. Puis « I2 Change Timezone »
  3. Dans la liste, sélectionner « Europe », puis « Paris ».
  4. Valider.

La commande « Debian-Like » est :

Changer la date et l’heure

[MAJ]

Un mémo spécialement dédié ici : « Debian – NTP, systemd-timesyncd.service et timedatectl« .

[/MAJ]

2 façons de remédier à ça (et une qu’il ne faut plus faire)

  • Via raspi-config, le plus rapide mais pas le plus pérenne en cas d’arrêt prolongé du Raspberry Pi.
  • Activer le serveur natif de Raspbian Debian Stretch
  • NE PAS installer un client NTP (Network Time Protocol) qui se chargera de le faire à intervalle régulier et au démarrage.

Jusque là je conseillais d’utiliser NTP, mais…

En réalité, sur un Raspberry Pi 3 avec Debian Stretch et suivant, mes tests m’ont conduit à déconseiller l’usage de NTP.
Sous Raspbian Debian Stretch (et suivant), il y a déjà un service de synchronisation du temps, mais malgré les apparences, il est désactivé.

A priori, sous Debian 10 Buster, il est actif par défaut.

Un petit check avec :

Résultat :

Pour l’activer, utiliser simplement cette commande :

Encore un petit check :

Sous Debian 10 Buster :

NTP service est actif.

Si vous utilisez NTP, vous aurez des soucis, notamment, si vous transférez le système sur un disque dur externe au lieu d’utiliser la carte microSD.
Dans le journal ($ journalctl), vous aurez ce type de message :

Et au démarrage :

Donc, on va éviter !

Récupérer un max de mémoire vive

Par défaut, 64Mo de la mémoire vive est allouée au GPU, le processeur graphique.
Hors, dans ce mémo, je configure un serveur sans écran.

Dans raspi-config :

  1. Sélectionner « 7 Advanced Options »
  2. Puis « A3 Memory Split »
  3. Supprimer « 64 » et saisir « 16 »
  4. Valider
  5. Sortir de raspi-config et confirmer le reboot.

Avant :

Après :

Mise à jour

Exécuter une mise à jour de Raspbian :

Valider si des mises à jour sont disponibles.

Si l’accès réseau vous semble lent lors des mises à jour, vous pouvez les arrêter (Ctrl+C), et suivre les indications plus bas pour une adresse ip fixe et désactiver l’ipv6.
Ensuite, relancer la mise à jour.

Sécuriser (un peu) l’accès SSH

Les actions suivantes vont modifier le fichier « /etc/ssh/sshd_config ».
Il est recommander d’en faire une copie avant :

Changer le port par défaut

Éditer le fichier « /etc/ssh/sshd_config ».

Rechercher la ligne « #Port 22 » et dupliquer là vers « Port 11022 » ou un autre port non utilisé.
Les plus communs sont listés sur Wikipedia.org.

Pour une prise en charge immédiate :

La connexion se fera dorénavant avec cette commande :

Remplacez user et l’adresse ip par vos paramètres.

Désactiver l’accès root

Toujours dans le fichier « /etc/ssh/sshd_config ».

Rechercher le pavé :

et ajouter cette ligne sous « #PermitRootLogin prohibit-password » :

Relancer le service SSH :

Ne plus se connecter avec l’utilisateur « pi »

Et oui, c’est assez dangereux de laisser l’utilisateur par défaut qui peut être utilisé pour se connecter au système.
Donc il faut créer un nouvel utilisateur qui aura le droit de se connecter en SSH et désactiver l’accès SSH à l’utilisateur « pi ».

Exemple de création d’un nouvel utilisateur « mignouf » :

Par défaut, le nouvel utilisateur fait parti de son propre groupe.

L’utilisateur pi quand à lui fait parti par défaut de ces groupes ) :

(Sauf sudo si vous l’avez enlever au début de ce mémo)

Donnons les mêmes droits au nouvel utilisateur :

(Sauf sudo si vous avez décidé de vous connecter avec root)

Se déconnecter du root puis du SSH avec « Ctrl+d » 2 fois.
Puis se connecter avec le nouvel utilisateur :

Supprimer pi du groupe sudo :

La commande « deluser » ne supprime pas un utilisateur, mais retire un utilisateur d’un groupe.

Connexion par clé (et plus par mot de passe)

Sur le client, récupérer la clé publique.
Par défaut sous Linux, elle se trouve dans le répertoire de l’utilisateur : ~/.ssh/id_rsa.pub
Mais elle peut porter un autre nom.
Ne pas confondre avec ~/.ssh/id_rsa qui est la clé privée et qui doit rester privée !!

Si vous devez gérer plusieurs serveurs distants, jetez un œil sur mon (vieux) mémo : « Debian – SSH et authentification par clé« .

Sur le Raspberry Pi, dans le répertoire de l’utilisateur qui permet la connexion ssh.

  1. Créer s’il n’existe pas le répertoire ~/.ssh :
  1. Dans ce répertoire, créer un fichier ~/.ssh/authorized_keys
  2. Dans ce fichier, coller la clé publique du client.
  3. Enregistrer et fermer le fichier.
  4. Donner les droits d’accès 600 à ~/.ssh/authorized_keys (sinon, il n’est pas considéré comme fichier sûr et sera ignoré)
Tester la connexion qui devrait se faire sans saisir le mot de passe.

Désactiver le matériel inutile

Suivant le besoin, il est nécessaire de désactiver ce qui n’est pas utile.
Cela permet d’éviter de surcharger le mémoire de drivers inutiles et accessoirement améliore la sécurité.

Désactiver le bluetooth

Arrêter et désactiver le service :

Désactiver le bluetooth au niveau hardware :

  1. Éditer le fichier /boot/config.txt
  2. Ajouter en bas :
  1. Enregistrer et relancer le Raspberry Pi.
  2. Vérifier :

Désactiver le wifi

Actuellement :

  1. Éditer le fichier /boot/config.txt
  2. Ajouter en bas :

  1. Enregistrer et relancer le Raspberry Pi.
  2. Vérifier :

Désactiver la carte audio

Par défaut la carte audio est activée :

  1. Éditer le fichier /boot/config.txt
  2. Chercher la ligne :

  1. Et la modifier par :

  1. Enregistrer et relancer le Raspberry Pi.
  2. Vérifier :

Changer le nom

Par défaut, lors d’une nouvelle installation, le système s’appelle : raspberrypi

Méthode 1

Dans raspi-config :

  1. Sélectionner « 2 Network Options »
  2. Puis « N1 Hostname »
  3. Valider l’avertissement :
    • lettres minuscules (pas sensible à la casse)
    • les chiffres de 0 à 9
    • le nom ne doit ni commencer ni finir par un trait d’union (tiret).
    • pas de symboles, de signes de ponctuation ou d’espace
  4. Saisir le nouveau nom et valider
  5. Sortir de raspi-config et confirmer le reboot.

Vérifier :

Méthode 2

Testée sur Raspbian Debian 10 Buster.

Vérification :

Résultat :

Adresse ip fixe

Pré-requis

Une fois le nom décidé et changé, on peut attribuer une ip fixe à notre Raspberry Pi en mode serveur.

Mais il faut d’abord activer la prédiction de noms des interfaces réseau de systemd.
Ben oui, adieux eth0 dans Debian 9, alors autant s’y habituer maintenant.

Dans raspi-config :

  1. Sélectionner « 2 Network Options »
  2. Puis « N3 Network interface names »
  3. Répondre « Oui » et valider
  4. Sortir de raspi-config et confirmer le reboot.

Avant :

Après :

La carte réseau est passée de eth0 à enxb827ebf96421.

Ok c’est pas top, mais si on ajoute une carte réseau (si si c’est possible sur Raspberry Pi) ça peut éviter pas mal de confusion.

Méthode 1 : Paramétrage à l’ancienne

Permet de désactiver le service DHCPCD et de gagner en mémoire.
A ne pas utiliser si vous planifier de mettre en place un serveur DHCP sur le Raspberry Pi.

Créer le fichier /etc/network/interfaces.d/enxb827ebf96421.
Le nom du fichier est le nom de l’interface sans extension.
Ajouter la configuration à adpater au besoin :

Pour forcer le ou les serveurs DNS, ajouter cette ligne :

Les ip correspondent à des serveurs publiques, mais on peut mettre son propre serveur.

Le fichier complet :

Arrêter et désactiver DHCPCD :

Redémarrer le Raspberry Pi :

Vérifier que le Raspberry est accessible et accède aussi au réseau.

Vérifier la configuration des serveurs DNS :

Méthode 2 : ip fixe dans DHCPCD

Editer le fichier /etc/dhcpcd.conf et ajouter ces lignes à la fin :

Redémarrer le Raspberry Pi :

 

Désactiver l’ipv6

L’ipv6 c’est bien, mais encore faut-il avoir tout son réseau compatible.
Si ce n’est pas le cas, il est préférable de le désactiver.
Cela peut en effet causer de sérieux ralentissements.

Vérifier que l’ipv6 est activée ou pas :

Dans l’exemple, l’ipv6 est activée.

Désactivation système

Debian fourni tout ce qu’il faut ici : https://wiki.debian.org/DebianIPv6
Un très bon tuto complémentaire pour Debian qui fonctionne pour Raspbian sur memoinfo.fr : « Désactiver IPV6 sur Debian »

Pour faire court, éditer le fichier /etc/sysctl.conf et ajouter ces lignes :

La prise en compte se fait soit en rebootant le Raspberry Pi, soit avec cette commande :

Normalement, la commande « more /proc/net/if_inet6 » ne renvoi plus d’information.

Editer le fichier /etc/modprobe.d/ipv6.conf et décommenter la ligne :

Décharger le module kernel ipv6_addrconf

Si on regarde les processus en mémoire, on constate qu’un module est chargé :

Pour ne pas charger ce module au démarrage, éditer le fichier /etc/modprobe.d/ipv6.conf et ajouter :

Le fichier complet :

La prise en compte se fera au prochain reboot.

Fichier hosts

Éditer le fichier /etc/hosts et commenter les lignes avec une ipv6 :

Désactiver ipv6 pour SSH

Éditer le fichier /etc/ssh/sshd_config

Décommenter la ligne « ListenAddress 0.0.0.0 » :

Relancer le service SSH :

Désactiver ipv6 pour mDNS

Editer le fichier /etc/avahi/avahi-daemon.conf
Modifier la ligne :

Relancer le service :

Vérification

La commande « netstat -a » permet de vérifier qu’il n’y plus de service actif avec ipv6.
Rechercher tout ce qui écoute sur « [::] » et désactiver-le.

Recevoir des e-mails du Raspberry Pi

Utile pour recevoir les alertes comme les mise à jour ou des alertes de sécurité.

Pré-requis : avoir une adresse e-mail dédiée au serveur sur un domaine présent sur internet.

[Ajout]

Ces derniers temps, je me suis orienté vers ssmtp…

Fichier /etc/ssmtp/revaliases

FIchier /etc/ssmtp/ssmtp.conf

[/ajout]

Installer et configurer Exim4

 

  1. Choississez « Envoi par relais (« smarthost ») — pas de courrier local »
  2. « Nom de courrier du système » : saisir le nom de l’hôte.
  3. « Liste d’adresses IP où Exim sera en attente de connexions SMTP entrantes » : saisir « 127.0.0.1 », supprimer l’adresse IPV6.
  4. « Autres destinations dont le courrier doit être accepté » : vide
  5. « Nom de domaine visible pour les utilisateurs locaux » : saisir le nom de l’hôte.
  6. « Nom réseau ou adresse IP du système « smarthost » » : dans mon cas, je saisie « mail.jbnet.fr::25 »
  7. « Faut-il minimiser les requêtes DNS (connexions à la demande) ? » : choisir « Non »
  8. « Faut-il séparer la configuration dans plusieurs fichiers ? » : choisir « Oui »
  9. « Destinataire des courriers de « root » et « postmaster » » : saisir l’adresse e-mail sur laquelle vous voulez recevoir les e-mails.

Éditez le fichier « /etc/exim4/passwd.client » et ajoutez cette ligne en la modifiant avec vos paramètres :

Informer Exim4 des modifications et relance le service :

Désactiver ipv6 pour Exim4

Important, sinon, vous constaterez des lenteurs.
Éditer le fichier /etc/exim4/conf.d/main/02_exim4-config_options et ajouter cette ligne juste après l’entête :

Relancer Exim4 :

Utiliser la commande mail pour envoyer un e-mail :

  1. L’entrée Cc permet d’ajouter un e-mail en copie. Valider.
  2. « Subject: » : Saisir le sujet puis « Entrée »
  3. Saisir le corps du mail, puis « Ctrl+D »
  4. L’e-mail est envoyé

Vérifier dans la log /var/log/exim4/mainlog :

Quelques commandes utiles

Liste les mails en attente :

Supprime tous les mails de la file d’attente :

Recevoir les mises à jour par e-mail

Apticron permet juste de recevoir un e-mail avec les mises à jour disponibles.
Pour un Raspberry Pi c’est amplement suffisant.
Sur un serveur de production, je préfère cron-apt qui permet non seulement d’envoyer un e-mail, mais aussi de récupérer les fichier à installer. Puis suivant la configuration, installer automatiquement les mises à jour (pincipalement de sécurité).

Installation

La configuration est dans ce fichier : /etc/apticron/apticron.conf
Un cron est créé ici : /etc/cron.d/apticron

E-mail destinataire

Par défaut, un e-mail est envoyé à root. Comme Exim4 est déjà configuré (voir plus haut), l’e-mail est donc celui saisi à l’étape 9 du ‘dpkg-reconfigure exim4-config’.
Mais il est possible de le modifier dans /etc/apticron/apticron.conf

Il faut d’abord copier le fichier d’origine (voir /etc/apticron/README)

 

Je suggère de modifier ces 2 lignes :

Heure d’exécution

Modifier l’heure d’envoi de l’e-mail à 09h00 du matin dans /etc/cron.d/apticron :

Prise en compte :

Utiliser un peu plus la mémoire

Pour cela, il faut diminuer le « swapiness », cad le moment à partir duquel le system commence à utiliser la partition SWAP.

Voir mon précédent mémo : « Debian – Diminuer « Swappiness » »

Mot de la fin

Voilà, le Raspberry Pi en mode serveur est prêt pour accueillir les fonctions que vous avez besoin.

Juste une petite sauvegarde avant d’aller plus loin : « Raspberry Pi – Sauvegarder / restaurer la carte microSD »

Comme ça vous pourrez restaurer le serveur sans devoir tout refaire !