Sécurisation
Note : nous disposons d'un programme de bug bounty si vous découvez une faille de sécurité.
Permissions du système de fichier
Il est recommandé de ne pas laisser l'accès en écriture aux répertoires contenant le code de Paheko si on n'utilise pas la fonctionnalité de mise à jour de version via l'interface intégrée à Paheko.
Voici une description exhaustive des permissions nécessaires au fonctionnement de Paheko :
- Tous les fichiers et répertoires de Paheko doivent être accessibles en lecture à PHP
- Le répertoire
wwwet ses sous-répertoires doivent être accessibles en lecture au serveur web et à PHP - Le répertoire
dataet ses sous-répertoires doivent être accessibles en lecture et écriture par PHP - Le répertoire
www/.cachedoit être un lien symbolique vers le répertoiredata/cache/web(s'il n'existe pas, il sera créé par Paheko, ce qui peut résulter en une erreur si PHP n'a pas le droit d'écrire danswww) - Le répertoire
dataet ses sous-répertoires doivent être accessibles en lecture par Apache si vous utilisezX-SendFile
En d'autres termes, les commandes suivantes assureront des permissions correctes à votre installation, si vous utilisez Apache et FPM, et que vous avez créé un utilisateur php-paheko pour votre pool FPM :
cd /var/www/paheko
chown php-paheko:www-data -R .
chmod u=rX,g=,o= -R .
chmod g+rX -R www
chmod u+wX -R data
mkdir -p data/cache/web
ln -s data/cache/web $PWD/www/.cache
# Seulement si utilisation de X-SendFile
chmod g+rX -R data
# Seulement si on veut permettre les mises à jour depuis l'interface de Paheko !
chmod u+rwX -R .
Ceci n'est qu'un exemple de configuration possible, les permissions peuvent varier en fonction des hébergeurs !
Vérifier l'intégrité et la sécurité de l'installation de Paheko
Il est possible depuis la version 1.3.16 d'utiliser en ligne de commande bin/paheko security pour que Paheko exécute une auto-vérification de certaines choses.
Attention : cette vérification est purement indicative et pourrait avoir été modifiée par un attaquant si celui-ci a pu modifier le code source Paheko, ce n'est donc pas une garantie à 100%, mais un indicateur utile dans le cas où vous savez que le code de Paheko n'a pas été modifié.
Cette commande indique :
- si la restriction
open_basedirest activée (recommandé, voir ci-dessous) - si des fichiers du code source de Paheko sont accessibles en écriture par PHP (il est recommandé de laisser uniquement un accès en lecture seule, et de désactiver la fonction de mise à jour depuis l'interface de Paheko, si vous avez les connaissances techniques pour cela)
- si du code PHP suspicieux ont été trouvés dans les répertoires de cache et de stockage de documents
- si des fichiers sensibles, comme la base de données, sont accessibles via le serveur web
- si des fichiers PHP ont été ajoutés au répertoire du code source de Paheko
- si des fichiers PHP du code source de Paheko ont été modifiés
Une alerte provenant de cette commande ne signifie pas qu'une attaque a eu lieu : il est possible que vous ayez vous-même modifié un fichier PHP, par exemple.
De la même manière, l'absence d'alerte n'indique pas qu'une attaque n'a pas eu lieu !
Cacher les informations techniques
Par défaut Paheko affiche dans le menu Configuration des informations techniques sur le serveur, ainsi que la liste des constantes de configuration et aussi la liste des erreurs PHP rencontrées.
C'est pratique pour de l'auto-hébergement, mais probablement une mauvaise idée si des personnes tierces peuvent accéder à la configuration.
Dans ce cas il faut ajouter cette ligne à config.local.php :
const ENABLE_TECH_DETAILS = true;
Désactivation des mises à jour depuis l'interface
Par défaut Paheko permet d'installer une nouvelle version de manière semi-automatisée, depuis l'interface (menu Configuration).
Si vous désirez ne pas permettre aux utilisateurs (administrateurs) de procéder à la mise à jour, par exemple parce que vous souhaitez faire les mises à jour manuellement, ajoutez cette ligne à config.local.php :
const ENABLE_UPGRADES = false;
Sécurisation de l'accès aux répertoires avec open_basedir
Paheko permet, depuis la version 1.3.14, de configurer automatiquement la directive open_basedir pour empêcher l'accès aux répertoires en dehors de ceux utilisés par Paheko. Cela permet de "cloisonner" Paheko et l'empêcher d'accéder aux données d'autres répertoires du serveur web en cas de faille de sécurité dans Paheko.
Ce réglage est recommandé particulièrement si vous utilisez Paheko sur un hébergement ou un serveur mutualisé, avec plusieurs application installées dans le même compte.
Avertissement : activer ce réglage désactive le cache realpath de PHP, risquant de rendre l'application plus lente.
Pour cela il suffit d'ajouter cette ligne à config.local.php :
const OPEN_BASEDIR = 'auto';
Sécurisation du serveur web avec Snuffleupagus
Ceci permet de mettre en place un outil qui limitera les dégâts en cas de faille de sécurité non corrigée dans Paheko.
- Installer et configurer Snuffleupagus
- Le configurer pour utiliser le fichier snuffleupageus_paheko.rules fourni, par exemple comme ceci avec Apache :
<VirtualHost *:80>
ServerName paheko.example.org
DocumentRoot /var/www-data/paheko/src/www/
php_admin_value sp.configuration_file "/var/www-data/paheko/doc/conf/snuffleupageus_paheko.rules"
</VirtualHost>