Un serveur d'hébergement multiutilisateur sous Linux Online

Formation

En Ligne

Prix sur demande

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

Description

  • Typologie

    Formation

  • Méthodologie

    En ligne

Nous vous proposons des cours ouverts pour se former autrement, pour devenir acteur de votre vie. Nous vous aidons à prendre votre envol, mais ça ne s'arrête pas là. Notre volonté est de vous accompagner tout au long de votre vie, dans votre parcours professionnel.Grâce à cette formation vous pourrez acquérir les connaissances nécessaires qui vous permettrons d’ajouter des compétences à votre profil et obtenir de solides aptitude qui vous offriront de nombreuses opportunités professionnelles.

Questions / Réponses

Ajoutez votre question

Nos conseillers et autres utilisateurs pourront vous répondre

À qui souhaitez-vous addresser votre question?

Saisissez vos coordonnées pour recevoir une réponse

Nous ne publierons que votre nom et votre question

Les Avis

Le programme

Introduction du cours

Bonjour !

Le but de ce tuto est de vous apprendre à installer un serveur Linux qui permette l'hébergement de plusieurs utilisateurs. Chaque utilisateur aura un accès FTP, un dossier personnel, et un dossier web.

Ici, j'utiliserai Debian parce que c'est une distribution répandue dans le monde des serveurs.
Cependant, ça ne pose pas de problème de faire ça avec une autre distribution. ;)

Je vous souhaite une bonne lecture !

Il faut connaître les bases du shell linux (cd, ls, cp, mv, etc...) pour comprendre le tuto.
Il y a un très bon tuto là : Apprenez le Shell, écrit par Jarvis.

Prérequis

Ce tuto se fait en console : vous n'avez donc pas besoin d'installer un environnement graphique (KDE, Gnome, ...).
Cependant, vous pouvez quand même le suivre si vous en avez un déjà installé : il suffit d'ouvrir un terminal (dans le menu Konsole, Terminal...).

Dans un serveur, on n'utilise pas d'environnement graphique, car celui-ci prend beaucoup de ressources alors que tout peut être fait en console pour davantage de performances. Alors autant prendre les bonnes habitudes ! :p

Les opérations que vous allez réaliser nécessitent d'être faites en temps que root.
L'utilisateur root a accès à tout, c'est le boss. ^^
Il y a 2 manières de s'identifier :

  • si vous n'avez pas d'environnement graphique, vos identifiants vous seront demandés après le démarrage de votre ordinateur serveur ;

  • si vous avez un environnement graphique, vous devez d'abord ouvrir une console (comme indiqué plus haut) et taper la commande

    su - root

    qui vous demandera votre mot de passe root (renseigné à l'installation du système). (Les droits root iront à la console que vous avez ouverte ; si vous la fermez, il faudra retaper cette commande !)

Sous Ubuntu, la commande est

sudo -s

Ceci étant dit, nous pouvons commencer !

Avant toute chose, assurez-vous d'avoir un fichier /etc/apt/sources.list bien configuré et un système à jour !

Le fichier sources.list contient la liste des dépôts où se trouvent les applications que le système utilise ou que vous utilisez !
Il faut donc qu'il soit complet pour ne pas passer à côté des mises à jour importantes, qu'elles soient de nature à augmenter la sécurité ou à corriger des bugs.

Voici un exemple de sources.list :

#Attention, ce sources.list est fait pour la version "testing" de Debian, c'est-à-dire la future version stable. #Les paquets présents dans ces dépôts sont testés, mais pas totalement sûrs du point de vue de la stabilité. deb http://mir1.ovh.net/debian/ testing main non-free contrib deb http://security.debian.org/ testing/updates main contrib non-free

Pour la version stable, il faut remplacer les testing par des etch.

Il suffit ensuite de taper en console deux commandes pour avoir un système à jour !

aptitude update aptitude full-upgrade

aptitude full-upgrade met à jour la distribution. Si vous ne souhaitez pas faire ça, contentez-vous de aptitude safe-upgrade.

Il est possible que le noyau soit mis à jour également. Dans ce cas-là, il faut redémarrer pour charger le nouveau noyau (utilisez la commande reboot).

Par souci de simplicité, on va considérer que l'on est dans un réseau local qui contient notre serveur et un autre ordinateur qui permettra de tester le serveur.
On va dire que l'adresse IP du serveur sera 192.168.0.100, même si ça n'a pas d'importance pourvu qu'on la connaisse.

Installer le serveur web : Apache 2

Nous allons commencer par installer le serveur web !
On va donc installer Apache 2 à l'aide de cette commande (toutes les commandes sont à faire en tant que root) :

aptitude install apache2

Il faut accepter les dépendances de apache2 en tapant "o" (pour oui) puis Entrée.

Maintenant qu'Apache est installé, on va le tester !

À partir de votre autre ordinateur, lancez un navigateur web et accédez à l'URL du serveur : http://192.168.0.100.

Logiquement, vous obtenez un énorme It works!

On remarque également qu'on a été redirigé sur l'adresse http://192.168.0.100/apache2-default.
Il s'agit de la configuration par défaut de Apache, nous allons arranger ça.

On va aller dans un des fichiers de configuration :

nano /etc/apache2/sites-available/default

Il suffira d'ajouter un dièse # au début de la ligne RedirectMatch ^/$ /apache2-default/ pour la commenter.

On redémarre Apache :

/etc/init.d/apache2 restart

On réessaye d'aller sur http://192.168.0.100.
Et là, magie ! Au lieu d'avoir le message de tout à l'heure, on a une arborescence qui contient uniquement le dossier apache2-default.

Ce dossier étant inutile, on va le supprimer .
Par défaut, Apache va chercher les pages dans /var/www/.
On fait donc :

rm -r /var/www/apache2-default

Maintenant que Apache 2 fonctionne, occupons-nous du mod UserDir !

Configurer Apache 2 avec le mod UserDir

Le mod UserDir est un mod installé par défaut avec Apache 2. Il permet, une fois configuré, de faire correspondre une URL de type http://192.168.0.100/~utilisateur à un dossier /home/utilisateur, par exemple.

L'avantage est qu'il ne faut pas changer la configuration d'Apache 2 à chaque fois qu'on ajoute un utilisateur : à chaque fois qu'une URL comme la précédente sera appelée, Apache 2 vérifiera si le dossier correspondant existe sur le serveur. S'il existe, on accèdera à son contenu, sinon, on obtiendra l'erreur 404.

Pour commencer, activons le mod avec la commande suivante :

a2enmod userdir

Un message nous avertit qu'il faut recharger la configuration d'Apache, mais comme nous allons la modifier par la suite, nous la rechargerons plus tard.

Il faut ensuite configurer ce mod. Voici donc le fichier /etc/apache2/mods-available/userdir.conf tel que vous devez l'avoir par défaut :

<IfModule mod_userdir.c>         UserDir public_html         UserDir disabled root           <Directory /home/*/public_html>                 AllowOverride FileInfo AuthConfig Limit                 Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec         </Directory> </IfModule>

UserDir public_html signifie que l'adresse http://192.168.0.100/~utilisateur affichera le contenu du dossier [Répertoire home de utilisateur]/public_html. L'utilisateur doit donc être un utilisateur système valide !!
Pour ne pas avoir à créer à chaque fois un utilisateur système, on peut remplacer cette ligne par UserDir /home/*/public_html. Du coup, il suffit juste de créer un dossier du nom de l'utilisateur dans /home ! :)

UserDir disabled [noms d'utilisateurs] permet de désactiver la fonctionnalité UserDir pour certains utilisateurs.

Par défaut, c'est désactivé pour root, sinon on aurait accès au dossier /root (la configuration tient compte du dossier home de chaque utilisateur système, dont root).

Le reste du fichier de configuration sert à définir les options sur les dossiers des utilisateurs.

Voici donc une version de ce même fichier plus optimisée pour nos besoins ^^ :

<IfModule mod_userdir.c>         UserDir /home/*/public_html           <Directory /home/*/public_html>                 AllowOverride FileInfo AuthConfig Limit                 Options MultiViews Indexes IncludesNoExec                 IndexOptions FoldersFirst FancyIndexing IgnoreCase         </Directory> </IfModule>

Les 3 IndexOptions que j'ai ajoutées permettent un affichage plus sympathique de la liste des fichiers (lorsqu'il n'y a pas de fichier index dans le dossier de l'utilisateur).
Pour plus d'informations, voir le tuto Personnaliser son FTP de Thunderseb.

Vous pouvez maintenant recharger la configuration d'Apache 2 et tester tout ça !!

/etc/init.d/apache2 reload

Pour tester :

mkdir /home/test/ mkdir /home/test/public_html

Et puis on accède à l'adresse http://192.168.0.100/~test
(ne pas oublier de faire un petit rm -r /home/test pour remettre en état :p ).

À ce stade, nous pouvons donc créer un utilisateur web en créant 2 dossiers :

  • le dossier /home/utilisateur qui sera la partie privée de l'utilisateur ;

  • le dossier /home/utilisateur/public_html qui sera la partie publique accessible avec l'adresse http://192.168.0.100/~utilisateur.

Installer PHP5

PHP5 ne résistera pas très longtemps à un simple

aptitude install php5

Il faut redémarrer Apache 2 !

/etc/init.d/apache2 restart

Cette étape est rapide puisqu'une fois PHP5 installé, nos utilisateurs web peuvent l'utiliser.
Vous pouvez reprendre le test que nous avons fait tout à l'heure pour vérifier.

Cependant, si vous poussez un peu ces tests, vous allez vous apercevoir (avec stupeur :p ) qu'il est parfaitement possible pour un utilisateur d'écrire un script PHP qui va voir chez le voisin... ce qui pose un gros problème de sécurité !

Nous allons donc devoir enfermer le PHP de chaque utilisateur dans son dossier respectif. Pour cela, il suffit d'ajouter une petite ligne de rien du tout dans notre fichier /etc/apache2/mods-available/userdir.conf. On obtient ceci :

<IfModule mod_userdir.c>         UserDir /home/*/public_html           <Directory /home/*/public_html>                 AllowOverride FileInfo AuthConfig Limit                 Options MultiViews Indexes IncludesNoExec                 IndexOptions FoldersFirst FancyIndexing IgnoreCase                 php_admin_value open_basedir ".." # <-- voici la nouvelle ligne         </Directory> </IfModule>
  • php_admin_value permet de modifier des options de php.ini directement dans la configuration d'Apache 2.

  • open_basedir permet d'enfermer PHP dans un répertoire. À chaque fois qu'un fichier ou dossier sera ouvert en PHP, on obtiendra un message d'erreur si celui-ci n'est pas à l'intérieur du dossier spécifié.

  • ".." est la valeur de l'option open_basedir. Les 2 points correspondent au dossier parent, c'est-à-dire dans notre cas au dossier /home/utilisateur.

Et là, je vous dis que le problème n'est pas résolu ! >_

En effet, il existe une fonction PHP nommée shell_exec() qui permet d'exécuter des commandes shell (sous l'utilisateur www-data, l'utilisateur d'Apache 2).
Il est donc possible de créer un script PHP dans son répertoire d'utilisateur web :

 

On a donc accès à la liste des utilisateurs !

Heureusement, PHP est doté une fonction, le safe_mode, qui permet d'interdire les fonctions de ce type. Notre fichier /etc/apache2/mods-available/userdir.conf devient donc :

<IfModule mod_userdir.c>         UserDir /home/*/public_html           <Directory /home/*/public_html>                 AllowOverride FileInfo AuthConfig Limit                 Options MultiViews Indexes IncludesNoExec                 IndexOptions FoldersFirst FancyIndexing IgnoreCase                 php_admin_value safe_mode "1"                 php_admin_value open_basedir ".."         </Directory> </IfModule>

Et voilà ! Nos utilisateurs peuvent mettre du PHP dans leur dossier public_html sans pour autant poser de problèmes de sécurité. :)

Installer le serveur de base de données : MySQL

Il est l'heure d'installer MySQL, pour que nos utilisateurs aient leur base de données (MySQL servira également pour vsFTPd).

aptitude install mysql-server php5-mysql

On exécute dans la foulée le script fourni avec MySQL qui permet de sécuriser la configuration de ce dernier :

mysql_secure_installation

Histoire de ne pas tout avoir à faire en console, on installe PHPMyAdmin :

aptitude install phpmyadmin

Il vous sera demandé quel est le serveur web ! Choisir apache2 avec les flèches directionnelles, cocher avec Espace, et valider avec Entrée.

Allez ensuite avec un navigateur à l'adresse http://192.168.0.100/phpmyadmin. Mettez la langue en français, le nom d'utilisateur (root) et votre mot de passe MySQL.

Direction la page Privilèges, puis Ajouter un utilisateur. Indiquez ftp comme nom d'utilisateur, sélectionnez Local dans la liste déroulante Serveur, et indiquez un mot de passe, compliqué si possible, car il ne sera utilisé que par des scripts (vous pouvez utiliser le bouton Générer). Cochez le bouton radio Créer une base portant son nom et donner à cet utilisateur tous les privilèges sur cette base et validez.

Retournez sur la page Privilèges (il y a...

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

Un serveur d'hébergement multiutilisateur sous Linux Online

Prix sur demande