Point ./ Limite

Wiki du blog Point ./ Limite

Outils pour utilisateurs

Outils du site


public:yunohost

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)

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); (FIXME 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 FIXME).

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

FIXME Synapse est un serveur de messagerie instantanée.

public/yunohost.txt · Dernière modification : 2022/10/23 15:59 de roi_matou