====== Installer "à la main" Yunohost v3.x.x.x sur Raspberry Pi sur une base Raspbian Stretch Lite | en cours de relecture ======
"YunoHost est un système d’exploitation serveur visant à simplifier l’auto-hébergement de services Internet. Il est basé et reste totalement compatible avec Debian GNU/Linux."
Plus de détail sur le site de l'éditeur https://yunohost.org/#/docs
===== 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 en **//.nohost.me//**, **//.noho.st//** ou **//.ynh.fr//** : https://yunohost.org/#/dns_fr
===== Préparation de la carte SD =====
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 à la raçine d ela carte SD tous les fichiers de NOOBS Lite.
Installer la carte SD dans la Raspberry Pi, brancher l'alimentation et procéder à l'installation de Raspbian Lite en choisissant la langue et la disposition du clavier.
===== Configuration de Raspbian Lite Stretch =====
Normalement le SSH n'est pas activé par défaut.
L'utilisateur est pi et le mot de passe raspberry, enfin rqspberry si vous êtes resté en en-GB.UTF-8 ;-)
Créer un mot de passe **FORT** pour root et se ré-identifier en root
sudo passwd root
# entrer et confirmer le mot de passe
exit
# identifiant : root
# mot de passe root : celui que vous venez de créer
Retirer l'utilisateur pi
deluser pi
Faire la mise à jour et un nettoyage
apt update && apt --assume-yes dist-upgrade && apt autoclean && apt autoremove
S'assurer que Apache n'est pas installé et le retirer le cas échéant
apt autoremove apache2*
Lancer le configurateur de la Raspberry Pi
sudo raspi-config
Mettre à jour raspi-config
Menu 8
Adapter les paramètres régionnaux
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.
Changer le hostname
Menu 2
N1 pour changer le hostname raspberry en YunoHost
A vérifier, mais normalement avec NOOBS tout 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
Finir et redémarrer
sudo reboot
==== Récupération des adresses IP locale et publique, vérification du fichier de mise à jour et mise à jour des firmwares ====
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.
=> Remplacer stable par stretch dans le fichier /etc/apt/sources.list
sed -i 's|stable|stretch|' /etc/apt/sources.list
Installer les derniers firmwares et redémarrer
sudo apt update
sudo rpi-update
sudo reboot
==== Activer SSH et autoriser les connexion de root en SSH ====
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
P2 Enable SSH
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
==== Installation de YunoHost ====
Pour rappel, le script d'installation ne peut pas être lancé avec l'utilisateur pi : il faut être identifié en root.
Lancer cette commander
bash <(wget -q -O- https://install.yunohost.org/)
==== Post-installation de YunoHost ====
Au redémarrage il suffit d'accepter de lancer la post-installation.
Sinon la commande est la suivante :
yunohost tools postinstall
Si nécessaire pour configurer git :
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 fbdev-blacklist.conf (anciennement raspi-blacklist.conf)
sudo nano /etc/modprobe.d/fbdev-blacklist.conf
Ajouter ces lignes ...
#wifi
blacklist brcmfmac
blacklist brcmutil
#bt
blacklist btbcm
blacklist hci_uart
... puis redémarrer
reboot
Sources : http://www.cedynamix.fr/jeedom-raspberry-3-desactivation-bluetooth-wifi/
Pour étendre la partition :
raspi-config # 1 Expand Filesystem
Si ça ne fonctionne pas alors essayer cette commande à adapter à vos partition après un df -h et/ou fdisk -l
df -h
fdisk -l
resize2fs -p /dev/mmcblk*** # par exemple mmcblk0p2
Vous pouvez aussi contribuer à ce projet ici https://doc.yunohost.org/#/contribute_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.**//
==== 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 directement à la version 'testing' de YunoHost (sans passer par l'installation de la version stable) :
bash <(wget -q -O- https://install.yunohost.org/switchToTesting)
Mettez à jour votre instance :
apt-get update && apt-get dist-upgrade
Indiquez le dépôt testing en lieu et place du dépôt stable dans le sources.list YunoHost :
echo 'deb http://repo.yunohost.org/debian/ stretch stable testing' > /etc/apt/sources.list.d/yunohost.list
Mettez à jour votre instance (à nouveau) avec les dépôts testing :
apt-get update && apt-get dist-upgrade
Source en rapport : https://forum.yunohost.org/t/yunohost-2-5-0-beta-call-for-beta-testers-and-translators/2243
=== 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-get update && apt-get 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 :
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 a priori installé par défaut sur Yunohost.
sudo apt-get 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-get 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