Il s'agit d'un Question canonique à propos de la sécurisation d'une pile LAMP
Quelles sont les directives absolues pour sécuriser un serveur LAMP ?
Il s'agit d'un Question canonique à propos de la sécurisation d'une pile LAMP
Quelles sont les directives absolues pour sécuriser un serveur LAMP ?
La réponse de David est une bonne base de référence des principes généraux du durcissement des serveurs. Comme David l'a indiqué, il s'agit d'une question très vaste. Les techniques spécifiques que vous adopterez dépendront fortement de votre environnement et de la façon dont votre serveur sera utilisé. Attention, cela peut demander beaucoup de travail dans un environnement de test pour le mettre au point et le faire correctement. Ensuite, il faudra beaucoup de travail pour l'intégrer dans votre environnement de production et, plus important encore, dans votre processus commercial.
Cependant, vérifiez d'abord si votre organisation dispose de politiques de renforcement, car ce sont les plus directement pertinentes. Si ce n'est pas le cas, en fonction de votre rôle, c'est le moment idéal pour les mettre en place. Je vous recommande également de vous attaquer à chaque composant séparément, de bas en haut.
Le L
Il existe beaucoup de bons guides pour vous aider. Cette liste peut ou non vous aider en fonction de votre distribution.
L'A
Apache peut être amusant à sécuriser. Je trouve qu'il est plus facile de renforcer le système d'exploitation et de maintenir l'utilisabilité que Apache ou PHP.
Le M
Le P
Cela va à l'encontre de l'idée même de pratiques de programmation sécurisées, qui est une discipline à part entière. Le SANS et l'OWASP disposent d'une quantité ridicule d'informations sur le sujet, je ne vais donc pas essayer de les reproduire ici. Je me concentrerai sur la configuration de l'exécution et laisserai vos développeurs s'occuper du reste. Parfois, le "P" de LAMP fait référence à Perl, mais généralement à PHP. Je suppose qu'il s'agit de PHP.
Le N silencieux - Avec IPTables ou un pare-feu externe, bloquez les connexions réseau uniquement à ce qui est nécessaire pour que le public y ait accès.
Vous avez posé une question qui, très franchement, mériterait quelques livres sur le sujet. Mais il existe des directives générales de base qui fonctionnent bien :
J'espère que cela vous aidera à démarrer.
Je vous suggère de lire le "Guide to the Secure Configuration of Red Hat Enterprise Linux 5" écrit par la NSA.
Voici une bonne liste de contrôle avec laquelle j'aime commencer.
En complément de ce que suggère David, plus votre installation est modulaire, c'est-à-dire qu'elle restreint l'accès à certains utilisateurs/groupes créés spécifiquement pour une tâche et limitant leur champ d'action, plus votre pile LAMP est sécurisée : Un exemple de ceci est d'avoir un utilisateur Apache pour les fichiers/dossiers Apache avec des permissions définies en conséquence et pas dans les groupes qui peuvent accéder aux fichiers/dossiers critiques du système. Un utilisateur qui peut accéder aux tables MySql qui sont associées aux sites Web que vous allez servir et uniquement à ces tables. De plus, vous pouvez restreindre leur accès pour qu'ils aient le minimum d'accès à partir d'un appel PHP. Assurez-vous également que le nom d'utilisateur MySQL utilisé/exposé par le biais du fichier PHP n'est pas le même nom d'utilisateur ou mot de passe que celui utilisé par un autre utilisateur.
Cela signifie que si l'utilisateur apache ou l'utilisateur MySql est compromis, il ne peut pas faire de dégâts en dehors du ou des dossiers auxquels apache a accès (dans le cas de l'utilisateur apache) et en dehors de la ou des tables/bases de données (dans le cas de l'utilisateur de la base de données MySQL).
Si l'utilisateur de MySQL était compromis, il ne pourrait pas, par exemple, accéder à la base de données, supprimer toutes les bases de données de MySQL et détruire toutes vos données. Il pourrait, dans certaines circonstances, être en mesure de supprimer des tables ou d'insérer des informations dans certaines tables d'une base de données isolée. C'est pourquoi il est important de n'accorder l'accès aux tables qu'en cas de nécessité absolue et de n'accorder que les autorisations nécessaires.
De plus, si, pour une raison quelconque, le nom d'utilisateur et le mot de passe de votre compte administratif sont découverts pour MySQL, si vous utilisez un nom d'utilisateur différent de tous les noms d'utilisateur de votre système, ils doivent d'abord briser la sécurité de votre système avant d'accéder à votre base de données pour faire des dégâts. Il en va de même pour l'utilisateur apache et l'accès aux fichiers.
C'est l'heure des exemples ! Je vais donner un exemple de système pour simplifier l'idée.
disons que vous avez des utilisateurs sur votre système (root doit être désactivé pour des raisons de sécurité par quelque chose comme umod -l ou passwd -l, etc :) John, Barney, Terence et Lisa.
vous pourriez créer un utilisateur dans MySQL avec le nom de bigbird (veillez à utiliser un mot de passe haché). Bigbird ne dispose que des privilèges de sélection et de mise à jour, mais pas des privilèges de suppression ou de création, et certainement pas des privilèges d'accès. . En outre, vous créez un autre utilisateur MySQL administratif avec le nom garfield pour travailler sur la base de données MySQL et vous supprimez l'utilisateur root de la base de données MySQL afin qu'il ne puisse pas être compromis. garfield a été accordé . dans MySQL (en fait, il s'agit simplement de renommer root).
maintenant, vous créez un groupe apache ou un utilisateur et nous l'appellerons apweb2. Appweb2 n'est pas membre d'autres groupes, et tous les fichiers/dossiers pour apache sont stockés dans /home/apweb2/. Chaque hôte virtuel aurait son propre sous-dossier et chacun de ces hôtes aurait une racine de document définie dans ce sous-dossier. Les liens symboliques sont désactivés afin de ne pas donner accidentellement accès au reste du système.
De plus, vous pouvez restreindre l'accès à ssh à certains utilisateurs seulement (ou certains groupes, j'aime les mettre dans le groupe ssh, et faire en sorte que ce soit la seule chose capable d'utiliser ssh).
De plus, vous pouvez choisir quels utilisateurs ont des privilèges sudo pour restreindre encore plus les choses. Une autre étape que vous pouvez franchir est de faire en sorte que tous les utilisateurs de ssh ne puissent pas utiliser sudo, vous pouvez créer des utilisateurs spéciaux qui peuvent utiliser sudo mais pas ssh, de sorte qu'une fois que vous vous êtes connecté à ssh, vous devez vous connecter à un autre utilisateur pour avoir accès à sudo.
Ainsi, en modularisant chaque segment, si l'un d'entre eux est compromis, l'ensemble de la pile ne le sera pas et vous pourrez remédier à un seul problème au lieu de devoir tout recommencer depuis le début.
J'ai trouvé ce document de SANS.org très utile. http://www.sans.org/score/checklists/linuxchecklist.pdf
Bienvenue sur Server Fault ! En général, nous aimons que les réponses sur le site puissent se suffire à elles-mêmes - les liens sont bien, mais si le lien se brise, la réponse doit contenir suffisamment d'informations pour rester utile. Veuillez envisager de modifier votre réponse pour y inclure plus de détails. Voir l'article FAQ pour plus d'informations.
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.