====== 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