Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
php:installation_configuration [2011/08/27 02:02] – import - création Anael MOBILIAphp:installation_configuration [2014/05/27 03:32] (Version actuelle) – modification externe 127.0.0.1
Ligne 1: Ligne 1:
-<style float-right>{{tag>XXX}}</style>+<style float-right>{{tag>PHP installation configuration}}</style>
  
-<style float-left>{{:icones:page_web.png?nolink&70}}</style> +<style float-left>{{:icones:php.png?nolink&70}}</style> 
-====== Titre_page ======+====== Installer PHP ======
  
 //[[:|Retour à la liste des tutoriels]]// //[[:|Retour à la liste des tutoriels]]//
  
-<note tip>Présentation rapide.</note>+<note tip>Installation et configuration de PHP.</note>
 <note>**Prérequis** <note>**Prérequis**
   * Aucun prérequis pour ce tutoriel.   * Aucun prérequis pour ce tutoriel.
 </note> </note>
 \\ \\
-===== grand1 ===== +===== Installation de PHP ===== 
-lorem ipsum+<code bash>apt-get install php5</code> 
 +PHP est maintenant installé sur notre serveur, et est automatiquement intégré à Apache.
  
 +Le script d'installation a mis à jour automatiquement la configuration d'Apache, et l'a relancer pour prendre en compte les modifications.
 +
 +
 +===== Sécurisation / configuration de PHP =====
 +La configuration de PHP s'effectue en éditant le fichier **/etc/php5/apache2/php.ini** .
 \\ \\
-===== Liens ===== +Avant toute chose, j'effectue une sauvegarde du fichier de configuration original 
-  * [[.:|Retour à la liste des tutoriels XXX]] +<code bash>cd /etc/php5/apache2/ 
-  * [[:|Retour à la liste des tutoriels]]+mv php.ini php.ini.back</code>
  
 +Et je vais me baser sur le fichier de configuration recommandé pour un environnement de production
 +<code bash>cp /usr/share/doc/php5-common/examples/php.ini-recommended ./php.ini</code>
 +<note>A partir de squeeze //(Debian 6.0)//: <code bash>cp /usr/share/php5/php.ini-production ./php.ini</code></note>
  
-++__But : Installer et configurer [PHP|tag:PHP].__++ +==== SafeMode ==== 
-%%%''(mis à jour pour Ubuntu 10.04 /php5.3 - 02/07/2010)'' +Nous n'allons pas activer cette fonctionnalité de PHP qui est devenue obsolète avec la version 5.3.0 de PHP 
-%%% +\\ 
-!!!! I) [Installation|tag:Installation] de PHP +[[http://php.net/manual/fr/features.safe-mode.php|Doc. PHP]
-///[bash] + 
-apt-get install php5 +==== disable_functions ==== 
-/// +<note tip>Si vous êtes la seule personne déposant des logiciels sur votre serveur, ces configurations servant à limiter les accès des fonctions PHP ne vous concernent pas pleinement. 
-PHP est maintenant installé sur notre serveur, et est automatiquement intégré à Apache ! + 
-%%%Le script d'installation à même eu la délicatesse de mettre à jour la configuration d'Apache et de le relancer :-) +Toutefois, je recommande de les appliquer : ceci peut permettre de réduire l'impact d'une faille dans un de vos logiciels !</note> 
-%%% + 
-%%% +Nous allons désactiver certaines fonctions de PHP pouvant mettre en péril la sécurité du serveur. 
-!!!! II) [Sécurisation|tag:Sécurisation] / configuration de PHP + 
-La configuration de PHP s'effectue en éditant le fichier __ /etc/php5/apache2/php.ini__ . +=== chgrp === 
-%%%Nous allons tout de suite utiliser le fichier de configuration PHP recommandé pour un environnement de prod : (et faire un backup du fichier actuel) +Permet de modifier le groupe propriétaire d'un fichier. 
-///[bash] +\\ 
-cd /etc/php5/apache2/ +Les mauvaises utilisations de cette fonction sont partiellement inhibées par la modification du fichier /etc/apache2/conf.d/security -> Directory / . 
-mv php.ini php.ini.back +\\ 
-cp /usr/share/doc/php5-common/examples/php.ini-recommended ./php.ini +[[http://fr.php.net/manual/fr/function.disk-free-space.php|Doc. PHP]
-/// + 
-!!! 1) [SafeMode|tag:SafeMode] +=== disk_free_space ===
-Nous n'allons pas activer cette fonctionnalité de PHP qui est devenue obsolète avec la version 5.3.0 de PHP :) +
-%%%[Doc. PHP|http://php.net/manual/fr/features.safe-mode.php|fr+
-!!! 2) disable_functions +
-Nous allons désactiver certaines fonctions de PHP pouvant mettre en péril la sécurité du serveur ! +
-!! A) chgrp +
-Permet de modifier le groupe d'un fichier. +
-%%%Cette fonction est partiellement inhibée par la modification du fichier /etc/apache2/conf.d/security -> 1) Directory / . +
-%%%[Doc. PHP|http://fr.php.net/manual/fr/function.disk-free-space.php|fr+
-!! B) disk_free_space+
 Retourne l'espace disque disponible sur la partition. Une personne malveillante pourrait l'utiliser pour savoir si elle peut saturer le disque ou non. Retourne l'espace disque disponible sur la partition. Une personne malveillante pourrait l'utiliser pour savoir si elle peut saturer le disque ou non.
-%%%Cette fonction est partiellement inhibée par la modification du fichier /etc/apache2/conf.d/security -> 1) Directory / . +\\ 
-%%%[Doc. PHP|http://fr.php.net/manual/fr/function.disk-free-space.php|fr+[[http://fr.php.net/manual/fr/function.disk-free-space.php|Doc. PHP]
-!! C) disk_total_space+ 
 +=== disk_total_space ===
 Retourne l'espace disque utilisé sur la partition. Une personne malveillante pourrait l'utiliser pour savoir si elle peut saturer le disque ou non. Retourne l'espace disque utilisé sur la partition. Une personne malveillante pourrait l'utiliser pour savoir si elle peut saturer le disque ou non.
-%%%[Doc. PHP|http://fr.php.net/manual/fr/function.disk-total-space.php|fr+\\ 
-!! D) diskfreespace+[[http://fr.php.net/manual/fr/function.disk-total-space.php|Doc. PHP]
 + 
 +=== diskfreespace ===
 Alias de disk_free_space Alias de disk_free_space
-%%%[Doc. PHP|http://fr.php.net/manual/fr/function.disk-free-space.php|fr+\\ 
-!! E) dl+[[http://fr.php.net/manual/fr/function.disk-free-space.php|Doc. PHP]
 + 
 +=== dl ===
 Charge des extensions PHP à la volée. Ce genre d'action n'a pas à être mis en place dans un script ! Charge des extensions PHP à la volée. Ce genre d'action n'a pas à être mis en place dans un script !
-%%%[Doc. PHP|http://fr2.php.net/manual/fr/function.dl.php|fr+\\ 
-!! F) exec +[[http://fr2.php.net/manual/fr/function.dl.php|Doc. PHP]
-Permet d'exécuter une commande (comme si elle était saisie dans le shell). Faille de sécurité monstrueuse :) + 
-%%%[Doc. PHP|http://fr2.php.net/manual/fr/function.exec.php|fr+=== exec === 
-!! G) ini_alter, ini_set, ini_restore+Permet d'exécuter une commande (comme si elle était saisie dans le shell). Faille de sécurité monstrueuse 
 +\\ 
 +[[http://fr2.php.net/manual/fr/function.exec.php|Doc. PHP]
 + 
 +=== ini_alter, ini_set, ini_restore ===
 Permettent de modifier certaines valeurs de la configuration effectuée dans le fichier php.ini . Permettent de modifier certaines valeurs de la configuration effectuée dans le fichier php.ini .
-%%%Si certaines valeurs doivent être ajustées, ce ne sera pas par l'utilisateur, mais par l'administrateur du serveur :) +\\ 
-%%%[Doc. PHP|http://fr2.php.net/manual/fr/ini.list.php|fr+Si certaines valeurs doivent être ajustées, l'administrateur du serveur peut les définir dans le fichier de configuration Apache. 
-!! H) leak+\\ 
 +[[http://fr2.php.net/manual/fr/ini.list.php|Doc. PHP]
 + 
 +=== leak ===
 Cette fonction permet d'allouer de la mémoire. Cette fonction permet d'allouer de la mémoire.
-%%%Toutefois, elle n'est présente que si PHP à été compilé avec l'option debug-mode. +\\ 
-%%%Autant la supprimer pour éviter tout risque futur :) +Toutefois, elle n'est présente que si PHP à été compilé avec l'option debug-mode. 
-!! I) passthru+\\ 
 +Autant la supprimer pour éviter tout risque
 + 
 +=== passthru ===
 Exécute une requête au niveau du shell et retourne le résultat. Exécute une requête au niveau du shell et retourne le résultat.
-%%%Cette fonction est une faille de sécurité monstrueuse également :) +\\ 
-%%%[Doc. PHP|http://fr2.php.net/manual/fr/function.passthru.php|fr+Cette fonction est une faille de sécurité monstrueuse également 
-!! J) popen+\\ 
 +[[http://fr2.php.net/manual/fr/function.passthru.php|Doc. PHP]
 + 
 +=== popen ===
 Exécute une commande au niveau du shell et retourne un pointeur de fichier. Exécute une commande au niveau du shell et retourne un pointeur de fichier.
-%%%Cette commande peut-être utilisée pour passer des commandes et est donc à proscrire :) +\\ 
-%%%[Doc. PHP|http://fr2.php.net/manual/fr/function.popen.php|fr+Cette commande peut-être utilisée pour passer des commandes et est donc à proscrire
-!! K) pclose+\\ 
 +[[http://fr2.php.net/manual/fr/function.popen.php|Doc. PHP]
 + 
 +=== pclose ===
 Ferme un flux de fichier ouvert avec popen. Ferme un flux de fichier ouvert avec popen.
-%%%[Doc. PHP|http://fr2.php.net/manual/fr/function.pclose.php|fr+\\ 
-!! L) proc_close, proc_get_status, proc_nice, proc_open, proc_terminate+[[http://fr2.php.net/manual/fr/function.pclose.php|Doc. PHP]
 + 
 +=== proc_close, proc_get_status, proc_nice, proc_open, proc_terminate ===
 Fonctions similaires au popen / pclose. Fonctions similaires au popen / pclose.
-%%%[Doc. PHP - proc_close|http://fr2.php.net/manual/fr/function.proc-close.php|fr] +\\ 
-%%%[Doc. PHP - proc_get_status|http://fr2.php.net/manual/fr/function.proc-get-status.php|fr] +[[http://fr2.php.net/manual/fr/function.proc-close.php|Doc. PHP - proc_close]] 
-%%%[Doc. PHP - proc_nice|http://fr2.php.net/manual/fr/function.proc-nice.php|fr] +\\ 
-%%%[Doc. PHP - proc_open|http://fr2.php.net/manual/fr/function.proc-open.php|fr] +[[http://fr2.php.net/manual/fr/function.proc-get-status.php|Doc. PHP - proc_get_status]] 
-%%%[Doc. PHP - proc_terminate|http://fr2.php.net/manual/fr/function.proc-terminate.php|fr+\\ 
-!! M) putenv, apache_setenv+[[http://fr2.php.net/manual/fr/function.proc-nice.php|Doc. PHP - proc_nice]] 
 +\\ 
 +[[http://fr2.php.net/manual/fr/function.proc-open.php|Doc. PHP - proc_open]] 
 +\\ 
 +[[http://fr2.php.net/manual/fr/function.proc-terminate.php|Doc. PHP - proc_terminate]
 + 
 +=== putenv, apache_setenv ===
 Définit la valeur d'une variable d'environnement. Ce genre de configuration n'a pas à être effectuée à travers un script ! Définit la valeur d'une variable d'environnement. Ce genre de configuration n'a pas à être effectuée à travers un script !
-%%%[Doc. PHP|http://fr2.php.net/manual/fr/function.putenv.php|fr] +\\ 
-%%%[Doc. PHP|http://fr2.php.net/manual/fr/function.apache-setenv.php|fr+[[http://fr2.php.net/manual/fr/function.putenv.php|Doc. PHP - putenv]] 
-!! N) set_include_path+\\ 
 +[[http://fr2.php.net/manual/fr/function.apache-setenv.php|Doc. PHP - setenv]
 + 
 +=== set_include_path ===
 Cette commande permet de modifier le path accessible par nos scripts. Cette commande permet de modifier le path accessible par nos scripts.
-%%%Nous le définirons à l'endroit précis voulu ultérieurement avec openbasedir. +\\ 
-[Doc. PHP|http://fr2.php.net/manual/fr/function.set-include-path.php|fr+Nous le définirons à l'endroit précis voulu ultérieurement avec openbasedir //(dans le fichier de configuration Apache)//. 
-!! O) set_time_limit, ignore_user_abort, apache_reset_timeout+\\ 
 +[[http://fr2.php.net/manual/fr/function.set-include-path.php|Doc. PHP]
 + 
 +=== set_time_limit, ignore_user_abort, apache_reset_timeout ===
 Permet de modifier la configuration PHP quand à la durée d'exécution d'un script, ou les paramètres d'arrêt. Permet de modifier la configuration PHP quand à la durée d'exécution d'un script, ou les paramètres d'arrêt.
-%%%[Doc. PHP - set_time_limit|http://fr2.php.net/manual/fr/function.set-time-limit.php|fr] +\\ 
-%%%[Doc. PHP - ignore_user_abort|http://fr2.php.net/manual/fr/function.ignore-user-abort.php|fr] +[[http://fr2.php.net/manual/fr/function.set-time-limit.php|Doc. PHP - set_time_limit]] 
-%%%[Doc. PHP - apache_reset_timeout|http://fr2.php.net/manual/fr/function.apache-reset-timeout.php|fr+\\ 
-!! P) shell_exec, system+[[http://fr2.php.net/manual/fr/function.ignore-user-abort.php|Doc. PHP - ignore_user_abort]] 
 +\\ 
 +[[http://fr2.php.net/manual/fr/function.apache-reset-timeout.php|Doc. PHP - apache_reset_timeout]
 + 
 +=== shell_exec, system ===
 Exécute des commandes au niveau du shell, et retourne le résultat. Exécute des commandes au niveau du shell, et retourne le résultat.
-%%%[Doc. PHP - shell_exec|http://fr2.php.net/manual/fr/function.shell-exec.php|fr] +\\ 
-%%%[Doc. PHP - system|http://fr2.php.net/manual/fr/function.system.php|fr+[[http://fr2.php.net/manual/fr/function.shell-exec.php|Doc. PHP - shell_exec]] 
-!! Q) syslog+\\ 
 +[[http://fr2.php.net/manual/fr/function.system.php|Doc. PHP - system]
 + 
 +=== syslog ===
 Permet d'insérer des entrées dans le journal du système. Permet d'insérer des entrées dans le journal du système.
-%%%[Doc. PHP|http://fr.php.net/manual/fr/function.syslog.php|fr]+\\ 
 +[[http://fr.php.net/manual/fr/function.syslog.php|Doc. PHP]] 
  
 La configuration devient donc : La configuration devient donc :
-///[php] +<code php> 
-disable_functions = chgrp, disk_free_space, disk_total_space, diskfreespace, dl, exec, +disable_functions = chgrp, disk_free_space, disk_total_space, diskfreespace, dl, exec, ini_alter, ini_set, ini_restore, leak, popen, pclose, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, putenv, apache_setenv, set_include_path, set_time_limit, ignore_user_abort, apache_reset_timeout, shell_exec, system, syslog</code>
-ini_alter, ini_set, ini_restore, leak, popen, pclose, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, putenv, apache_setenv, +
-set_include_path, set_time_limit, ignore_user_abort, apache_reset_timeout, shell_exec, system, syslog +
-///+
  
-!!! 3) expose_php 
-Définit sur PHP doit-être annoncé à vos visiteurs comme installé sur votre serveur (entête). 
-%%%Autant oublie de dire à nos visiteurs que nous avons PHP, cela pourra toujours nous cacher un peu :) 
-%%[Doc. PHP|http://php.net/manual/fr/ini.core.php#ini.expose-php|fr] 
-///[php] 
-expose_php = Off 
-/// 
  
-!!! 4) max_execution_time+==== expose_php ==== 
 +Définit si PHP doit-être annoncé à vos visiteurs comme étant installé sur votre serveur (entête)
 +\\ 
 +Je n'indique pas à mes visiteurs que mon serveur exécute PHP : cela ne leur apporte rien, et peut protéger mon serveur contre une attaque ciblée. 
 +\\ 
 +[[http://php.net/manual/fr/ini.core.php#ini.expose-php|Doc. PHP]] 
 +<code php>expose_php = Off</code> 
 + 
 + 
 +==== max_execution_time ====
 Définit la durée maximale d'exécution d'un script PHP. Définit la durée maximale d'exécution d'un script PHP.
-%%%Par défaut la valeur est 30 secondes, à n'augmenter que si vos scripts n'ont pas le temps de s'exécuter entièrement ! +\\ 
-%%%[Doc. PHP|http://www.php.net/manual/fr/info.configuration.php#ini.max-execution-time|fr]+Par défaut la valeur est 30 secondes, à n'augmenter que si vos scripts n'ont pas le temps de s'exécuter entièrement ! 
 +\\ 
 +[[http://www.php.net/manual/fr/info.configuration.php#ini.max-execution-time|Doc. PHP]
  
-!!! 5) memory_limit+==== memory_limit ====
 Quantité maximale de RAM qu'un script PHP peut utiliser. Quantité maximale de RAM qu'un script PHP peut utiliser.
-%%%Ne possédant que 128Mo de RAM sur ma machine, je vais le définir à 64M+\\ 
-%%%Je devrais diminuer encore cette valeur, mais vait mettre en ligne un site gourmand en mémoire ;-) +La valeur par défaut est de 128 Mo maximum par exécution du script
-%%%[Doc. PHP|http://php.net/manual/fr/ini.core.php#ini.memory-limit|fr]+\\ 
 +Adaptez la valeur à la quantité de RAM que vous possédez. 
 +\\ 
 +[[http://php.net/manual/fr/ini.core.php#ini.memory-limit|Doc. PHP]]
  
-!!! 6) File uploads+ 
 +==== Envoi de fichiers ====
 L'envoi de fichier sur le serveur est autorisé. L'envoi de fichier sur le serveur est autorisé.
-%%%Je vais définir upload_tmp_dit sur /tmp (pour être sur que les fichiers temporaires sont bien mis dans un répertoire système __temporaire__). +\\ 
-%%%Je vais fichier upload_max_filesize à 5M (au lieu de 2) pour les besins d'un de mes sites :-) +Je vais définir ''upload_tmp_dir'' sur **/tmp** //(répertoire temporaire du système dont le contenu est effacé à chaque redémarrage du serveur)//
-%%%Attention à être cohérent entre upload_max_filesize (taille max d'un fichier envoyé) et post_max_size (quantité maximale de données envoyées à une page PHP)+\\ 
 +Je vais définir ''upload_max_filesize'' à 5M (au lieu de 2) pour les besoins d'un de mes sites
 +\\ 
 +Attention à être cohérent entre ''upload_max_filesize'' //(taille maximale d'un fichier envoyé)// et ''post_max_size'' //(quantité maximale de données envoyées à une page PHP)//. 
 +\\ 
 +[[http://fr.php.net/manual/fr/ini.core.php#ini.upload-max-filesize|Doc. PHP - upload_max_filesize]] 
 +\\ 
 +[[http://fr.php.net/manual/fr/ini.core.php#ini.upload-tmp-dir|Doc. PHP - upload_tmp_dir]] 
 +\\ 
 +[[http://fr.php.net/manual/fr/ini.core.php#ini.post-max-size|Doc. PHP - post_max_size]]
  
-!!! 7) session.save_path + 
-Cette directive sert à définir le répertoire dans lequel PHP enregistre les sessions des visiteurs de votre site. +==== session.save_path ==== 
-%%%Il faut un chmod de 600 minimum sur ce répertoire. +Définit le répertoire dans lequel PHP enregistre les sessions des visiteurs de votre site. 
-%%%Je pensais utiliser le répertoire /tmp (chmod 777) principalement pour son auto-effacement à chaque relance du système. Toutefois je ne l'ai pas fait car tous mes sites web ont accès à ce répertoire (servant à stocker temporairement les fichiers envoyés par exemple). +\\ 
-%%%Laisser le répertoire de sessions dans /tmp représente donc une faille de sécurité ! +Il faut un chmod de 600 minimum sur ce répertoire. 
-%%%J'ai donc créé un répertoire sessions dans /var/www (propriétaire user-web:www-data ; chmod 770+ 
-///[php] +Je pensais utiliser le répertoire /tmp (chmod 777) principalement pour son auto-effacement à chaque relance du système. 
-session.save_path = /var/www/sessions +\\ 
-///+Je ne l'ai pas fait car tous mes sites web ont accès à ce répertoire //(servant à stocker temporairement les fichiers envoyés par exemple)//
 +\\ 
 +Laisser le répertoire de sessions dans /tmp représente donc une faille de sécurité ! 
 + 
 +J'ai donc créé un répertoire sessions dans /var/www //(propriétaire www-data:www-data ; chmod 700)// 
 +<code php>session.save_path = /var/www/sessions</code> 
 +\\ 
 +[[http://fr.php.net/manual/fr/session.configuration.php#ini.session.save-path|Doc. PHP - session_save_path]
 +\\ 
 + 
 +Pour chaque nouvelle session crée via un script PHP, un fichier sera créé dans /var/www/sessions . 
 +\\ 
 +Il faut vider de temps en temps les fichiers correspondant à une session qui n'est plus utilisée. Pour cela, PHP intègre une probabilité d'exécution d'un processus de nettoyage //(garbage collector)// lorsqu'une nouvelle session est créée. 
 +\\ 
 +J'utilise la valeur par défaut : une probabilité de 1 / 1000. 
 +<code php>session.gc_probability = 1</code> 
 +[[http://fr.php.net/manual/fr/session.configuration.php#ini.session.gc-probability|Doc. PHP - session.gc-probability]] 
 + 
 +\\ 
 +===== Liens ===== 
 +  * [[.:|Retour à la liste des tutoriels PHP]] 
 +  * [[:|Retour à la liste des tutoriels]]