
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
Ca je pense que vous avez déjà...
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.
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.
Sous Windows, un compte root permet de se connecter depuis l'hôte local, et l'autre depuis n'importe quel hôte.
Sous Unix, les deux comptes root sont destinés à être utilisés depuis le compte local. Les connexions doivent être faîtes en spécifiant le nom d'hôte localhost, ou le véritable nom d'hôte, ou l'adresse IP.
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.
Sous Windows, un compte anonyme sert depuis l'hôte local. Ce compte a tous les droits, comme « root ». L'autre sert aux connexions depuis les autres hôtes, et a tous les droits pour les bases test ou commençant par test_.
Sous Unix, les deux comptes anonymes servent depuis l'hôte local. Les connexions doivent être faîtes en spécifiant le nom d'hôte localhost, ou le véritable nom d'hôte, ou l'adresse IP. Ces comptes ont tous les droits dans les bases test ou dont le nom commence par test_.
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
[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
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.
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
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
Pour cela, il faut (par exemple dans /home/http) :
Créer le dossier /home/http et ses sous dossiers
[root]# mkdir /home/http
[root]# mkdir /home/http/htdocs
[root]# mkdir /home/http/cgi-bin
Créer un groupe et un utilisateur apache
[root]# groupadd apache
[root]# useradd -d /home/http -g apache apache
Dans le fichier /etc/httpd/conf/httpd.conf
#dossier des documents
DocumentRoot «/home/http/htdocs»
#dossier des cgi
ScriptAlias /cgi-bin/ «/home/http/cgi-bin»
Dans le fichier /etc/httpd/conf/httpd.conf :
#uid et gid de l'utilisateur apache
User apache
Group apache
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
Pour protéger un dossier par mot de passe, il faut :
Création du fichier .htpasswd (dans un dossier inaccessible de l'extérieur de préférence (par ex : /home/un_utilisateur) :
[un_utilisateur]# htpasswd -c .htpasswd un_utilisateur
Créer le fichier .htaccess dans le répertoire à protéger :
AuthUserFile /home/un_utilisateur/.htpasswd
AuthName "Accès protégé" AuthType Basic <Limit GET POST> Require valid-user </Limit>
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.
Commenter toutes les lignes de /etc/httpd/conf.d/welcome.conf
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 :
Créer le répertoire VIRT1 dans le répertoire /home/http en tant que root
Créer les répertoires htdocs et cgi-bin dans le répertoire VIRT1
Dans le fichier /etc/httpd/conf/httpd.conf
commenter DocumentRoot et ScriptAlias
mettre NameVirtualHost *:80
Pour chaque VirtualHost (VIRT1 et serveur principal compris) :
<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>
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 :
Vérifier que le module rewrite est utilisé par apache :
LoadModule rewrite_module modules/mod_rewrite.so
Dans le virtual host www.truc.com :
RewriteEngine on
#RewriteRule <regex url source> <regex url cible>
#accepte les groupes de capture : premier $1,...
RewriteRule ^/machin/(.*) http://www.machin.com/$1
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
L'une des principales différences avec les versions antérieures d'Apache est l'organisation de ses fichiers de configuration :
le fichier /etc/apache2/apache2.conf inclut beaucoup d'autres fichiers
le port d'écoute se configure dans le fichier /etc/apache2/ports.conf
le dossier /etc/apache2/sites-available/ contient un fichier de configuration par virtual host. Ceux sont les sites disponibles. Pour les rendre actif, ils faut faire un lien vers le fichier de configuration du virtual host dans le dossier /etc/apache2/sites-enabled/
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
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
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.
[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
Dans le fichier /etc/apache2/apache2.conf :
on peut ajouter « index.php » et/ou « index.php4 » et/ou « index.php5 » à la directive DirectoryIndex afin de prendre les pages par défaut PHP.
Ajouter dans la liste des « AddHandler »
: AddHandler php-script .php4 .php5
Ne
pas oublier de relancer Apache.
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
Exemple
de scriptDans
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>
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é.
Pour plus d'informations : http://java.sun.com/j2se/1.5.0/install-linux.html
Télécharger le dernière version depuis http://java.sun.com/j2se/1.5.0/download.jsp dans /usr/local/
Vérifierque le .bin a bien le droit d'exécution.
Lancer le .bin.
Faites un lien symbolique de jdkXXXX vers java :
ln -s /usr/local/jdkXXXXXX /usr/local/java
Ajouter le chemin du dossier bin du répertoire d'installation de java dans la variable PATH
Dans le fichier /etc/profile :
PATH=$PATH:/usr/local/java/bin/
Ce paquetage est nécessaire pour fournir à JDBC un pilote pour que le code Java puisse accéder à une base MySQL :
Récupérer l'archive mysql-connector-java-XXX.tar.gz depuis http://dev.mysql.com/downloads/connector/j/5.0.html par exemple dans /usr/local.
Paramétrer la variable CLASSPATH :
Dans /etc/profile
:
setenv CLASSPATH
/usr/local/mysql-connector-java-version-bin.jar:$CLASSPATH
Test du chargement du pilote JDBC. Dans un fichier .java à compiler avec javac et à exécuter le .class résultant avec java, voici le code permettant de tester la connectivité à MySQL depuis Java :
class test {
public static void main(String argv[]) {
try {
// tenter de récupérer le driver Mysql
Class.forName("com.mysql.jdbc.Driver").newInstance();
System.out.println("Chargement du pilote Mysql réussi");
}
catch(Exception e) {
System.err.print("Erreur de chargement du pilote : ");
System.err.println(e.getMessage());
}
}
}
Télécharger sur le site http://tomcat.apache.org/ , l'archive de la dernière version apache-tomcat-XXX.tar.gz dans le répertoire /usr/local. Désarchivez dans ce dossier (d'installation)
Créer la variable d'environnement JAVA_HOME, qui indique à Tomcat le chemin vers Java
Dans /etc/profile,
en dessous de PATH :
export
JAVA_HOME=/usr/local/java/
Créer un lien
symbolique pour simplifier l'accès à Tomcat
ln
-s /usr/local/apache-tomcat-XXXX/
/usr/local/tomcat
Lancement et arrêt du serveur
/usr/local/tomcat/bin/startup.sh
/usr/local/tomcat/bin/shutdown.sh
Lancement au démarrage (à chmod 755)
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
Test du serveur : essayer de vous connecter à http://IP_serveur:8080/. Si une page s'affiche, tout va bien...La racine du site se trouve dans /usr/local/tomcat/webapps/ROOT/ et le fichier index.jsp est la page par défaut. C'est une page HTML JSP (Java Server Page).
Configuration de Tomcat : fichier /usr/local/tomcat/conf/server.xml : pour plus d'informations voir la documentation de Tomcat (par exemple, http://tomcat.apache.org/tomcat-5.5-doc/config/index.html)
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
javac [options] <liste de fichiers.java> : compilateur prenant le texte contenu dans les fichiers .java de la liste passée en paramètre et s'iml n'y a pas d'erreur de compilation, génère du byte-code Java. Il en résulte un fichier .class du même nom que le fichier .java contenant le dit byte-code.
appletviewer [-debug] <URL> : visionneuse d'applets situées à l'URL spécifié. L'option -debug indique d'utiliser jdb pour exécuter l'applet.
java
[options] nom-classe [arguments] :
interpréteur de byte-code Java. nom-classe est
le nom d'une classe (.class) exécutable. On ne doit surtout
pas indiquer .class dans nom-classe. Cette classe doit contenir une
méthode main().
- [arguments] est la
liste des arguments passés sur la ligne de commande du
programme nom-classe.
javadoc [options] nom_de_fichier.java (ou de paquetage) : générateur de documentation qui permet au programmeur de documenter ses classes au format HTML, et de façon professionnelle. Toute la doc, même celle de Sun a été générée à partir de javadoc.
jdb : le débogueur Java
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>
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.
[root]# apt-get install apache2 libapache2-mod-perl2
[root]# shell prompt> perl -MCPAN -e shell ... configuration de CPAN ... ... puis mise à jour de CPAN ... cpan> install CPAN cpan> install Bundle::Apache::ASP
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;
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 ».
Voir http://www.apache-asp.org ou encore http://cern91.tuxfamily.org/linux/indexnet.php?page=asp.
BibliographieApacheWelcome! - The Apache Software Foundation
Installation et configuration d'un serveur Web
Installer Apache-PHP-MySql sur LINUX
MySQL AB :: La Base de Données Open Source la plus Populaire au Monde
PHP hypertext preprocessor - Wikipédia
PHP - Introduction à la programmation avec PHP
Introduction aux Java Server Pages
Configuration avancée du serveur Apache : Apache::ASP | Linux