Plan du site  
pixel
pixel

Articles - Étudiants SUPINFO

Serveur Web sous Debian

Par Alexandre DELVAUX Publié le 24/07/2017 à 11:12:50 Noter cet article:
(0 votes)
Avis favorable du comité de lecture

Introduction

Il vous sera certainement demandé lors de vos travaux en entreprise de créer un serveur web dédié fonctionnant sous Linux. À travers ce tutoriel, nous allons voir les prérequis matériel et l’installation complète d’un tel serveur.

Les avantages d’utiliser linux

Cet article n’a pas pour but de relancer l’éternel débat entre l’utilisation d’un système Linux ou Windows, mais rappelons tout de même quelques points qui peuvent avoir leur importance au moment de votre choix de serveur :

- En premier point il est notable de renseigner le fait que les systèmes linux sont pour la plupart gratuit

- De plus, les distributions Linux sont nombreuses et il est ainsi aisé de choisir celle correspondant à ses besoins. Nous pouvons ainsi distinguer (liste non-exhaustive) :

* Ubuntu, Linux Mint, Fedora, Mandriv, OpenSUSE, plutôt utilisés pour les personnes débutantes,

* Puppy Linux, Xubutu, pour les micro-ordinateurs ou de puissances réduites,

* uLinux pour les systèmes embarqués,

* et enfin, Debian ou autre Red-Hat que nous allons utiliser plus pertinemment dans un cadre professionnel.

- Nous pouvons ajouter que les systèmes Linux sont beaucoup moins sensibles et ciblés que les systèmes Windows en ce qui concerne les virus et autres spywares.

- Bien sûr la plupart des logiciels fonctionnant sous linux sont gratuits et utilisables en toute légalité.

- En dernier point, rappelons la facilité avec laquelle les systèmes d’exploitation et les applications se mettent à jour.

Prérequis matériels

Il est bien sur préférable d’avoir une machine avec une IP fixe sous la main pour installer un serveur web dessus. Un autre avantage d’une distribution Linux et qu’il n’est pas nécessaire d’utiliser un ordinateur extrêmement puissant pour pouvoir l’utiliser comme serveur web. À noter qu’il est possible d’utiliser un ordinateur hébergé chez un prestataire comme OVH ou Dédibox et de l’utiliser comme tel.

Préparation du serveur

Installation de Debian

Pour commencer, télécharger une image ISO sur le site officiel de Debian (http://www.debian.org). Graver ensuite cette iso sur un cd pour booter dessus au démarrage de votre ordinateur ou créer une clé USB bootable.

Choisissez le pays pour avoir le bon fuseau horaire et la disposition du clavier.

Il est ensuite nécessaire de détecter votre carte réseau afin de pouvoir aller plus loin dans notre installation.

Il est possible que le message suivant apparaisse mais ne vous inquiétez pas, les modules pouvant être installés ultérieurement.

Configurons maintenant notre materiel réseau :

Il n’est pas nécessaire de configurer le réseau avec DHCP.

Adresse IP : Votre adresse interne du réseau 192.168.10.10 pour notre cas.

Masque de sous réseau : 255.255.255.0 (ou 255.255.0.0 selon votre configuration)

Passerelle : adresse IP interne du routeur 192.168.10.1

Adresse des serveurs de noms : adresse IP du routeur 192.168.10.1

Il vous est ensuite demandé le nom de la machine : Indiquer le nom de votre choix.

Configurer ensuite le nom de domaine que vous voulez utiliser.

Choisir un miroir de l’archive Debian en y indiquant ftp://ftp.fr.debian.org/

Choisissez ensuite une version stable de Debian lorsque celle-ci vous est présentée.

Nous pouvons ensuite télécharger les composants d’installation qui peuvent nous être utiles pour la suite.

Passons à la détection du matériel de notre ordinateur. Vous pouvez tous laisser par défaut et poursuivre l’installation de ces matériels.

La prochaine étape consiste à partitionner nos disques et représente une étape quelque peu critique quant à la suite de notre projet. Choisissez la modification manuelle de la table de partition

Sélectionnez votre disque :

Validez puis créez une nouvelle partition :

Choisissez MSDOS

Nous allons partitionner notre disque en 4 parties :

- Partie 1 : 40% du disque pour la racine (« / ») en ext3

- Partie 2 : 40% du disque pour une partition de sauvegarde (« /sav ») en ext3

- Partie 3 : Une taille égale au double de la RAM présente sur votre ordinateur (« swap »)

- Partie 4 : Le reste de l’espace pour home (« /home ») en ext3.

Appliquez les changements et le programme d’installation devrait s’occuper de formater votre disque.

Installez ensuite le système de base. Ce processus peut être assez long en fonction de votre connexion à internet et de votre matériel. Il vous est ensuite demandé de choisir votre noyau. Choisissez celui-ci en fonction de votre équipement ou gardez celui proposé par défaut.

Installez ensuite le chargeur de démarrage GRUB sur le premier disque créé, puis terminer l’installation pour rebooter et terminer l’installation complet du système.

Vous arrivez ensuite devat le menu de configuration du système de base Debian.

Définissez à nouveau le fuseau horaire et les paramètres de langue.

Nous pouvons ensuite créer les utilisateurs et les mots de passes (activer les mots de passe « shadow ») :

Configurer le mot de passe ROOT et ajouter obligatoirement un utilisateur lambda.

Définissez ensuite le nom d’hôte du système déjà défini précédemment.

Configurez la gestion de paque en mettant oui partout puis choisissez le miroir entré précédemment.

Choisir et installer les paquets mais ne cochez aucun logiciel

Terminer ensuite l’installation de votre machine Debian.

Démarrez et connectez-vous en root :

Mise à jour du serveur

Mettez à jour vos dépots :

[apt-get update]

Mettez à jour vos paquets :

[apt-get upgrade]

Installation d’Apache 2

[apt-get install apache2]

Installation de PHP5

[apt-get install php5]

Installation de la base de données Mysql

[apt-get install mysql-server]

Définissez le mot de passe ROOT de mysql.

Vérifiez que Mysql fonctionne bien avec la commande suivante :

[mysql -p]

[mot de passe]

[Exit ]

Installation des librairies php5-mysql

[apt-get install php5-mysql]

Installation de PHPMyAdmin

[apt-get install phpmyadmin]

Choisissez « Apache2 » comme serveur web à reconfigurer automatiquement.

Créer un lien vers phpMyAdmin

[ln -s /usr/share/phpmyadmin /var/www/phpmyadmin]

Un formulaire de connexion devrait s’afficher à l’adresse http://IP-SERVEUR/phpmyadmin/

Installation du rôle DNS

Il faut installer bind pour que nos utilisateurs passent par un nom de domaine plutôt que par une adresse ip…

[apt-get install bind9]

Installation du ftp

[apt-get install vsftpd]

installlation du serveur mail

Il faut verifier que l’on possède la derniere version de postfix.

Pour se faire, ajouter à /etc/apt/sources.list :

[deb http://debian.home-dn.net/sarge postfix-vda/]

Puis on recharge les paquets

[apt-get update]

Installation de Postfix

[apt-get install postfix postfix-mysql]

[Choix de distribution : pas de configuration]

Configuration d'Apache 2

Apache 2 est le serveur http le plus utilisé en raison de son bon niveau de sécurité et de sa documentation abondante.

Configuraons tout d’abord apache2.ocnf via en lancant l’editeur nano :

[nano /etc/apache2/apache2.conf]

Vérifions les utilisateurs (vers la ligne 100):

[User www-data]

[Group www-data]

Configurons le fichier à afficher par défaut ligne 210

[DirectoryIndex index.html index.php index.xhtml]

Autorisons les connecxions distantes en décommentant cette ligne :

[UserDir public_html]

Enfin, vérifion que ces lignes sont bien présentes à la fin de notre fichier, ou créez les le cas échéant.

[# Include the virtual host configurations:]

[Include /etc/apache2/sites-enabled/[^.#]*]

Sauvegardez et fermer l’éditeur.

Installation des virtuals host

Créons ensuite jnos hotes virtuels que nous nommerons user1 et user2 dans l’exemple ci-après. Dans un premier temps, modifions le squelette de création des utilisateurs :

mkdir /etc/skel/public_html

mkdir /etc/skel/logs

echo " <h1> PAGE </h1> " > /etc/skel/public_html/index.html

Créons maintenant nos users :

[useradd -g www-data -m user1]

Ensuite, modifions le contenu de /etc/apache2/sites-available/user1.com

<VirtualHost *>

ServerAdmin postmaster@user1.com

ServerName www.user1.com

ServerAlias user1.com *.user1.com

DocumentRoot /home/user1/public_html/

<Directory /home/user1/public_html/>

Options -Indexes FollowSymLinks MultiViews AllowOverride All

</Directory>

ErrorLog /home/user1/logs/error.log

LogLevel warn

CustomLog /home/user1/logs/access.log combined

ServerSignature Off

</VirtualHost>

Puis rendons notre domaine créé disponible grace à mla commande suivante :

[ln -s /etc/apache2/sites-available/user1.com /etc/apache2/sites-enabled/user1.com]

Relancons apache

[/etc/init.d/apache2 restart]

Il est maintenant possible d’accéder à notre répertoire nouvellement créé sur http://XXX.XXX.XXX.XXX/~user1

Configuration de Bind9

La configuration de BIND9 sera l’un des points les plus compliqués de l’installation de notre serveur Web. Bind9 est le serveur DNS le plus usité sur internet. Comme vous le savez certainement déjà, il va servir à transformer nos différents alias en adresse IP et de rediriger le client au bon endroit lors de sa requête. Ce qui fait la difficulté de la configuration de BIND est le temps de propagation des DNS qui peut varier de 4 à une 50aine d’heures selon les FAI pour se répandre et donc rend les tests très longs en cas d’erreurs. De plus il est nécessaire de sécuriser au maximum son serveur DNS puisque BIND donne par défaut l’accès possible à n’importe quel hôte.

Commençons donc par ajouter à la fin du ficdhier /etc/bind/named.conf

zone "user1.com" {

type master;

file "/etc/bind/db.user1.com";

};

Sécurisons ensuite notre serveur pour éviter qu’il soit utilisé comme relay DNS en ajoutant la ligne suivante à /etc/bind/named.conf.options

[allow-recursion { localhost; };]

Ensuite, nous devons créer notre fichier de cofiguration de zone /etc/bind/db.user1.com

$ttl 86400

test1.com. IN SOA ksXXXXX.domaine.com. webmaster.user1.com. ( 2017041905 21600 3600 604800 86400 )

user1.com. IN NS ksXXXXX. domaine.com.

user1.com. IN NS ns. domaine.com.

user1.com. IN MX 10 mail.user1.com.

user1.com. IN A xxx.xxx.xxx.xxx

Server IN A xxx.xxx.xxx.xxx

www IN A xxx.xxx.xxx.xxx

mail IN A xxx.xxx.xxx.xxx

smtp IN A xxx.xxx.xxx.xxx

pop IN A xxx.xxx.xxx.xxx

pop3 IN CNAME Server

imap IN A xxx.xxx.xxx.xxx

sql IN A xxx.xxx.xxx.xxx

mysql IN A xxx.xxx.xxx.xxx

Adaptez votre fichier comme il se doit à votre serveur. Ci-après quelques informations (developpez.com) :

Redémarrez ensuite BIND9

[/etc/init.d/bind9 restart]

BIND9 devrait être correctement configuré à présent.

Configuration de VSFTPD

VSFTPD est un serveur FTP extrêmement sécurisé qui va nous permettre de créer nos bases de données et de mettre nos fichiers sur notre serveur. Nous devons bien sûr pour pouvoir gérer les multi-domaines, utiliser le paramétrage par utilisateur virtualisé.

Créons tout d’abord le répertoire sui accueillera nos fichiers :

[mkdir /etc/vsftpd]

Installons ensuite notre base de données :

[apt-get install libdb3-util]

Libdb3 ext très simple d’utilisation puisqu’il s’appuie sur un simple fichier texte contenant nos informations Créons tout d’abord ce fichier texte pour qu’il ressemble au fichier ci-après :

nano /etc/vsftpd/login.txt

user1

pass1

user2

pass2

Puis transformons ce fichier texte en base :

[db3_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db]

Le modula PAM doit maintenant être configuré pour qu’il utilise notre toute nouvelle base :

nano /etc/vsftpd/vsftpd.pam

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

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

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

Ci-joint un fichier type pour configurer vsftpd à modifier comme bon vous semble (source developpez.com)

nano /etc/vsftpd.conf

# 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) :

nonymous_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éfini le nombre maximum de sessions à 200 (les nouveaux clients recevront

# un message du genre: "erreur : serveur occupé").

# On défini le nombre maximum de sessions par IP à 4

max_clients=200 max_per_ip=4

####################################

# Debian customization #

####################################

# 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

Il faut à présent allouer nos utilisateurs à leurs répertoires respectifs, il faut donc créer un dossier par utilisateur :

mkdir /etc/vsftpd/vsftpd_user_conf/

nano /etc/vsftpd/vsftpd_user_conf/user1

anon_world_readable_only=NO

local_root=/home/user1

write_enable=YES

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

Ne reste plus qu’à redémarrer notre service ftp et à nous connecter à notre compte :

/etc/init.d/vsftpd restart

IP: ip du serveur ou nom de domaine

login: user1

password: password1

Création d’un nouveau site

Ci-après un script pour la création d’un nouvel hébergement.

#!/bin/sh

# Récupère le nom d'utilisateur créé

new_user=$1

# Récupère le nom de domaine

nom_domaine=$3

# Récupère le mot de passe souhaité

password=$2

# Définit le mot de passe root de mysql

mdp_mysql_root = XXXXXXXXXXXX

# Récupère la date de création pour générer le fichier Bind

date_creation=`date +%Y%m%d`01

# Récupère l'IP du serveur

mon_ip=`grep $HOSTNAME /etc/hosts |cut -f1`

# Définit le répertoire de base de l'utilisateur

rep=/home/$new_user

# Test si le répertoire existe, et donc l'utilisateur

if [ -d $rep ];

then echo "L'utilisateur est déja géré par ce serveur"

else if [ -e /etc/apache2/sites-enabled/$nom_domaine ];

then echo "Le nom de domaine est déja géré par ce serveur"

else

# Génère les fichiers de base du nouveau site

/usr/sbin/useradd -p $password $new_user

cp -R fic_originaux $rep

chown -R www-data:www-data $rep

chmod -R 755 $rep

# ------------------------------------------------------------------------------------------------------------------------

# Configuration d'apache

#-------------------------------------------------------------------------------------------------------------------------

# Crée le fichier de configuration du répertoire virtuel

echo "

<VirtualHost *>

ServerAdmin postmaster@$nom_domaine

ServerName www.$nom_domaine

ServerAlias $nom_domaine *.$nom_domaine

DocumentRoot /home/$new_user/public_html/

<Directory /home/$new_user/public_html/>

Options -Indexes FollowSymLinks MultiViews

AllowOverride All

</Directory>

ErrorLog /home/$new_user/logs/error.log

LogLevel warn

CustomLog /home/$new_user/logs/access.log combined

ServerSignature Off

</VirtualHost>

" >> /etc/apache2/sites-available/$nom_domaine

ln -s /etc/apache2/sites-available/$nom_domaine /etc/apache2/sites-enabled/$nom_domaine

# ------------------------------------------------------------------------------------------------------------------------

# Configuration de BIND

#-------------------------------------------------------------------------------------------------------------------------

# Crée le fichier de déclaration de zone BIND

echo "

\$ttl 86400

$nom_domaine. IN SOA $HOSTNAME. webmaster.$nom_domaine. ( $date_creation 21600 3600 604800 86400 )

IN NS $HOSTNAME.

IN NS ns.kimsufi.com.

IN MX 10 mail.$nom_domaine.

IN A $mon_ip

www IN A $mon_ip

mail IN A $mon_ip

smtp IN A $mon_ip

pop IN A $mon_ip

pop3 IN A $mon_ip

imap IN A $mon_ip

sql IN A $mon_ip

mysql IN A $mon_ip

" > /etc/bind/db.$nom_domaine

# Crée la zone BIND

echo "zone \"$nom_domaine\" {

type master;

file \"/etc/bind/db.$nom_domaine\";

};

" >> /etc/bind/zones.conf

# ------------------------------------------------------------------------------------------------------------------------

# Configuration du ftp principal

#-------------------------------------------------------------------------------------------------------------------------

# On ajoute l'utilisateur et son mdp

echo "$new_user

$password" > /etc/vsftpd/login.txt

# On met à jour la base berkeley

db3_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db

# On ajoute les paramètres pour notre nouveau site

echo "anon_world_readable_only=NO

local_root=$rep

write_enable=YES

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES" >

/etc/vsftpd/vsftpd_user_conf/$new_user

# ------------------------------------------------------------------------------------------------------------------------

# Redémarre les services

#-------------------------------------------------------------------------------------------------------------------------

/etc/init.d/bind9 restart

/etc/init.d/apache2 restart

/etc/init.d/vsftpd restart

/etc/init.d/postfix restart

echo "L'utilisateur $new_user a bien été enregistré sur le serveur"

echo "Le serveur a été redémarré"

fi

fi

A propos de SUPINFO | Contacts & adresses | Enseigner à SUPINFO | Presse | Conditions d'utilisation & Copyright | Respect de la vie privée | Investir
Logo de la société Cisco, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société IBM, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sun-Oracle, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Apple, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sybase, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Novell, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Intel, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Accenture, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société SAP, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Prometric, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Toeic, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo du IT Academy Program par Microsoft, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management

SUPINFO International University
Ecole d'Informatique - IT School
École Supérieure d'Informatique de Paris, leader en France
La Grande Ecole de l'informatique, du numérique et du management
Fondée en 1965, reconnue par l'État. Titre Bac+5 certifié au niveau I.
SUPINFO International University is globally operated by EDUCINVEST Belgium - Avenue Louise, 534 - 1050 Brussels