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
- Insérer la carte microSD dans le Raspberry Pi.
- Connecter un câble réseau RJ45 au Raspberry Pi et au switch (ou box internet).
- 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 :
1 |
command ssh pi@10.0.0.3 |
Le mot de passe par défaut est « raspberry ».
A changer rapidement bien entendu !
1 |
command passwd |
Résultat :
1 2 3 4 5 6 |
pi@raspberrypi:~ $ passwd Changing password for pi. (current) UNIX password: Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully |
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 :
1 |
command sudo passwd root |
Ensuite il suffit de se connecter avec l’utilisateur normal, puis de taper cette commande pour être root :
1 |
command su - |
On peut alors supprimer l’utilisateur du groupe sudo (et adm pour plus de sécurité) :
1 2 |
command deluser pi sudo command deluser pi adm |
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 :
1 2 |
command chmod 740 /etc/sudoers.d/010_pi-nopasswd command vi /etc/sudoers.d/010_pi-nopasswd |
Et commenter la ligne :
1 |
#pi ALL=(ALL) NOPASSWD: ALL |
Sécuriser le fichier :
1 |
command chmod 440 /etc/sudoers.d/010_pi-nopasswd |
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 :
1 2 3 4 5 6 7 8 9 10 11 |
pi@raspberrypi:~ $ sudo -i We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for pi: pi is not in the sudoers file. This incident will be reported. |
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 :
1 |
command sudo -i |
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 :
1 2 3 4 |
pi@raspberrypi:~ $ sudo -i SSH is enabled and the default password for the 'pi' user has not been changed. This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password. |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
mignouf@blenderstorm:~$ ssh pi@10.0.0.3 pi@10.0.0.3's password: Linux raspberrypi 4.9.80-v7+ #1098 SMP Fri Mar 9 19:11:42 GMT 2018 armv7l 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: Sun Apr 15 09:03:10 2018 from 10.0.0.13 pi@raspberrypi:~ $ sudo -i root@raspberrypi:~# |
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 :
1 |
command shutdown -r now |
La commande « reboot » marche aussi.
Depuis Debian 10 Buster (et sûrement Debian 9), il est recommandé d’utiliser cette commande :
1 |
command systemctl reboot |
(Eviter –force en argument, les services ne sont pas arrêtés proprement)
La commande pour arrêter :
1 |
command shutdown -h now |
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 :
1 |
command systemctl poweroff -i |
Mettre à jour raspi-config
Exécuter raspi-config :
1 |
command raspi-config |
Sélectionner l’option « 8 Update » et attendre la fin du processus.
Ou directement avec cette commande :
1 |
command raspi-config nonint do_update |
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 :
1 |
command rpi-update |
Résultat :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
root@raspberrypi:~# rpi-update *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom *** Performing self-update % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 13403 100 13403 0 0 26354 0 --:--:-- --:--:-- --:--:-- 26332 *** Relaunching after update *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom *** We're running for the first time *** Backing up files (this will take a few minutes) *** Backing up firmware *** Backing up modules 4.9.80-v7+ ############################################################# This update bumps to rpi-4.14.y linux tree Be aware there could be compatibility issues with some drivers Discussion here: https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=197689 ############################################################## *** Downloading specific firmware revision (this will take a few minutes) % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 168 0 168 0 0 10 0 --:--:-- 0:00:16 --:--:-- 47 100 55.6M 100 55.6M 0 0 922k 0 0:01:01 0:01:01 --:--:-- 1189k *** Updating firmware *** Updating kernel modules *** depmod 4.14.39+ *** depmod 4.14.39-v7+ *** Updating VideoCore libraries *** Using HardFP libraries *** Updating SDK *** Running ldconfig *** Storing current firmware revision *** Deleting downloaded files *** Syncing changes to disk *** If no errors appeared, your firmware was successfully updated to 793a5f5466cea7fb8aee649e5a3782dba9e0db2d *** A reboot is needed to activate the new firmware |
Comme indiqué, relancer le Raspberry Pi 3 :
1 |
command shutdown -r now |
É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 |
command raspi-config |
- Sélectionner l’option « 7 Advanced Options »
- Sélectionner l’option « A1 Expand Filesystem »
- Sortir de raspi-config et confirmer le reboot.
Changer la langue
Par défaut, Raspbian est en anglais « en_GB.UTF-8 » :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
root@raspberrypi:~# locale LANG=en_GB.UTF-8 LANGUAGE= LC_CTYPE="en_GB.UTF-8" LC_NUMERIC="en_GB.UTF-8" LC_TIME="en_GB.UTF-8" LC_COLLATE="en_GB.UTF-8" LC_MONETARY="en_GB.UTF-8" LC_MESSAGES="en_GB.UTF-8" LC_PAPER="en_GB.UTF-8" LC_NAME="en_GB.UTF-8" LC_ADDRESS="en_GB.UTF-8" LC_TELEPHONE="en_GB.UTF-8" LC_MEASUREMENT="en_GB.UTF-8" LC_IDENTIFICATION="en_GB.UTF-8" LC_ALL= |
Pour changer vers fr_FR.UTF-8 UTF-8, exécuter raspi-config :
1 |
command raspi-config |
- Sélectionner l’option « 4 Localisation Options »
- Puis « I1 Change Locale ».
- Dans la liste rechercher et cocher avec la barre espace « fr_FR.UTF-8 UTF-8 ».
- 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 :
1 |
command shutdown -r now |
Vérification :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
root@raspberrypi:~# locale LANG=fr_FR.UTF-8 LANGUAGE= LC_CTYPE="fr_FR.UTF-8" LC_NUMERIC="fr_FR.UTF-8" LC_TIME="fr_FR.UTF-8" LC_COLLATE="fr_FR.UTF-8" LC_MONETARY="fr_FR.UTF-8" LC_MESSAGES="fr_FR.UTF-8" LC_PAPER="fr_FR.UTF-8" LC_NAME="fr_FR.UTF-8" LC_ADDRESS="fr_FR.UTF-8" LC_TELEPHONE="fr_FR.UTF-8" LC_MEASUREMENT="fr_FR.UTF-8" LC_IDENTIFICATION="fr_FR.UTF-8" LC_ALL= |
La commande « Debian-Like » est :
1 |
command dpkg-reconfigure locales |
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 :
- Sélectionner « 4 Localisation Options »
- Puis « I3 Change Keyboard Layout »
- Garder « PC générique 105 touches (intl) » et valider
- Sélectionner « Autre » et valider
- Chercher « Français » et valider
- Sélectionner « Français » dans la disposition du clavier et valider
- Garder « Disposition par défaut pour le clavier » et valider
- 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.
1 2 3 4 |
root@raspberrypi:~# date --utc dimanche 15 avril 2018, 12:17:26 (UTC+0000) root@raspberrypi:~# date dimanche 15 avril 2018, 12:17:29 (UTC+0000) |
Dans raspi-config :
- Sélectionner « 4 Localisation Options »
- Puis « I2 Change Timezone »
- Dans la liste, sélectionner « Europe », puis « Paris ».
- Valider.
La commande « Debian-Like » est :
1 |
command dpkg-reconfigure tzdata |
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 :
1 |
command timedatectl status |
Résultat :
1 2 3 4 5 6 7 8 |
root@pistorm:~# timedatectl status Local time: ven. 2018-05-11 19:48:39 CEST Universal time: ven. 2018-05-11 17:48:39 UTC RTC time: n/a Time zone: Europe/Paris (CEST, +0200) Network time on: yes NTP synchronized: no RTC in local TZ: no |
Pour l’activer, utiliser simplement cette commande :
1 |
command timedatectl set-ntp True |
Encore un petit check :
1 2 3 4 5 6 7 8 |
root@pistorm:~# timedatectl status Local time: ven. 2018-05-11 19:50:29 CEST Universal time: ven. 2018-05-11 17:50:29 UTC RTC time: n/a Time zone: Europe/Paris (CEST, +0200) Network time on: yes NTP synchronized: yes RTC in local TZ: no |
Sous Debian 10 Buster :
1 2 3 4 5 6 7 8 9 10 11 12 |
Current default time zone: 'Europe/Paris' Local time is now: Sat Aug 24 17:12:12 CEST 2019. Universal Time is now: Sat Aug 24 15:12:12 UTC 2019. root@raspberrypi:~# command timedatectl status Local time: sam. 2019-08-24 17:12:25 CEST Universal time: sam. 2019-08-24 15:12:25 UTC RTC time: n/a Time zone: Europe/Paris (CEST, +0200) System clock synchronized: yes NTP service: active RTC in local TZ: no |
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 :
1 2 3 |
mai 11 19:05:54 pistorm systemd[1]: Time has been changed mai 11 19:05:54 pistorm systemd[1]: Started Restore / save the current clock. mai 11 19:05:54 pistorm fake-hwclock[91]: vendredi 11 mai 2018, 17:05:54 (UTC+0000) |
Et au démarrage :
1 |
Checking in progress on 1 disk (0...100% complete) |
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 :
- Sélectionner « 7 Advanced Options »
- Puis « A3 Memory Split »
- Supprimer « 64 » et saisir « 16 »
- Valider
- Sortir de raspi-config et confirmer le reboot.
Avant :
1 2 3 4 |
root@raspberrypi:~# free -m total used free shared buff/cache available Mem: 939 30 842 12 66 849 Swap: 99 0 99 |
Après :
1 2 3 4 |
root@raspberrypi:~# free -m total used free shared buff/cache available Mem: 976 30 876 12 69 885 Swap: 99 0 99 |
Mise à jour
Exécuter une mise à jour de Raspbian :
1 |
command apt update && apt upgrade -V |
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 :
1 |
command cp /etc/ssh/sshd_config /etc/ssh/sshd_config.origin |
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.
1 2 |
#Port 22 Port 11022 |
Pour une prise en charge immédiate :
1 |
command systemctl restart ssh.service |
La connexion se fera dorénavant avec cette commande :
1 |
command ssh user@10.0.0.3 -p 11022 |
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é :
1 2 3 4 5 6 7 |
# Authentication: #LoginGraceTime 2m #PermitRootLogin prohibit-password #StrictModes yes #MaxAuthTries 6 #MaxSessions 10 |
et ajouter cette ligne sous « #PermitRootLogin prohibit-password » :
1 2 3 4 5 6 7 8 |
# Authentication: #LoginGraceTime 2m #PermitRootLogin prohibit-password PermitRootLogin no #StrictModes yes #MaxAuthTries 6 #MaxSessions 10 |
Relancer le service SSH :
1 |
command systemctl restart ssh.service |
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 » :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
root@raspberrypi:~# adduser mignouf Adding user `mignouf' ... Adding new group `mignouf' (1001) ... Adding new user `mignouf' (1001) with group `mignouf' ... Creating home directory `/home/mignouf' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for mignouf Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] |
Par défaut, le nouvel utilisateur fait parti de son propre groupe.
1 2 |
mignouf@raspberrypi:~ $ groups mignouf |
L’utilisateur pi quand à lui fait parti par défaut de ces groupes ) :
1 2 |
pi@raspberrypi:~ $ groups pi adm dialout cdrom sudo audio video plugdev games users input netdev gpio i2c spi |
(Sauf sudo si vous l’avez enlever au début de ce mémo)
Donnons les mêmes droits au nouvel utilisateur :
1 |
command usermod -a -G adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,gpio,i2c,spi mignouf |
(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 :
1 2 |
command ssh mignouf@10.0.0.3 -p 11022 command sudo -i |
Supprimer pi du groupe sudo :
1 |
command deluser pi 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.
- Créer s’il n’existe pas le répertoire ~/.ssh :
1 2 |
command mkdir ~/.ssh command chmod 700 ~/.ssh |
- Dans ce répertoire, créer un fichier ~/.ssh/authorized_keys
- Dans ce fichier, coller la clé publique du client.
- Enregistrer et fermer le fichier.
- Donner les droits d’accès 600 à ~/.ssh/authorized_keys (sinon, il n’est pas considéré comme fichier sûr et sera ignoré)
1 |
command chmod 600 ~/.ssh/authorized_keys |
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 :
1 2 3 |
command systemctl stop bluetooth.service command systemctl disable bluetooth.service command systemctl disable hciuart.service |
Désactiver le bluetooth au niveau hardware :
- Éditer le fichier /boot/config.txt
- Ajouter en bas :
1 2 |
# Disable internal BT dtoverlay=pi3-disable-bt |
- Enregistrer et relancer le Raspberry Pi.
- Vérifier :
1 2 3 4 5 |
root@raspberrypi:~# systemctl status bluetooth.service ● bluetooth.service - Bluetooth service Loaded: loaded (/lib/systemd/system/bluetooth.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: man:bluetoothd(8) |
Désactiver le wifi
Actuellement :
1 2 3 4 5 6 7 8 9 10 |
root@raspberrypi:~# iwconfig lo no wireless extensions. eth0 no wireless extensions. wlan0 IEEE 802.11 ESSID:off/any Mode:Managed Access Point: Not-Associated Tx-Power=31 dBm Retry short limit:7 RTS thr:off Fragment thr:off Encryption key:off Power Management:on |
- Éditer le fichier /boot/config.txt
- Ajouter en bas :
1 2 |
# Disable internal Wifi dtoverlay=pi3-disable-wifi |
- Enregistrer et relancer le Raspberry Pi.
- Vérifier :
1 2 3 4 |
root@raspberrypi:~# iwconfig lo no wireless extensions. eth0 no wireless extensions. |
Désactiver la carte audio
Par défaut la carte audio est activée :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
root@raspberrypi:~# aplay -l **** Liste des Périphériques Matériels PLAYBACK **** carte 0: ALSA [bcm2835 ALSA], périphérique 0: bcm2835 ALSA [bcm2835 ALSA] Sous-périphériques: 7/7 Sous-périphérique #0: subdevice #0 Sous-périphérique #1: subdevice #1 Sous-périphérique #2: subdevice #2 Sous-périphérique #3: subdevice #3 Sous-périphérique #4: subdevice #4 Sous-périphérique #5: subdevice #5 Sous-périphérique #6: subdevice #6 carte 0: ALSA [bcm2835 ALSA], périphérique 1: bcm2835 ALSA [bcm2835 IEC958/HDMI] Sous-périphériques: 1/1 Sous-périphérique #0: subdevice #0 |
- Éditer le fichier /boot/config.txt
- Chercher la ligne :
1 |
dtparam=audio=on |
- Et la modifier par :
1 |
dtparam=audio=off |
- Enregistrer et relancer le Raspberry Pi.
- Vérifier :
1 2 |
root@raspberrypi:~# aplay -l aplay: device_list:270: aucune carte son n'a été trouvée... |
Changer le nom
Par défaut, lors d’une nouvelle installation, le système s’appelle : raspberrypi
Méthode 1
Dans raspi-config :
- Sélectionner « 2 Network Options »
- Puis « N1 Hostname »
- 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
- Saisir le nouveau nom et valider
- Sortir de raspi-config et confirmer le reboot.
Vérifier :
1 2 |
root@pistorm:~# hostname pistorm |
Méthode 2
Testée sur Raspbian Debian 10 Buster.
1 |
command hostnamectl set-hostname monrasp.jbnet.lan |
Vérification :
1 |
command hostnamectl |
Résultat :
1 2 3 4 5 6 7 |
Static hostname: monrasp.jbnet.lan Icon name: computer Machine ID: 347e0293a6a04c9eba830dfa971d5a42 Boot ID: 3df1b7c53fa64864a4df076674902153 Operating System: Raspbian GNU/Linux 10 (buster) Kernel: Linux 4.19.66-v7+ Architecture: arm |
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 :
- Sélectionner « 2 Network Options »
- Puis « N3 Network interface names »
- Répondre « Oui » et valider
- Sortir de raspi-config et confirmer le reboot.
Avant :
1 2 3 4 5 6 7 8 9 10 11 12 13 |
root@pistorm:~# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether b8:27:eb:f9:64:21 brd ff:ff:ff:ff:ff:ff inet 10.0.0.3/24 brd 10.0.0.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::ba0a:cd19:a059:ea86/64 scope link valid_lft forever preferred_lft forever |
Après :
1 2 3 4 5 6 7 8 9 10 11 12 13 |
root@pistorm:~# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enxb827ebf96421: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether b8:27:eb:f9:64:21 brd ff:ff:ff:ff:ff:ff inet 10.0.0.3/24 brd 10.0.0.255 scope global enxb827ebf96421 valid_lft forever preferred_lft forever inet6 fe80::ba0a:cd19:a059:ea86/64 scope link valid_lft forever preferred_lft forever |
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 :
1 2 3 4 |
allow-hotplug enxb827ebf96421 iface enxb827ebf96421 inet static address 10.0.0.3/24 gateway 10.0.0.254 |
Pour forcer le ou les serveurs DNS, ajouter cette ligne :
1 |
dns-nameservers 1.1.1.1 9.9.9.9 |
Les ip correspondent à des serveurs publiques, mais on peut mettre son propre serveur.
Le fichier complet :
1 2 3 4 5 |
allow-hotplug enxb827ebf96421 iface enxb827ebf96421 inet static address 10.0.0.3/24 gateway 10.0.0.254 dns-nameservers 1.1.1.1 9.9.9.9 |
Arrêter et désactiver DHCPCD :
1 2 |
command systemctl stop dhcpcd.service command systemctl disable dhcpcd.service |
Redémarrer le Raspberry Pi :
1 |
command shutdown -r now |
Vérifier que le Raspberry est accessible et accède aussi au réseau.
Vérifier la configuration des serveurs DNS :
1 2 3 4 |
root@pistorm:~# cat /etc/resolv.conf # Generated by resolvconf nameserver 1.1.1.1 nameserver 9.9.9.9 |
Méthode 2 : ip fixe dans DHCPCD
Editer le fichier /etc/dhcpcd.conf et ajouter ces lignes à la fin :
1 2 3 4 |
interface enxb827ebf96421 static ip_address=10.0.0.3/24 static routers=10.0.0.254 static domain_name_servers=1.1.1.1 9.9.9.9 |
Redémarrer le Raspberry Pi :
1 |
command shutdown -r now |
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 :
1 2 3 |
command more /proc/net/if_inet6 fe80000000000000ba27ebfffef96421 02 40 20 80 enxb827ebf96421 00000000000000000000000000000001 01 80 10 80 lo |
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 :
1 2 3 4 5 |
net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.all.autoconf = 0 net.ipv6.conf.default.autoconf = 0 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 |
La prise en compte se fait soit en rebootant le Raspberry Pi, soit avec cette commande :
1 |
command sysctl -p |
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 :
1 2 3 |
# Don't load ipv6 by default alias net-pf-10 off alias ipv6 off |
Décharger le module kernel ipv6_addrconf
Si on regarde les processus en mémoire, on constate qu’un module est chargé :
1 2 3 |
root@pistorm:~# ps -ef | grep ipv6 root 68 2 0 10:38 ? 00:00:00 [ipv6_addrconf] root 959 859 0 10:39 pts/0 00:00:00 grep ipv6 |
Pour ne pas charger ce module au démarrage, éditer le fichier /etc/modprobe.d/ipv6.conf et ajouter :
1 |
options ipv6 disable=1 |
Le fichier complet :
1 2 3 4 |
# Don't load ipv6 by default alias net-pf-10 off alias ipv6 off options ipv6 disable=1 |
La prise en compte se fera au prochain reboot.
Fichier hosts
Éditer le fichier /etc/hosts et commenter les lignes avec une ipv6 :
1 2 3 4 5 6 |
127.0.0.1 localhost #::1 localhost ip6-localhost ip6-loopback #ff02::1 ip6-allnodes #ff02::2 ip6-allrouters 127.0.1.1 pistorm |
Désactiver ipv6 pour SSH
Éditer le fichier /etc/ssh/sshd_config
Décommenter la ligne « ListenAddress 0.0.0.0 » :
1 2 |
ListenAddress 0.0.0.0 #ListenAddress :: |
Relancer le service SSH :
1 |
command systemctl restart ssh.service |
Désactiver ipv6 pour mDNS
Editer le fichier /etc/avahi/avahi-daemon.conf
Modifier la ligne :
1 |
use-ipv6=no |
Relancer le service :
1 |
command systemctl restart avahi-daemon.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…
1 |
command apt install ssmtp |
Fichier /etc/ssmtp/revaliases
1 2 3 4 5 6 7 |
# sSMTP aliases # # Format: local_account:outgoing_address:mailhub # # Example: root:your_login@your.domain:mailhub.your.domain[:port] # where [:port] is an optional port number that defaults to 25. root:rasp@mondomain.tld:mail.mondomain.tld:465 |
FIchier /etc/ssmtp/ssmtp.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# # Config file for sSMTP sendmail # # The person who gets all mail for userids < 1000 # Make this empty to disable rewriting. root=rasp@mondomain.tld # The place where the mail goes. The actual machine name is required no # MX records are consulted. Commonly mailhosts are named mail.domain.com mailhub=mail.mondomain.tld:465 # Where will the mail seem to come from? rewriteDomain=mondomain.tld # The full hostname hostname=mon_raspberry # Are users allowed to set their own From: address? # YES - Allow the user to specify their own From: address # NO - Use the system generated From: address FromLineOverride=YES # Use SSL/TLS before starting negotiation UseTLS=Yes #UseSTARTTLS=Yes # Username/Password AuthUser=rasp@mondomain.tld AuthPass=motdepasse |
[/ajout]
Installer et configurer Exim4
1 2 |
command apt install exim4 command dpkg-reconfigure exim4-config |
- Choississez « Envoi par relais (« smarthost ») — pas de courrier local »
- « Nom de courrier du système » : saisir le nom de l’hôte.
- « Liste d’adresses IP où Exim sera en attente de connexions SMTP entrantes » : saisir « 127.0.0.1 », supprimer l’adresse IPV6.
- « Autres destinations dont le courrier doit être accepté » : vide
- « Nom de domaine visible pour les utilisateurs locaux » : saisir le nom de l’hôte.
- « Nom réseau ou adresse IP du système « smarthost » » : dans mon cas, je saisie « mail.jbnet.fr::25 »
- « Faut-il minimiser les requêtes DNS (connexions à la demande) ? » : choisir « Non »
- « Faut-il séparer la configuration dans plusieurs fichiers ? » : choisir « Oui »
- « 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 :
1 |
*.jbnet.fr:exemple@jbnet.fr:mot2passe |
1 2 |
command update-exim4.conf command systemctl restart exim4.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 :
1 2 3 4 |
### main/02_exim4-config_options ################################# disable_ipv6=true |
Relancer Exim4 :
1 |
command systemctl restart exim4.service |
Utiliser la commande mail pour envoyer un e-mail :
1 |
command mail <adresse-email@domaine> |
- L’entrée Cc permet d’ajouter un e-mail en copie. Valider.
- « Subject: » : Saisir le sujet puis « Entrée »
- Saisir le corps du mail, puis « Ctrl+D »
- L’e-mail est envoyé
Vérifier dans la log /var/log/exim4/mainlog :
1 2 3 |
2018-04-21 16:31:38 1f9tY8-00017E-Qv <= test@jbnet.fr U=root P=local S=375 2018-04-21 16:31:40 1f9tY8-00017E-Qv => test@jbnet.fr R=smarthost T=remote_smtp_smarthost H=jbnet.fr [109.234.161.45] X=TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256 CV=no DN="OU=Domain Control Validated,OU=PositiveSSL,CN=jambon.o2switch.net" C="250 OK id=1f9tYA-0007fK-5n" 2018-04-21 16:31:40 1f9tY8-00017E-Qv Completed |
Quelques commandes utiles
Liste les mails en attente :
1 |
command exim -bp |
Supprime tous les mails de la file d’attente :
1 2 3 |
command systemctl stop exim4.service command exim -bp | awk '/^ *[0-9]+[mhd]/{print "exim -Mrm " $3}' | bash command systemctl start exim4.service |
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
1 |
command apt install apticron |
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 :
1 2 |
EMAIL="rasp@domain.tld" CUSTOM_SUBJECT="[apticron] $SYSTEM: $NUM_PACKAGES package update(s)" |
Heure d’exécution
Modifier l’heure d’envoi de l’e-mail à 09h00 du matin dans /etc/cron.d/apticron :
1 2 3 |
# cron entry for apticron 0 9 * * * root if test -x /usr/sbin/apticron; then /usr/sbin/apticron --cron; else true; fi |
Prise en compte :
1 |
systemctl restart cron.service |
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 !
Top, j’ai installé un serveur Apache /MySql sur mon Raspberry PI 3 mais j’avoue que je ne suis pas allé aussi loin. Il aurait juste été intéressant de parler de fail2ban. Merci beaucoup
Merci pour le retour !
En fait, c’est une base qui pourrait tout à fait se faire avant d’installer un serveur LAMP.
Pour Fail2ban, cela dépend de la fonction du serveur.
Peut-être dans un prochain mémo 😉
Bonjour,
D’abord merci de votre mémo / explications.
Cela tombe bien, je viens d’installer Pi-hole sur une pi1 et une pi2 en mode headless. Je garde pi-hole sur la v2 et je l’administre via MobaXterm.
Je n’ai pas l’habitude de Linux donc je me fais ça par exercice. Pour info, la température des Pi est de 50° pour la v1 et 40° pour la v2 et fail2ban couche littéralement la v1 (s’accapare 50% à 90% du cpu). C’est pour ça que j’ai gardé la v2 et il faut maintenant que je le réessaye.
Pour ma part j’utilise toujours Rufus pour les images. Et je viens de découvrir récemment qu’il copie même une image zippée.
J’ai suivi ce tuto pour la sécuriser : https://www.raspberrypi.org/documentation/configuration/security.md
Les commandes shutdown -r now / shutdown -h now ont des alias : reboot et halt
Etendre la capacité et maintenant inutile (depuis environ 2ans). En effet, c’est fait automatiquement lors du 1er boot. (on peut voir le script qui fait ça dans le cmdline.txt de l’image). Et comme sur une v3 on peut booter directement sur clé usb ou disque dur, la capacité doit quand même être étendue. L’appel via raspi-config ne doit se faire que sur un dd (la commande) avec un support plus grand que l’original.
Et je me suis installé log2ram pour préserver ma carte.
Très complet votre mémo et j’attends avec impatience un sur fail2ban.
Bonjour Dyox,
Merci pour ce retour complet.
Pour les commandes d’arrêt/reboot, c’est en fait tous les symlink sur systemd.
Donc en fait, ça fait pareil, merci pour l’info.
Je suis bien tenté par piHole, mais le concept « Prêt en 5min chrono avec une interface sexy », le tout sans rien comprendre ou maitriser de ce qui est installé, ça me chiffonne un peu (bizarrement, ça me fait penser à la marque à la pomme 😉 ).
Pour Fail2ban, il faut surtout des bases avec netfilter (iptables) car il y touche directement.
C’est pour ça que je déconseillerais d’utiliser ufw.
Cela fait plus de 3 ans que je ne l’ai pas utilisé. A l’occasion j’en ferais un tuto quand j’en serais à mettre en place un vpn et à m’auto-héberger.
Bonjour Dyox,
Y’a une partie sur Fail2ban dans ce mémo.
https://www.jbnet.fr/systeme/linux/ikoula-memo-de-configuration.html
Bonne configuration !
Bonjour,
Merci beaucoup pour ton tuto
j’ai personnellement mis en place un serveur web directement sur rapsberry pi 4 8Go
en le faisant démarré sur une clé USB afin de garantir une plus longue durée de vie
les carte SD étant réputé pour ne pas aimé les réécriture à la suite.
pour l’instant je n’ai qu’un seul serveur direct, mais je recherche encore le logiciel idéale pour géré cela de manière plus efficace et pouvoir crée des hôtes virtuels avec chacun sa base de données.
Merci beaucoup
Content de voir que mon tuto soit utile.
Pour la partie « hôtes virtuels », je n’ai pas tout compris, mais peut-être se tourner vers Docker pour l’isolation des services.