LAMP : Linux Apache MySQL PHP (et autres)

8 février 2007

Télécharger en PDF

Table des matières

I.Linux 2

II.MySQL 2

1.Les comptes par défaut 2

2.Sécurisation 2

3.Autres commandes utiles 3

a)Outil d'administration de mysql : mysqladmin 3

b)Structure d'une base : mysqlshow 3

4.Et iptables dans tout ça 4

III.Apache 4

1.Apache : généralités 4

a)Changement du répertoire par défaut et cgi-bin 4

b)Changement de l'utilisateur/groupe de fonctionnement 4

c)Servir des répertoires par utilisateur : public_html 5

d)Protection de dossiers par mot de passe 5

e)Fichiers d'erreurs personnalisés 5

f)Supprimer le message de bienvenue par défaut 6

g)Virtual Hosts 6

h)Module de réécriture 6

i)Listing de répertoire ou pas et page par défaut 7

2.Apache 2 : une nouvelle vision du fichier de config 7

3.Analog : analyse des logs d'apache 7

4.Et iptables dans tout ça 8

IV.PHP 8

1.Présentation 8

2.Installation 8

3.Configuration dans Apache 9

4.Configuration de PHP 9

5.Exemple de script 9

V.Tomcat et JSP 10

1.Installation de JAVA 10

2.Installation du paquetage mysql-connector-java 10

3.Installation de Apache-Tomcat : le serveur servlet JSP 11

4.Autres informations utiles 12

a)Installation du plugin Java pour Mozilla ou Firefox (Linux) 12

b)Outils de développement du J2SDK 12

c)Exemple de servlet JSP 12

VI.Apache::ASP : Active Server Page 13

1.Note importante et présentation 13

2.Installation d'apache et de mod_perl 13

3.Installation de Apache::ASP 13

4.Eviter les problèmes 13

5.Test de Apache::ASP 14

6.Autres informations 14

VII.Bibliographie 15

1.LAMP 15

2.Apache 15

3.MySQL 15

4.PHP 15

5.Tomcat et JSP 15

6.ASP 15



I.Linux

Ca je pense que vous avez déjà...


II.MySQL

MySQL est un système de gestion de base de données relationnel gratuit qui est une des plus utilisés sur le WEB.


Pour installer Mysql, il faut récuperer les rpm « mysql » et « mysql-server » et les installer. Ensuite, il faut le sécuriser un peu.


1.Les comptes par défaut


Deux comptes MySQL « root » sont créés en tant qu'administrateurs ayant tous les droits. Le mot de passe de l'utilisateur initial « root » est vide, ce qui permet à n'importe qui de se connecter en tant que root sans mot de passe et de profiter de tous les droits.


Deux comptes « utilisateur anonyme » sont aussi créés et peuvent faire ce qu'ils veulent avec toutes les tables dans la base de données 'test' ou commençant par 'test_' . Cela signifie qu'un utilisateur peut se connecter sans mot de passe et être traité comme un utilisateur anonyme.


2.Sécurisation


Voilà ce que l'on a avant sécurisation :

mysql> SELECT Host,User FROM mysql.user;
+--------------------------------+------+
| Host                           | User |
+--------------------------------+------+
| localhost                      |      |
| localhost                      | root |
| machine.domaine.fr             |      |
| machine.domaine.fr
                         | root |
+--------------------------------+------+
4 rows in set (0.00 sec)

Etapes de securisation : (Ce qui est à taper est en gras)


mysql> DELETE FROM mysql.user WHERE User = '';
mysql> FLUSH PRIVILEGES;
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('nouveau_mot');
mysql> SET PASSWORD FOR 'root'@'machine.domaine.fr' = PASSWORD('nouveau_mot');
mysql> quit



3.Autres commandes utiles

a)Outil d'administration de mysql : mysqladmin

[root@machine root]# mysqladmin status -u root -p
Enter password:
Uptime: 1738  Threads: 1  Questions: 504  Slow queries: 0  Opens: 18  Flush tables: 1  Open tables: 2 Queries per second avg: 0.290


b)Structure d'une base : mysqlshow

Sans argument, cette commande donne les bases disponibles :

[root@machine root]# mysqlshow mysql

Database: mysql

+---------------------------+

| Tables |

+---------------------------+

| columns_priv |

| db |

| func |

...

| time_zone_transition |

| time_zone_transition_type |

| user |

+---------------------------+

[root@machine root]# mysqlshow mysql user

Database: mysql Table: user

+--------+--------+----------+...+---------------------------------+---------+

| Field | Type | Collation| | Privileges | Comment |

+--------+--------+----------+...+---------------------------------+---------+

| Host |char(60)| utf8_bin | | select,insert,update,references | |

| User |char(16)| utf8_bin | | select,insert,update,references | |

|Password|char(41)|latin1_bin| | select,insert,update,references | |

...

+--------+--------+----------+...+---------------------------------+---------+


Pour la gestion des bases, des tables et des utilisateurs vous pouvez utiliser le logiciel phpMyAdmin, qui permet ce type de gestion via un portail web en php.


4.Et iptables dans tout ça

Le serveur MySQL écoute sur le port 3306. En général, on restreindra l'accès au(x) serveurs en ayant l'utilité, comme les serveurs Web. De plus, si le serveurs Web et le serveur MySQL tournent sur la même machine, on veillera à ce que le port 3306 ne soit ouvert que sur l'interface lo et pas vers l'extérieur (police par défaut normalement). Sinon, si les serveurs sont séparés, on écrira :

[root]# iptables -A INPUT -p tcp --dport 3306 -s IP_serveur_web -j ACCEPT

[root]# iptables -A OUTPUT -p tcp --sport 3306 -d IP_serveur_web -j ACCEPT


III.Apache

1.Apache : généralités

Apache est un serveur WEB/HTTP qui gère le PHP, le PERL et MySQL (entre autre). C'est le plus utilisé des serveurs WEB libres.


Apache fonctionne un peu comme le kernel de Linux, c'est-à-dire qu'il supporte le chargement automatique des modules lorsqu'il en a besoin. Par exemple le module perl ou php...Ce mécanisme porte le nom de DSO (Dynamic Shared Object).


Le fichier de configuration d'apache doit normalement être le suivant : /etc/httpd/conf/httpd.conf

a)Changement du répertoire par défaut et cgi-bin

Pour cela, il faut (par exemple dans /home/http) :

[root]# mkdir /home/http

[root]# mkdir /home/http/htdocs

[root]# mkdir /home/http/cgi-bin

[root]# groupadd apache

[root]# useradd -d /home/http -g apache apache


#dossier des documents

DocumentRoot «/home/http/htdocs»

#dossier des cgi

ScriptAlias /cgi-bin/ «/home/http/cgi-bin»


b)Changement de l'utilisateur/groupe de fonctionnement

Dans le fichier /etc/httpd/conf/httpd.conf :

#uid et gid de l'utilisateur apache

User apache

Group apache


c)Servir des répertoires par utilisateur : public_html

Pour autoriser les utilisateurs à publier du contenu dans un répertoire public_html de leur répertoire home et leur autorisé un htaccess pour protéger leurs données par mot de passe :


Dans le fichier /etc/httpd/conf/httpd.conf

#autoriser les utilisateurs à avoir un public_html

<IfModule mod_userdir.c>

UserDir public_html

</IfModule>


#définir les droits par défaut pour les dossiers public_html

<Directory /home/*/public_html>

#autoriser l'authentification par htaccess

AllowOverride FileInfo AuthConfig Limit

Order allow,deny

Allow from all

</Directory>


#autoriser les fichiers .htaccess

AccessFileName .htaccess


d)Protection de dossiers par mot de passe

Pour protéger un dossier par mot de passe, il faut :

[un_utilisateur]# htpasswd -c .htpasswd un_utilisateur

AuthUserFile /home/un_utilisateur/.htpasswd

			AuthName "Accès protégé"
			AuthType Basic
			<Limit GET POST>
				Require valid-user
			</Limit>

e)Fichiers d'erreurs personnalisés

On peut changer le fichier d'erreur affiché en fonction du numéro d'erreur :

ErrorDocument   <numéro d'erreur>       <document>

Cette directive indique que le document <document> sera affiché en cas de génération de l'erreur <numéro d'erreur>. Cette directive peut se placer à l'intérieur d'un directive <Directory> afin de définir la page d'erreur uniquement pour un dossier ou à l'extérieur de toute directive pour définir le fichier pour tous les dossiers.

f)Supprimer le message de bienvenue par défaut

Commenter toutes les lignes de /etc/httpd/conf.d/welcome.conf

g)Virtual Hosts

Un « Virtual Host » permet de servir plusieurs sites Internet sur le même serveur Apache. Par exemple, on peut servir à la fois www.machin.com et www.truc.fr. Si l'on utilise au moins un « virtual host » alors, il faut que les options DocumentRoot et autres options de dossiers pour le serveur principal se trouve aussi dans un « virtual host ».


Pour créer un « virtual host » VIRT1 :

<VirtualHost *:80>

ServerName <nom du serveur>

DocumentRoot <dossier htdocs>


<Directory "<répertoire htdocs>">

AllowOverride None

Options FollowSymLinks Indexes

Order allow,deny

Allow from all

</Directory>


ErrorLog <chemin et fichier error_log>

CustomLog <chemin et fichier access_log> combined

ScriptAlias /cgi-bin/ «répertoire cgi-bin»

<Directory "<répertoire cgi-bin>">

AllowOverride None

Options None

Order allow,deny

Allow from all

</Directory>


<IfModule mod_userdir.c>

UserDir <nom du répertoire utilisateur>

</IfModule>


<Directory /home/*/<nom du répertoire utilisateur>>

AllowOverride FileInfo AuthConfig Limit

Order allow,deny

Allow from all

</Directory>

</VirtualHost>


h)Module de réécriture

Le module rewrite permet de rediriger des requêtes d'une URL sur une autre. Je reviendrais sur ce module dans un autre tutoriel. Par exemple pour rediriger www.truc.com/machin/ et ses sous pages et répertoires vers www.machin.com/, il faut respecter les étapes suivantes :

LoadModule rewrite_module modules/mod_rewrite.so

RewriteEngine on

#RewriteRule <regex url source> <regex url cible>

#accepte les groupes de capture : premier $1,...

RewriteRule ^/machin/(.*) http://www.machin.com/$1



i)Listing de répertoire ou pas et page par défaut

Lorsque apache ne trouve pas de page d'index dans un répertoire, soit il affiche un message d'erreur, soit le listing du contenu du répertoire. Lorsque le contenu du répertoire peut être affiché, apache peut ajouter une entete et un pied de page personnalisé a travers deux fichiers configurés pas Headername et Readmename. On peut aussi ne plus afficher la version d'Apache dans ce cas de figure.


La directive DirectoryIndex suivi d'une liste de nom et extension permet de spécifier les fichiers d'index d'un dossier (fichier renvoyé par défaut).


Dans les directives <Directory> :

#activer les index

Options Indexes <autres options sauf Indexes>


#désactiver les index
Options <autres options sauf Indexes>


#activer les entete et pied d'index

ReadmeName README.html

HeaderName HEADER.html


#désactiver l'affichage des infos du serveur

ServerSignature Off


2.Apache 2 : une nouvelle vision du fichier de config

L'une des principales différences avec les versions antérieures d'Apache est l'organisation de ses fichiers de configuration :

3.Analog : analyse des logs d'apache

Analog est un analyseur de fichiers de logs pour apache qui permet d'avoir une analyse de vos logs par virtual host et une analyse globale, par exemple.

Un fichier .cfg par virtual host :

LOGFILE <chemin et nom de son fichier access_log>

OUTFILE <nom et chemin du fichier HTML à générer>

HOSTNAME "nom du virtual host"

HOSTURL "http://url_du_virtual_host/"


Un fichier .cfg pour le résumé des trois :

LOGFILE <chemin et nom du fichier access_log d'un virtual host> http://url_du_virtual_host

LOGFILE <chemin et nom du fichier access_log d'un virtual host> http://url_du_virtual_host

...

OUTFILE <nom et chemin du fichier HTML à générer>

HOSTNAME "nom du serveur"

SUBDIR http://*


Un script (les fichiers .cfg sont dans le même répertoire):

#!/bin/bash


cd /root

analog +g<nom_virtual_host>.cfg

analog +g<nom_virtual_host>.cfg

...

analog +g<fichier_résumé>.cfg


éventuellement un ajout dans un script dans /etc/cron.weekly


4.Et iptables dans tout ça

Un serveur Web écoute sur le port TCP 80 :

[root]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT

[root]# iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT

IV.PHP

1.Présentation

PHP (Hypertext Preprocessor) est un langage de programmation procédural permettant la programmation rapide d'application WEB. On peut aussi programmer de façon objet dans les versions les plus récentes du langage. Sa syntaxe se rapproche du C, Perl et Bash.

2.Installation

[root]# apt-get install libapache2-mod-php4



Si vous voulez PHP5, il vous faudra ajouter ceci dans votre /etc/apt/sources.list :

deb http://packages.dotdeb.org stable all
deb-src http://packages.dotdeb.org stable all

Puis faire :

[root]# apt-get update

[root]# apt-get install libapache2-mod-php5

3.Configuration dans Apache

Dans le fichier /etc/apache2/apache2.conf :

Ne pas oublier de relancer Apache.

4.Configuration de PHP

Le fichier de configuration de PHP est /etc/php.ini.

Pour gérer l'affichage des erreurs, on peut définir les directives suivantes :

#afficher toutes les erreurs

error_reporting = E_ALL

#ne pas afficher les erreurs

display_errors = Off

#logguer les erreurs
log_errors = On

# dans le fichier error.log
error_log = "error.log"


Une autre chose intéressante est la gestion des ressources :

#temps maximum d'exécution en secondes

max_execution_time = 30

#taille maximum qu'un script PHP peut occuper en mémoire

memory_limit = 8M


5.Exemple de script

Dans un fichier .php dans le répertoire de votre site, par exemple, /var/www/apache2-default/test.php :


<html>

<head>

<title>Test</title>

</head>

<body>

<?php

if (!empty($_POST['test_field']))

{

echo 'Votre réponse : '.$_POST['test_field'].'<br>';

}

?>

Votre requête :

<form action="test.php" method="post">

<input type="text" name="test_field" value="" />

<input type="submit" />

</form>

</body>

</html>

V.Tomcat et JSP

Tomcat est un serveur de servlet JSP J2EE. Cela permet de programmer les scripts serveurs en Java.

Dans les procédures suivantes, les XXXX indiquent des noms de fichiers et répertoires à compléter avec la version des composants que vous avez téléchargé.

1.Installation de JAVA

ln -s /usr/local/jdkXXXXXX /usr/local/java

Dans le fichier /etc/profile :

PATH=$PATH:/usr/local/java/bin/

2.Installation du paquetage mysql-connector-java

Ce paquetage est nécessaire pour fournir à JDBC un pilote pour que le code Java puisse accéder à une base MySQL :

Dans /etc/profile :
setenv CLASSPATH /usr/local/mysql-connector-java-version-bin.jar:$CLASSPATH

class test {

public static void main(String argv[]) {

}

}

3.Installation de Apache-Tomcat : le serveur servlet JSP

Dans /etc/profile, en dessous de PATH :
export JAVA_HOME=/usr/local/java/

/usr/local/tomcat/bin/startup.sh

/usr/local/tomcat/bin/shutdown.sh

Dans un fichier /etc/init.d/tomcat :

#! /bin/sh


PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/tomcat/bin

NAME=tomcat


set -e


case "$1" in

start)

startup.sh

;;

stop)

shutdown.sh

;;

restart|force-reload)

shutdown.sh

startup.sh

;;

*)

N=/etc/init.d/$NAME

echo "Usage: $N {start|stop|restart|force-reload}" >&2

exit 1

;;

esac


exit 0


Ensuite (sous Debian) :

[root]# update-rc.d tomcat defaults

4.Autres informations utiles

a)Installation du plugin Java pour Mozilla ou Firefox (Linux)

Si, par exemple, Firefox est installé dans /usr/local/firefox/ :

[root]# cd /usr/local/firefox

[root]# cd plugins

[root]# ln -s /usr/local/j2sdkXXXXX/jre/plugins/i386/ns610/libjavaplugin_oji.so libjavaplugin_oji.so

b)Outils de développement du J2SDK

c)Exemple de servlet JSP

Voici un exemple de traitement de formulaire. A mettre dans un fichier .jsp dans /usr/local/tomcat/webapps/ROOT :

<html>

<head>

<title>Test</title>

</head>

<body>

<%

String test_field=request.getParameter("test_field");

if (test_field != null && !test_field.equals(""))

{

out.print("Votre réponse : " + test_field + "<br>");

}

%>

Votre requête :

<form action="test.jsp" method="post">

<input type="text" name="test_field" value="" />

<input type="submit" />

</form>

</body>

</html>

VI.Apache::ASP : Active Server Page

1.Note importante et présentation

Contrairement à ce que l'on pourrait penser, ce n'est pas un moyen de faire tourner des pages ASP telles qu'elles sur Linux/Apache. En effet, Apache::ASP permet de retrouver l'environnement ASP (les objets et autres) mais avec une SYNTAXE PERL.

2.Installation d'apache et de mod_perl

[root]# apt-get install apache2 libapache2-mod-perl2

3.Installation de Apache::ASP

[root]# shell prompt> perl -MCPAN -e shell
  ... configuration de CPAN ...
  ... puis mise à jour de CPAN ...
 cpan> install CPAN
 cpan> install Bundle::Apache::ASP

4.Eviter les problèmes

Si vous êtes sous Debian Sarge et/ou que vous avez une version 1.999_21 (ou inférieure), il vous sera nécessaire de remplacer toutes les occurrences de « Apache2 » par « Apache » dans /usr/local/share/perl/5.8.4/Apache/ASP/ApacheCommon.pm. Par exemple :

package Apache::ASP::ApacheCommon;


# For mod_perl 2.0 in particular, just load all the modules

# Loading only the modules needed in particular only saved between 500K-2M

# during benchmarking

# eval { &ModPerl::MethodLookup::preload_all_modules(); };


# here is the list of modules from mod_perl 2.0 that I would need to load

# explicitly for all the Apache methods needed. This is by no means definitive

# but what I found during testing.

# --jc, 5/5/2003


use Apache::RequestRec ();

use Apache::RequestUtil ();

use Apache::RequestIO ();

use Apache::Response ();

use APR::Table ();

use APR::Pool ();

use Apache::Connection ();

use Apache::ServerUtil ();

use Apache::ServerRec ();

use Apache::SubRequest ();

use Apache::Log ();


1;

5.Test de Apache::ASP

Il suffit de copier le répertoire /root/.cpan/build/Apache-ASP-XXX/site/ dans le dossier contenant la racine ou un sous dossier de votre site, par exemple, un sous dossier ASP, /var/www/apache2-default/asp/.

Ensuite, il faudra ajouter dans /etc/apache2/sites-available/default :

<Directory /var/www/apache2-default/asp/>

Options FollowSymLinks

#autorise le .htaccess à faire tout ce qui

#est nécessaire

AllowOverride All

Order allow,deny

Allow from all

</Directory>


Vous pourrez ensuite accéder aux pages de test ASP à http://IP_serveur/asp/ et en cliquant sur « Examples ».


6.Autres informations

Voir http://www.apache-asp.org ou encore http://cern91.tuxfamily.org/linux/indexnet.php?page=asp.


VII.Bibliographie

1.LAMP

LAMP - Wikipédia

2.Apache

Welcome! - The Apache Software Foundation

Apache - Introduction

Apache-SSL

Installation et configuration d'un serveur Web

Installer Apache-PHP-MySql sur LINUX

3.MySQL

MySQL AB :: La Base de Données Open Source la plus Populaire au Monde

MySQL - Wikipédia

Manuel de référence MySQL 5.0

Cours complet de MySQL

4.PHP

PHP France

PHP: Hypertext Preprocessor

PHP hypertext preprocessor - Wikipédia

PHP - Introduction à la programmation avec PHP

5.Tomcat et JSP

Apache Tomcat - Apache Tomcat

Tomcat (serveur) - Wikipédia

Introduction aux Java Server Pages

JavaServer Pages Technology

JSP - Wikipédia

6.ASP

Apache-ASP

Configuration avancée du serveur Apache : Apache::ASP | Linux

sharevb