User Tools

Site Tools


informatique:logiciels:apache

This is an old revision of the document!


informatique logiciel serveur web

Apache

cette section n'est pas à jour

Apache est le plus répandu des serveur web.

Gestion des droits d'accès

Il est possible de limiter l'accès à certains répertoires de 2 manières :

  • globale : la gestion des accès se fait à partir des règles situées dans le fichier de configuration d'Apache
  • locale : la gestion des accès se fait de manière indépendante dans chaque répertoire ; les règles sont déportées dans un fichier .htaccess.

Quelque soit la manière, la syntaxe reste la même.

ex d'accès restreint

Création du htpasswd

Le fichier .htpasswd va contenir les login/pass des utilisateurs valides. Pour cela, on va se servir d'un programme situé dans apache/bin/ nommé htpasswd. Voici la syntaxe :

htpasswd -c <.htpasswd> <login> (sans l'option “-c” si le fichier .htpaswd existe déjà) Le programme demande un mot de passe et de le confirmer, puis ajoutera l'utilisateur ainsi que le mot de passe hashé dans le fichier spécifié.

Méthode globale

<Location "/prive">
 Options None
 AllowOverride None
 AuthName "accès restreint"
 AuthType Basic
 AuthUserFile "/chemin_absolu_vers/.htpasswd"
 require valid-user
</Location>

Ces lignes sont à placer soit dans la configuration d'un virtual host (dans sites-available par exemple) ou dans la configuration globale d'apache, et s'appliqueront au répertoire /prive relatif à la racine de la section (directive DocumentRoot).

Explications :

  • AuthName : Définit le message à afficher à l'internaute quand il arrivera dans le dossier.
  • AuthType : Définit le mode d'encryption
  • AuthUserFile : Définit le fichier contenant les logins/pass
  • Require : Définit quelles personnes/groupes ont une permission d'accès

AllowOverride est une directive qui sert à gérer les droits des fichiers .htaccess.

Méthode locale

Les lignes sont les suivantes ; elles doivent être placées dans un fichier .htaccess à déposer directement dans le répertoire à protéger (/prive).

AuthName "accès restreint"
AuthType Basic
AuthUserFile "/chemin_absolu_vers/.htpasswd"
require valid-user

On peut également limiter l'accès par IP :

Order Deny, Allow
Deny from all
Allow from 127.0.0.1 192.168.0

Ceci va limiter l'accès au localhost (127.0.0.1) et le réseau local (192.168.0.0/24)

ex2 : filtrage des accès aux répertoires autres que /

<Directory ~ "/var/www/.+">
 AuthName "Restricted area"
 AuthType Basic
 AuthUserFile "/var/www/private/.htpasswd"
 require valid-user
</Directory>

mod ssl

Pour activer le mod SSL qui permet le chiffrement des données :

a2enmod ssl

Générer un certificat

Ensuite on génère le certificat :

apache2-ssl-certificate

Dans certains cas (certaines versions de Debian/Ubuntu) il semble que la commande n'existe plus (bug ?). On peut alors utiliser le paquet ssl-cert :

aptitude install ssl-cert

Le problème du script est qu'il génère un certificat valide 1 mois seulement. Pour changer cela il faut modifier le script make-ssl-cert en ajoutant -days 730 à la ligne suivante (~ ligne 118) :

vi /usr/sbin/make-ssl-cert
openssl req -config $TMPFILE -new -x509 -nodes -out $output -keyout $output -days 730 > /dev/null 2>&1

730 est la durée de validité du certificat, donc 2 ans dans notre cas. Plus d'info sur openssl.

On va maintenant générer le certificat dans /etc/apache2/ssl ; la syntaxe est make-ssl-cert ssleay.cnf nom_du_fichier.pem

mkdir /etc/apache2/ssl
/usr/sbin/make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/pteu.hd.free.fr.pem

On peut s'assurer que le fichier /etc/apache2/ssl/pteu.hd.free.fr.pem est bien en permissions 600 (rw pour le root seulement) car il contient la clé privée.

On doit renseigner le certificat dans la config du mod ssl :

vi /etc/apache2/mods-available/ssl.conf
SSLCertificateFile /etc/apache2/ssl/pteu.hd.free.fr.pem

On créé un vhost qui utilisera le SSL :

cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ssl

On active le SSL et on le fait écouter sur le port 443 (port par défaut pour le HTTPS) :

vi /etc/apache2/sites-available/ssl
NameVirtualHost *:443
<VirtualHost *:443>
 [..]
 SSLEngine on
</VirtualHost>

On active ce vhost (cela revient à créer un lien symbolique du fichier de conf dans sites-enabled)

a2ensite ssl

Si on garde le serveur sur le port 80 (HTTP de base, le vhost par défaut) il faut le faire écouter spécifiquement le port 80 :

vi /etc/apache2/sites-available/default
NameVirtualHost *:80
<VirtualHost *:80>
 [..]
</VirtualHost>

Puis il faut que le serveur écoute sur le port 443 (en plus du 80, le cas échéant) :

vi /etc/apache2/ports.conf
Listen 80
Listen 443

Enfin, recharger Apache :

/etc/init.d/apache2 force-reload

Sous Windows

cette partie n'est très certainement plus à jour !

Apache existe en version précompilée pour Windows ; cependant il existe aussi des packs faciles à installer, comme par exemple EasyPHP. NB : Autant EasyPHP est idéal pour le développement, autant il est déconseillé de l'utiliser sur une plate-forme de production.

logo Nous allons nous servir d'EasyPHP, qui est un logiciel regroupant Apache, PHP et MySQL. Il permet une installation et une utilisation facile de ces serveurs de façon à pouvoir tester des pages sans trop de problèmes de configuration. La dernière version est la 1.8 ; elle regroupe :

Vous pouvez la télécharger , c'est un programme gratuit (comme tous ses composants d'ailleurs).

Alors lancez l'installation, et installez tout par défaut. Lancez easyphp.exe, un icône se met dans la barre des taches. Si vous voyez un rond rouge qui clignote, ca marche ! Sinon faites un clique droit dessus/démarrer (il faut parfois répéter cette opération plusieurs fois avant que ca marche :/) Vous pouvez par ailleurs vérifier que les processus apache et mysqld sont bien lancés en faisant un “ctrl alt suppr” et en allant dans l'onglet processus.

Allez dans C:\Program files\EasyPHP1.7\ : c'est le répertoire d'installation par défaut. Voici les différents répertoires présents :

  • apache : contient l'installation du serveur web
  • cgi-bin : normalement il ne contient pas de fichier
  • home : votre répertoire qui contient des fichiers d'aide, ainsi que le fichier index.php qui vous permet de configurer graphiquement quelques paramètres d'Apache (que nous verrons plus tard)
  • mysql : contient le serveur MySQL
  • php : contient le serveur PHP (l'add-on qui permet à Apache d'interpréter les fichiers PHP)
  • phpmyadmin : contient des pages de scripts permettant de gèrer la base MySQL
  • safe : contient une sauveguarde des fichiers de configuration par défaut (à garder précieusement en cas de problème !)
  • tmp : répertoire temporaire du serveur Apache (contient par exemple les fichier temporaires des sessions)
  • www : c'est ici le répertoire racine de votre site (par défaut). C'est donc ici qu'il faudra mettre vos fichier “.php”.

Pour tester si le serveur PHP marche, créez un fichier html, et placez-y ces quelques lignes :

<?php phpinfo(); ?>

Nommez ce fichier test.php et placez-le dans C:\Program files\EasyPHP\www\. Vous pouvez maintenant lancer votre navigateur et taper l'addresse “http://localhost/test.php” (“localhost” désigne votre ordinateur en local ; cela équivaut à l'IP 127.0.0.1). Si pleins d'infos s'affichent, c'est bingo ça marche et ça vaut mieux parce que sinon il va falloir consulter la FAQ officielle !

Vous pouvez arrêter là la manipulation d'EasyPHP pour vous consacrer entièrement à votre site, ou alors lire cet article jusqu'au bout :)

Tapez “http://localhost/home/” dans votre navigateur préféré. Vous tombez sur le fichier “index.php” du répertoire “home” que je vous ai brièvement décrit tout à l'heure. Elle vous permet de :

  • créer un alias = permettre au serveur Apache d'accéder à un répertoire comme s'il était dans www/
  • administrez vos bases de données : ce lien lance phpmyadmin qui est un ensemble de scripts (écris en PHP !) pour gérer vos bases MySQL ; je ne vous parlerait pas de son utilisation ici car il est très intuitif.
  • consulter l'environnement EasyPHP : quelques informations sur la configuration de votre serveur.

Bien sur il est possible de modifier tout cela autrement qu'en passant par cette section d'administration : c'est ce que nous allons voir maintenant.

Chaque composant d'EasyPHP a un fichier de configuration spécifique.

  • Apache : httpd.conf se situe “C:\Program Files\EasyPHP\apache\conf\”
  • MySQL : my.ini se situe dans le répertoire d'installation de Windows (“C:\WINNT\” ou “C:\WINDOWS\”)
  • PHP : php.ini se situe dans “C:\Program Files\EasyPHP\apache\” ou dans le répertoire d'installation de Windows

Pour modifier la configurations de l'un des serveurs, il suffit d'éditer son fichier de configuration (avec n'importe quel éditeur de texte), de le modifier, et de sauveguarder. (utilisez la fonction rechercher pour trouver les lignes citées ci dessous) NB : dans tous les fichiers suivant, les commentaires sont précédés d'un dièze (#) ATTENTION : il redémarrer les serveurs pour qu'ils prennent en compte la nouvelle configuration (clic droit sur l'icône d'EasyPHP situé dans la barre des taches/Redémarrer)

Divers

ErrorDocument 404

C'est la page qui s'affiche par défaut lorsqu'on demande au serveur web une page qu'il ne trouve pas. Pour afficher une autre page à la place, modifier votre .htaccess en rajoutant cette ligne :

ErrorDocument 404 /new_404_page.php

Cela marche aussi pour les autres codes d'erreurs.

ServerToken

ServerToken Full | OS | Minor | Minimal | Major | Prod

Pour cacher certaines informations sur la version et les extensions d'Apache. Par défaut c'est Full (ça affiche tout) mais on peut être prudent et n'afficher que certaine informations (les valeurs sont dans l'ordre décroissant).

ServerSignature

ServerSignature On | Off | EMail

Pour afficher la signature d'Apache en bas d'une page d'erreur (par exemple), ou juste l'email de l'administrateur.

Liens

informatique/logiciels/apache.1233337442.txt.gz · Last modified: 2013/10/14 20:55 (external edit)