Installation d'un Serveur Internet.
Réponse AJAX

TP obsolète, consulter plutôt la nouvelle version qui est plus simple et mieux guidée.

Objectif.

L'objectif de ce cours/TP est :

Installation de WAMP Server

On pourrait trouver des avantages à installer séparément Apache puis son module PHP, MySQL puis phpMyAdmin. Toutefois, la suite logicielle WAMP Server 2 nous permet de gagner un temps considérable, et nous laisse toute la souplesse nécessaire pour configurer chaque logiciel à notre guise.

Par principe, nous installerons ce serveur Internet dans un système d'exploitation serveur, comme Windows Server 2008, Windows Server 2012 ou une distribution de Linux. Toutefois, tout ce qui est dit ici s'appliquera également si vous l'installez sous Windows XP ou Seven, à condition que le système de fichiers soit NTFS et pas FAT32. Pour Windows 8, cela reste à tester.

L'installation de WAMP ne pose aucune difficulté. Pendant l'installation, vous devrez saisir :
- le serveur SMTP utilisable au lycée : smtp.numericable.fr (avant 2013 : smtp.vce.rrthd-paca.net),
- l'adresse électronique de l'administrateur du serveur : mettez votre adresse.

Téléchargez et Installez WAMP Server 2 dans votre Windows Server Virtuel.

Sécurisation des services

Par défaut, Apache et MySQL tournent avec des droits administrateurs. C'est inacceptable, d'autant que le but est d'autoriser les internautes à déposer des fichiers PHP sur notre serveur, et à les exécuter. En l'état actuel, les internautes ont un contrôle total sur notre serveur.

Dans le répertoire système (C:\Windows), créez un fichier test.txt.

A la racine Internet de Apache (C:\wamp\www), créez le fichier test.php suivant :

<?php unlink("c:/windows/test.txt"); ?>

Exécutez ce fichier PHP en appelant, dans le navigateur, l'URL : http://127.0.0.1/test.php

Est-ce que le fichier test.txt, présent dans le répertoire système, a été détruit ?

Votre réponse n°1

La sécurisation d'un serveur Internet se fait en plusieurs étapes. La première est de faire en sorte que Apache et MySQL tournent avec des droits spécifiques, plus limités. On va créer des utilisateurs dédiés. Les services Apache et MySQL vont tourner dans ces comptes d'utilisateurs, avec les droits de ses utilisateurs.

Sécurisation du service Apache (wampapache)

Créez un compte d'utilisateur nommé apache (avec le mot de passe apache), (grâce à la commande MS-DOS NET USER, ou dans l'interface graphique de gestion des utilisateurs).

Décocher la case "l'utilisateur doit changer de mot de passe à la prochaine ouverture de session", sinon cet utilisateur n'arrivera pas à lancer un service.

Retirez-le du groupe Utilisateurs (sinon, l'utilisateur Apache hérite de tous les droits de ce groupe : droit de lire tous les fichiers du disque, droit d'ouvrir une session locale, etc.).

Donnez-lui les droits suivants :

Lancez la gestion des services grâce à Démarrer -> exécuter -> services.msc, trouvez le service wampapache, accédez à ses propriétés.

Dans l'onglet Connexion, choisissez : Ouvrir une session en tant que : Ce compte : Apache, (n'oubliez pas de mettre le mot de passe de l'utilisateur apache).

Redémarrez le service wampapache. S'il ne démarre pas, c'est que :
- les droits accordés à l'utilisateur apache sont insuffisants. Regardez le chapitre suivant sur l'audit des accès aux objets,
- l'utilisateur apache n'a pas de mot de passe, où vous l'avez mal saisi dans les propriétés du service,
- vous laissé coché la case "l'utilisateur doit changer de mot de passe à la prochaine ouverture de session".

A faire... si Apache ne démarre plus

Si Apache ne démarre plus, il est souvent utilise d'aller voir le journal Windows des applications (dans l'observateur d'événements). C'est ici, par exemple, que sont marquées les erreurs de syntaxe dans les fichiers .conf

Sécurisation du service MySQL (wampmysqld)

Créez un compte d'utilisateur nommé mysql (avec le mot de passe mysql).

Décocher la case "l'utilisateur doit changer de mot de passe à la prochaine ouverture de session", sinon cet utilisateur n'arrivera pas à lancer un service.

Retirez-le du groupe Utilisateurs.

Donnez-lui les droits suivants :

Lancez la gestion des services grâce à Démarrer -> exécuter -> services.msc, trouvez le service wampmysqld, accédez à ses propriétés.

Dans l'onglet Connexion, choisissez : Ouvrir une session en tant que : Ce compte : mysql, (n'oubliez pas de mettre le mot de passe de l'utilisateur mysql).

Redémarrez le service wampmysqld. S'il ne démarre pas, c'est que les droits accordés à l'utilisateur mysql sont insuffisants. Regardez le chapitre suivant sur l'audit des accès aux objets.

Audit de l'accès aux objets

Si les services ne redémarrent pas après ces manips, c'est qu'on a probablement donné des droits insuffisants sur les dossiers. On peut détecter facilement les droits manquants en activant l'audit de l'accès aux objets. Par objets, on entend ici les dossiers et les fichiers.

Activer l'audit grâce à : Outils d'administration -> stratégie de sécurité locale -> Auditer l'accès aux objets -> Echecs.

A la racine C:\ et ses sous-répertoires, activer l'audit des échecs pour les utilisateurs apache et mysql (propriétés du dossier -> sécurité -> paramètres avancés -> onglet audit -> ajouter chaque utilisateur -> sélectionner tous les échecs).

Lorsque vous essayez de démarrer les services, allez vérifier les échecs grâce à Outils d'administration -> Observateur d'événements -> Sécurité.

Création manuelle d'un compte Web sous Apache

Paramétrer le serveur DNS

On va activer le serveur DNS. Le but est qu'on différencie les racine Web de chaque utilisateur grâce à son URL, du type : http://login.domaine-v_anonyme.local.

Normalement, le service DNS est déjà installé sur votre serveur. Si ce n'est pas le cas, installez-le.

Repérez l'adresse IP de votre Windows Serveur et notez-la ici :

Votre réponse n°2

Rajoutez une entrée DNS de type A (ou AAAA si vous êtes en IPv6) : www.domaine-v_anonyme.local va pointer vers l'adresse IP de votre serveur.

Dans votre navigateur, modifiez les paramètres de proxy de façon à ce que le proxy ne soit pas utilisé pour domaine-v_anonyme.local.

A faire une fois pour toute

On va modifier la configuration de Apache pour qu'il utilise les VirtualHost : un serveur Virtuel pour chaque internaute, avec sa propre racine Web, ses propres paramétrages Apache et PHP.

Sous C:\wamp, trouvez le fichier de configuration de Apache : httpd.conf. Notez ici son emplacement :

Votre réponse n°3

Dans ce fichier, remplacez la ligne : ServerName *:80 par NameVirtualHost *:80.

Ajoutez un premier VirtualHost, qui va faire pointer www.domaine-v_anonyme.local vers la racine par défaut de Apache (c:\wamp\www). Pour ça, rajoutez dans le fichier httpd.conf :

<virtualhost *:80>
	servername www.domaine-v_anonyme.local
	documentroot c:\wamp\www
</virtualhost>

Comme à chaque fois que vous modifier le fichier de configuration httpd.conf, vous devez redémarrer Apache (cela permet à Apache de prendre en compte cette nouvelle configuration. Cela permet également de vérifier qu'il n'y a pas d'erreur dans la configuration (en cas d'erreur de syntaxe ou autre, Apache ne démarrera pas, vous pourrez alors vérifier l'erreur dans un des fichiers logs de Apache : c:\wamp\logs\apache_error.txt).

Créez un répertoire C:\utilisateurs, qui contiendra les dossiers des internautes (racine Web, bases de données MySQL, etc.).

Faites un VirtualHost pour phpMyAdmin. La racine Web de phpMyAdmin sera : c:\wamp\apps\phpmyadmin3.x.x. Notez ici la configuration que vous avez du rajouter dans Apache, et notez les éventuelles difficultés recontrées.

Validation : vérifier que l'URL http://phpmyadmin.domaine-v_anonyme.local ouvre bien le site phpMyAdmin.

Votre réponse n°4

On va apporter de nombreuses modifications à la configuration de Apache (plusieurs lignes pour chaque nouvel utilisateur). Pour éviter de surcharger ce fichier, on va créer un fichier de configuration par utilisateur, par exemple v_anonyme_db.conf. On va inclure tout ces fichiers à partir du httpd.conf.

Créez le sous-répertoire .../Apache2.x.x/conf/mes_confs

A la fin du fichier conf/httpd.conf, ajoutez la commande include conf/mes_confs/*

Plus loin, c'est dans ce sous-répertoire que nous créerons la configuration personnalisée de chaque utilisateur, et notamment son VirtualHost.

A faire pour chaque compte

Si vous voulez créer un nouvel espace Web pour un nouvel internaute, vous devez créer une entrée DNS, créer le répertoire correspondant à la racine Web, donner les droits à l'utilisateur apache sur cette racine, donner les droits dans httpd.conf sur cette racine. Suivez les étapes suivantes. Par exemple, nous allons créer un espace Web pour l'internaute v_anonyme .

Remarquez que si on ne fait que lui créer un compte Internet (Apache et MySQL), on n'a pas besoin de lui créer un compte Windows. Effectivement, cet utilisateur n'ouvrira jamais de session sur le serveur. Vous pouvez éventuellement, comme c'est le cas sur serveurig, mélanger à la fois le côté compte utilisateur du domaine + compte internet.

Dans le serveur DNS, créez une entrée (de type A ou AAAA) pour v_anonyme.domaine-v_anonyme.local, qui pointe vers l'adresse IP de votre serveur.

Dans c:\utilisateurs, créez un sous-dossier v_anonyme dédié à ce nouvel utilisateur.

Dans c:\utilisateurs\v_anonyme, créez un sous-dossier www, c'est la racine Web du nouvel utilisateur.

Donnez à l'utilisateur apache les droits en lecture/écriture sur cette racine Web.

Créez le fichier .../apache2.x.x/conf/mes_confs/v_anonyme.conf qui contient les lignes suivantes :

<virtualhost *:80>
   servername v_anonyme.domaine-v_anonyme.local
   documentroot c:/utilisateurs/v_anonyme/www
</virtualhost>

<Directory "c:/utilisateurs/v_anonyme/www/">
  Options Indexes FollowSymLinks
  AllowOverride all
  Order Allow,Deny
  Allow from all
</Directory>

Placez dans la racine un fichier index.php qui comporte le texte Bienvenue.

Redémarrez Apache.

Validation : vérifiez que tout fonctionne bien en vous rendant à l'URL : http://v_anonyme.domaine-v_anonyme.local.

En savoir plus sur les VirtualHost (doc officielle Apache).

Une simplification...

La directive Directory de Apache accèpte les wild-cars (caractères génériques), et même les expressions régulières. On peut donc unifier la directive pour tous les utilisateurs ainsi :

<Directory c:/utilisateurs/*/www>
  Options Indexes FollowSymLinks
  AllowOverride all
  Order Allow,Deny
  Allow from all
</Directory>

Création manuelle d'une base de données sous MySQL

Par défaut, une base de données MySQL est stockée dans un dossier portant son nom, dans mysql\data. C'est là que sont créées les bases lorsque vous utilisez l'instruction SQL CREATE DATABASE nom_db.

Toutefois, nous allons apprendre ici à les stocker ailleurs. Le but est de créer les bases de données directement dans le répertoire de travail d'un utilisateur, afin de faciliter les sauvegardes et la gestion des quotas. On peut créer le dossier de base de données où on veut. Il suffira, dans le répertoire mysql/data, de mettre un lien symbolique, c'est à dire un fichier texte qui s'appelle nom-de-la-base.sym et qui contient l'emplacement réel de la base, par exemple c:\utilisateurs\v_anonyme\datadir\v_anonyme_db.

Enfin, nous allons créer un utilisateur dans MySQL, qui aura les droits sur cette base.

Créez le dossier c:\utilisateurs\v_anonyme\datadir\v_anonyme_db (c'est l'emplacement de la base de données sur le disque dur. Ce dossier contiendra un fichier par table. C'est MySQL qui gère tout ça, on ne s'en occupe pas).

Donnez à l'utilisateur mysql les droits de lecture/écriture sur c:\utilisateurs\v_anonyme\datadir et ses sous-dossiers (puisque MySQL va créer des tables, y insérer des données, etc. il doit avoir les droits d'écriture sur le dossier de la base de données).

Créez le fichier c:\wamp\bin\mysql\mysql5.x.x\data\v_anonyme_db.sym (ce fichier contiendra le lien symbolique pour indiquer où se trouve vraiment la base de données sur le disque dur, puisqu'on ne la met pas dans l'emplacement par défaut de MySQL).

Editer ce fichier avec un traitement de texte pour y écrire l'emplacement réel de la base : c:\utilisateurs\v_anonyme\datadir\v_anonyme_db.

Dans MySQL, créez l'utilisateur v_anonyme grâce à la requête SQL : GRANT ALL ON v_anonyme_db.* TO v_anonyme identified by 'v_anonyme' ; (souvenez-vous des cours SQL : cette requête crée l'utilisateur s'il n'existe pas, lui affecte un mot de passe, lui accorde tous les droits sur la base).

Validation

Voici les points à vérifier pour être sûr que tout soit bien installé et bien sécurisé.

Dans le navigateur, l'URL phpmyadmin.domaine-v_anonyme.local nous amène bien à phpmyadmin.

Dans le navigateur, l'URL v_anonyme.domaine-v_anonyme.local nous amène bien à autre chose.

Si je me connecte, dans phpMyAdmin, avec l'utilisateur v_anonyme, j'ai bien accès à sa base de données v_anonyme_db.

Dans phpMyAdmin, la requête SELECT LOAD_FILE("c:\\windows\\win.ini") renvoie un BLOB (Binary Long OBject) de 0 octets, et non pas le contenu de ce fichier système.

Lorsque vous êtes sûr que tout fonctionne, appeler le prof pour vérifier ensemble et valider cette étape avec un simple ok.

Votre réponse n°5

Création automatisée du compte Web

L'objectif est d'automatiser toutes les étapes de la création manuelle d'un compte Web sous Apache. Cela sera automatisé sous forme de fichiers de commandes MS-DOS, comme on l'a vu au premier semestre (cours MS-DOS).

L'idée est de créer un fichier de commandes nommé create_user.bat. Pour créer l'utilisateur v_anonyme2, son espace Web, sa base de données, on tapera la commande suivante :
create_user v_anonyme2
Rappel : dans le fichier de commandes, le premier paramètre (qui a ici pour valeur v_anonyme2), se nomme %1.

Dans create_user.bat, écrivez la commande NET USER qui permet de créer l'utilisateur dont le login est passé en paramètre.

Votre réponse n°6

Ajoutez la commande MKDIR qui permet de créer son répertoire de travail sous c:\utilisateurs.

Votre réponse n°7

Ajoutez la commande iCACLS qui permet, grâce à l'option /grant, d'attribuer les droits de lecture/écriture à l'utilisateur sur son répertoire de travail (une bonne aide sur iCACLS ici).

Votre réponse n°8

Ajoutez la commande MKDIR qui permet de créer sa racine Web www sous son répertoire de travail.

Votre réponse n°9

Ajoutez la commande iCACLS qui permet, grâce à l'option /grant, d'attribuer les droits de lecture/écriture à l'utilisateur apache sur cette racine Web.

Votre réponse n°10

Pourquoi est-il inutile d'affecter les droits de lecture/écriture à l'utilisateur sur sa racine Web ?

Votre réponse n°11

Grâce à la commande ECHO, à la redirection du résultat (> pour éventuellement recréer le fichier, >> pour ajouter du contenu), et à l'échappement des caractères spéciaux (par exemple vous écrirez : ^, remarquez que les chevrons sont échappés), ajoutez les commandes qui créent le fichier .../apache2.x.x/conf/mes_confs/v_anonyme2.conf (où v_anonyme2 est le login passé en paramètre) . Une explication sur la redirection.

Votre réponse n°12

Ajoutez les commandes NET STOP et NET START qui vont redémarrer le service wampapache.

Votre réponse n°13

Testez en tapant (à partir du bon répertoire) la commande MS-DOS :
create_user v_anonyme2

Validation : vérifiez que vous arrivez à accéder, dans le navigateur, à l'URL http://v_anonyme2.domaine-v_anonyme.local.

Création automatisée de la base de données

Remarque : en 2011-12, on n'a pas réussi à faire fonctionner les liens symboliques sous Windows Server 2003, alors qu'ils marchent sous XP, Seven et Windows Server 2008. Si vous êtes sous Windows Server 2003, laissez les bases de données dans le répertoire par défaut de mysql (mysql/mysql5.x.x/data).

Toutes les étapes suivantes seront rajoutées à la suite du fichier de commandes create_user.bat.

Ajoutez la commande MKDIR qui permet de créer le répertoire de la base de données datadir/v_anonyme2_db (où v_anonyme2 est le login passé en paramètre) sous son répertoire de travail.

Votre réponse n°14

Ajoutez la commande iCACLS qui permet, grâce à l'option /grant, d'attribuer les droits de lecture/écriture à l'utilisateur mysql sur datadir et ses sous-répertoires.

Votre réponse n°15

Grâce à la commande ECHO et à la redirection du résultat, créez le lien symoblique : écrivez :
c:\utilisateur\datadir\v_anonyme2_db (où v_anonyme2 est le login passé en paramètre)
dans le fichier :
.../mysql3.x.x/data/v_anonyme2_db.sym (où v_anonyme2 est le login passé en paramètre)

Votre réponse n°16

Grâce à la commande mysql -e (-e permet d'exécuter une requête SQL), exécutez la requête GRANT qui permet de créer l'utilisateur MySQL. La commande mysql.exe doit être précédée de son répertoire absolu (ou bien son répertoire peut être ajouté dans la variable PATH de MS-DOS. Vérifiez le paramétrage de mysql.exe -e.

Votre réponse n°17

Testez en tapant (à partir du bon répertoire) la commande MS-DOS :
create_user v_anonyme2

Validation : vérifiez que vous arrivez à lancer phpMyAdmin et à vous connecter avec l'utilisateur v_anonyme2, que la base de donnée v_anonyme2_db est présente.

Une fois que le prof a validé toutes les réponses ci-dessus et du paragraphe précédent : fusionnez-les toutes dans cette dernière réponse, pour avoir le fichier de commandes dans son ensemble.

Votre réponse n°18

Amélioration facultative : suppression automatique des utilisateurs

Ecrivez le fichier de commande delete_user.bat qui reçoit en paramètre un login et supprime l'utilisateur windows, supprime l'utilisateur dans MySQL, supprime le répertoire de travail de l'utilisateur (et donc, par conséquence, sa racine Web et ses bases de données), supprime le lien symbolique vers la base de données, supprime la configuration du VirtualHost.

Votre réponse n°19

Les logiciels qui permettent de faire ça

M'en souviens plus... aidez-moi en les mettant en commentaire.