EDIT #2 23 juillet 2015 : Recherche d'une nouvelle réponse qui identifie un élément de sécurité important oublié dans la configuration ci-dessous ou peut donner une raison de croire que tout est couvert.
EDIT #3 29 juillet 2015 : Je cherche surtout une éventuelle mauvaise configuration comme autoriser par inadvertance quelque chose qui pourrait être exploité pour contourner les restrictions de sécurité ou pire encore laisser quelque chose de grand ouvert.
Il s'agit d'une configuration d'hébergement multisite / partagé et nous voulons utiliser une instance Apache partagée (c'est-à-dire fonctionnant sous un seul compte d'utilisateur) mais avec PHP / CGI s'exécutant en tant qu'utilisateur de chaque site web pour s'assurer qu'aucun site ne peut accéder aux fichiers d'un autre site, et nous voulons nous assurer que rien n'est manqué (par exemple, si nous ne connaissions pas la prévention des attaques par lien symbolique).
Voici ce que j'ai pour l'instant :
- Assurez-vous que les scripts PHP s'exécutent sous le compte utilisateur et le groupe Linux du site web, et qu'ils sont soit jailed (comme en utilisant CageFS), soit au moins correctement restreints en utilisant les permissions du système de fichiers Linux.
- Utilisez suexec pour vous assurer que les CGI scripts ne peuvent pas être exécutés en tant qu'utilisateur d'Apache.
- Si vous avez besoin d'un support pour les inclusions côté serveur (comme dans les fichiers shtml), utilisez
Options IncludesNOEXEC
pour empêcher les CGI d'être lancés quand vous ne vous y attendez pas (bien que cela ne devrait pas être un problème si vous utilisez suexec). - Mettez en place une protection contre les attaques par lien symbolique afin qu'un pirate ne puisse pas inciter Apache à servir les fichiers d'un autre site Web en clair et à divulguer des informations exploitables comme les mots de passe des bases de données.
- Configurer
AllowOverride
/AllowOverrideList
pour n'autoriser que les directives qu'un hacker ne pourrait pas exploiter. Je pense que ce problème est moins préoccupant si les points ci-dessus sont réalisés correctement.
Je choisirais MPM ITK s'il n'était pas aussi lent et s'il ne fonctionnait pas en tant que root, mais nous voulons spécifiquement utiliser un Apache partagé tout en nous assurant que c'est fait de manière sécurisée.
J'ai trouvé http://httpd.apache.org/docs/2.4/misc/security_tips.html mais il n'était pas complet sur ce sujet.
Si cela peut vous être utile, nous envisageons d'utiliser CloudLinux avec CageFS et mod_lsapi.
Y a-t-il autre chose à faire ou à savoir ?
EDIT 20 juillet 2015 : Les gens ont soumis de bonnes solutions alternatives qui sont précieuses en général, mais veuillez noter que cette question est ciblée uniquement concernant la sécurité d'une configuration Apache partagée. Plus précisément, y a-t-il quelque chose qui n'est pas couvert ci-dessus qui pourrait permettre à un site d'accéder aux fichiers d'un autre site ou compromettre d'autres sites d'une manière ou d'une autre ?
Gracias.