Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ceci est une ancienne révision du document !
.
Nota : Ce wiki est écrit par une débutante
Contributeurs, merci de compléter la partie sur la sécurité !
Ce qui est mis en œuvre ici concerne une utilisation d'un serveur apache sur un réseau local qui ne pointe pas un nom de domaine acquis mais fictif.
Avant tout, il faut savoir que monter un serveur web pour de l'auto-hébergement présente des risques. Vous courrez par exemple le risque de donner un accès à tout votre réseau local à un pirate qui chercherait à prendre la main sur votre identité pour commettre des attaques illégales en votre nom.
Ce wiki a pour objet de proposer une initiation à apache2, et déploie son installation sur une machine en vue de l'apprentissage; machine virtuelle qu'il faudra éteindre en dehors des TP, voire détruire plutôt que la laisser dans l'oubli sur un système. Dans tous les cas se documenter sur la sécurité.
Si vous choisissez de déployer ce qui suit sur une machine réelle faisant office de serveur personnel en vue d'auto-hébergement, l'auteur et debian-facile décline toute responsabilité sur les conséquences fâcheuses qui pourraient en découler.
Prenez le temps d'apprendre à sécuriser un serveur web avant de vous lancer dans l’auto-hébergement !
Créons une machine virtuelle pour s'exercer à mettre en place un serveur web.
Cette machine virtuelle doit être configurée côté réseau avec un accès par pont.
Pour faire tout comme en “vrai”, lors de son installation on a dé-sélectionné le choix de l'installation d'un “environnement de bureau”, on n'a pas sélectionné “serveur web”. On a simplement choisi les “outils debian”, et “serveur ssh”.
Après l'installation du système, la première chose à faire est de fixer l'IP de ce système virtuel. Par exemple, 192.168.x.xx.
Puis de relever son hostname, par exemple “debian-MV-server”.
Ensuite, on configure le serveur ssh, en prenant le temps de le sécuriser en changeant le port 22, en désactivant PermitEmptyPasswords
, et côté client en créant des clés assymétriques, afin de pouvoir par la suite, configurer le serveur web depuis le client ssh.
apt-get install apache2
Après l'installation le serveur est fonctionnel. Si tout s'est bien passé, en tapant dans son navigateur http://192.168.x.xx/
, il doit s'afficher ceci:
It works! This is the default web page for this server. The web server software is running but no content has been added, yet.
Afin de comprendre la mise en place d'un site web avec apache2, on va détailler la configuration par défaut d'apache.
L'installation d'apache a mis en place sur le système plusieurs sous-répertoires de /etc/apache2.
cd /etc/apache2/ && ls
apache2.conf envvars mods-available ports.conf sites-enabled conf.d magic mods-enabled sites-available
Il est à noter que le fichier /etc/apache2/apache2.conf est l'équivalent du fichier httpd.conf des distributions Linux à base de RedHat.
Il inclut d'autres fichiers de configuration qu'on n'a pas besoin de modifier pour une utilisation simple et personnelle d'apache2.
Les quatre sous-répertoires à relever dans un premier temps pour comprendre le fonctionnement d'apache sont :
Ce répertoire contient des fichiers qui indiquent les sites hébergés par apache2.
Puisque après l'installation, il a été possible d'afficher une page web d'accueil, c'est que ce répertoire contient un fichier qui le permet :
cd sites-available/ && less default
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory>
On voit la ligne <Directory /var/www/>
. C'est là le chemin du fichier qui contient le code html de la page d'accueil.
Vérifions cela.
cd /var/www && ls
index.html
less index.html
<html><body><h1>It works!</h1> <p>This is the default web page for this server.</p> <p>The web server software is running but no content has been added, yet.</p> </body></html>
Donc le site “default” est configuré de sorte à mettre à disposition tout ce qui est dans /var/www. Mais ce n'est pas tout. Si la page d'accueil s'affiche sur le navigateur, c'est que le site de test de apache2 est activé. Cette activation dépend d'un lien symbolique entre un fichier du répertoire /etc/apache2/sites-enabled/ et un fichier du répertoire /etc/apache2/sites-available/default.
Ce répertoire contient des liens symboliques qui pointent vers des fichiers de /etc/apache2/sites-available.
cd /etc/apache2/sites-enabled/ && ls
000-default
Ce fichier est un lien symbolique : il pointe vers /etc/apache2/sites-available/default.
ls -l /etc/apache2/sites-enabled/000-default
lrwxrwxrwx 1 root root 26 sept. 19 06:06\ /etc/apache2/sites-enabled/000-default -> ../sites-available/default
Revenons sur la configuration par défaut d'apache2, et la mise en service de la page d'accueil.
Pour activer un site ou le désactiver, il suffit donc de créer ou de supprimer le lien symbolique qui relie /etc/apache2/sites-enabled/000-default et /etc/apache2/sites-available/
Cela peut se faire avec les commandes ln -s
et rm
. Mais on utilise pour ce faire les utilitaires :
a2ensite
: (apache2 enable site) : active un site,a2dissite
: (apache2 disable site) : désactive un site.Cette configuration par défaut, indique donc comment s'y prendre pour créer un site web pris en charge par apache2.
Il doit être créé dans /var/www/, mais on placera ce fichier de code, dans un dossier qu'il faudra créer dans /var/www/dossier-du-site/fichier.html.
Il faudra créer un utilisateur dans la base de apache ainsi qu'un fichier correspondant à la page web de /var/www/dossier-du-site/fichier.html dans /etc/apache2/sites-available/dossier-du-site.
Il faudra créer un lien symbolique dans /etc/apache2/sites-available/ pointant vers /etc/apache2/sites-available/dossier-du-site.
Puisque tout est bien clair, créons notre propre site web.
Par exemple “monsite.com” qui va pouvoir accueillir le site internet.
mkdir -p /var/www/monsite.com/public_html
chown -R $USER:$USER /var/www/monsite.com/public_html
chmod -R 755 /var/www
vim /var/www/monsite.com/public_html/index.html
Contenant par exemple le code suivant:
<html> <body> <h1>Bravo !</h1> <p>La mise en place d'un Virtualhost est réussie !</p> </body> </html>
On enregistre !
cp /etc/apache2/sites-available/default /etc/apache2/sites-available/monsite.com
vim /etc/apache2/sites-available/monsite.com
On inscrit ceci :
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName monsite.com ServerAlias www.monsite.com DocumentRoot /var/www/monsite.com/public_html <...>
On peut laisser le reste tel quel.
a2ensite monsite.com
service apache2 reload
Dans le navigateur : http://http://192.168.x.xx/monsite.com
Index of /monsite.com [ICO] Name Last modified Size Description [DIR] Parent Directory - [DIR] public_html/ 19-Sep-2014 16:38 - Apache/2.2.22 (Debian) Server at 192.168.x.xx Port 80
Si on clique sur public_html/
on voit un problème d'encodage :
Bravo ! La mise en place d'un Virtualhost est réussie !
Cela va être vite corrigé !
On va forcer l'encodage au niveau du serveur apache. Il suffit que tous les fichiers utilisent le même encodage utf8.
Elles apparaissent quand on tape la commande :
grep -v "^#" /etc/locale.gen
fr_FR.UTF-8 UTF-8
vim /etc/apache2/conf.d/charset
On dé-commente la ligne #AddDefaultCharset UTF-8
AddDefaultCharset UTF-8
Et on enregistre !
vim /etc/apache2/envvars
Pour dé-commanter la ligne . /etc/default/locale
## Uncomment the following line to use the system default locale instead: . /etc/default/locale
service apache2 reload
Par exemple, avec iceweasel :
Outils → Supprimer l'historique récent
Et quand on recharge la page le problème est réglé :
Bravo ! La mise en place d'un Virtualhost est réussie !
Ce n'est là qu'un minimum et non une sécurisation optimale.
vim /etc/apache2/conf.d/security
Modifier ceci :
La ligne “ServerTokens OS” doit être commenté :#ServerTokens OS
Ajouter :ServerTokens Prod
Dé-commenter :ServerSignature Off
Et commenter :#ServerSignature On
Enfin vérifier queTraceEnable Off
soit dé-commenté
et que#TraceEnable On
soit commenté
service apache2 restart
a2dissite default
a2dissite monsite.com
Pour ce faire, on le désactive d'abord :
a2dissite monsite.com
Et on recharge : service apache2 reload
.
Puis on édite “/etc/apache2/sites-available/monsite.com”.
vim /etc/apache2/sites-available/monsite.com
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName monsite.com ServerAlias www.monsite.com DocumentRoot /var/www/monsite.com <Directory /> Options -FollowSymLinks AllowOverride AuthConfig </Directory> <Directory /var/www/> Options -Indexes Options -FollowSymLinks Options -Includes Options -ExecCGI Options MultiViews AllowOverride None Order deny,allow deny from all allow from 192.168.0.0/24 </Directory>
Options -Indexes
: Pour désactiver l'option permettant le parcours d'un répertoire
Options -FollowSymLinks
: Pour désactiver l'option permettant à apache de suivre des liens symboliques (qui pourraient permettre de quitter /var/www).
Options -Includes
: Pour désactiver l'option permettant à apache de faire des inclusions côté serveur.
Options -ExecCGI
: Pour désactiver l'option permettant à apache l'utilisation de scripts CGI. Désactiver cette option seulement si on n'utilise pas de script CGI2).
On développera son site dans le répertoire de cet utilisateur. Il est plus facile de surveiller un système bien rangé !
adduser --system web --ingroup www-data
passwd web
cd /home/web/
mkdir -p monsite.com/public_html
vim /home/web/monsite.com/public_html/index.html
<html> <body> <h1>Bienvenue sur pegaseous.com</h1> <p>Site en cours de réalisation !</p> </body> </html>
La création d'un mot de passe sécurise un peu l'accès du site qu'on va crée pour le nouvel virtualhost.
Pour ce faire on va créer un compte utilisateur du système Linux et un compte apache avec la commande htpasswd.
Le dossier /etc/local est un bon endroit pour créer les fichiers de mots de passe de ce compte apache.
cd /usr/local/ && ls
bin etc games include lib man sbin share src
Par exemple “passwd”
mkdir -p apache/passwd && cd apache/passwd
La commande htpasswd
va créer un fichier qui contiendra utilisateur apache /mot de passe.
htpasswd -c passwords web
New password: Re-type new password: Adding password for user web
→ -c
pour la première fois qu'on crée un mot de passe. Si on l'utilisait une deuxième fois pour le même fichier “passwords”, pour un deuxième utilisateur, on écrasera le contenu du fichier, et on perdrait le mot de passe du premier utilisateur. Donc pour un éventuel deuxième utilisateur “toto”: htpasswd passwords toto
.
→ le mot de passe est chiffré.
Par exemple du nom de “groups” :
vim groups
goupe1 web toto
Pour restreindre l'accès à “monsite.com”, il faut modifier d'abord le virtualhost “/etc/apache2/sites-available/default”
Cela est nécessaire pour restreindre l'accès du site qui est développé dans le répertoire de l'utilisateur /home/web/monsite.com qu'on a créé.
a2dissite default
vim /etc/apache2/sites-available/default
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www <Directory /> Options FollowSymLinks AllowOverride AuthConfig </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride AuthConfig Order allow,deny allow from all AuthType Basic AuthName "Ma zone est restreinte !" AuthBasicProvider file AuthUserFile /usr/local/apache/passwd/passwords AuthGroupFile /usr/local/apache/passwd/groups Require valid-user </Directory>
AllowOverride AuthConfig
à la place de AllowOverride none
.
Pour autoriser l'accès à tous les utilisateurs qui ont un mot de passe apache :
→ Require valid-user
On aurrait pu mettre :
→ Require user web
→ Require group groupe1
On remarque que l'option Options -FollowSymLinks
: qui évite de suivre les liens symbolique depuis la racine /var/www
vim /etc/apache2/sites-available/monsite.com
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName monsite.com ServerAlias www.monsite.com DocumentRoot /var/www/monsite.com <Directory /> Options -FollowSymLinks AllowOverride AuthConfig </Directory> <Directory /var/www/> Options -Indexes Options -FollowSymLinks Options -Includes Options -ExecCGI Options MultiViews AllowOverride None Order deny,allow deny from all allow from 192.168.0.0/24 </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
cd /var/www/
rm -r monsite.com
ln -s /home/web/monsite.com/ /var/www/monsite.com
On attribue les fichiers de /var/www au groupe www-data et non à l'utilisateur root.
chown -R root:www-data /var/www/*
On utilise les droits suivants :
cd /var/
Pour le répertoire /var/www , il faut donc :
drwxr-xr-x 2 root root 4096 sept. 22 11:47 www
chmod 755 www
Pour /var/www/index.html, il faut donc :
-rw-r—– 1 root www-data 142 3 déc. 17:03 index.html
chmod 640 /var/www/index.html
Pour /home/web/monsite.com, il faut donc :
drwxr-xr-x 3 root www-data 4096 sept. 22 11:44 monsite.com
:
chmod 755 /home/web/monsite.com/
Pour /home/web/monsite.com/public_html, il faut donc :\\drwxr-xr-x 2 root www-data 4096 sept. 22 11:44 public_html
:
chmod 755 /home/web/monsite.com/public_html/
Pour /home/web/monsite.com/public_html/inde, il faut donc :
-rw-r—– 1 root www-data 111 sept. 22 11:44 index.html
chown root:www-data /home/web/monsite.com/public_html/index.html\ && chmod 640 /home/web/monsite.com/public_html/index.html
Pour le lien symbolique /var/www/monsite.com : on ne peut modifier ces droits mais ce n'est pas grave. Ce qui compte c'est le fichier vers lequel pointe un lien symbolique.
a2ensite monsite.com
service apache2 reload
http://ip-serveur/monsite.com/
Le login du compte apache (nom de l'utilisateur du système Linux) est demandé ainsi que son mot de passe.
Ce paquet casse le MPM worker3) et engendre l'installation du MPM prefork4).
apt-get install libapache2-mod-php5
Une fois l'installation effectuée on peut vérifier que php5 est apparu dans /etc/apache2/mod-available.
ls -l /etc/apache2/mods-available/php5*
-rw-r--r-- 1 root root 898 août 21 10:49 /etc/apache2/mods-available/php5.conf -rw-r--r-- 1 root root 59 août 21 10:49 /etc/apache2/mods-available/php5.load
Dans /etc/apache2/mod-enabled, ce sont des liens symboliques qui activent ce module:
ls -l /etc/apache2/mods-enabled/php5*
lrwxrwxrwx 1 root root 27 sept. 20 11:40 /etc/apache2/mods-enabled/php5.conf -> ../mods-available/php5.conf lrwxrwxrwx 1 root root 27 sept. 20 11:40 /etc/apache2/mods-enabled/php5.load -> ../mods-available/php5.load
→ Puisque les liens sont là, le module est activé.
a2enmod
: (apache2 enable module) : active un module apache2a2dismod
: (apache2 disable module) : désactive un module apache2
Si on active ou désactive un module ne pas oublier après l'opération de réactiver apache : service apache2 restart
mv /var/www/index.html /var/www/index.php
vim /var/www/index.php
<html> <body> <h1>It works!</h1> <p>This is the default web page for this server.</p> <?php echo "La date du jour est " . date("d/m/Y") . "!\n"; ?> </body> </html>
service apache2 restart
It works! This is the default web page for this server. La date du jour est 20/09/2014!
Puisque tout fonctionne, pour utiliser php dans les autres sites, il n'y a qu'à modifier le nom de leur page d'index.html en index.php et entrer du code php bien sûr.
mv /home/web/monsite.com/public_html/index.html /home/web/monsite.com/public_html/index.php
vim /home/web/monsite.com/public_html/index.php
<html> <body> <h1>Bienvenue sur monsite.com</h1> <p>Site en cours de réalisation !</p> <?php echo "La date du jour est " . date("d/m/Y") . "!\n"; ?> </body> </html>
service apache2 reload
http://ip-du-serveur/monsite.com
et cliquer sur public_html/
:
Bienvenue sur monsite.com Site en cours de réalisation ! La date du jour est 20/09/2014!
Tous les outils sont en place pour apprendre les langages html et php !