mercredi 21 décembre 2011

Installer un serveur web complet

Exercice 1

1) Installez les paquets apache2, php5, mysql-server, php5-mysql, phpmyadmin et vsftpd

Exercice 2

Créez l'utilisateur test1 et configurez Apache2 afin de rediriger l'url http://IP_DE_VOTRE_SERVEUR/~test1/ vers le dossier /home/test1/public_html/ de votre serveur.

Exercice 3

Configurez VSFTPD afin que l'utilisateur userftp1 associé au mot de passe d6rb puisse envoyer des fichiers dans le dossier /home/test1/public_html (et uniquement dans ce dossier).

Exercice 4
En utilisant votre registrar, redirigez votre nom de domaine (test1.com par exemple) vers le dossier /home/test1/public_html/, puis redirigez un sous domaine (admin.test1.com par exemple) vers le dossier /home/test1/public_html/sd_admin/.




Exercice 1


Installez les paquets apache2, php5, mysql-server, php5-mysql, phpmyadmin et vsftpd.

Correction de l'exercice 1


Installation d'Apache 2

Il nous faut installer un serveur HTTP qui va s'occuper d'afficher nos différentes pages. Pour cela, je vous propose d'installer l'un des serveurs les plus utilisés et les plus connus : Apache. Nous installerons ici sa version 2.

# apt-get install apache2

Pour vérifier que l'installation s'est bien effectuée, entrez l'adresse suivante dans votre navigateur http://IP_DE_VOTRE_SERVEUR/

Vous devriez obtenir le résultat suivant :


Installation de PHP 5

Actuellement, notre serveur peut nous afficher des pages statiques au format HTML. La plupart des sites que vous voudrez installer disposeront d'une partie dynamique. C'est pourquoi nous poursuivons par l'installation de PHP 5 sur le serveur.

# apt-get install php5



Installation de la base de données MySQL


PHP est très très souvent couplé à un système de base de données : Mysql. Nous installons ici Mysql-server version 5. Vous verrez ci-après que nous allons également installer PHPMyAdmin. Il s'agit d'un script PHP qui permet de gérer ses bases de données Mysql de facon très simple.

# apt-get install mysql-server


L'installation de MySQL nous demande de définir le mot passe de root (le superutilisateur).


Une fois l'installation terminé, nous pouvons tester si MySQL fonctionne en exécutant la commande suivant

mysql -p

puis indiquez le mot de passe que vous avez défini. 

Une fois connecté au serveur MySQL, vous pouvez vous déconnecter en exécutant la commande :

# Exit


Installation de la base de données MySQL

apt-get install php5-mysql

Installation de PHPMyAdmin

apt-get install phpmyadmin


L'installation nous demandera de choisir le serveur web à reconfigurer automatiquement, cochez la case apache2 (en utilisant la barre d'espace) puis validez.

Demandez à ce que l'installateur configure la base de données de phpmyadmin avec dbconfig-common.


Indiquez votre mot de passe pour le compte administrateur


On vérifie que l'installation s'est correctement déroulée : http://IP_DE_VOTRE_SERVEUR/phpmyadmin/


Le formulaire de connexion devrait s'afficher.

Installation du FTP (VSFTPD)

Avoir un site disponible sur le net, c'est bien. Pouvoir y mettre des fichiers, c'est mieux ;). Et c'est le but de VSFTPD qui est un serveur FTP très sécurisé.

# apt-get install vsftpd




Exercice 2


Créez l'utilisateur test1 et configurez Apache2 afin de rediriger l'url http://IP_DE_VOTRE_SERVEUR/~test1/ vers le dossier /home/test1/public_html/ de votre serveur.

Correction de l'exercice 2


Introduction

Pour commencer, il faut installer un serveur web au sens premier. C'est lui qui va nous permettre d'interpréter nos pages HTML, PHP, etc. Apache 2 est le serveur http le plus utilisé sur les serveurs. Il dispose d'un bon niveau de sécurité et de beaucoup de documentations disponibles sur le net.

D'autre part, il permet de gérer des sites virtuels. Et c'est de cette manière que nous allons le configurer. En effet, le but étant de disposer de plusieurs sites sur notre serveur, il nous faut pouvoir les contacter directement avec une URL propre. Notre serveur ne dispose évidemment pas d'une adresse IP pour chaque site installé. Ce serait beaucoup trop complexe du point de vue physique à mettre en place. Et surtout, avec le système d'IPV4 utilisé actuellement, c'est impensable. Pour la petite histoire, le système IPV4 utilise 4 nombres de 0 à 255 sous la forme xxx.xxx.xxx.xxx. Cette série de nombres représente de manière unique chaque ordinateur connecté physiquement à Internet.

Certaines plages IP sont réservées pour des réseaux locaux (192.168.x.x ou 10.x.x.x par exemple). Mais ce souci va être prochainement résolu avec l'utilisation de l'IPV6 qui est en train de s'implémenter. Cette nouvelle notation permet de passer de 232 à 2128 IP différentes. Ce qui permettra d'en attribuer plusieurs à un même serveur, dans le futur.

Comme actuellement, c'est le protocole IPV4 qui est le plus utilisé, nous ne disposons en conséquence qu'une seule adresse IP pour 10 ou 100 sites à héberger sur notre serveur. Lorsqu'une requête HTTP est envoyée à notre serveur, le nom de domaine est transformé en adresse IP. La seule façon de différencier une demande venant de site1-cpnv.com ou de site2-cpnv.com, qui renvoient la même IP, passe par l'en-tête http, qui elle contiendra toujours le nom de domaine initialement demandé.

Pré-requis

Une fois que le serveur est installé de base, nous allons créer et configurer nos espaces d'hébergements. Tout d'abord, ce tutorial part des principes suivants :
  • Vous désirez pouvoir accéder à vos sites par ip_du_server/~nom_user
  • Vous n'avez qu'une seule IP pour tous vos sites

Dans cette première partie, nous allons modifier un fichier: /etc/apache2/apache2.conf, et créer des fichiers dans les répertoires /etc/apache2/sites-available et /etc/apache2/sites-enabled.

Activer le module userdir

a2enmod userdir

puis on redémarre apache :

/etc/init.d/apache2 restart



On vérifie les utilisateurs et groupes d'apache :

nano /etc/apache2/envvars

Puis on vérifie la présence des lignes :

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data


On choisi les fichiers qui seront interprétés comme index des dossiers :

nano /etc/apache2/mods-enabled/dir.conf


On vérifie que les utilisateurs sont autorisés à se connecter :

nano /etc/apache2/mods-available/userdir.conf

Puis on vérifie la présence de la ligne :

UserDir public_html


Activer PHP pour userdir

L'exécution en php est désactivée par défaut avec ce module. Pour changer ça et éviter que le navigateur télécharge le code php directement, éditer le fichier /etc/apache2/mods-enabled/php5.conf et commentez les lignes comme ci dessous :

nano /etc/apache2/mods-enabled/php5.conf

Ajouter des # au début de chaque ligne pour les commenter :

#    <IfModule mod_userdir.c>
#        <Directory /home/*/public_html>
#            php_admin_value engine Off
#        </Directory>
#    </IfModule>


Redémarrez Apache pour prendre en compte les modifications avec :

/etc/init.d/apache2 restart

Installation des virtualhosts

On va maintenant créer nos hôtes virtuels. Par défaut, nous l'appelerons test1.com. A vous de mettre les noms que vous désirez. Mais avant de s'attaquer aux utilisateurs, on commence par modifier le squelette de la création des nouveaux users. L'avantage ? Ne pas avoir besoin à chaque fois de devoir créer le répertoire public_html et logs quand on crée un nouvel utilisateur, mais aussi d'avoir directement une page d'accueil.

# mkdir /etc/skel/public_html

# mkdir /etc/skel/logs

# echo " <h1>Nouvel espace web cree</h1> " > /etc/skel/public_html/index.html

Une fois le squelette créé, on peut créer un nouvel utilisateur :

# useradd -g www-data -m test1


On crée un nouveau fichier /etc/apache2/sites-available/test1.com

# nano /etc/apache2/sites-available/test1.com

Et on y enregistre :

<VirtualHost *:80>
        ServerAdmin postmaster@test1.com
        ServerName www.test1.com
        ServerAlias test1.com
        DocumentRoot /home/test1/public_html/
        <Directory /home/test1/public_html/>
                Options -Indexes FollowSymLinks MultiViews
                AllowOverride All
        </Directory>
        ErrorLog /home/test1/logs/error.log
        LogLevel warn
        CustomLog /home/test1/logs/access.log combined
        ServerSignature Off
</VirtualHost>


On valide et on ferme le fichier. On rend le domaine créé disponible.

# ln -s /etc/apache2/sites-available/test1.com /etc/apache2/sites-enabled/test1.com

On vérifie que la syntax est bonne :

# apache2ctl -t

Si en retour on obtient un « Syntax OK », on redémare apache2 :

# /etc/init.d/apache2 restart


Normalement vous devriez pouvoir acceder à http://IP_DE_VOTRE_SERVEUR/~test1/ et y voir "Nouvel espace web cree"





Exercice 3


Configurez VSFTPD afin que l'utilisateur userftp1 associé au mot de passe d6rb puisse envoyer des fichiers dans le dossier /home/test1/public_html (et uniquement dans ce dossier).

Correction de l'exercice 3


Configuration de VSFTPD en mode "utilisateur virtuel"

Introduction

Maintenant que nous avons un site serveur web opérationnel, et la possibilité de créer nos bases de données, il devient nécessaire de mettre nos fichiers sur le serveur. Pour cela, nous installons VSFTPD. C'est un serveur FTP très sécurisé (Very Secure File Transfert Protocol Daemon).

VSFTPD dispose de plusieurs styles de paramétrage de base. Là encore, étant donné que nous souhaitons pouvoir disposer de plusieurs comptes FTP par domaine, et notamment d'avoir des comptes FTP qui pointent sur des sous-domaines, nous utiliserons le paramétrage par utilisateur virtuel.

Pour ce faire, nous allons utiliser une base de données de type Berkeley. Il s'agit d'une base de type non-SQL. Elle n'est pas prévue pour être interrogée comme Mysql ou SQL server. En fait, il s'agit d'une table de hachage. Chaque enregistrement ne sera constitué que d'un login et d'un mot de passe. Ce type de base de données est indexé, extrêmement rapide et simple à mettre en œuvre. L'utilisation de ce type de base de données est obligatoire pour l'utilisation d'une identification de type PAM.

Pour le principe, nous ne définissons qu'un seul utilisateur UNIX à notre serveur FTP. Lorsque l'on se connecte avec un utilisateur, le programme vérifie dans notre base de données si celui-ci existe, et si le mot de passe correspond. A partir de là, il va chercher les paramètres concernés (chroot, droits spécifiques) et renvoit le répertoire concerné.

Grâce au chroot, il n'y a aucun souci de sécurité, car le répertoire est considéré comme étant un répertoire racine, il n'est donc pas possible de remonter la hiérarchie. Ce point est important du point de vue sécuritaire, car chaque connexion FTP utilise exactement le même utilisateur Unix : www-data.

Pour créer un nouvel utilisateur, il suffit de lui créer une entrée dans la base Berkeley, et un fichier de configuration personnel.

Préparation

On commence par préparer la configuration en créant le répertoire qui contiendra tous nos fichiers :

# mkdir /etc/vsftpd

On va devoir modifier la configuration de VSFTPD. Pour cela, on effectue une sauvegarde. Cela permettra de revenir en arrière en cas de souci :

# cp /etc/vsftpd.conf /etc/vsftpd.conf.bak

# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak

La base de données

Il nous faut maintenant installer la base de données. On utilise pour cela la commande :

# apt-get install db4.6-util


Ce type de base de données est extrêmement simple, c'est pourquoi nous l'utilisons. Il se base sur un fichier de type texte contenant nos différentes informations, entrées une à une. En fait, il n'y a pas de tables, ni de champs à configurer ! On va juste convertir un fichier contenant nos données sous cette forme :

# nano /etc/vsftpd/login.txt

login 1
password 1
login 2
password 2
...
login n
password n

On va créer le nom d'utilisateur userftp1 avec le mot de passe d6rb :

userftp1
d6rb


On crée donc un fichier login.txt (le .txt n'est là que pour indiquer que ce sera nos données brutes ! Vous pouvez le nommer comme bon vous semble !). Puis on va le convertir en base de données.

# db4.6_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db

# chmod 600 /etc/vsftpd/login.db

# chmod 600 /etc/vsftpd/login.txt


On va maintenant informer le module PAM d'utiliser notre base de données nouvellement créée. Pour cela on créé le fichier vsftp.pam dans le dossier /etc/vsftpd/ :

nano /etc/vsftpd/vsftpd.pam

et on y ajoute :

auth required /lib/security/pam_userdb.so db=/etc/vsftpd/login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/login


et on le copie :

# cp /etc/vsftpd/vsftpd.pam /etc/pam.d/vsftpd

Si le système nous informe que le fichier existe déjà, on l'écrase.

Modification de vsftpd.conf

Pour pouvoir utiliser nos utilisateurs virtuels, nous devons reconfigurer le fichier "vsftpd.conf"

Supprimons le fichier "/etc/vsftpd.conf" :

# rm /etc/vsftpd.conf

Pour ensuite le créer à nouveau :

nano /etc/vsftpd.conf

Copier le fichier de configuration suivant :

# Ceci configure VSFTPd en mode "standalone"
listen=YES

# On désactive les connexions anonymes
# et on active les non-anonymes (c'est le cas des utilisateurs virtuels) :
anonymous_enable=NO
local_enable=YES

# Pour des raisons de sécurité on interdit toute action d'écriture :
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO

# 'guest_enable' est très important: cela active les utilisateurs virtuels !
# 'guest_username' fait correspondre tous les utilisateurs virtuels à
# l'utilisateur 'virtual' que nous avons défini plus haut, et au home
# correspondant : '~virtual/'.
guest_enable=YES
guest_username=www-data

# On définit les droits par défaut des fichiers uploadés
anon_umask=022

# On veut que les utilisateurs virtuels restent chez eux : '~virtual/'
# (attends, on leur a fait un toit, c'est pas pour rien !)
chroot_local_user=YES

# On définit le nombre maximum de sessions à 200 (les nouveaux clients recevront
# un message du genre: "erreur : serveur occupé").
# On définit le nombre maximum de sessions par IP à 4
max_clients=200
max_per_ip=4

####################################
# Debian customization             #
# (ou adoptons la Debian attitude) #
####################################
# Some of vsftpd's settings don't fit the Debian filesystem layout by
# default.  These settings are more Debian-friendly.
#
# This option should be the name of a directory which is empty.  Also, the
# directory should not be writable by the ftp user. This directory is used
# as a secure chroot() jail at times vsftpd does not require filesystem
# access.
secure_chroot_dir=/var/run/vsftpd
#
# This string is the name of the PAM service vsftpd will use.
pam_service_name=vsftpd
#
# This option specifies the location of the RSA certificate to use for SSL
# encrypted connections.
rsa_cert_file=/etc/ssl/certs/vsftpd.pem

# Permet d'utiliser les configurations individuelles pour chaque utilisateur
user_config_dir=/etc/vsftpd/vsftpd_user_conf


Sauvegardez puis quittez.

Paramétrer les utilisateurs

On va maintenant chrooter nos utilisateurs dans leur répertoire respectif. Pour cela, on crée le répertoire qui sera utilisé pour contenir nos différents fichiers par utilisateur. Et on crée le fichier pour chaque utilisateur dans notre base de données.

On créé le dossier /vsftpd_user_conf

# mkdir /etc/vsftpd/vsftpd_user_conf/

Puis on créé le fichier "/etc/vsftpd/vsftpd_user_conf/userftp1" :

nano /etc/vsftpd/vsftpd_user_conf/userftp1

Et on y ajoute :

anon_world_readable_only=NO
local_root=/home/test1/public_html
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

Notez la variable local_root qui permet de définir le dossier accessible via ce compte. 


On enregistre et on ferme.

Redémarrage et test

On redémarre notre service FTP :

# /etc/init.d/vsftpd restart


Et il ne nous reste plus qu'à nous connecter à notre compte FTP en utilisant :

IP: ip du serveur
login: userftp1
password: d6rb

normalement vous devriez pouvoir vous connecter au serveur via FTP.


Dans le cas où vous ne pouvez pas uploader de fichiers, c'est que les droits ne sont pas bons. Vérifiez bien que le répertoire  /home/test1/public_html ait les droits www-data:www-data pour propriétaire et groupe :


# chown www-data:www-data /home/test1/public_html

Les transferts devraient être opérationnels

Ajouter un utilisateur FTP

Pour ajouter un utilisateur, ajoutez le login et son mot de passe dans login.txt (/etc/vsftpd/login.txt) 


puis exécuter :

# db4.6_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db

Ajoutez les informations de l'utilisateur dans /etc/vsftpd/vsftpd_user_conf/[NOM_DE_L_UTILISATEUR]


Puis on redémarre VSFTP

# /etc/init.d/vsftpd restart




Exercice 4


En utilisant votre registrar, redirigez votre nom de domaine (test1.com par exemple) vers le dossier /home/test1/public_html/, puis redirigez un sous domaine (admin.test1.com par exemple) vers le dossier /home/test1/public_html/sd_admin/.

Correction de l'exercice 4


Configuration des noms de domaines

Maintenant que nous avons notre serveur web installé, il faut que nos visiteurs puissent nous trouver. Et il n'est guère facile de leur faire retenir une adresse du style : 213.251.175.34/~nom_de_mon_site. Si vous y arrivez, vous êtes un champion ;). Nous allons utiliser des noms de domaine pour avoir une adresse du type www.test1.com.

Méthode 1 : Utilisez votre registrar

Introduction

Le serveur DNS permet de faire le lien entre le nom de domaine et l'adresse IP de votre serveur. Votre registrar (OVH par exemple) vous permet de faire ce lien. Lorsque l'utilisateur entrera l'adresse www.test1.com, le serveur DNS redirigera vers l'adresse IP de notre serveur. Le serveur regardera ensuite le nom de domaine qui l'a mené jusqu'à lui (www.test1.com dans notre cas), en connaissant cette information, les VirtualHost d'apache redirigeront vers le dossier correspondant à ce nom de domaine (/home/test1/public_html/).

Indiquez les serveurs DNS à utiliser (OVH)

Normalement, lorsque vous venez d'acheter votre nom de domaine, cette information est déjà pré-remplie.


Indiquez l'adresse IP de votre serveur

Cette information doit être rempli dans le champ A :


Créer un sous domaine

Savoir créer un sous domaine est aujourd'hui quasi indispensable pour quinconce souhaite administrer son propre serveur.

Renseigner apache

Nous avons vu précédemment comment rediriger un nom de domaine vers un dossier, maintenant nous souhaitons rediriger un sous-domaine vers un dossier :

Modifions le virtualhost correspondant :

# nano /etc/apache2/sites-available/test1.com

et ajoutons les renseignements de notre sous-domaine à la suite.

Notre fichier devrait ressembler à :


<VirtualHost *:80>
        ServerAdmin postmaster@test1.com
        ServerName www.test1.com
        ServerAlias test1.com
        DocumentRoot /home/test1/public_html/
        <Directory /home/test1/public_html/>
                Options -Indexes FollowSymLinks MultiViews
                AllowOverride All
        </Directory>
        ErrorLog /home/test1/logs/error.log
        LogLevel warn
        CustomLog /home/test1/logs/access.log combined
        ServerSignature Off
</VirtualHost>

<VirtualHost *:80>
        ServerName admin.test1.com
        DocumentRoot /home/test1/public_html/sd_admin/
</VirtualHost>


Vous pouvez créer le dossier /sd_admin en utilisant FTP ou en passant par une commande (vous devriez savoir laquelle maintenant).

On valide et on ferme le fichier. On rend le domaine créé disponible.

# ln -s /etc/apache2/sites-available/test1.com /etc/apache2/sites-enabled/test1.com

On vérifie que la syntax est bonne :

# apache2ctl -t

Si en retour on obtient un « Syntax OK », on redémare apache2 :

# /etc/init.d/apache2 restart

Renseigner le serveur DNS

Retournons chez notre registrar (OVH par exemple), pour lui indiquer que nous souhaitons utiliser un sous-domaine :

Ajoutez un nouveau champ CNAME qui pointe vers le domaine principal, apache se chargera du reste :


Méthode 2 : Utilisez votre serveur comme serveur DNS avec Bind9

En cours de rédaction













Aucun commentaire:

Enregistrer un commentaire