🔒 Sécurité
Lorsque vous réfléchissez et discutez de la sécurité, que ce soit dans le contexte de YunoHost ou de tout autre système, gardez à l'esprit que la sécurité n'est pas un état binaire, mais une pratique continue. Le terme "sécurité" n'a essentiellement aucun sens sans préciser ce contre quoi nous nous protégeons exactement. Les 'menaces' à prendre en compte dépendent de votre contexte et peuvent aller des attaques automatisées de robots parcourant Internet à des acteurs étatiques sophistiqués comme la NSA, en passant par les vulnérabilités de la chaîne d'approvisionnement (par exemple, les dépendances logicielles compromises) ou les risques élémentaires tels que vos propres utilisateurs utilisant des mots de passe trop simples, ou votre pire ennemi de l'école primaire il y a 20 ans essayant de pirater votre serveur ...
YunoHost is developed with security in mind, and designs good tradeoffs between security and usability. Here's a non-exhaustive list of security aspects that the project is implementing:
- a firewall based on
nftablesto restrict incoming traffic to relevant ports ; fail2ban, a software that automatically rejects traffic from malicious IPs trying to brute force SSH and other services ;- using Mozilla's recommendations for NGINX, Postfix, Dovecot, SSH ciphers etc. ;
- checking that user password/passphrase are not too simple when defining them ;
- hashing user passwords (salted SHA512 in LDAP for example) ;
- being vigilant on UNIX file/dir permissions across the whole system ;
- apps are typically run using a dedicated user, and with restricted capabilities ;
- auto-redacting sensitive information from YunoHost operation logs and when sharing them with Yunopaste ;
- ...
In addition, the project has mid-term goals to implement:
- password self-reset for users ;
- automatic warnings about vulnerabilities (via the Diagnosis, not via the forum or social media) ;
- supporting OIDC and 2FA ;
- better support for SSH keys, in particular making them configurable from the webadmin ;
- further constraining and limiting application capabilities to only what they need (cf. packaging v3) ;
- ...
Pour discuter des failles de sécurité dans YunoHost, contactez l'équipe de sécurité du projet.
Basic security advice
Security is not a one-time setup, it's an active, ongoing practice. Here are some basic practices that you should implement:
L'utilisation de mots de passe stupidement simples est sans doute la principale raison pour laquelle les serveurs sont "piratés". L'utilisation de mots de passe/phrases de passe raisonnablement complexes par vous-même et vos utilisateurs est la base de toute bonne sécurité.
- En tant qu'administrateur, oubliez les mots de passe traditionnels. Utilisez des phrases de passe raisonnablement complexes. Renseignez-vous sur les gestionnaires de mots de passe.
- Maintenez votre serveur et vos applications raisonnablement à jour. Envisagez d'utiliser l'application unattended upgrades pour les mises à jour automatiques ;
- Sachez que chaque application que vous installez constitue une "surface d'attaque" supplémentaire. Idéalement, vérifiez la réputation en matière de sécurité de chaque application que vous installez. Ne vous contentez pas d'installer des applications au hasard pour ensuite les oublier. Désinstallez les applications que vous n'utilisez plus ;
- ne créez des comptes que pour les personnes en qui vous avez une certaine confiance, en particulier celles qui utilisent des mots de passe/phrases de passe décents et qui ont une bonne hygiène de sécurité en général ;
- Consultez régulièrement le forum et les réseaux sociaux (par exemple, le compte Mastodon de YunoHost) pour rester informé lorsque des vulnérabilités sont découvertes ou que des correctifs importants sont publiés.
Les sections suivantes décrivent les moyens possibles pour renforcer davantage la sécurité de votre serveur.
Authentification via une clé SSH
Par défaut, l'authentification SSH utilise le mot de passe d'administration. Il est conseillé de désactiver ce type d'authentification et de le remplacer par un mécanisme à clé.
Sur votre client :
ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub <username@your_yunohost_server>
Si vous rencontrez des problèmes d'autorisations, définissez username comme propriétaire du répertoire ~/.ssh avec chown. Attention, pour des raisons de sécurité, ce répertoire doit être en mode 700.
Si vous utilisez Ubuntu 16.04, vous devez exécuter ssh-add pour initialiser l'agent SSH.
Saisissez votre mot de passe administrateur et votre clé sera copiée sur votre serveur.
Sur votre serveur, la modification du fichier de configuration SSH pour désactiver l'authentification par mot de passe est gérée par un paramètre système :
sudo yunohost settings set security.ssh.ssh_password_authentication -v no
Ne fermez jamais votre connexion SSH actuelle avant d'avoir vérifié que vos modifications fonctionnent. Testez votre nouvelle configuration en ouvrant un nouveau terminal ou une nouvelle fenêtre. Ainsi, vous pourrez annuler vos modifications si quelque chose ne fonctionne pas.
Utilisation d'un port personnalisé pour SSH
Pour empêcher les tentatives de connexion SSH par des robots qui scannent Internet à la recherche de serveurs sur lesquels SSH est activé, vous pouvez modifier le port SSH. Cette opération est gérée par un paramètre système qui se charge de mettre à jour la configuration SSH et Fail2Ban.
Notez que changer de port reste utile même si vous avez désactivé l'authentification par mot de passe, car cela réduit considérablement le bruit provenant des tentatives de "brute force" dans les journaux SSH.
Si vous modifiez manuellement quoi que ce soit dans la configuration du serveur SSH (/etc/ssh/sshd_config), le mécanisme regen-conf de YunoHost ne mettra plus automatiquement à jour ce fichier. Pour cette raison, utilisez toujours les outils d'administration YunoHost pour apporter des modifications aux fichiers de configuration du système !
sudo yunohost settings set security.ssh.ssh_port -v <new_ssh_port_number>
Pour les prochaines connexions SSH, vous devez ajouter l'option -p suivie du numéro de port SSH.
ssh -p <new_ssh_port_number> admin@<your_yunohost_server>
Ne fermez jamais votre connexion SSH actuelle avant d'avoir vérifié que vos modifications fonctionnent. Testez votre nouvelle configuration en ouvrant un nouveau terminal ou une nouvelle fenêtre. Ainsi, vous pourrez annuler vos modifications si quelque chose ne fonctionne pas.
Hardening ciphers used by NGINX, SSH, Dovecot, Postfix
La configuration TLS par défaut pour les services offre généralement une bonne compatibilité avec les anciens appareils. Vous pouvez ajuster cette politique pour des services spécifiques tels que SSH et NGINX. Par défaut, la configuration NGINX suit les recommandations de compatibilité intermédiaire de Mozilla. Vous pouvez choisir de passer à la configuration 'moderne' qui utilise des recommandations de sécurité plus récentes, au détriment d'une compatibilité réduite, ce qui peut poser problème pour vos utilisateurs et visiteurs utilisant des appareils plus anciens. Vous trouverez plus de détails sur la compatibilité sur cette page.
La modification du niveau de compatibilité n'est pas définitive et peut être annulée si elle ne convient pas à votre environnement.
Sur votre serveur, modifiez la politique pour NGINX.
sudo yunohost settings set security.nginx.nginx_compatibility -v modern
Sur votre serveur, modifiez la politique pour SSH.
sudo yunohost settings set security.ssh.ssh_compatibility -v modern
Désactivation de l'API YunoHost
YunoHost administration is accessible through an HTTP API, which is the API used by the webadmin. This may be an additional, unnecessary attack surface if you are not planning to use it. In this case, you can disable the corresponding service entirely via command line:
Cela désactivera complètement l'API de YunoHost et le panneau d'administration web qui en dépend. Ne continuez que si vous êtes à l'aise avec l'utilisation exclusive de la ligne de commande à partir de maintenant.
sudo systemctl disable yunohost-api
sudo systemctl stop yunohost-api
Comme yunohost-api est désormais désactivé et ne fonctionne plus, le Diagnostic signalera une erreur. Cette erreur peut être ignorée à l'aide de :
sudo yunohost diagnosis ignore --filter services service=yunohost-api