Table des matières
Yunohost : un serveur personnel
Yunohost est un système d'exploitation basé sur Debian et dédié à la mise en oeuvre simplifiée d'un serveur personnel.
Toutes les commandes doivent être exécutées en tant que superutilisateur. Le code indiqué entre chevrons < > est à remplacer par la valeur correspondante. Le code suivant une double barre oblique / / est un commentaire. Notes tirées majoritairement de la documentation officielle de Yunohost. La documentation des commandes yunohost sont accessibles avec l'option -h.
Conseils généraux
- Limiter la personnalisation, notamment des fichiers de configuration : créer des sauvegardes avec suffixe « .old » ou créer des copies .conf personnalisées ;
- Installer les applications officielles, nécessaires, et après s’être renseigné sur leur fonctionnement ;
- Ne pas tenter d’expériences compliquées sans connaissances techniques ;
- Ne pas réinstaller systématiquement au premier problème venu ;
- Faire des sauvegardes régulièrement et avant chaque modification majeure ;
- Suivre l’état et le fonctionnement du serveur (root@domaine.tld) ;
- Mettre à jour régulièrement le système et les applications ;
- Suivre l’avancement du projet Yunohost et du développement des applications installées.
Installation
Debian
ssh root@<ip> passwd root apt update && apt upgrade apt install curl
Yunohost
curl https://install.yunohost.org | bash yunohost tools postinstall yunohost user create <user>
Sécurité
Port d'écoute SSH
nano /etc/ssh/sshd_config Port <port> // changer le port d'écoute ssh yunohost firewall allow TCP <port> systemctl restart ssh // redémarrer le service ssh yunohost firewall reload yunohost firewall disallow TCP 22 nano /etc/fail2ban/jail.d/my_ssh_port.conf
[sshd]
port = <port>
[sshd-ddos]
port = <port>
systemctl restart fail2ban
Identification par clés
NB : par défaut, les paramètres de ssh-keygen sont -t rsa -b 2048.
Sur le client :
ssh-keygen
Accepter l'emplacement par défaut puis entrer une phrase de passe (deux fois), puis :
ssh-copy-id -i ~/.ssh/id_rsa.pub -p <port> admin@<ip>
Vérifier les informations affichées, confirmer et entrer le mot de passe admin du serveur. Sur le serveur :
nano /etc/ssh/sshd_config
PasswordAuthentication no
systemctl restart ssh
Sécurité des services Nginx et SSH
yunohost settings set security.nginx.compatibility -v modern yunohost settings set security.ssh.compatibility -v modern
Désactivation de l'API
systemctl disable yunohost-api systemctl stop yunohost-api
DNS
Il est conseillé de partir de la configuration minimale conseillée d'OVH, puis d'ajouter chaque entrée séparément à l'aide de l'outil intégré au panneau d'administration. La commande suivante donne les entrées conseillées par Yunohost à ajouter :
yunohost domain dns-conf <domain.tld>
Les entrées DKIM, DMARC et SPF doivent être ajoutées en tant que telles, bien qu'elles apparaissent comme “TXT” dans le fichier texte ci-dessous. Pour plus d'info sur ces déclarations : Nextinpact - Emails avec SPF, DKIM, DMARC... NB : la déclaration de zone DNS ne supporte pas les commentaires, penser à les retirer.
$TTL 3600 @ IN SOA dns105.ovh.net. tech.ovh.net. (2019120201 86400 3600 3600000 300) IN NS dns105.ovh.net. // serveur DNS déclaré par OVH IN NS ns105.ovh.net. // serveur DNS déclaré par OVH IN MX 10 <domain.tld>. IN A <ipv4> IN AAAA <ipv6> IN CAA 128 issue "letsencrypt.org" IN TXT "1|www.<domain.tld>" // déclaré par OVH IN TXT "v=spf1 ip4:<ipv4> ip6:<ipv6> include:mx.ovh.com ~all" // pour le mail * IN A <ipv4> * IN AAAA <ipv6> _dmarc IN TXT ( "v=DMARC1; p=none;" ) // pour le mail _xmpp-client._tcp IN SRV 0 5 5222 <domain.tld>. _xmpp-server._tcp IN SRV 0 5 5269 <domain.tld>. mail._domainkey IN TXT ( "v=DKIM1; k=rsa; h=sha256; p=<pubkey>" ) // pour le mail muc IN CNAME <domain.tld>. // pour XMPP pubsub IN CNAME <domain.tld>. // pour XMPP vjud IN CNAME <domain.tld>. // pour XMPP xmpp-upload IN CNAME <domain.tld>. // pour XMPP wiki IN CNAME <domain.tld>. // sous-domaine perso www IN A <ipv4> www IN AAAA <ipv6> www IN MX 10 <domain.tld>. www IN TXT "3|welcome" // déclaré par OVH www IN TXT "l|fr" // déclaré par OVH
Certificats Let's Encrypt
yunohost domain cert-status <domain.tld> // vérifier le statut du certificat actuel yunohost domain cert-install <domain.tld>
NB: Il faut générer un certificat par sous-domaine. Après avoir ajouté une entrée CNAME dans le fichier de configuration de la zone DNS pour le sous-domaine voulu (sur le modèle ci-dessus), il faut ajouter le sous-domaine avant de générer un nouveau certificat pour celui-ci :
yunohost domain add <sub.domain.tld> // ajouter un sous-domaine
Configuration du Firewall Network (OVH)
Cf. Documentation OVH.
Gestion des applications
Rechercher
yunohost app list
NB : renvoie l'ensemble des applications. Voir le site officiel de Yunohost pour la liste des applications dites de qualité (niveau 7 et +).
Installer
yunohost app install <application>
NB : Il faut utiliser l'id de l'application qui peut être différent de son nom (exemple : wallabag2).
Il faut ensuite choisir le domaine (sous-domaine créé), le chemin d'installation (/ pour un sous-domaine réservé à l'application) ainsi que l'administrateur.
Supprimer
yunohost app remove
Mise à jour
yunohost tools update yunohost tools upgrade --system --apps yunohost app upgrade <application> // mise à jour de l’application
Transfert de fichiers
Copier sur le serveur :
scp -P <port> <repertoire/fichier_local.ext> admin@<ip>:/home/admin/<fichier_serveur.ext>
Télécharger depuis le serveur :
scp -P <port> admin@<ip>:/home/admin/<fichier_serveur.ext> <repertoire/fichier_local.ext>
Sauvergarder/restaurer la configuration
Voir l'aide de yunohost backup -h pour les options.
Créer une sauvegarde sur le serveur
yunohost backup create
Télécharger l'archive sur la machine locale
scp -P <port> admin@<ip>:/home/yunohost.backup/archives/<yyyy-hhmmss>.tar.gz ~/ scp -P <port> admin@<ip>:/home/yunohost.backup/archives/<yyyy-hhmmss>.info.json ~/
- N.B.: le fichier .info.json semble désormais intégré à l'archive (20200125).
Restaurer la configuration sur le serveur
yunohost backup restore <yyyy-hhmmss>
Configuration des applications
FreshRSS
Partage vers Wallabag
Menu > Partage. Sélectionner wallabag v2. Entrer les paramètres > Nom : Wallabag, URL : https://wallabag.domain.tld. En bas de chaque article, cliquer sur Partager > Wallabag.
Synchronisation avec EasyRSS pour Android
Dans FreshRSS : Menu > Authentification > Autoriser l'accès par API. Menu > Configuration > Profil > Mot de passe API > Entrer un mot de passe et valider. Dans EasyRSS : URL du service RSS : http://rss.domain.tld/api/greader.php, Nom d'utilisateur : login, Mot de passe : mot de passe API.
Pluxml
Installer des plugins
Télécharger l'archive du plugin (liste sur https://forum.pluxml.org/categories/plugins) sur la machine locale, puis :
scp -P <port> <repertoire/archive-version.zip> admin@<ip>:/home/admin/<archive-version.zip> unzip <archive-version.zip> mv <repertoire-version> <repertoire> cp -R <repertoire> /var/www/pluxml/plugins/
Plugins utiles : plxEditor, MyBreadcrumb, MyPager, MySearch.
Nextcloud
Configuration serveur email
- Mode d'envoi : SMTP
- Chiffrement : STARTTLS
- Adresse source : adminuser@domain.tld
- Méthode d'authentification : Login (authentification requise)
- Adresse du serveur : domain.tld:587
- Information d'identification : login/password
Onlyoffice pour Nextcloud
Télécharger l'application OnlyOffice Connector et l'application Community Document Server pour Nextcloud. Copier et désarchiver chacune des archives dans le dossier des applications Nextcloud sur le serveur à l'aide des commandes suivantes :
scp -P <port> <repertoire/archive.tar.gz> admin@<ip>:/home/admin/<archive.tar.gz> tar -zxvf <archive.tar.gz> cp -R <repertoire> /var/www/nextcloud/apps/
Activer les deux applications dans le menu Applications de Nextcloud. Aller dans le menu Paramètres > ONLYOFFICE et entrer l'adresse suivante dans le champs “Adresse du service d'édition de document” :
https://<cloud.domain.tld>/index.php/apps/documentserver_community/
. Choisir les extensions prises en charge.
ClamAV pour Nextcloud
Manuels de Nextcloud et de ClamAV.
- Installer ClamAV sur le serveur :
apt-get install clamav clamav-daemon
- Télécharger l'application “Antivirus for files” (archive tar.gz) depuis la page dédiée.
- Copier l'archive sur le serveur, la décompresser et la déplacer dans le dossier Apps de Nextcloud :
scp -P <port> <repertoire/archive.tar.gz> admin@<ip>:/home/admin/<archive.tar.gz> tar -zxvf <archive.tar.gz> cp -R <repertoire> /var/www/nextcloud/apps/
- Modifier le propriétaire et le groupe du répertoire et de son contenu :
chown -R nextcloud /var/www/nextcloud/apps/<repertoire> chgrp -R nextcloud /var/www/nextcloud/apps/<repertoire>
- Activer l'application “Antivirus for files” : Menu > Applications > Applications désactivées > Antivirus for files > Activer.
- Activer tous les logs de Nextcloud : Menu > Paramètres > Journalisation > tout cocher.
- Configurer l'antivirus : Menu > Paramètres > Sécurité > Antivirus pour les fichiers :
- Mode : processus (socket);
- Socket : (par défaut); (
socket …/clamd.ctl absent)
- Taille du flux : (par défaut);
- Taille limite : (par défaut);
- Lorsque des fichiers infectés sont détectés durant un scan en arrière-plan : Journaux seulement.
Bitwarden
A l'installation, un token (code) est envoyé à l'adresse mail de l'utilisateur défini comme administrateur (useradmin@domain.tld). Il permet de se connecter à l'interface administrateur de Bitwarden (https://bitwarden.domain.tld/admin). A partir de cette interface, il est possible d'inviter un utilisateur par mail (le serveur mail de Bitwarden doit être correctement configuré pour une adresse externe ).
Galène
Galène est un logiciel de visioconférence. Il inclus les fonctionnalités de partage d'écran, lecture d'un média depuis le disque dur, détection d'activité, mode “Tableau noir” (amélioration de la lisibilité de la vidéo au détriment de la fluidité), enregistrement de la conférence. Il est relativement léger : un serveur avec processeur simple cœur permet des conférences pour environ 400 auditeurs et des réunions pour 20 personnes maximum avec partage vidéo/audio. Limitations actuelles : détection d'activité sous Firefox, lecture d'un média sous Chrome, partage d'écran sur mobile, multiples problèmes sous Safari. Il peut fonctionner en mode conférence (un présentateur et des auditeurs/commentateurs), réunion ou travail en sous-groupes. Il existe trois catégories d'utilisateurs définis par leurs privilèges (administrateur, présentateur et auditeur). Pour chacune de ces catégories, l'accès aux groupes et sous-groupes de discussion peut être public ou protégé par un mot de passe. L'administrateur possède les droits de modération pendant la discussion.
Configuration des ports
Au démarrage d'une visioconférence, le serveur choisit un port de manière dynamique dans une plage qu'il faut ouvrir manuellement :
yunohost firewall allow Both 49152:65535
Création des groupes
Un groupe correspond à un fichier de configuration <nom_groupe>.json créé dans le répertoire /opt/yunohost/galene/groups :
cd /opt/yunohost/galene/groups nano <nom_groupe>.json
Il contient les paramètres suivants (N.B. : tous les champs sont optionnels, mais un champ op, presenter ou other doit être renseigné pour que quelqu'un puisse accéder au groupe) :
{ "op": [{"username": "<user>", "password": "<password>"}], "presenter": [ {"username": "<user>", "password": "<password>"}, {"username": "<user>", "password": "<password>"} ], "other": [{}], "contact": "<user@fai.tld>", "comment": "<commentaire>", "description": "<Description visible sur la page d'accueil.>", "autolock": true, "autokick": false, "public": true, "max-clients": 20, "max-history-age": 14400, "allow-recording": true, "allow-anonymous": true, "allow-subgroups": true, "redirect": "", "codecs": ["vp8", "opus"] }
Complément concernant les options :
- Les utilisateurs op ont les privilèges d'administrateur, les presenter peuvent diffuser son et caméra, les other peuvent uniquement rejoindre le groupe et commenter.
- Si aucun nom <user> n'est spécifié, tous les noms d'utilisateurs sont acceptés. Si aucun mot de passe <password> n'est spécifié, le groupe est accessible à tous. Il est possible de ne spécifier qu'un mot de passe.
- L'option autolock permet de verrouiller la conversation avant l'arrivée d'un utilisateur op et après son départ. L'utilisateur op peut utiliser /lock et/unlock dans le chat du groupe pour verrouiller ou déverrouiller l'accès au groupe pendant la visioconférence.
- L'option autokick suit le même principe, mais les participants seront éjectés du groupe au départ de l'utilisateur op.
- L'option public définit si le groupe est accessible depuis la page d'accueil (true) ou seulement via l'URL.
Sous-groupes
Pour créer un sous-groupe, il suffit de créer un fichier de configuration (voir ci-dessus) dans un répertoire nommé d'après le groupe parent. Exemple pour un sous-groupe du groupe conference :
cd /opt/yunohost/galene/groups mkdir conference cd conference nano sous-groupe-1.json
Si l'option “allow-subgroups” a été définie sur true dans les options du groupe, il est possible de créer un sous-groupe en accédant pour la première fois à son URL, soit en tapant <galene.server.tld/group/nom_groupe/nom_sous-groupe> dans la barre d'adresse.
Modération
Un utilisateur op peut modérer un groupe via le chat à l'aide des options suivantes :
/clear: effacer l'historique des message
/help: afficher cette aide
/kick user [message]: expulser <user> [message d'annonce]
/leave: quitter le groupe
/lock [message]: verrouiller le groupe [message d'annonce]
/msg user message: envoyer un <message> privé à <user>
/mute user: rendre muet <user>
/muteall: rendre muets tous les participants
/op user: give donner le privilège d'administrateur à <user>
/present user: donner le privilège de présentateur à <user>
/record: démarrer l'enregistrement
/renegotiate: renégocier les flux de média
/subgroups: lister les sous-groupes
/unlock: déverrouiller le groupe, inverse l'effet de /lock
/unop user: révoquer le privilège d'administrateur à <user>
/unpresent user: révoquer le privilège de présentateur à <user>
/unrecord: arrêter l'enregistrement
/wall message: envoyer un avertissement à tous les utilisateurs
/warn user message: envoyer un avertissement à <user>
Synapse
Synapse est un serveur de messagerie instantanée.