====== Installer "from scratch" Yunohost v3.x sur Raspberry Pi sur une base Raspbian Stretch Lite | en cours de relecture ======
"YunoHost est un système d’exploitation serveur visant à rendre accessible l’auto-hébergement à autant de personne que possible, sans délaisser la qualité et la fiabilité du logiciel. YunoHost supporte plusieurs types de matériel et est basé et compatible avec Debian GNU/Linux."
Plus de détail sur le site de l'éditeur https://yunohost.org/#/whatsyunohost_fr
===== Prérequis =====
* avoir une Raspberry Pi :-) ;
* avoir un clavier USB raccordé à la Raspberry Pi ;
* une carte SD compatible avec la Raspberry Pi d'au moins 8 Go et si possible de classe 10 (http://elinux.org/RPi_SD_cards#Working_.2F_Non-working_SD_cards | http://elinux.org/RPi_VerifiedPeripherals#SD_cards) ;
* disposer d'une connexion à internet via la box ou le routeur afin de pouvoir y connecter la Raspberry Pi ;
* disposer d'un nom de domaine pointant vers l'adresse IP publique de votre Box/routeur. (cf no-ip.org, dyndns, ...) ou alors bénéficier d'un de ceux mis à disposition par Yunohost : https://yunohost.org/#/dns_fr
===== Préparation de la carte SD, copie de NOOBS Lite et des fichiers de Raspbian Lite Stretch =====
La carte SD devra être formatée. Préalablement, veillez à sauvegarder sur un autre support tous les fichiers et autres documents qu'elle pourrait contenir.
Il est nécessaire de :
* formater la carte SD en FAT32 ;
* télécharger le fichier zip de la dernière version de NOOBS Lite à cette adresse :
https://downloads.raspberrypi.org/NOOBS_lite_latest
* décompresser les fichiers de NOOBS Lite sur la carte SD ;
* dans le dossier /os de la carte SD, créer un dossier YunoHost ;
* télécharger tous les fichiers de la dernière version Raspbian Lite Stretch et les copier dans le dossier YunoHost précédemment créé sur la carte SD (/os/YunoHost) à cette adresse :
https://downloads.raspberrypi.org/raspbian_lite/archive/2019-06-24-07:07/
**Avant de brancher la Raspberry Pi**, il est nécessaire de débrancher le câble Ethernet ou toute autre connexion réseau de la Raspberry Pi.
Cela afin d'être sûr que seul sera installé Raspbian Lite copié précédemment.
A défaut, lors de l'initialisation, les fichiers copiés seront effacés, Raspbian Buster sera installé ... et il faudra tout recommencer au début.
Installer la carte SD dans la Raspberry Pi, brancher l'alimentation **sans avoir branché le câble Ethernet** et procéder à l'installation de Rasbian Lite Stretch.
===== Configuration de Raspbian Lite Strectch =====
Normalement le SSH n'est pas activé par défaut.
Si vous n'avez pas sélectionné la disposition du clavier en français dans l'interface Raspbian Lite avant l'installation alors ces indications pourront vous aider :
Le clavier est alors en qwerty : a => q.
L'utilisateur est pi et le mot de passe raspberry, enfin rqspberry si vous avez suivi ;-)
Vous pouvez rebrancher le câble ethernet à votre Raspberry Pi.
Lancer le configurateur de la Raspberry Pi attention
sudo raspi-config
sudo rqspi-config #:-)
Menu 4
I1 pour paramètrer les locales (fr_FR.UTF-8)
I2 pour paramètrer l'heure
I3 pour paramètrer la disposition du clavier
I4 pour le paramètrage du WiFi.
Menu 2
Changer le hostname en YunoHost
A vérifier, mais normalement tous l'espace de la carte SD est disponible
Menu 7
A1
Normalement, il n'y aura pas besoin du rendu graphique
Menu 7
A3
Passer la valeur au minimum : 16
Mettre à jour raspi-config
Menu 8
Finir et redémarrer
sudo reboot
==== Gestion de l'utilisateur pi, récupération des adresses IP locale et publique, vérification du fichier de mise à jour et mise à jour des firmwares ====
Changer le mot de passe de l’utilisateur pi et en choisir un autre suffisamment fort pour procéder à une partie de l'installation au cas ou vous souhaiteriez activer SSH
sudo passwd pi
Connaître son adresse IP locale
hostname -I
Connaître son adresse IP publique
curl ifconfig.me
Vérifier que la version de Raspbian sera bien mise à jour sur la base Stretch car YunoHost n'est pas encore compatible avec Debian Buster.
=> Remplacer stable par stretch dans le fichier /etc/apt/sources.list
sed -i 's|stable|stretch|' /etc/apt/sources.list
=> Remplacer buster par stretch dans le fichier /etc/apt/sources.list
sed -i 's|buster|stretch|' /etc/apt/sources.list
Installer les derniers firmwares et redémarrer
sudo apt update
sudo rpi-update
sudo reboot
==== Création d'un mot de passe pour l'utilisateur root ====
Se reconnecter avec l'utilisateur pi et passer en root
sudo -i
Créer un mot de passe **fort** pour l’utilisateur root, et qui soit différent de celui de l'utilisateur pi
passwd root
Activer SSH et autoriser root à se connecter est optionnel. Tout dépend de l'utilisation et de la façon dont vous souhaitez faire la maintenance de votre serveur et instance YunoHost.
=> Activer SSH
raspi-config
Menu 5 ; sous-menu P2
//=> Facultatif ://
* Autoriser root à se connecter en SSH et rechargement du service SSH
sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/g' /etc/ssh/sshd_config
service ssh reload
* Se reconnecter avec root en SSH
ssh root@ip.du.raspberry.pi
SSH ou pas : se déconnecter et se reconnecter avec l'utilisateur root en passant la commande
logout
==== Mettre à jour Raspbian, nettoyer, installer git, curl et enlever Apache ====
Mettre à jour
apt update && apt --assume-yes dist-upgrade
Nettoyer
apt autoremove && apt autoclean
Installer curl et dialog pour pouvoir exécuter le script d'installation et avoir des boîtes de dialogue plus conviviales pendant sa progression
apt install curl dialog
Enlever Apache
apt autoremove apache2.2
==== Augmenter le swap à 1 Go ====
Les cycles de lecture et surtout d'écriture intensifs réduisent la durée de vie de la carte SD.
Source : https://arduino103.blogspot.com/2016/03/raspberry-pi-augmenter-la-duree-de-vie.html
Editer le fichier /etc/dphys-swapfile en passant la valeur 100 (Mo) par défaut à 1024 (Mo soit 1 Go)
sudo nano /etc/dphys-swapfile
# dans le fichier remplacer la ligne CONF_SWAPFILE=100 par CONF_SWAPFILE=1024
# enregistrer Ctrl+o et quitter Ctrl+x
sudo /etc/init.d/dphys-swapfile restart
==== Installation de YunoHost ====
**Le script d'installation ne peut pas être lancé avec l'utilisateur pi.**
Exécuter le script d’installation de YunoHost
curl https://install.yunohost.org | bash
==== Post-installation de YunoHost ====
S'assurer que l'utilisateur pi est retiré
deluser -remove-home pi
Lancer la post-installation
yunohost tools postinstall
Configurer git
git config --global user.email "moi@ndd.tld"
git config --global user.name "Votre Nom"
Redémarrer le serveur
reboot
===== Pour mémoire =====
L'adresse d'administration de votre YunoHost est https://monserveur.org/yunohost/admin/ et l'adresse du portail de votre YunoHost est https://monserveur.org/.
Pour régénérer les services :
yunohost service regen-conf
Pour mettre à jour la liste des applications YunoHost :
yunohost app fetchlist
Pour mettre à jour les applications YunoHost :
yunohost app upgrade
Pour faire une sauvegarde :
mkdir /home/yunohost.backup/archives
yunohost backup create
Pour récupérer une sauvegarde depuis son serveur vers le /home de son ordinateur (avec 1234 comme port SSH ; avec IP_ou_NDD comme adresse IP [locale ou pas] ou NDD son Nom De Domaine ; avec $USER son nom d'utilisateur ; avec aaaammjj-hhmmss comme par exemple 20161002-084907 [nom de la sauvegarde YunoHost]) :
scp -P 1234 root@IP_ou_NDD:/home/yunohost.backup/archives/aaaammjj-hhmmss.tar.gz /home/$USER
scp -P 1234 root@IP_ou_NDD:/home/yunohost.backup/archives/aaaammjj-hhmmss.info.json /home/$USER
Sur le même principe que précédemment, envoyer une sauvegarde depuis le /home de son ordinateur vers son serveur (s'assurer que le dossier archive existe bien sinon lancer une première sauvegarde ou bien en dernier recours créer le dossier en root : mkdir /home/yunohost.backup/archives) :
scp -P 1234 /home/$USER/aaaammjj-hhmmss.info.json root@IP_ou_NDD:/home/yunohost.backup/archives
scp -P 1234 /home/$USER/aaaammjj-hhmmss.tar.gz root@IP_ou_NDD:/home/yunohost.backup/archives
Pour restaurer une sauvegarde :
yunohost backup restore nom_de_la_sauvegarde
Sources pour la sauvegarde :
* https://yunohost.org/#/backup_fr
* https://forum.yunohost.org/t/a-propos-de-la-sauvegarde-yunohost-v2-4/1612/2
Pour que lors de la sauvegarde les fichiers de NextCloud soient sauvegardés en plus des paramètres de l'application en elle-même, il faut éditer le fichier /etc/yunohost/apps/nextcloud/settings.yml et supprimer le "1" de la variable backup_core_only :
nano /etc/yunohost/apps/nextcloud/settings.yml
backup_core_only: '1'
devient
backup_core_only: ''
Pour refuser l'accès d'une application à un utilisateur :
yunohost app removeaccess app -u user
# et par extension :
yunohost app removeaccess app1 app2 app3 -u user1 user2 user3
# pour faire l'inverse :
yunohost app addaccess app -u user
Source : https://forum.yunohost.org/t/refuser-lacces-dune-application-a-un-utilisateur/3266/2
Pour désactiver le wifi et/ou le bluetooth :
Pour enregistrer et quitter l'éditeur nano : Ctrl+o et Ctrl+x
Editer le fichier /boot/config.txt (anciennement fbdev-blacklist.conf et encore avant raspi-blacklist.conf) en ajoutant ces lignes
dtoverlay=pi3-disable-wifi
dtoverlay=pi3-disable-bt
Pour désactiver le WiFi
echo "dtoverlay=pi3-disable-wifi" | sudo tee -a /boot/config.txt
Pour désactiver le BlueTooth
echo "dtoverlay=pi3-disable-bt" | sudo tee -a /boot/config.txt
... puis redémarrer
reboot
Sources : https://blog.sleeplessbeastie.eu/2018/12/31/how-to-disable-onboard-wifi-and-bluetooth-on-raspberry-pi-3/
Vous pouvez aussi contribuer à ce projet ici https://yunohost.org/#/contributordoc_fr.
A vous de tester et bidouiller ;-)
===== Pour aller plus loin ... =====
//**Les sections suivantes sont destinées aux utilisateurs avancés car de mauvais réglages et/ou paramétrages peuvent, à minima, altérer la sécurité mise en place par défaut des applications et du serveur Yunohost, voire engendrer de plus gros soucis.**//
==== Installer metronome manuellement ====
wget https://github.com/YunoHost/metronome/archive/debian/3.7.9+33b7572-1.zip
unzip 3.7.9+33b7572-1.zip
cd metronome-debian-3.7.9-33b7572-1
dpkg-buildpackage -rfakeroot -uc -b -d
cd ..
dpkg -i metronome_3.7.9+33b7572-1_armhf.deb
apt-mark hold metronome
* source : https://forum.yunohost.org/t/how-install-yunohost-on-raspberry-pi/1466
Afin de ne pas mettre à jour le paquet metronome une fois installé, il faut le marquer comme "à conserver" (**ce qui n'est plus nécessaire aujourd'hui**) :
apt-mark hold metronome
Pour démarquer le paquet metronome afin de pouvoir le mettre à jour si nécessaire :
apt-mark unhold metronome
Pour forcer la regénération de la configuration de metronome si nécessaire :
yunohost service regen-conf metronome --force
Pour ne pas mettre à jour metronome :
apt-get upgrade --no-upgrade metronome
==== Cloner le script d'installation YunoHost et procéder à directement l'installation de la version testing de YunoHost ====
//**Réservé à des utilisateurs avancés sachant ce qu'ils font.
**//
Pour passer à la version 'testing' de YunoHost :
curl https://install.yunohost.org/switchToTesting | bash
Mettez à jour votre instance :
apt update && apt dist-upgrade
Source en rapport : https://forum.yunohost.org/t/yunohost-3-6-testing-call-for-feedback/8007
=== Pour revenir en arrière et repasser en mode stable ===
Indiquez le dépôt stable à la place du dépôt testing :
echo 'deb http://repo.yunohost.org/debian/ stretch stable' > /etc/apt/sources.list.d/yunohost.list
Mise à jour de l'instance :
apt update && apt dist-upgrade
N.B.: Votre version ne reviendra à la version stable qu'à la publication de nouveaux paquets stables.
Source : https://forum.yunohost.org/t/yunohost-2-5-0-beta-call-for-beta-testers-and-translators/2243
==== Être averti par mail lors d'une connexion ssh au serveur : ====
Il faut installer mailutils pour que la fonction mail du script fonctionne :
apt-get install mailutils
Ensuite, il faut créer, ou éditer s'il existe, le fichier /etc/ssh/sshrc.
sudo nano /etc/ssh/sshrc
Entrer lignes suivantes en adaptant à minima l'adresse mail de réception :
#!/bin/sh
# source: http://blog.uggy.org/post/2009/06/05/...
DATE=`date "+%d.%m.%Y--%Hh%Mm"`
IP=`echo $SSH_CONNECTION | awk '{print $1}'`
REVERSE=`dig -x $IP +short`
echo "Connexion de $USER sur $HOSTNAME
IP: $IP
ReverseDNS: $REVERSE
Date: $DATE
" | mail -s "Connexion de $USER sur $HOSTNAME" moi@mon.domaine.ndd.net
Ensuite, redémarrer ssh :
/etc/init.d/ssh restart
ou
service ssh restart
Source : http://yeuxdelibad.net/Logiciel-libre/Installation_et_securisation_d_un_serveur_auto-heberge.html#surveiller
==== Être averti par SMS lors d'une connexion ssh au serveur : ====
Pour les "Free-Mobilonautes", il est aussi possible d'être averti en plus par un SMS. Il suffit d'ajouter au fichier précédent le script suivant (//à adapter avec l'identifiant et la clé de l'API après avoir activé l'option de notification par SMS sur le panel client Free// https://mobile.free.fr/moncompte/ ) :
#!/bin/sh
#
# Script d'envoi de notification SMS via l'API Free Mobile
# https://github.com/C-Duv/freemobile-smsapi-client
#
# Auteur: DUVERGIER Claude (http://claude.duvergier.fr)
#
# Nécessite: sed, sh et wget
#
# Possible usages:
# send-notification.sh "All your base are belong to us"
# echo "All your base are belong to us" | send-notification.sh
# uptime | send-notification.sh
##
## Configuration système
##
# Caractère de fin de ligne (http://en.wikipedia.org/wiki/Percent-encoding#Character_data)
NEWLINE_CHAR="%0D" # Valeurs possibles : %0A, %0D et %0D%0A
# URL d'accès à l'API
SMSAPI_BASEURL="https://smsapi.free-mobile.fr"
# Action d'envoi de notification
SMSAPI_SEND_ACTION="sendmsg"
##
## Configuration utilisateur
##
# Login utilisateur / identifiant Free Mobile (celui utilisé pour accéder à l'Espace Abonné)
USER_LOGIN="1234567890"
# Clé d'identification (générée et fournie par Free Mobile via l'Espace Abonné, "Mes Options" : https://mobile.free.fr/moncompte/index.php?page=options)
API_KEY="s0me5eCre74p1K3y"
# Texte qui sera ajouté AVANT chaque message envoyé
MESSAGE_HEADER="Notification :${NEWLINE_CHAR}"
# Texte qui sera ajouté APRÈS chaque message envoyé
MESSAGE_FOOTER="${NEWLINE_CHAR}--${NEWLINE_CHAR}Le serveur de la maison"
##
## Traitement du message
##
MESSAGE_TO_SEND=""
if [ "$1" ]; then # Message en tant qu'argument de la ligne de commande
MESSAGE_TO_SEND="$1"
else # Message lu de STDIN
while read line
do
MESSAGE_TO_SEND="$MESSAGE_TO_SEND$line$NEWLINE_CHAR"
done
MESSAGE_TO_SEND=$(echo $MESSAGE_TO_SEND | sed 's/'$NEWLINE_CHAR'$//') # Retire le dernier saut de ligne
fi
FINAL_MESSAGE_TO_SEND="$MESSAGE_HEADER$MESSAGE_TO_SEND$MESSAGE_FOOTER" # Assemble header, message et footer
##
## Appel à l'API (envoi)
##
# echo "Will send the following to $USER_LOGIN:" #DEBUG
# echo "$FINAL_MESSAGE_TO_SEND" #DEBUG
# --insecure : Certificat de $SMSAPI_BASEURL ne fourni pas d'informations sur son propriétaire
# --write-out "%{http_code}" --silent --output /dev/null : Renvoi le code réponse HTTP uniquement
HTTP_STATUS_CODE=$(curl --insecure --get "$SMSAPI_BASEURL/$SMSAPI_SEND_ACTION" --data "user=$USER_LOGIN" --data "pass=$API_KEY" --data "msg=$FINAL_MESSAGE_TO_SEND" --write-out "%{http_code}" --silent --output /dev/null)
# Codes réponse HTTP possibles
# 200 : Le SMS a été envoyé sur votre mobile.
# 400 : Un des paramètres obligatoires est manquant.
# 402 : Trop de SMS ont été envoyés en trop peu de temps.
# 403 : Le service n'est pas activé sur l'espace abonné, ou login / clé incorrect.
# 500 : Erreur côté serveur. Veuillez réessayez ultérieurement.
if [ "$HTTP_STATUS_CODE" -eq 200 ]; then
# echo "API responded with 200: exiting with 0" #DEBUG
exit 0
else
echo "Error: API responded with $HTTP_STATUS_CODE"
exit 1
fi
Source : https://github.com/C-Duv/freemobile-smsapi-client
==== cron ====
Pour programmer des tâches, comme par exemple une mise à jour suivi d'une mise à niveau de l'installation, vous pouvez utiliser cron.
Plus de détail ici : http://doc.ubuntu-fr.org/cron
==== fail2ban ====
Cela permet de bannir les adresses ip essayant de se connecter "furieusement". Il est installé par défaut sur Yunohost.
sudo apt install fail2ban
Ensuite, il faut éditer le fichier de configuration afin de donner une adresse mail afin d'envoyer les rapports de ban.
sudo nano /etc/fail2ban/jail.conf
findtime = 3600
bantime = 86400
destemail = votre@email.com
Toujours dans ce même fichier, rechercher la ligne qui commence par action = afin de rajouter mwl après le _ afin d'avoir un rapport complet.
action =%(action_mwl)s
Ensuite, toujours dans le même fichier, afin d'avoir les rapports sur les principaux services, il faut remplacer false par true dans les parties suivantes :
* ssh ;
* ssh-ddos ;
Apparemment, il y a beaucoup de brute-force sur sasl, il est donc préférable de commenter cette règle failregex = (?i): warning: [-._\w]+\[\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [A-Za-z0-9+/]*={0,2})?$ et appliquer celle-ci failregex = (?i): warning: [-._\w]+\[\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed: \w :
nano /etc/fail2ban/filter.d/sasl.conf
#failregex = (?i): warning: [-._\w]+\[\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [A-Za-z0-9+/]*={0,2})?$
failregex = (?i): warning: [-._\w]+\[\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed: \w
D'autres réglages sont disponibles ici : http://doc.ubuntu-fr.org/fail2ban
==== changer le port d'écoute ssh ====
Editer /etc/ssh/sshd_config :
sudo nano /etc/ssh/sshd_config
Le numéro de port d'écoute est par défaut le 22. En choisir un au delà du numéro 1024, par exemple : 12345.
Ensuite, il faut éditer le fichier de configuration de fail2ban pour lui dire d'écouter le port 12345 au lieu du port 22.
sudo nano /etc/fail2ban/jail.conf
Dans la section #JAIL au chapitre [ssh] **et** [ssh-ddos], il faut changer :
port = ssh par port = 12345
Ensuite, il faut redémarrer le pare-feux, désactiver l'ancien port dans le pare-feux (a priori le 22), redémarrer le service ssh et recharger le service fail2ban :
yunohost firewall reload
yunohost firewall disallow 22
sudo service ssh restart
sudo fail2ban-client reload
Source : https://yunohost.org/#/security_fr
==== Installation de logwatch ====
Si vous souhaitez avoir un historique de ce qui s'est passé sur le serveur la veille, il suffit d'installer logwatch :
sudo apt install logwatch
sudo mkdir /var/cache/logwatch
Avant de modifier le fichier de configuration, en faire une copie :
sudo cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/
Ensuite faire les modifications ici :
nano /etc/logwatch/conf/logwatch.conf
Par exemple, l'envoi des rapports sur une adresse électronique et/ou modifier le niveau de détail du résumé généré :
MailTo = moi@mon.domaine.ndd
Detail = Med
Pour lancer logwatch en console :
sudo logwatch
Pour aller plus loin dans la configuration : http://doc.ubuntu-fr.org/logwatch#configuration