Vous êtes sur la page 1sur 31

Centre Espagnol de Formation et d’Actions Intégrées de Développement

Centre Espagnol de Formation et d’Actions Intégrées de Développement

LE SERVEUR WEB APACHE

Introduction

Qu'est-ce qu'un serveur web ?

Un serveur web est un logiciel permettant à des client d'accéder à des pages web, c'est-à-dire en réalité
des fichiers au format html et autre à partir d'un navigateur (aussi appelé browser) installé sur leur
ordinateur distant.

Un serveur web est donc un « simple » logiciel capable d'interpréter les requêtes http arrivant sur le port
associé au protocole HTTP (par défaut le port 80), et de fournir une réponse avec ce même protocole.

Les principaux serveurs web sur le marché sont entre autres :

Apache

Microsoft IIS (Internet Information Server)

Microsoft PWS (Personal Web Server)

Apache est le serveur le plus répandu sur Internet. Il s'agit d'une application fonctionnant à la base sur les systèmes de type Unix , mais
il a désormais été porté sur de nombreux système dont Microsoft Windows .

Installation d’Apache :

yast→logiciels → installer et supprimer des logiciels

rechercher Apache et accepter

copier le site dans le répertoire /srv/www/htdocs

Démarrer le serveur :

cd /etc/init.d/apache start
Centre Espagnol de Formation et d’Actions Intégrées de Développement

I. Paramètres fondamentaux
o ServerType standalone
Le serveur s'exécutera seul, sans recourir au super-serveur xinetd.
o ServerRoot /srv/www
Il s'agit du répertoire où le serveur trouvera son répertoire de configuration
/etc/httpd/httpd.conf
Un lien vers /var/log/httpd/access_log, le fichier-journal des accès aux ressources, réussis
ou non (le consulter)
o PidFile /var/run/httpd.pid
C'est le fichier où le serveur en exécution stocke son premier numéro de processus (PID)
o DocumentRoot /srv/www/htdocs
fixe la racine du serveur Web, c'est-à-dire le répertoire de base où sont cherchées par
défaut les pages html, lorsque l'URL ne comporte pas de chemin de répertoire
o Port 80
Apache écoute sur le port tcp usuel
o User apache (dans commonhttpd.conf)
Group apache
Apache doit etre démarré par root, mais par sécurité ses processus auront pour
propriétaire l'utilisateur apache, sans privilège.
o ServerAdmin root@localhost (dans commonhttpd.conf)
S'il a un problème, le serveur écrit un message à cette adresse
o UserDir public_html
Ce paramètre signifie que l'utilisateur toto peut publier ses pages WEB personnelles dans
un sous-répertoire de son répertoire perso, qui doit être nommé public_html, c'est-à-dire
dans /home/toto/ public_html.
Sa page d'accueil sera alors accessible par l'URL : http://serveur/~toto , où serveur est le
nom du serveur ou son adresse IP.
o DirectoryIndex index.html index.php index.htm ...
Il est courant d'omettre le nom du fichier de la page d'accueil d'un site ou de l'un de ses
sous-répertoires. Pour ne pas retourner systématiquement une erreur 404 signalant une
adresse erronnée, le serveur posséde une liste standard de noms de fichiers qu'il s'efforce
de trouver dans le répertoire.
Cette liste ordonnée est indiquée par la clause DirectoryIndex
o AccessFileName .htaccess
Cette clause fixe le nom du fichier à trouver dans un répertoire pour que son accès soit
protégé, en imposant à l'utilisateur une authentification par nom et mot de passe. Ces
comptes sont spécifiques à Apache et n'interfèrent pas avec les comptes Linux.
Voir une annexe pour explication de sa mise en oeuvre.

o nom de la machine hébergeant Apache. Si ce nom symbolique n'est pas interprété dans
les URL, faute de DNS local, ou de résolution par /etc/hosts, utilisez à la place une
adresse IP du genre http://192.168.0.(200+x), où x=1..9 (ou conformément au plan
d'adressage de la salle)

Les "pages persos"


Centre Espagnol de Formation et d’Actions Intégrées de Développement

Tous les étudiants veulent publier leur page personnelle, voire gérer eux-mêmes un site ne désirez pas
les renvoyer aux hébergeurs privés; mais comme "administrateur " du "site officiel" de votre
établissement, vous ne voulez pas les gérer vous-mêmes ...

1. Vérifier bien la présence de la clause UserDir public_html et UserDir disabled root dans le
fichier de configuration httpd.conf.
2. Vérifier la présence ou modifier éventuellement pour avoir une directive (voir la fenêtre en
dessous) .

1. Récupérer le site perso placer le dans le répertoire /home/stagiaire/public_html sur le


serveur via une session winscp ouverte au nom du compte stagiaire
2. tous les postes peuvent t accéder à ce site par http://ip de serveur/~stagiaire/.
Centre Espagnol de Formation et d’Actions Intégrées de Développement

II. Configuration globale

Voici quelques informations globales au niveau des réglages et performance du serveur


Voir leur valeur dans le fichier /etc/httpd/httpd.conf

o Timeout 300
Paramètre important qui fixe le temps (en ms) d'attente maximum du serveur d'une
réponse à une requete envoyée à un programme extérieur (comme un gestionnaire de base
de données)
o KeepAliveon
MaxKeepAliverequests
KeepAliveTimeout
Autorise les connexions persistantes d'un client, afin de lui permettre l'envoi de plusieurs
requetes sans déconnexion, avec un plafond fixé pour un client, pour servir aussi
d'éventuels autres clients ! et un temps d'attente maxi de la requete suivante provenant du
meme client.
o ServerName www
Fixe un nouveau nom public pour le serveur, auquel on pourra s'adresser par les URL
http://www/
Bien entendu le nom symbolique www doit être connu du DNS ou du fichier hosts local
(sous GNU/Linux ou MS/Windows)
o MinSpareServers
MaxSpareServers
Nombres maximum et minimum de processus serveurs devant etre en permannence
disponibles, en attente de nouvelles connexion clientes
o StartServers
Nombre de processus serveurs démarrés à l'initialisation, en plus du processus père. Ceci
explique pourquoi la requete ps aux|grep httpd renvoie 5 PID.
o MaxClients
Nombre maximum de processus qu'Apache peut lancer et gérer simultanément. Ce
nombre ne peut pas excéder 254
o MaxRequestsPerChild
Nombre maximum de requetes HTTP traitées par un processus enfant avant qu'il ne soit
éliminé.
Centre Espagnol de Formation et d’Actions Intégrées de Développement

HOST VIRTUAL A L’AIDE DE WEBMIN

Installation webmin :

yast→logiciels → installer ert supprimer des logiciles

rechercher webmin et accepter

cd /etc/init.d/webmin start

Ouvrir le navigateur taper http// :ip de la machine :10000

-Enter le login et le mot de passe root


Centre Espagnol de Formation et d’Actions Intégrées de Développement

Cliquer sur l’icône serveurs


Centre Espagnol de Formation et d’Actions Intégrées de Développement

Choisir serveur web Apache

Configurer les modules et cliquer sur sauvegarder

Dans la partie serveurs virtuels


Centre Espagnol de Formation et d’Actions Intégrées de Développement

-Entrer la deuxième adresse ip du serveur dans la zone Adresse

-Entrer le chemin de répertoire qui contient le site du client dans la zone Répertoire racine des
documents

-Entrer le nom de domaine du client dans la zone Nom du serveur exp : www.client.be

-Cliquer sur créer

-Pour tester taper dans l’URL l’adresse ip introduite dans la zone Adresse
Centre Espagnol de Formation et d’Actions Intégrées de Développement

Protéger un répertoire

DocumentRoot /var/client1

<Directory "/var/client1">

allow from all

Options Indexes

</Directory>

<Directory "/var/client1/admin">

allow from all

Options Indexes FollowSymlinks MultiViews

AllowOverride AuthConfig

Options Indexes

AuthType Basic

require user

Satisfy all

AuthUserFile /var/client1/admin/.htpasswd

</Directory>

Fichier .htaccess

Céer un fichier .htpasswd

Htpasswd2 –c /var/client1/admin .htpasswd


Centre Espagnol de Formation et d’Actions Intégrées de Développement

Caractères accentués et problèmes d'encodage

Aperçu de plusieurs solutions

Il peut arriver que les caractères accentués s'affichent mal. Dans ce cas, l'encodage est
mis en cause. Si le fichier est écrit dans un certain encodage mais que le navigateur
s'attend à en recevoir un autre, les caractères accentués apparaissent mal. Dans ce cas,
plusieurs solutions sont possibles.

 Changer l'encodage au niveau du navigateur (dans firefox/iceweasel : affichage, encodage


des caractères). C'est la plus mauvaise solution car cela force le visiteur à régler son
navigateur spécialement pour le site. De plus ce réglage sera perdu à la prochaine
consultation.
 Préciser l'encodage dans l'en-tête du fichier html. Ce n'est pas toujours très pratique dans la
mesure où cela peut nécessiter de corriger de nombreux fichiers html. Par exemple si le
fichier est écrit en UTF8 on peut ajouter au début du fichier <meta http-
equiv="Content-Type" content="text/html; charset=UTF-8"/>.
 Le développeur se discipline à utiliser des séquences comme &eacute; pour le caractère 'é'
etc...
 Forcer l'encodage au niveau du serveur apache. Dans ce cas, le code html n'a pas besoin
d'être modifié. Il suffit que tous les fichiers utilisent le même encodage (par exemple utf8).
C'est la solution que nous allons présenter.

Forcer l'encodage au niveau d'apache2

Cette solution présente plusieurs avantages.

 Si l'on force l'encodage utilisé par le système, les pages crées sur cette machine seront écrites
dans cet encodage. Il est dès lors inutile de le préciser au travers d'une balise meta.
 Les fichiers créés sur cette machine seront écrits l'encodage utilisé par défaut sur la machine. Il
sera inutile de le préciser dans ce cas également.

On commence par corriger le fichier /etc/apache2/conf.d/charset. En root :

nano /etc/apache2/conf.d/charset

On corrige ce fichier de sorte à avoir (en décommentant la ligne "AddDefaultCharset UTF-8") :


Centre Espagnol de Formation et d’Actions Intégrées de Développement

1.# Read the documentation before enabling AddDefaultCharset.

2.# In general, it is only a good idea if you know that all your files

3.# have this encoding. It will override any encoding given in the files

4.# in meta http-equiv or xml encoding tags.

5.

6.AddDefaultCharset UTF-8

On va également corriger le fichier /etc/apache2/envvars en root :

nano /etc/apache2/envvars

Encore une fois, cela consiste simplement à décommenter la ligne ". /etc/default/locale" :

01.# envvars - default environment variables for apache2ctl

02.

03.# this won't be correct after changing uid

04.unset HOME

05.

06.# for supporting multiple apache2 instances

07.if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ; then

08.SUFFIX="-${APACHE_CONFDIR##/etc/apache2-}"

09.else
Centre Espagnol de Formation et d’Actions Intégrées de Développement

10.SUFFIX=

11.fi

12.

13.# Since there is no sane way to get the parsed apache2 config in scripts, some

14.# settings are defined via environment variables and then used in apache2ctl,

15.# /etc/init.d/apache2, /etc/logrotate.d/apache2, etc.

16.export APACHE_RUN_USER=www-data

17.export APACHE_RUN_GROUP=www-data

18.export APACHE_PID_FILE=/var/run/apache2$SUFFIX.pid

19.export APACHE_RUN_DIR=/var/run/apache2$SUFFIX

20.export APACHE_LOCK_DIR=/var/lock/apache2$SUFFIX

21.# Only /var/log/apache2 is handled by /etc/logrotate.d/apache2.

22.export APACHE_LOG_DIR=/var/log/apache2$SUFFIX

23.

24.## The locale used by some modules like mod_dav

25.export LANG=C

26.## Uncomment the following line to use the system default locale instead:

27.. /etc/default/locale

28.

29.export LANG

30.

31.## The command to get the status for 'apache2ctl status'.

32.## Some packages providing 'www-browser' need '--dump' instead of '-dump'.

33.#export APACHE_LYNX='www-browser -dump'

Comme à chaque fois que l'on modifie ses fichiers de configuration, il faut relancer apache2 pour
que les modifications soient prises en compte :
Centre Espagnol de Formation et d’Actions Intégrées de Développement

service apache2 restart

Il ne reste plus qu'à rafraîchir la page au niveau du navigateur pour que tout s'affiche correctement.

Remarque : si les caractères accentués s'affichent toujours mal, essayez de vider le cache de votre
navigateur. Par exemple, si vous utilisez firefox (iceweasel), cliquez sur "Outils > Supprimer
l'historique récent".

Les droits

Droits UNIX/POSIX

Pour qu'un site soit sécurisé, il faut notamment attribuer aux fichiers mis à disposition des droits
aussi restreints que possible.

A priori le fichier /srv/www/htdocs/index.html, au même titre que n'importe quelle page web
accessible depuis un navigateur web, devrait avoir les droits suivants :

(abdel) (~) $ ls -l /srv/www/htdocs/


total 4
-rw-r----- 1 root www (voir la distribution utilisée)142 3 déc. 17:03 index.html

Comme mentionné dans le fichier /etc/apache2/envvars, un client aura au niveau du système linux
les droits de l'utilisateur www (voir la distribution utilisée)et du groupe www-data.

Pour des raisons évidentes de sécurité, il faut que ce groupe ait des droits aussi restreints que
possible tout en autorisant l'accès au fichier auxquels un client web peut avoir légitimement accès :

 L'utilisateur propriétaire ne doit pas être www-data. On utilise les droits suivants :
o droits en lecture (r) écriture (w) sur les fichiers réguliers,
o droits en lecture (r) écriture (w) exécution (x) sur les répertoires.
 Le groupe propriétaire doit être www (voir la distribution utilisée):
o les droits en lecture (r) sur les fichiers réguliers et répertoires auxquels il est sensé
pouvoir accéder,
o aucun droit pour le reste.
 Les autres utilisateurs ne sont pas censés avoir de droits sur ces fichiers.

Remarques :

 Afin qu'un client ne puisse par modifier ces droits, on attribue les fichiers de /srv/www/htdocs
au groupe www (voir la distribution utilisée)et non à l'utilisateur www-data. C'est la raison pour
laquelle les fichiers présents dans /srv/www/htdocs appartiennent en général à l'utilisateur root.
 Il est important que le groupe www (voir la distribution utilisée)ait les droits en lecture sur les
fichiers que les internautes doivent pouvoir consulter, sans quoi ils verront s'afficher une page
d'erreur 403 (permission denied). Dans ce cas, l'erreur d'accès sera répercutée par défaut dans
Centre Espagnol de Formation et d’Actions Intégrées de Développement

/var/log/apache2/error.log (ceci peut être personnalisé dans la configuration spécifique à un site,


par exemple /etc/apache2/sites-available/default).
 Il ne faut pas donner de droits en lecture à www (voir la distribution utilisée)sur des fichiers
sensibles ou des droits en lecture exécution sur des répertoires sensibles. Typiquement, un
utilisateur n'est pas sensé pouvoir accéder aux fichiers htaccess, htpasswd et htgroup si vous en
utilisez !
 Les droits associés à un fichier (répertoire ou non) peuvent être corrigés grâce aux commandes
chgrp et chmod. Notez que les commandes chown et chgrp requièrent des droits root.

Exemple :

chown root:www (voir la distribution utilisée)/srv/www/htdocs/index.html


chmod 640 /srv/www/htdocs/index.html

Il ne reste plus qu'à vérifier que la page s'affiche toujours correctement.

Droits ACL

Si plusieurs personnes sont susceptibles de développer le site, il peut être intéressant d'utiliser des
droits ACL via les commandes getfacl et setfacl. Rappelons que les droits ACL sont symbolisés par
un "+" à droite des droits habituels.

Droits SELinux

On peut durcir ou relâcher la politique d'accès aux fichiers partagés par apache grâce aux
commandes chcon et restorecon fournies par SELinux (Security Enhanced Linux). SELinux permet
par exemple de n'autoriser l'accès à ce fichier que pendant l'exécution d'apache2. Si une erreur
d'accès liée à SELinux survient, celle-ci sera retranscrite dans /var/log/messages.

Corriger l'erreur " Could not reliably determine the server's fully qualified domain name, using
127.0.1.1 for ServerName".

Il suffit de rajouter mettre dans le fichier /etc/apache2/httpd.conf :

1.ServerName localhost

Sécurisation

Introduction

Cette section n'est pas exhaustive mais référence quelques précautions à prendre.

 Limiter les droits : il est primordial d'attribuer des droits aussi restreints que possible sur les
fichiers mis à disposition sur une machine. Cet aspect a déjà été abordé dans ce tutoriel.
 Diffuser un minimum d'informations sensibles : un pirate informatique utilise souvent des
exploits qui consistent souvent à tirer parti d'une faille de sécurité dans l'implémentation d'un
logiciel. Souvent ces bugs sont corrigés dans les mises à jours qui suivent et sont donc
Centre Espagnol de Formation et d’Actions Intégrées de Développement

spécifique à une version de ce logiciel. C'est pourquoi il est souhaitable de masquer autant que
possible ce genre d'informations lorsque le serveur est accessible sur Internet. Apache2 propose
au niveau de ses fichiers de configuration ce genre de personnalisations.
 Limiter la portée des fichiers : auxquel peut accéder un client : un internaute ne devrait jamais
être en mesure de sortir de l'arborescence associé au site (/srv/www/htdocs dans notre exemple).
Si par exemple, il est en mesure d'accéder en dehors de cette arborescence, il est susceptible
d'accéder à des fichiers sensibles comme /etc/passwd et avoir une idée des logins à attaquer.
 Limiter les accès réseaux : On peut également restreindre les machines autorisées à accéder à
apache2, soit directement dans la configuration du serveur apache, soit à l'aide d'un pare-feu
(voire des deux). On pourra utiliser par exemple des outils comme Iptables
 Chiffrer les communications grâce à SSL :
 Effectuer un audit de sécurité. En complément, on pourra utiliser des outils comme
nikto, wapiti, w3af...

Diffuser un minimum d'informations sensibles

On corrige le fichier /etc/apache2/conf.d/security de sorte à avoir :

01.#

02.# Disable access to the entire file system except for the directories that

03.# are explicitly allowed later.

04.#

05.# This currently breaks the configurations that come with some web application

06.# Debian packages.

07.#

08.#<Directory />

09.# AllowOverride None

10.# Order Deny,Allow

11.# Deny from all

12.#</Directory>

13.

14.

15.# Changing the following options will not really affect the security of the

16.# server, but might make attacks slightly more difficult in some cases.

17.
Centre Espagnol de Formation et d’Actions Intégrées de Développement

18.#

19.# ServerTokens

20.# This directive configures what you return as the Server HTTP response

21.# Header. The default is 'Full' which sends information about the OS-Type

22.# and compiled in modules.

23.# Set to one of: Full | OS | Minimal | Minor | Major | Prod

24.# where Full conveys the most information, and Prod the least.

25.#

26.#ServerTokens Minimal

27.#ServerTokens OS

28.#ServerTokens Full

29.ServerTokens Prod

30.

31.#

32.# Optionally add a line containing the server version and virtual host

33.# name to server-generated pages (internal error documents, FTP directory

34.# listings, mod_status and mod_info output etc., but not CGI generated

35.# documents or custom error documents).

36.# Set to "EMail" to also include a mailto: link to the ServerAdmin.

37.# Set to one of: On | Off | EMail

38.#

39.ServerSignature Off

40.#ServerSignature On

41.

42.#

43.# Allow TRACE method


Centre Espagnol de Formation et d’Actions Intégrées de Développement

44.#

45.# Set to "extended" to also reflect the request body (only for testing and

46.# diagnostic purposes).

47.#

48.# Set to one of: On | Off | extended

49.#

50.TraceEnable Off

51.#TraceEnable On

Puis on redémarre apache2 :

service apache2 restart

Limiter la portée des fichiers auxquel peut accéder un client

Pour chaque site, apache2 parcourt un certain nombre de règles évaluées séquentiellement. Chaque
règle a une portée (indiquant à quelle arborescence elle s'applique). Certaines relâchent des
possibilités, d'autres les contraignent.

1. La première règle évaluée par apache2 devrait consister à limiter l'accès à toute l'arborescence
du système Linux (/).
2. Ensuite, on relâche un minimum de possibilités en fonction des besoins du site.

On peut définir cette première règle directement dans /etc/apache2/conf.d/security en décommentant


la section suivante et en relançant apache :

1.#<Directory />

2.# AllowOverride None

3.# Order Deny,Allow

4.# Deny from all

5.#</Directory>

Cependant, comme mentionné dans ce fichier, décommenter cette section peut provoquer un
dysfonctionnement de certaines applications fournies par les paquets Debian. C'est la raison pour
laquelle on va plutôt définir chacune de ces règles en intervenant dans la configuration spécifique à
Centre Espagnol de Formation et d’Actions Intégrées de Développement

chaque site (par exemple /etc/apache2/sites-available/default). Afin de garder ce fichier en exemple,


il est temps de créer notre propre fichier :

nano /etc/apache2/sites-available/mon_site

Dedans on met par exemple ceci :

01.<VirtualHost *:80>;

02.ServerAdmin webmaster@localhost

03.

04.DocumentRoot /srv/www/htdocs

05.<Directory />

06.# Accès autorisé si l'IP du client est autorisée (Allow)

07.# ET pas rejetée (Deny)

08.Order Deny,Allow

09.

10.# On limite l'accès à tout le monde

11.Deny from all

12.

13.# On n'active aucune option.

14.Options None

15.

16.AllowOverride None

17.<Directory>;

18.<Directory /srv/www/htdocs/>;

19.AllowOverride None

20.

21.# Accès autorisé si l'IP du client est autorisée (Allow)

22.# OU pas rejetée (Deny)

23.Order Allow,Deny
Centre Espagnol de Formation et d’Actions Intégrées de Développement

24.Allow from all

25.

26.# Désactiver l'option permettant le parcours d'un répertoire

27.Options -Indexes

28.

29.# Désactiver l'option permettant apache de suivre des liens

30.# symboliques (qui pourrait permettre de quitter /srv/www/htdocs)

31.Options -FollowSymLinks

32.

33.# Désactiver l'option permettant apache de faire des inclusions

34.# côté serveur

35.Options -Includes

36.

37.# Désactiver l'option permettant à apache l'utilisation de

38.# scripts CGI (si on n'utilise pas de script CGI !)

39.Options -ExecCGI

40.

41.Options MultiViews

42.</Directory>;

43.

44.# Empêcher le téléchargement des fichiers dont le nom commence

45.# par ".ht" (.htaccess ...)

46.AccessFileName .httpdoverride

47.<Files ~ "^\.ht">;

48.Order allow,deny

49.Deny from all


Centre Espagnol de Formation et d’Actions Intégrées de Développement

50.Satisfy All

51.</Files>;

52.

53.ErrorLog ${APACHE_LOG_DIR}/error.log

54.

55.# Possible values include: debug, info, notice, warn, error, crit,

56.# alert, emerg.

57.LogLevel warn

58.

59.CustomLog ${APACHE_LOG_DIR}/access.log combined

60.</VirtualHost>;

Notez que ce fichier permet de personnaliser :

 la position de l'arborescence mise à disposition sur le site,


 l'email du webmestre,
 le fichier de log dans lequel écrire les erreurs spécifiques à ce site.

Il ne reste plus qu'à désactiver le site "default" au profit du site "mon_site" et relancer apache2. En
root :

a2dissite default

a2ensite mon_site

service apache2 reload

Restreindre les IP des clients autorisés à se connecter au site

Ceci se règle encore une fois dans le fichier relatif à la configuration du site. Si ce site n'est sensé
être accessible que par la machine sur laquelle le serveur est déployé ou juste par les machines
faisant partie de son réseau locale, une règle devrait le stipuler. De la même manière on peut
blacklister une IP.
Centre Espagnol de Formation et d’Actions Intégrées de Développement

nano /etc/apache2/sites-available/mon_site

Il suffit ensuite de corriger cette section de configuration :

01.<VirtualHost *:80>;

02....

03.<Directory /srv/www/htdocs/>;

04....

05.Order Allow,Deny

06.Allow from all

07....

08.</Directory>;

09.</VirtualHost>;

Rendre le site uniquement accessible depuis la machine faisant office de serveur apache :

1.Order Deny,Allow

2.Deny from all

3.Allow from 127.0.0.1

Rendre le site visible des machines ayant une IP en 192.168.1.* :

1.Order Deny,Allow

2.Deny from all

3.Allow from 192.168.1.0/24

Blacklister l'IP 11.22.33.44 :

1.Order Allow,Deny

2.Allow from all


Centre Espagnol de Formation et d’Actions Intégrées de Développement

3.Deny from 11.22.33.44

Comme d'habitude, pensez à relancer le site une fois ces modifications apportées :

service apache2 reload

Pour aller plus loin

Vous devriez consulter ce lien pour découvrir quelques attaques classiques et ainsi vous en prémunir :

http://www.haypocalc.com/wiki/Injection_de_code

Certaines failles sont liées à l'administration du serveur en lui-même, et d'autres sont liées au code écrit
par le développeur web.

Installation d'un module apache2 : illustration avec PHP5

Principe

La démarche reste exactement la même quelque soit le module à installer.

1. installation du module
2. activation du module
3. relancer apache2.

Au niveau des commandes, nous allons illustrer chacune de ces étapes par celle que l'on taperait sur un
système Debian ou dérivé de Debian, respectivement :

1. aptitude install libapache2-mod-....,


2. a2enmod le_nom_du_module
3. service apache2 restart

Pour retrouver les noms de modules disponibles dans le gestionnaire de paquets, il est recommandé
d'avoir installé l'autocomplétion bash. On peut également utiliser la commande apt-cache pour les
distributions basées sur Debian.

Exemple :
Centre Espagnol de Formation et d’Actions Intégrées de Développement

apt-cache search libapache2-mod | grep libapache2-mod

Nous allons maintenant détailler ces différentes étapes au travers d'un exemple : PHP5. Nous en
profiterons pour aborder quelques spécificités liées à PHP5.

Étape 1 : installer le paquet PHP5

Comme d'habitude on passe par le gestionnaire de paquets. Sous Debian on tapera en root la commande
:
aptitude install libapache2-mod-php5

Ce paquet casse le MPM worker et engendre l'installation du MPM prefork. Rappelons que le MPM
prefork est moins performant que le MPM worker. Une fois l'installation effectuée on peut vérifier que
php5 est apparu dans /etc/apache2/mod-available. Par contre dans /etc/apache2/mod-enabled, les liens
symboliques qui activent ce module n'est pas forcément présent :

ls -l /etc/apache2/mods-available/php5*
ls -l /etc/apache2/mods-enabled/php5*

Étape 2 : activer le module

En root, on utilise la commande a2enmod qui crée le couple de lien symbolique php5.conf et php.load
dans /etc/mods-enabled et qui pointent vers les fichiers correspondants dans /etc/mods-available. On
aurait pu créer ces liens avec la commande "ln -s ....".

a2enmod php5

Étape 3 : relancer apache2

En tant que fichiers de configuration, il faut garder à l'esprit que corriger ces liens symboliques sont vus
comme des fichiers de configuration. Ainsi ils ne sont pris en compte qu'au lancement d'apache2, et il
faut donc le relancer. En root :

service apache2 restart

Étape 4 : tester le module

Créer la page de test

Nous allons repartir du fichier index.html que nous avons créé auparavant. En root :

mv /srv/www/htdocs/index.html /srv/www/htdocs/index.php
nano /srv/www/htdocs/index.php

Note : il est important que l'extension soit .php (ou .php5). Sinon apache2 ne cherchera pas à interpréter
le php.
Centre Espagnol de Formation et d’Actions Intégrées de Développement

Corrigeons ce fichier de sorte à avoir :

01.<html>

02.<body>

03.<h1> Test !</h1>

04.Et voici des caractères accentués !

05.<?php

06.echo "La date du jour est " . date("d/m/Y") . "!\n";

07.?>

08.</body>

09.</html>

Il ne reste plus qu'à tester : http://localhost/index.php

Si la page ne s'affiche pas

Si au lieu de voir la page s'afficher, le navigateur propose de télécharger index.php, il faut corriger
/etc/apache2/httpd.conf en root :

nano /etc/apache2/httpd.conf

On met dedans :

01.<IfModule mod_mime.c>

02.AddType application/x-compress .Z

03.AddType application/x-gzip .gz .tgz

04.AddType application/x-httpd-php .php

05.AddType application/x-httpd-php .php3

06.AddType application/x-httpd-php .php5

07.
Centre Espagnol de Formation et d’Actions Intégrées de Développement

08.AddLanguage ca .ca

09.AddLanguage cs .cz .cs

10.AddLanguage da .dk

11.AddLanguage de .de

12.AddLanguage el .el

13.AddLanguage en .en

14.AddLanguage eo .eo

15.AddLanguage es .es

16.AddLanguage et .et

17.AddLanguage fr .fr

18.AddLanguage he .he

19.AddLanguage hr .hr

20.AddLanguage it .it

21.AddLanguage ja .ja

22.AddLanguage ko .ko

23.AddLanguage ltz .ltz

24.AddLanguage nl .nl

25.AddLanguage nn .nn

26.AddLanguage no .no

27.AddLanguage pl .po

28.AddLanguage pt .pt

29.AddLanguage pt-BR .pt-br

30.AddLanguage ru .ru

31.AddLanguage sv .sv

32.AddLanguage zh-CN .zh-cn

33.AddLanguage zh-TW .zh-tw


Centre Espagnol de Formation et d’Actions Intégrées de Développement

34.</IfModule>

Note : on aurait pu ajouter ceci à la fin de /etc/apache2/apache2.conf.

Comme la configuration a été modifiée, on relance apache2 :

service apache2 restart

... et on teste à nouveau (avec le bouton rafraîchir par exemple) : http://localhost/index.php

Étape 5 : optimisation du serveur apache2

Introduction

Si l'on utilise du PHP, il est recommandé d'installer xcache, eaccelerator ou APC (Alternative PHP
cache). Ces outils permettent de compiler au préalable le code PHP et d'augmenter sensiblement les
performances. On peut retrouver un comparatif des performances des différents accélérateur PHP ici.

Nous allons parler ici de xcache qui est disponible sous forme d'un paquet debian, simple à mettre en
place et très performant. Selon le benchmark évoqué ci-dessus, ses performances sont meilleures que
celle proposées par APC et comparable à celle de eaccelerator qui n'est pas disponible sous forme de
paquet debian.

xcache

Installation

On installe le paquet xcache :

aptitude install php5-xcache

Configuration
Centre Espagnol de Formation et d’Actions Intégrées de Développement

Pour profiter au maximum xcache, on va avoir besoin de récupérer le nombre de microprocesseurs


disponibles sur la machine :

grep -c processor /proc/cpuinfo

On corrige ensuite la configuration de xcache :

nano /etc/php5/apache2/conf.d/xcache.ini

On peut notamment :

 corriger la valeur la valeur xcache.count (nombre de microprocesseurs + 1), comme suggéré ici,
 augmenter la taille du cache xcache.size,
 et régler de nombreux autres paramètres (voir ici).

Une fois les corrections apportées, on relance apache2 :

service apache2 restart

Test

Corrigeons le fichier /srv/www/htdocs/index.php de sorte à avoir :

01.<html>

02.<body>

03.<h1> Test !</h1>

04.Et voici des caractères accentués !


Centre Espagnol de Formation et d’Actions Intégrées de Développement

05.<?php

06.phpinfo();

07.?>

08.</body>

09.</html>

Il ne reste plus qu'à rafraîchir la page dans le navigateur. Si xcache est actif, alors "xcache.ini" devrait
apparaître dans le tableau d'information fourni par apache2.

Activer les messages d'erreur PHP

Sur un serveur servant de plateforme de développement, il est pratique d'afficher les erreurs PHP afin de
détecter les erreurs de syntaxe etc... Pour ce faire, il faut corriger la configuration du module PHP. En
root :

nano /etc/apache2/mods-available/php5.conf

Dans ce fichier, on ajoute la ligne "php_value display_errors on" :

01.<IfModule mod_php5.c>

02.php_value display_errors on

03.<FilesMatch "\.ph(p3?|tml)$">

04.SetHandler application/x-httpd-php

05.</FilesMatch>

06.<FilesMatch "\.phps$">

07.SetHandler application/x-httpd-php-source

08.</FilesMatch>
Centre Espagnol de Formation et d’Actions Intégrées de Développement

09.# To re-enable php in user directories comment the following lines

10.# (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it

11.# prevents .htaccess files from disabling it.

12.<IfModule mod_userdir.c>

13.<Directory /home/*/public_html>

14.php_admin_value engine Off

15.</Directory>

16.</IfModule>

17.</IfModule>

Enfin, on n'oublie pas de relancer le serveur apache pour que cette modification des fichiers de
configuration soit prise en compte :

service apache2 restart

Installer MySQL

Ici nous allons nous en tenir à une installation "basique" de MySQL (pas de réplication et pas de proxy
MySQL). L'installation de base est suffisante si la base n'est pas très importante.

Sous Debian , il suffit d'installer les paquets suivants :

aptitude install mysql-server php5-mysql


Centre Espagnol de Formation et d’Actions Intégrées de Développement

Pour aller plus loin

Pour aller plus loin dans la configuration d'apache, on pourra se référer à ce site :

http://www.system-linux.eu/index.php?category/Apache2

Vous aimerez peut-être aussi