Dernière modification 3 novembre 2008
Vous devez récupérer préalablement les sources d' Apache à l'URL httpd.apache.org on récupère ensuite PHP à l'URL www.php.net et enfin MySQL à l'URL www.mysql.com.
Pour l'analyser des logs d'Apache, reportez vous à la page "Analyser les logs d'Apache avec Webalizer et Awstats".
Pour mettre en place un moteur de recherche, reportez vous à
la page "
Ht://Dig"
tar xvfz mysql-5.0.67.tar.gz
Cela crée le répertoire mysql-5.0.67,
sur ma Mandriva j'ai du installer les packages
libncurses5-devel
et orbit-devel
et installer le
lien suivant
ln -s
/usr/bin/orbit2-config
/usr/bin/orbit-config
Sous ubuntu ce n'est pas nécessaire. Dans le répertoire de MySQL, on tape alors:
./configure
Puis
make
La compilation est relativement longue même sur une machine puissante. On tape maintenant en temps que root:
make install
Les exécutables sont installés par défaut sous /usr/local/bin et le serveur mysqld sous /usr/local/libexec. Les bibliothèques vont se trouver sous /usr/local/lib/mysql, rajoutez cette ligne dans le fichier /etc/ld.so.conf et tapez
ldconfig
Si c'est la première fois que vous installez MySQL vous devez taper la commande suivante, vous pouvez passer à l'étape suivante si vous upgradez MySQL :
./mysql-5.0.67/scripts/mysql_install_db
Voilà le résultat obtenu
Installing MySQL
system tables...
080817 14:03:47 [Warning]
option 'max_join_size': unsigned value 18446744073709551615 adjusted to
4294967295
080817 14:03:47 [Warning]
option 'max_join_size': unsigned value 18446744073709551615 adjusted to
4294967295
OK
Filling help tables...
080817 14:03:47 [Warning]
option 'max_join_size': unsigned value 18446744073709551615 adjusted to
4294967295
080817 14:03:47 [Warning]
option 'max_join_size': unsigned value 18446744073709551615 adjusted to
4294967295
OK
To start mysqld at boot
time you have to copy
support-files/mysql.server
to the right place for your system
PLEASE REMEMBER TO SET A
PASSWORD FOR THE MySQL root USER !
To do so, start the
server, then issue the following commands:
/usr/local/bin/mysqladmin
-u root password 'new-password'
/usr/local/bin/mysqladmin
-u root -h toshiba.kervao.fr password 'new-password'
Alternatively you can run:
/usr/local/bin/mysql_secure_installation
which will also give you
the option of removing the test
databases and anonymous
user created by default. This is
strongly recommended for
production servers.
See the manual for more
instructions.
You can start the MySQL
daemon with:
cd /usr/local ;
/usr/local/bin/mysqld_safe &
You can test the MySQL
daemon with mysql-test-run.pl
cd mysql-test ; perl
mysql-test-run.pl
Please report any
problems with the /usr/local/bin/mysqlbug script!
The latest information
about MySQL is available on the web at
http://www.mysql.com
Support MySQL by buying
support/licenses at http://shop.mysql.com
Pour info les bases sont installées par défaut sous /usr/local/var. Si ce n'est pas déjà fait créer le groupe mysql
groupadd mysql
Puis l'utilisateur mysql du groupe mysql
useradd -g mysql mysql
Les bases se trouvent par défaut sous /usr/local/var, mysql doit en être propriétaire
chown -R mysql /usr/local/var
idem pour le groupe
chgrp -R mysql /usr/local/var
Puis on lance le serveur en tapant:
scripts/mysqld_safe &
Ce qui va donner comme résultat
Starting mysqld daemon with databases from
/usr/local/var
Avec cette dernière version mysql
refusait de se lancer, dans le fichier d'erreur (sous /usr/local/var par
défaut) j'avais
041002 12:18:13
mysqld started
/usr/local/libexec/mysqld: Can't read dir of '/root/tmp/' (Errcode: 13)
/usr/local/libexec/mysqld: Can't create/write to file
'/root/tmp/ibqQdaUA' (Errcode: 13)
041002 12:18:13 InnoDB: Error: unable to create temporary
file;
errno: 13
041002 12:18:13 Can't init databases
041002 12:18:13 Aborting
j'ai résolu cela en tapant avant de lancer mysqld_safe
export TMPDIR=/tmp
Pour un lancement automatique
Pour que MySQL soit lancé automatiquement
au boot, on modifiera le fichier support_files/mysql.server.sh.
Dans ce fichier au lieu de @HOSTNAME@
on écrit hostname,
on
modifie également la variable basedir
(au lieu d'avoir basedir=
on
écrit basedir=/usr/local)
et pour finir la variable datadir
(au lieu de datadir=
on
écrit datadir=/usr/local/var).
En admettant que votre poste soit connecté sur internet et que vous vouliez pas que n'importe qui puisse accéder à votre serveur internet, vous pouvez préciser l'adresse IP locale de votre serveur pour que seuls les postes de votre réseau puisse y accéder, on modifie la ligne suivante comme ceci
$bindir/mysqld_safe
--datadir=$datadir --pid-file=$server_pid_file --bind-address=192.168.26.110 $other_args >/dev/null
2>&1 &
Vous pouvez mettre l'adresse IP local de votre serveur
(127.0.0.1 si
poste isolé). Par ailleurs si vous avez l'erreur
mentionné plus haut rajouté ( à la suite de la
déclaration de PATH)
TMPDIR=/tmp
export TMPDIR
Maintenant sous Mandriva
on copie le fichier sous /etc/rc.d/init.d et on le renommera mysql
cp ./mysql-5.0.67/support-files/mysql.server.sh /etc/rc.d/init.d/mysql
On donne les droits d'exécution à ce fichier
chmod 755 /etc/rc.d/init.d/mysql
Pour un lancement automatique de MySQL à l'état de marche 3, 4 et 5, on tapera ensuite
chkconfig --level 345 mysql on
Et un arrêt à l'état de marche 0, 1, 2 et 6
chkconfig --level 0126 mysql off
Sous ubuntu
On copie le fichier sous /etc/init.d et on le nomme mysql, on doit dans ce fichier faire une dernière modif à la place de source on met un . (un point). On donne les droits d'exécution à ce fichier
chmod 755 /etc/init.d/mysql
Pour un lancement automatique on tape
update-rc.d mysql defaults
A présent reportez vous
à la page
MySQL à partir de la création
du mot de passe pour root, le reste de la configuration et de
l'utilisation est identique à la version RPM.
tar xvfz httpd-2.2.9.tar.gz
Cela va créer le répertoire httpd-2.2.9. Avant d'aller plus loin, si Apache est déjà installé sur votre système on va le supprimer, on va d'abord supprimer les modules PHP, pour vérifier :
rpm -qa | grep -i php
Si vous obtenez par exemple
php-gd-version
php-ldap-version
mod_php-version
php-common-version
php-version
On supprime en tapant rpm -e nom-du-package
Maintenant on va supprimer Apache, pour vérifier s'il est présent :
rpm -qa | grep -i apache
Si on obtient par exemple
apache-version
apache-conf-version
apache-modules-version
apache-common-version
Supprimez éventuellement les répertoires suivants /var/www, /var/log/httpd et /etc/httpd
Dans le répertoire d'Apache httpd-2.2.9 , on tape alors:
./configure --prefix=/usr/local/apache2 --enable-modules=most
Par prefix
on indique que les
répertoires d'Apache
contenant entre autre le fichier de conf se trouveront sous
/usr/local/apache2 c'est utile dans le cas où vous voulez
faire coexister deux versions d'Apache sur votre
système. On tape maintenant:
make
Et enfin en tant que root:
make install
Rajoutez la ligne /usr/local/apache2/lib dans le fichier /etc/ld.so.conf puis tapez
ldconfig
Pour lancer maintenant Apache, il faut taper:
/usr/local/apache2/bin/apachectl start
Maintenant votre navigateur préféré dans le champ URL taper http://localhost ou http://nomdelamachine et là la page d'accueil d'Apache apparaît (ou du moins un It Works !!), pour info celle-ci se trouve sous /usr/local/apache2/htdocs.
NOTE Si vous upgradez d'une ancienne version, vos fichiers de conf ne seront pas écrasés.
tar xvfj php-5.2.6.tar.bz2
Cela va créer un répertoire php-5.2.6. A présent dans le répertoire de php, vous taperez./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-config-file-path=/usr/local/apache2/conf --with-mysql --enable-bcmath=yes --enable-debug=no --with-gd --with-zlib --with-kerberos --enable-mbstring --with-mcrypt --enable-ftp
Notes - Vous avez besoin du package flex contenant lex
- les options--with-gd --with-zlib --with-kerberos sont utiles pour l'utilisation des mods freeplayer de la freebox
- les options --enable-mbstring --with-mcrypt sont nécessaires pour phpMyAdmin elles requièrent l'installation du package libmcrypt-dev avec ses dépendances (ou libmcrypt-devel suivant la distribution)
Tapez maintenant
make
Puis en tant que root
make install
Cette dernière commande va installer le module PHP
sous /usr/local/apache2/modules et modifier le
fichier httpd.conf
en rajoutant
LoadModule php5_module modules/libphp5.so
On modifiera maintenant
manuellement le fichier httpd.conf pour qu'Apache
prenne
en
compte PHP, à la suite des lignes
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
On rajoute
AddType application/x-httpd-php .php .php3 .php4
.php5 .phtml
AddType application/x-httpd-php-source .phps
Par ailleurs à la ligne
DirectoryIndex index.html
On rajoutera
DirectoryIndex index.html index.htm index.php index.php3 index.php4 index.php5
A présent on va copier le fichier php.ini-dist se trouvant dans le répertoire de PHP php-5.2.6 pour le mettre sous /usr/local/apache2/conf et en le renommant php.ini
cp ./php-5.2.6/php.ini-dist /usr/local/apache2/conf/php.ini
Dans le cas d'une ancienne installation de php, vous avez tout
intérêt à repartir du nouveau fichier
php-dist.ini fourni et de
le remodifier.
Dans le répertoire /usr/local/apache/htdocs on
trouve les fichiers qui seront accessibles à partir de la page
d'accueil de votre serveur Apache.
On relance Apache
/usr/local/apache2/bin/apachectl restart
Créer maintenant le fichier infophp.php contenant
<?
phpinfo();
?>
Que vous placerez sous /usr/local/apache2/htdocs, dans l'URL de votre navigateur préféré, taper http://localhost/infophp.php ou http://nommachine/infophp.php et là magique devrait s'afficher des info sur la configuration de PHP sur votre système.

ATTENTION Si comme moi vous utilisez des URL du style http://www.funix.org/fr/linux/index.php?ref=apache&page=menu c'est à dire avec passage d'arguments, à partir de la version 4.2.0 de php cela risque de ne pas fonctionner. Le passage d'argument est régi entre autres par la variable register_globals qui a été désactivée dans le fichier php.ini pour des raisons de sécurité. Pour la réactiver éditez /usr/local/apache/conf/php.ini et au lieu de
register_globals = Off
Mettez
register_globals = On
Relancez Apache. Cela dit vous avez intérêt à laisser cette variable à Off et procéder comme suit. Voilà le bout de code php des pages html de ce site pour faire l'inclusion du menu à gauche ou pas. Voilà la code avec register_globals = On
<?
if ($page=="menu")
{
$menu="menu.htm";
include($menu);
}
?>
Et le même code avec register_globals = Off
<?
if ($_GET["page"]=="menu")
{
$menu="menu.htm";
include($menu);
}
?>
Pour plus d'info sur cette fonctionnalité
désactivée et sur la manière de faire autrement http://www.php.net/manual/en/security.registerglobals.php
Le répertoire de log contient essentiellement deux fichiers:
- access_log listant les accès au serveur
- error_log listant les erreurs en tout genre
Le répertoire de modules modules contient les modules utilisables par Apache, pour info un module est une extension logicielle à Apache, lui permettant par exemple d'interpréter le PHP (module libphp5.so). Ce ne sont que les modules chargés dynamiquement qui sont dans ce répertoire.
Le répertoire /usr/local/apache2/conf
contient:
- le fichier de configuration d'Apache http.conf
- mime.types fixe le type de fichier suivant
l'extension du dit
fichier (.doc=msword, .ps=postscript,
...), ça
permet au client qui se connecte sur le serveur, de savoir comment
interpréter le fichier suivant son extension.
- magic sert pour le module mod_mime_magic
Vous trouverez également un tas d'autres fichiers de config
fournis comme exemple dans le répertoire conf/extra
(...)
# Répertoire racine d'Apache
ServerRoot "/usr/local/apache"
(...)
# définition de l'adresse IP du port du
serveur
# Listen: Allows you to bind Apache to specific IP addresses
and/or
# ports, in addition to the default. See also the
<VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown
below to
# prevent Apache from glomming onto all bound IP addresses
(0.0.0.0)
#
#Listen 12.34.56.78:80
# avec un deuxième serveur apache, vous pouvez indiquer un port
8080
# dans l'url du navigateur il faudra mettre http://url:8080
Listen 80
(...)
# On lance initialement httpd en tant
que root, puis
immédiatement
# c'est l'utilisateur nobody (groupe nobody) qui en devient le
proprio
# ainsi s'il y a une faille dans Apache, le hacker au lieu de
devenir root
# devient daemon avec les droits qui vont avec
# pour vérifier que daemon est bien le proprio
# ps aux | grep httpd
User daemon
Group damein
# ServerAdmin: Your address, where
problems with the
server
should be
# e-mailed. This address appears on some
server-generated
pages, such
# as error documents.
# En cas de problème un email sera envoyé au
webmaster, mettez donc
# ici l'adresse email du webmaster
ServerAdmin olivier@asterix.kervao.fr
(...)
# DocumentRoot: The directory out of
which you will serve
your
# documents. By default, all requests are taken from this
directory,
but
# symbolic links and aliases may be used to point to other
locations.
# C'est dans ce répertoire qu'on va trouver la page d'accueil
d'Apache
DocumentRoot "/usr/local/apache/htdocs"
(...)
# Définition des fichiers d'entrée
DirectoryIndex index.html index.html.var index.htm index.php
index.php index.php4
(...)
# nom du fichier d'erreur
ErrorLog logs/error_log
# niveau de log
# LogLevel: Control the number of messages logged to the
error_log.
# Possible values include: debug, info, notice, warn, error,
crit,
# alert, emerg.
#
LogLevel warn
(...)
# ordre de préférence des langues
# LanguagePriority allows you to give precedence to some
languages
# in case of a tie during content negotiation.
#
# Just list the languages in decreasing order of preference.
We have
# more or less alphabetized them here. You probably want to
change
this.
#
LanguagePriority fr en da nl et de el it ja kr no
pl pt pt-br
ltz ca
es sv tw
cp /usr/local/apache2/bin/apachectl /etc/rc.d/init.d/httpd2
On rajoutera en début de fichier juste après #!/bin/sh
#!/bin/sh
# Startup script for the Apache Web Server
#
# chkconfig: 345 85 15
# description: Apache is a World Wide Web server. It
is used
to serve \
#
HTML files and CGI.
# processname: httpd
Pour un lancement automatique à l'état de marche 3,4 et 5 on doit normalement taper:
chkconfig --level 345 httpd2 on
Et pour un arrêt à l'état de marche 0, 1, 2 et 6
chkconfig --level 0126 httpd2 off
Pour lancer le serveur, il suffira maintenant de taper:
/etc/rc.d/init.d/httpd2 start
Voilà un script de lancement, il faut l'appeler httpd2 et le placer
sous /etc/init.d
#!/bin/bash
#
#
apache Start the apache2 HTTP server.
#
# The variables below are
NOT to be changed. They are there to make the
# script more readable.
NAME=apache
DAEMON=/usr/local/apache2/bin/httpd
PIDFILE=/usr/local/apache2/logs/httpd.pid
CONF=/usr/local/apache2/conf/httpd.conf
APACHECTL=/usr/local/apache2/bin/${NAME}ctl
# note: SSD is required
only at startup of the daemon.
SSD=`which
start-stop-daemon`
ENV="env -i LANG=C
PATH=/bin:/usr/bin:/usr/local/bin"
trap "" 1
# Check that we're not
being started by inetd
if egrep -q -i
"^[[:space:]]*ServerType[[:space:]]+inet" $CONF
then
exit 0
fi
test_config() {
if [ ! -x $APACHECTL ]; then
echo "$APACHECTL is not executable, exiting"
exit 0
fi
# ensure we don't leak environment vars into apachectl
APACHECTL="$ENV $APACHECTL"
if ! $APACHECTL configtest 2> /dev/null
then
printf "Configuration syntax error detected. Not reloading.\n\n"
$APACHECTL configtest
exit 1
fi
}
should_start() {
if [ ! -x $DAEMON ]; then
echo "apache is not executable, not starting"
exit 0
fi
}
case "$1" in
start)
should_start
test_config
echo -n "Starting web server: $NAME"
$ENV $SSD --start --pidfile $PIDFILE --exec $DAEMON > /dev/null
;;
stop)
echo -n "Stopping web server: $NAME"
start-stop-daemon --stop --pidfile $PIDFILE --oknodo
rm -rf /var/lib/apache/mod-bandwidth/link/*
;;
reload |
force-reload)
test_config
echo -n "Reloading $NAME configuration"
start-stop-daemon --stop --pidfile $PIDFILE --signal USR1
;;
restart)
test_config
echo -n "Restarting $NAME"
if ! start-stop-daemon -q --stop --pidfile $PIDFILE --signal HUP; then
$ENV $SSD --start --pidfile $PIDFILE --exec $DAEMON > /dev/null
fi
;;
*)
echo "Usage: /etc/init.d/$NAME {start|stop|reload|force-reload|restart}"
exit 1
;;
esac
if [ $? -eq 0 ]; then
echo .
exit 0
else
echo " failed"
exit 1
fi
On donne les droits d'exécution
chmod 755
/etc/init.d/httpd2
Pour le lancer automatique au démarrage il faudra taper
update-rc.d httpd2
defaults
UserDir /home/httpd
Ainsi pour l'utilisateur toto quand vous taperez comme URL http://serveur-apache/~toto, apache ira chercher le fichier index.htm sous /home/httpd/toto. On peut aller plus loin en spécifiant un répertoire particulier, /home/httpd/toto/html par exemple, en écrivant:
UserDir /home/httpd/*/html
Alias /icons/ "/usr/local/apache/icons/"
Alias /doc "/usr/doc/html/"
on rajoute ensuite pour chacun des répertoires
<Directory
"/usr/doc/html">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
NOTE Si vous mettre /doc/ à la place de /doc dans l'URL il faudra taper http://obelix/doc/, si vous omettez le dernier /, vous aurez une erreur.
# définition des fichiers de protection des pages
AccessFileName .htaccess
il faut bien évidemment relancer apache.
Tous les fichiers à accès limité doivent être concentrés dans un même répertoire /home/olivier/public_html/reserve par exemple, il suffit de créer dans celui-ci un fichier qu'on devra nommer .htaccess contenant:
AuthUserFile auth/olivier.users
AuthGroupFile auth/olivier.group
AuthName "Acces Restreint"
AuthType Basic
require group autorise
Le fichier olivier.users va contenir une
liste
d'utilisateurs, il va se trouver sous le répertoire /usr/local/apache2/auth
(éventuellement
à créer), pour info vous pouvez changer le chemin /usr/local/apache2
en
modifiant la valeur de la variable ServerRoot qu'on
trouve
dans le fichier httpd.conf. Le fichier
olivier.group
correspond à une liste des groupes de personnes, ces mêmes
personnes ayant été défini dans le fichier
olivier.users. Le principe consiste à créer un groupe
de personnes autorisées et à leur attribuer un mot de
passe à chacune, seul ce groupe pourra accéder à
la
section réservée.
Pour créer ces fichiers il suffit, en tant que root, d'une part
de créer le répertoire /usr/local/apache2/auth,
puis de taper:
htpasswd -c /usr/local/apache2/auth/olivier.users olivier
Pour info cet exécutable se trouve dans le répertoire d'installation d'apache précisemment sous httpd-2.2.9/support. L'option -c correspond à la création du fichier olivier.users. On va alors avoir à rentrer un mot de passe pour l'utilisateur olivier.
New password:
On confirme
Re-type new password:
Adding password for user olivier
Pour créer un autre utilisateur veronique vous taperez la même commande sans l'option de création :
htpasswd /etc/httpd/auth/olivier.users veronique
Toujours en tant que root, créer le fichier /usr/local/apache2/auth/olivier.group qui contiendra la liste des personnes autorisées à accéder aux pages réservées :
autorise: olivier veronique
Maitenant quand à partir de votre navigateur préféré quand vous allez rentrer comme URL http://obelix/~olivier/reserve, vous aurez une fenêtre popup qui va s'ouvrir vous demandant de rentrer votre nom d'utilisateur et le mot de passe préalablement rentré.
Notez que pour que quelqu'un ne puisse jetter un coup d'oeil dans les fichiers .htaccess de vos utilisateurs, le fichier httpd.conf doit contenir la directive suivante:
<Files ~ "^\.ht">
Order allow,deny
Deny from all
Satisfy All
</Files>
On va rajouter tout à la fin du fichier:
NameVirtualHost 192.168.13.11
<VirtualHost 192.168.13.11>
ServerName obelix.breizland.bz
DocumentRoot /usr/local/apache/htdocs
ErrorLog logs/obelix-error_log
TransferLog logs/obelix-access_log
</VirtualHost>
<VirtualHost 192.168.13.11>
ServerName www.asterix.breizland.bz
DocumentRoot /usr/local/asterix
ErrorLog logs/asterix-error_log
TransferLog logs/asterix-access_log
</VirtualHost>
<VirtualHost 192.168.13.11>
ServerName www.idefix.breizland.bz
DocumentRoot /usr/local/idefix
ErrorLog logs/idefix-error_log
TransferLog logs/idefix-access_log
</VirtualHost>
pour chacun des répertoires je dois créer ensuite les instructions suivantes
<Directory "/usr/local/asterix">
AllowOverride FileInfo AuthConfig Limit
Indexes
Options MultiViews Indexes
SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST
OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>
Relancez Apache en tapant:
/etc/rc.d/init.d/httpd restart
Maintenant nous allons créer nos hôtes asterix
et
idefix, pour cela vous avez deux méthodes:
- rajouter www.asterix.breizland.bz et www.idefix.breizland.bz
dans /etc/hosts sur la même ligne que votre
serveur Apache
(obelix dans notre
exemple).
192.168.13.11 obelix obelix.breizland.bz www.asterix.breizland.bz www.idefix.breizland.bz
Normalement si vous faites un ping sur www.idefix.breizland.bz ça devrait marcher, pour les postes clients il faudra rajouter la même ligne dans le fichier hosts (non nécessaire).
- si vous disposez d'un serveur DNS sur votre machine, au niveau de votre config DNS dans votre fichier breizland.bz qui se trouve sous /var/named vous devez rajouter tout à la fin:
www.asterix
A 192.168.13.11
www.idefix
A 192.168.13.11
Relancez le DNS en tapant:
/etc/rc.d/init.d/named restart
Pour tester tapez dans un shell:
ping www.asterix.breizland.bz
Maintenant dans le champ URL de votre navigateur préféré:
http://www.asterix.breizland.bz
Et là, normalement vous devriez voir s'afficher la page que vous avez placé sous /usr/local/asterix
Dans l'hypothèse où vous utilisez deux serveurs Apache (versions 1.3
et 2 par
exemple), vous pouvez spécifier le port 80 pour Apache 1.3 et le
port 8080 pour Apache 2
en fixant dans le fichier
de configuration Listen
à 8080. Au niveau de la déclaration des hôtes
virtuels il faudra mettre quelque chose comme ça
NameVirtualHost
192.168.13.11:8080
<VirtualHost
192.168.13.11:8080>
ServerName tosh.kervao.fr
DocumentRoot
/usr/local/apache2/htdocs
ErrorLog
logs/tosh-error_log
TransferLog
logs/tosh-access_log
</VirtualHost>
<?
$serveur="localhost";
$login="olivier";
$pass="mot-de-passe";
$base="essai";
$table="coord";
$id=MYSQL_CONNECT($serveur,$login,$pass);
mysql_select_db($base);
$nom="hoarau";
$prenom="olivier";
$email="olivier.hoarau@fnac.net";
$query="INSERT INTO $table VALUES('$nom','$prenom','$email')";
$result=mysql_query($query,$id);
echo "Saisie terminée";
?>
Placer ce script dans ~/public_html et appeler le bd1.php
Dans votre navigateur préféré, dans le champ URL saisissez :
http://obelix/~olivier/bd1.php
A priori y a pas grand chose qui s'est passé, maintenant connecter vous à votre base essai dans un shell
[olivier@obelix olivier]$ mysql -u olivier -p essai
Enter password:
Welcome to the MySQL monitor. Commands end with ; or
\g.
Your MySQL connection id is 10 to server version: 5.0.67
Type 'help' for help.
mysql> SELECT * FROM coord;
+-----+-------+--------------------+
| nom |
prenom |
email
|
+-----+-------+--------------------+
| hoarau | olivier |
olivier.hoarau@fnac.net |
+-----+-------+--------------------+
1 row in set (0.00 sec)
C'est bon ça fonctionne. Passons à un exemple plus pointu, on va entrer les informations concernant vos visiteurs dans une base MySQL , créer la table telle que décrite dans l'exemple 2 de la page MySQL, créer maintenant le script PHP.
<?
$page=getenv("HTTP_REFERER");
$ip=getenv( "REMOTE_ADDR");
$host=gethostbyaddr($ip);
$d = date("d/m/Y H:i:s");
$expl=getenv("HTTP_USER_AGENT");
$serveur="localhost";
$login="olivier";
$pass="mot-de-passe";
$base="essai";
$table="ref";
$id=MYSQL_CONNECT($serveur,$login,$pass);
mysql_select_db($base);
$query="INSERT INTO $table
VALUES('$d','$host','$ip','$expl','$page')";
$result=mysql_query($query,$id);
echo "$d $host($ip) $expl $page";
?>
Nommez ce script bd2.php et placez le dans ~/public_html . Dans votre navigateur préféré tapez dans le champ URL
http://obelix/~olivier/bd2.php
Vous devriez voir la date, le nom de votre machine avec son adresse IP et des infos sur votre OS et votre navigateur. A présent connectons nous à la base:
[olivier@obelix olivier]$ mysql -u olivier -p essai
Enter password:
Welcome to the MySQL monitor. Commands end with ; or
\g.
Your MySQL connection id is 10 to server version: 5.0.67
Type 'help' for help.
mysql> SELECT * FROM ref;
+---------------+---------------+----------+-----------------+-----+
|
date
|
host
|
ip
|
os
| page |
+---------------+---------------+----------+-----------------+-----+
| 24/04/2000 08:34:05 | asterix.armoric.bz | 192.168.13.11 |
Mozilla/4.61 [en] (X
|
|
+---------------+---------------+----------+-----------------+-----+
1 row in set (0.00 sec)
C'est bon le visiteur a bien été pris en compte.
Maintenant que vous savez comment Apache fonctionne avec MySQL et PHP, laissez libre cours à votre imagination.
L'archive se présente sous la forme d'un tarball
qu'on
décompresse en tapant :
tar xvfj phpMyAdmin-2.11.8.1-all-languages-utf-8-only.tar.bz2
Cela va créer dans le répertoire de travail un répertoire phpMyAdmin-2.11.8.1-all-languages-utf-8-only. Dans ce répertoire vous avez un fichier config.inc.sample.php, il faut le renommer en fichier config.inc.php, dans ce fichier il faut modifier les champs suivants :
Pour cette variable on peut mettre un peu n'importe quoi, ça sert ensuite pour chiffrer de manière aléatoire.
$cfg['blowfish_secret'] = 'je suis toto'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
pour le reste j'ai laissé les valeurs par défaut à savoir
/*
Authentication type */
$cfg['Servers'][$i]['auth_type']
= 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host']
= 'localhost';
$cfg['Servers'][$i]['connect_type']
= 'tcp';
$cfg['Servers'][$i]['compress']
= false;
/* Select mysqli if your
server has it */
$cfg['Servers'][$i]['extension']
= 'mysql';
Maintenant on doit rendre accessible le répertoire phpMyAdmin
d'une
page web, pour cela deux solutions:
- (solution simple) placer phpMyAdmin dans /usr/local/apache/htdocs
et au niveau de la page d'accueil d'apache faire un lien vers /usr/local/apache/htdocs/phpMyAdmin-2.11.8.1-all-languages-utf-8-only/index.php
- (solution préconisée), créer un hôte
virtuel pointant vers ./phpMyAdmin-2.11.8.1-all-languages-utf-8-only
qu'on appelera www.sql.breizland.bz
.
NOTE Si ça vous gène que n'importe qui d'un
navigateur puisse aller dans le répertore phpMyAdmin,
mettez y des restrictions d'accès avec un fichier .htaccess.
Avec la solution hôte virtuel, à partir d'un navigateur quand on sélectionne www.sql.breizland.bz on tombe d'abord sur une bannière de login, ensuite sur une fenêtre avec frame avec à gauche la liste des bases de données disponibles et à droite, le menu suivant:

Pour travailler sur une base de données particulières il suffit de la sélectionner dans le choix déroulant à gauche, on retrouve d'ailleurs notre base essai, pour en créer une autre il suffit de choisir Bases de données puis Créer une base de données.
Si on sélectionne essai par exemple on obtient

Vous pouvez donc créer des nouvelles tables, faire des requêtes SQL, etc.
A noter que si vous avez une erreur de chargement de phpMyAdmin du style "Erreur lors du chargement de la session" il faudra éditer le fichier /usr/local/apache2/conf/php.ini et modifier la ligne suivanteScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
Le but de l'exercice est de créer un script perl CGI qui va traiter un formulaire quelconque d'une page HTML. Vous allez créer votre script perl sous /usr/local/apache2/cgi-bin, et le nommer form.pl, voici son contenu:
#!/usr/bin/perl
use CGI;
$html=new CGI;
print $html->header;
print "<HTML>\n";
print "<HEAD>\n";
print "<TITLE>Premier script CGI
perl</TITLE>\n";
print "</HEAD>\n";
print "<BODY>\n";
print "<H1>Traitement du
formulaire</H1>\n";
print "Nom :";
print $html->param('nom');
print "<p>\n";
print "Email :";
print $html->param('email');
print "<p>\n";
print "Commentaire:";
print $html->param('comment');
print "</BODY>\n";
print "</HTML>\n";
Donner les droits qui vont bien avec ce fichier:
chmod 755 form.pl
En tant qu'utilisateur standard (olivier dans notre exmple), créer maintenant le fichier HTML suivant que vous appelerez formulaire.htm
<html>
<body>
<h2>Formulaire</h2>
<form action="http://obelix/cgi-bin/form.pl"
METHOD=GET>
Nom: <input type="text" name=nom
size=20><br>
Email: <input type="text" name=email
size=30><br>
Commentaire: <input type="text" name=comment
size=100><br>
<input type=submit value="Envoyer">
<input type=reset
value="remettre à zéro">
</form>
</body>
</html>
Voilà maintenant quand vous allez accéder à http://obelix/~olivier/formulaire.htm
, vous allez avoir une page du style:
En appuyant sur Envoyer ça va déclencher l'exécution du script CGI perl, qui va provoquer l'affichage des valeurs précédemment saisies.
--with-ldap=/var/lib/ldap
/var/lib/ldap devant être remplacé par le chemin où se trouve votre base LDAP. Recompilez puis réinstallez le module qui va bien :
make
Et en tant que root
make install
Relancez Apache
/etc/rc.d/init.d/httpd restart
Voilà un petit programme qui va nous permettre de rajouter une entrée dans la base, libre à vous maintenant de créer des formulaires de saisie, de destruction, et de recherche:
<?
// nom du serveur LDAP
$server="asterix";
// identification de l'administrateur de la base
$rootdn="cn=Manager, dc=breizland, dc=bz";
//mot de passe administrateur
$rootpw="secret";
//connexion à la base
$result=ldap_connect($server);
if ($result==1)
{
ldap_bind($result,$rootdn,$rootpw);
}
//Enregistrement d'une entrée dans la base
echo"Enregistrement de Benjamin Hoarau\n";
$dn="dc=breizland, dc=bz";
$nom="Hoarau";
$prenom="Benjamin";
$mail="benjamin.hoarau@funix.org";
$info["cn"]=$nom." ".$prenom;
$info["mail"]=$mail;
$info["objectclass"]="person";
ldap_add($result,"cn=$nom $prenom,$dn",$info);
ldap_close($result);
echo "L'enregistement a réussi";
?>
Appelez ce fichier ldap.php, vous pouvez
le tester et
vérifier que l'entrée a bien été saisie
dans
la base.
Cette sécurisation est relativement basique à moins d'un trou de sécurité dans Apache ou PHP elle devrait vous mettre à l'abri de 99,99% des attaques. Pensez donc à visiter régulièrement les sites d'Apache ou de PHP pour vous tenir au courant des dernières informations en terme de sécurité, évitez aussi d'installer les dernières versions de ces logiciels, attendez qu'elles aient fait leur preuve.
Voilà quelques règles simples pour sécuriser Apache2, tout d'abord au niveau de la compil on garde le minimum de modules, voilà la configuration de compilation
./configure \
--prefix=/usr/local/apache2 \
--with-mpm=prefork \
--disable-charset-lite \
--disable-include \
--disable-env \
--disable-setenvif \
--disable-status \
--disable-autoindex \
--disable-asis \
--disable-cgi \
--disable-negotiation \
--disable-imap \
--disable-actions \
--disable-userdir \
--disable-alias \
--disable-so
pour le reste la compilation est identique pour avoir la liste des modules utilisés il faudra taper
/usr/local/apache2/bin/httpd -l
on devrait juste avoir
Compiled in modules:
core.c
mod_access.c
mod_auth.c
mod_log_config.c
prefork.c
http_core.c
mod_mime.c
mod_dir.c
on va faire en sorte de le rendre moins bavard en mettant
Par ailleurs j'ai défini 2 serveurs virtuels pour l'exercice.
La compilation de PHP est identique à celle vue précédemment,
c'est
au niveau du fichier de configuration qu'on modifiera certains points.
Pour Apache, on désactivera par défaut tous les modules
(statiques ou dynamiques), on installera le strict minimum, à
vous de rajouter ensuite les modules qui sont nécessaires
à votre site (ou d'adapter votre site).
Maintenant on va modifier certains points dans la
configuration de
PHP, cela se passe dans le fichier
/usr/local/apache/conf/php.ini. On va modifier les
paramètres suivants:
| safe_mode=On | Les scripts PHP ne
pourront
modifier d'autres fichiers que si le propriétaire du dit script
et aussi propriétaire des autres fichiers. En conséquence
le script PHP d'un utilisateur ne pourra pas modifier les fichiers d'un
autre utilisateur. |
| safe_mode_gid = Off | Avec safe_mode à On
en
mettant cette variable à Off, il faut non seulement que le
propriétaire du script PHP soit aussi le propriétaire du
fichier à modifier mais que le groupe (GID) soit le même
également. |
| open_basedir= | Cette variable a
été définie plus haut dans le fichier httpd.conf, PHP ne
pourra
accéder qu'aux fichiers se trouvant dans les répertoires
(et sous répertoires) mentionnés. |
| expose_php=Off |
PHP ne délivrera
pas
d'information en réponse aux requêtes faites par des
clients. |
| display_errors = Off | PHP ne délivrera à
l'affichage (dans le navigateur) aucune erreur et warning. |
| log_errors = On | Les erreurs et
warnings seront
inscrits dans un fichier de log |
| error_log = /usr/local/apache/logs/php.log | Définition du
fichier de
log |
| file_uploads = Off | Désactivation de
l'upload |
| register_globals=Off | En mettant à On les variables d'environnement, GET, POST, etc. deviennent automatiquement des variables globales, ce qui est potentiellement dangereux, en conséquence il est fortement conseillé de désactiver ce paramètre |
Pour faire propre il faudrait maintenant chrooter
l'environnement de
votre serveur Apache,
supprimer les compilateurs sur votre serveur, ...
| [Retour page d'accueil FUNIX] | [retour haut de la page ] |