15 meilleurs conseils de sécurité pour la pile de lampes

15 meilleurs conseils de sécurité pour la pile de lampes

De nombreux nouveaux administrateurs système ont oublié d'appliquer la sécurité lors de la configuration d'un environnement d'hébergement Web pour une utilisation en production avec Apache, MySQL et PHP. J'essaie d'inclure tous ces conseils de sécurité que nous devons être pris en considération lors de la préparation d'un nouveau système à usage de production ou de toute configuration de lampe existante.

Toutes les modifications de configuration utilisées dans cet article seront mises à jour dans les fichiers de configuration suivants conformément à vos systèmes d'exploitation. Dans certains cas, le chemin des fichiers de configuration peut changer. Alors faites le changement de fichiers inappropriés. Après avoir apporté des modifications à redémarrer les services liés pour changer.

Pour Ubuntu, Debian & Linuxmint:
  • Apache2: / etc / apache2 / apache2.confli
  • PHP: / etc / php / [version] / apache2 / php.ini
  • Mysql: / etc / mysql / mon.CNF ou / etc / mysql / mysql.confli.d / mysqld.CNF
Pour Centos, Redhat & Fedora:
  • Apache: / etc / httpd / conf / httpd.confli
  • PHP: / etc / php.ini
  • Mysql: / etc / mon.CNF

#1. Cacheter la version et l'identité du système d'exploitation (Apache)

Le Servertokens La directive contrôle si le champ d'en-tête de réponse du serveur qui est renvoyé aux clients. Laignature des serveurs configure le pied de page sur des documents générés par le serveur. Modifiez le fichier de configuration Apache et mettez à jour les directives suivantes comme suit.

  • SERVERSIGNATURE - Affiche la version d'Apache
     Servertokens prod 
  • SERVERTOKENS - fournit des versions du système d'exploitation ainsi que d'autres détails de serveur confidentiel.
     SERVERSIGNATURE OFF 

# 2. Désactiver la liste des répertoires (Apache)

Si la liste des répertoires est activée dans Apache. Ensuite, tous les fichiers et répertoires seront affichés sur la page Web si aucun document par défaut n'existe. Ajouter la configuration suivante dans Apache pour désactiver le serveur de liste de répertoires.

 Options - Indexes   

Après cela, vous pouvez activer une base de listing par directeur si nécessaire.

# 3. Restricter l'accès au fichier et au répertoire (Apache)

Restreindre l'accès sur la base du répertoire, déposer l'emplacement dans Apache.

Restreindre le répertoire

Pour restreindre le répertoire et l'accès aux fichiers des utilisateurs, il permettra uniquement que les IPS soient définis avec Autoriser à partir.

 Ordonner nier, permettre de refuser à tous les permettre de 192.168.1.0/24 Autoriser à partir de .exemple.com  

Restreindre le fichier

Nous pouvons également restreindre un fichier spécifique en utilisant la directive de fichiers comme ci-dessous.

 Commander nier, permettre de nier à tous  

Restreindre l'emplacement

La directive de localisation limite la portée des directives fermées par URL.

 Ordonner nier, permettre de refuser à tous les permettre de 192.168.1.0/24 Autoriser à partir de .exemple.com  

# 4. Désactiver le côté serveur inclut et CGI (Apache)

Nous pouvons simplement désactiver les incluses côté serveur et l'exécution de CGI en définissant la balise du répertoire. Ajouter ci-dessous dans le fichier de configuration de l'hôte virtuel Apache.

 Options -Cludes -execcgi  

# 5. Restreindre la fuite d'informations PHP (PHP)

Par défaut, l'installation de PHP expose au monde que PHP est installé sur le serveur, qui inclut la version PHP dans l'en-tête HTTP (par exemple: X-alimenté par PHP / 5.4.20). En savoir plus

Pour masquer ces valeurs à l'en-tête modifier PHP.INI et mise à jour ci-dessous directive à OFF

exposer_php = off 

# 6. Désactiver l'exécution du code distant (PHP)

Si allow_url_fopen est activé sur votre configuration, il permet des fonctions comme file_get_contents () et l'inclusion et nécessite des instructions qui peuvent récupérer des données à partir des emplacements distants HTTP ou FTP et exécuter leur code.

allow_url_fopen = off allow_url_include = off 

#7. Désactiver les fonctions PHP dangereuses (PHP)

Nous pouvons désactiver n'importe quelle fonction PHP en utilisant la directive Disable_Functions dans le fichier de configuration PHP. Désactivez toutes les fonctions qui peuvent être nocives et non utilisées dans les applications.

Disable_Functions = exec, shell_exec, pasthru, System, Popen, Curl_exec, curl_multi_exec, parse_ini_file, show_source, proc_open, pcntl_exec 

# 8. Limiter l'accès PHP au système de fichiers (PHP)

La directive Open_Basedir définit les répertoires à partir desquels PHP est autorisé à accéder aux fichiers

open_basedir = "/ home / user / public_html" 

# 9. Désactiver les modules PHP inutilisés (PHP)

PHP prend en charge les «extensions dynamiques» à charger dans l'environnement PHP. Nous pouvons désactiver n'importe quel module inutilisé à charger dans le système en modifiant le nom du fichier de configuration.

CD / etc / php.D / MV OCI8.Ini OCI8.ini.désactiver 

#dix. Activer les limites en PHP (PHP)

Pour permettre aux utilisateurs de télécharger des fichiers de taille maximale, mettez à jour la valeur de configuration suivante.

 upload_max_filesize = 2m #maximum 2 Mo de l'utilisateur de fichier peut télécharger 

Temps d'exécution maximum de chaque script

 max_execution_time = 30 # secondes 

Durée maximale de chaque script peut passer des données de demande d'analyse

max_input_time = 60 # secondes 

# 11. Restreindre l'accès à distance MySQL (MySQL)

Si votre environnement d'application ne nécessite pas d'accéder à la base de données à distance, désactivez toutes les connexions distantes du serveur de base de données. Le moyen plus facile de le faire oblige le serveur MySQL à écouter uniquement sur 127.0.0.1 (localhost).

Modifiez le fichier de configuration MySQL et mettez à jour la valeur suivante.

Bind-Address = 127.0.0.1 

# 12. Désactiver l'utilisation de l'infile local (MySQL)

L'activation de l'infile local peut être dangereuse pour la sécurité de votre système. Si Infile local est activé sur le serveur, un utilisateur peut charger n'importe quel fichier (comme / etc / passwd, / etc / shadow) à un tableau facilement.

Pour désactiver ce fichier de configuration MySQL Modifier et ajouter la valeur suivante dans la section [MySQLD].

[mysqld] local-infile = 0 

# 13. Créer un utilisateur spécifique à l'application dans MySQL (MySQL)

N'utilisez pas d'utilisateur MySQL 'Root' pour accéder à la base de données via l'application. Cela peut être dangereux pour votre système. Assurez-vous donc de créer et d'utiliser un utilisateur spécifique à l'application avec un accès limité à la base de données d'application uniquement. Pour créer un compte MySQL, utilisez la commande suivante.

[e-mail protégé]: ~ # mysql -u root -p mysql> Créer l'utilisateur 'myusr' @ 'localhost' identifié par 'mot de passe'; mysql> subvention sélectionner, insérer, mettre à jour, supprimer sur mydb.* À «myUSR» @ «localhost» identifié par «mot de passe»; MySQL> Privilèges de rinçage; 

# 14. Améliorez la sécurité avec MySQL_SECure_installation (MySQL)

Après l'installation de MySQL MySQL_SECure_Installation, la commande est très utile pour sécuriser MySQL Server. Cette commande permettra également une protection par mot de passe sur l'utilisateur racine.

[Protégé par e-mail]: ~ # mysql_secure_installation "seule la sortie requise est affichée ci-dessous. En réalité, vous verrez plus de sortie à l'écran "Modifier le mot de passe? [O / N] y Nouveau mot de passe: ********** Renforcez le nouveau mot de passe: ********** Supprimer les utilisateurs anonymes? [O / N] Y Interdit la connexion racine à distance? [O / N] y supprimer la base de données de test et y accéder? [O / N] Y Recharger les tables de privilège maintenant? [O / N] Y 

# 15. Écrire des fichiers de configuration de protection (apache / mysql / php)

Dans cette section, nous protégeons tous nos fichiers de configuration de serveur utilisés dans la pile de lampes, donc personne ne peut modifier ces fichiers.

chattr + ai / etc / php.ini chattr + ai / etc / php.d / * chattr + ai / etc / mon.CNF Chattr + Ai / etc / httpd / conf / httpd.confli 

N'oubliez pas qu'après l'activation de la protection de l'écriture, aucun utilisateur, y compris la racine, ne peut mettre à jour ces fichiers. Dans le cas où vous devez mettre à jour l'un des fichiers désactiver d'abord la protection de l'écriture en utilisant la commande suivante.

Nom de fichier Chattr -ai 

Nous continuerons à mettre à jour des conseils de sécurité de lampes utiles pour cet article. Nous vous demandons également de suggérer des conseils en les ajoutant dans les commentaires.