Bla bla blog

Aller au contenu | Aller au menu | Aller à la recherche

mercredi 15 avril 2009

Authentification BASIC sur serveur Apache

Une authentification BASIC est mise en place lorsque le serveur web demande à l'internaute de saisir un login et mot de passe dès qu'il souhaite accéder à une ressource protégée. Il est possible de mettre en place une telle authentification sur un serveur Apache, et c'est ce que nous allons voir.

Création des comptes utilisateurs

Via l'utilitaire htpasswd.exe fourni avec la distribution Apache, il est possible de définir les créances (credentials) des utilisateurs, c'est-à-dire leurs logins et mots de passe. Ces couples login, mot de passe seront stockés dans un fichier à définir. Voici les principales commandes à connaître :

  • htpasswd –c user.pass jcc

Création du fichier user.pass et création du compte jcc. Le prompt permettra faire une double saisie du mot de passe dans la foulée.

  • htpasswd –b user.pass jcc monpassword

Ajoût de l'utilisateur jcc / password dans le fichier user.pass

Sécuriser les ressources du serveur web

La mise en place d'une authentification BASIC se déclare au niveau du serveur Apache dans le fichier httpd.conf au niveau de la déclaration des répertoires virtuels comme suit :

<Directory "c:/MonRepertoire/">
    AuthType Basic
    AuthName Blablabla
    AuthUserFile C:/MonRepertoire/user.pass
    Require valid-user
    Satisfy All
 </Directory>

vendredi 13 février 2009

Installer Joomla en version française

Joomla est certainement un des CMS (Content Management System) les plus utilisé du moment. Nous allons simplement lister les tâches à réaliser pour l'installer correctement en local :

  1. Installer l'environnement Apache + PHP (suivre les consignes de cet article )
  2. Installer une base de données MySQL et la démarrer sous forme de démon mysql-d.exe
  3. Via un outil d'administration (personnellement j'utilise MySQL Control Center), se connecter sur la base de données, créer une nouvelle instance de base et noter tous les paramètres de connexion (login, pwd, nom de l'instance)
  4. Télécharger l'archive de Joomla et la décompresser dans un répertoire en local.
  5. Dans le fichier httpd.conf de Apache, créer un alias /joomla par exemple qui redirigera toutes les requêtes vers le répertoire dans lequel nous avons décompressé notre archive. Cette technique est indiquée dans cet autre article
  6. Vous allez désormais pouvoir vous lancer dans la configuration de votre site, pour cela il vous suffit de saisir l'adresse suivante http://localhost/joomla/index.php dans votre navigateur préféré. Le processus de création est correctement indiqué dans ce document.

Bon courage !

jeudi 7 août 2008

Installer et configurer Apache et PHP

L'objet de ce billet est d'installer et configurer Apache et l'interpréteur PHP sous windows(c), enfin nous installerons un éditeur basique.

Télécharger les forces "libres" en présence

Eh oui tous ces outils sont open source et gratuits, nous ne sommes pas pour autant dispensé de consulter les licences associées...

Installation et configuration

PHP

Décompresser la distribution PHP obtenue lors de la première étape de manière à obtenir l'arborescence suivante c:/php/php.exe par exemple. Le fichier de configuration de l'interpréteur php et le fichier php.ini-recommended qu'il faut renommer en php.ini pour que ses propriétés soient prises en compte. Le fichier php.ini est relativement bien documenté (commenté) et nous le détaillerons dans de prochains billets, toutefois nous allons juste modifier deux propriétés :

 display_errors = On

pour que l'interpréteur affiche les messages d'erreur

 extension_dir = "./ext/"

pour indiquer l'emplacement des extensions de php (modules que nous pourrons ajouter par la suite) pour accéder aux bases de données par exemple

l'éditeur scite

Lancer l'installation automatique de Scite ou décompressez le, l'éditeur est installé. Modifier votre variable d'environnement Path, pour indiquer l'emplacement où vous avez installé l'interpréteur php (c:/php dans notre exemple). Vous pouvez écrire votre première page php

<?php echo "installation réussie"; ?>

En appuyant sur la touche F5, votre page php sera interprétée et vous visualiserez le résultat (ou les erreurs selon les cas).

Apache

Lancer l'installation d'Apache (Attention si vous êtes sous windows vista il faut désactiver le contrôle des comptes utilisateur). Par ailleurs l'installation va planter au moment de l'enregistrement du serveur Apache sous forme d'un service, j'ai résolu ce problème en précisant dans le fichier de conf d'Apache (httpd.conf) l'adresse IP de la machine en plus du port d'écoute :

Listen 127.0.0.1:80

Le lancemement du serveur Apache peut se faire via le moniteur ou en ligne de commande (httpd.exe -k start) pour le lancer sous forme de service windows. Si vous préférez le lancer en mode console, il suffit de taper la commande suivante httpd.exe.

Pour que le serveur Apache puisse supporter les scripts PHP plusieurs techniques existent (CGI, etc), nous choisissons d'ajouter un module au serveur Apache en modifiant le fichier httpd.conf :

Pour Apache v2.x:

 LoadModule php5_module c:/php/php5apache2.dll
 AddType application/x-httpd-php .php
 

Pour Apache v2.2.x:

 LoadModule php5_module c:/php/php5apache2_2.dll
 AddType application/x-httpd-php .php
 

De plus Apache a besoin du fichier php.ini pour connaître la configuration de l'interpréteur, il vous suffit de copier ce fichier dans le répertoire d'Apache où se trouve le fichier httpd.exe (APACHE_HOME/bin).

Enfin le répertoire de déploiement par défaut d'Apache est APACHE_HOME/htdocs, si vous souhaitez définir un autre répertoire tout en lui associant un alias ou un "virtual host", reportez-vous à cet autre billet.

Tester une application web

Lorsqu'on développe une application web il est souvent plus aisé de la tester localement avant de la mettre en gestion de conf. Pour tester votre application localement il vous faut un serveur web (Apache, IIS, etc.) et il se peut que vous utilisiez un environnement de développement (Eclipse, IntelliJ, NetBeans, etc..), nous utiliserons ici Apache et Eclipse pour illustrer ce billet.

L'objet de ce billet est de vous proposer des méthodologies pour tester votre application web localement...

Premier constat : le répertoire de travail est différent du répertoire de déploiement

Dans ce cas plusieurs solutions s'offrent à vous :

  1. Fusionner les deux répertoires
  2. Copier le contenu du répertoire de travail dans le répertoire de déploiement
  3. Faire en sorte que le serveur web pointe sur le répertoire de travail
  4. ...

Avant de détailler chacune de ces solutions, il convient de rappeler que ces répertoires pour Apache et Eclipse sont : APACHE_HOME/htdocs et ECLIPSE_HOME/workspace/Project_name

Fusionner les deux répertoires

Certainement la solution la plus immédiate, au démarrage d'Eclipse il suffira d'indiquer le répertoire APACHE_HOME/htdocs comme répertoire de travail. Cette solution nous assure de tester les bons fichiers et dans leur dernière version, toutefois l'inconvénient que je note dans cette solution vient des fichiers qui n'ont rien à faire dans l'environnement de test : .project pour Eclipse, code source pour les langages compilés, etc. En plus le serveur web devient difficilement utilisable pour plusieurs projets en parallèle.

Copier le contenu du répertoire de travail dans le répertoire de déploiement

Cette approche est intéressante car elle permet au développeur de sélectionner les fichiers à déployer et donc à tester. L'inconvénient immédiat est bien entendu de systématiser le déploiement avant les tests pour éviter de tester des fichiers obsolètes... Pour cette solution il convient de mettre en place un petit script de déploiement pour faciliter la tâche du développeur. Le framework ANT est souvent utilisé pour effectuer ce genre d'opération, exemple

<project name="deploiement" basedir="." default="deploy">
        <property name="targetDir" value="C:\apache\htdocs\test" />
        <target name="deploy">
                <delete dir="${targetDir}" />
                
                <mkdir dir="${targetDir}"/>
                
                <copy todir="${targetDir}">
                        <fileset dir="." includes="**\*.php"/>                                
                </copy>
        </target> 
</project>

le serveur web pointe sur le répertoire de travail

Cette opération est me semble t-il la plus intéressante car les ressources sont à un seul endroit (dans le répertoire de travail). De plus comme le serveur web peut référencer plusieurs répertoires de travail on peut travailler sur plusieurs projets en parallèle. Certains plug-ins de vos environnements de développement vous permettent d'automatiser cette opération (PHPEclipse, PDT, WTP, etc...). Mais ayant souvent rencontré des problèmes, je décris ici comment paramétrer votre serveur web pour qu'il référence votre répertoire de travail.

Définir le répertoire de travail et ses droits

Cette opération se fait dans le fichier de configuration du serveur web. Pour Apache, il s'agit du fichier APACHE_HOME/conf/httpd.conf dans lequel le répertoire se définit de la manière suivante :

<Directory "C:\eclipse\workspace\Test">
   Options Indexes MultiViews 
   AllowOverride All
   Order allow,deny
   Allow from all
</Directory>

A l'intérieur de la balise <Directory>, il est possible de spécialiser les droits qu'auront les utilisateurs sur ce répertoires. Si rien n'est spécialiser ce sont les droits par défaut qui s'appliquent. Pour plus d'information sur la balise <directory> se référer au site d'Apache

Référencer le répertoire de travail

Cette opération peut se faire de deux manières dans le fichier httpd.conf : via un Alias ou un VirtualHost

Un alias est un bout d'URL à placer juste après http://IP_DU_SERVEUR:PORT/ALIAS pour pointer sur votre répertoire de travail. Il se définira ainsi dans le fichier httpd.conf

Alias /www "C:\eclipse\workspace\Test"

Ainsi vous accèderez à votre répertoire de travail en tapant l'adresse suivante : http://127.0.0.1:80/www

Un VirtualHost est intéressant lorsqu'on veut faire cette aiguillage sur un nom le nom de domaine ou le numéro de port. Pour mettre en place un tel aiguillage il nous faut déjà un système pour résoudre les noms de domaine : serveur DNS à l'échelle d'Internet ou fichier Host à l'échelle de votre machine. Ici nous présenterons le second cas en étant bien conscient que la portée est locale (mais c'est bien se que nous cherchions initialement, non?). Si vous êtes sous windows il vous faut éditer le fichier suivant : C:\Windows\System32\drivers\etc\hosts pour lui ajouter la ligne suivante :

127.0.0.1       local.mywebapp.com

Ainsi lorsque vous taperez http://local.mywebapp.com/ dans votre navigateur ce sera équivalant à http://127.0.0.1

Maintenant effectuons l'aiguillage dans le fichier httpd.conf, pour celà complétez le comme suit :

<VirtualHost local.mywebapp.com:80>
    DocumentRoot C:\eclipse\workspace\Test
    ServerName local.mywebapp.com:80
    ErrorLog logs/jc.log
    CustomLog logs/jc.log common
</VirtualHost>

Notez qu'en plus de l'aiguillage, il vous est possible de spécifier les fichiers de log dans lesquels seront consignés les erreurs et autres messages de votre application, pratique pour avoir un fichier de log par application! Pour plus d'information sur les VirtualHosts référez vous à ce document sur la documentation Apache.