Quelle est la procédure pour sécuriser un serveur Linux, Apache, MySQL, PHP (ou même Perl) pour une utilisation en production?
Outre la définition du mot de passe MySQL et du mot de passe root pour Linux, quelles autres étapes (peut-être pas si évidentes) devraient être prises?
Quelles mesures puis-je prendre, si je devais être paranoïaque supplémentaire, qui ne sont pas normalement nécessaires?
Ceci est pour une utilisation de base sur un seul site mais doit être sécurisé.
Réponses:
Ces recommandations me viennent à l'esprit et ne visent pas à être exhaustives.
Découvrez Bastille, c'est une série de scripts qui implémente les meilleures pratiques sous Linux.
N'envoyez pas de données d'authentification via des protocoles en clair. Par exemple, désactivez FTP. Si vous envoyez des données d'authentification via Apache, utilisez SSL.
Désactivez et supprimez tout logiciel inutile, y compris l'interface graphique.
Auditez tous les fichiers avec le bit SUID défini et supprimez. (Cela limitera considérablement les capacités non root. Comprenez les implications pour chaque changement individuel.)
Auditez les répertoires accessibles en écriture et supprimez le bit accessible en écriture. (Laisser / tmp seul.)
Évitez d'exécuter un démon en tant que root.
Recherchez tous les logiciels multi-utilisateurs qui écoutent en détail les sockets pour les meilleures pratiques de sécurité.
Éviter d'ajouter des utilisateurs au système est l'une des meilleures approches. Les systèmes multi-utilisateurs nécessitent une plus grande attention aux détails.
Appliquer les normes de mot de passe. Par exemple: minimum 10 caractères, caractères non alphanumériques, en utilisant des lettres et des chiffres. Ceci rend le forçage brutal plus difficile en cas de compromission du fichier de mot de passe. Appliquez cela via le système.
Verrouillez les utilisateurs après 5 tentatives d'authentification infructueuses avec un verrouillage d'au moins 10 minutes. Conservez un historique des mots de passe afin que les utilisateurs ne puissent pas utiliser les 5 derniers mots de passe.
Si vous disposez d'un environnement plus vaste, l'utilisation de la ségrégation réseau avec plusieurs sous-réseaux pour isoler le risque est une exigence absolue. S'il s'agit d'un environnement plus petit, il est recommandé d'exécuter un pare-feu sur le système local pour limiter l'exposition. Par exemple, autoriser uniquement SSH à votre IP. tcpwrappers peut également être utilisé pour une couche supplémentaire. (/etc/hosts.allow, /etc/hosts.deny)
Et, bien sûr, garder tous les logiciels à jour. En particulier les démons face au public.
Avec SSH:
without-password
(uniquement paire de clés)Avec Apache:
Avec MySQL:
Je recommanderais de rechercher spécifiquement le réglage de php.ini pour la sécurité. C'est un logiciel plus risqué par défaut.
Bastille
la source
Voici un bon article que vous pouvez utiliser comme base pour votre configuration et modifier en fonction de votre distribution: http://it.toolbox.com/blogs/rayheffer/how-to-build-a-secure-lamp-web- serveur-avec-centos-5-36786
la source
La Defense Information Security Agency dispose d'un ensemble de listes de contrôle de sécurité qui sont de bons points de départ. Encore mieux est de comprendre la justification de chaque entrée, mais ce n'est pas une réponse rapide. Je vous recommanderais de regarder les STIG Enclave, Network, Unix et Web Server .
la source