Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Site Web > Serveur > Un serveur d'hébergement multiutilisateur sous Linux > Lecture du tutoriel

Un serveur d'hébergement multiutilisateur sous Linux

Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Avatar
Auteur : Thedownloader
Note : 18 / 20 (21 votes)
Visualisations : 10 448

Plus d'informations Plus d'informations
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.

Debian

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.
Sommaire du tutoriel :
Icône du chapitre

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 Code : Console
    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 Code : Console
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 : Code : Autre
1
2
3
4
#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 <lien url="http://mir1.ovh.net/debian/">http://mir1.ovh.net/debian/</lien> testing main non-free contrib
deb <lien url="http://security.debian.org/">http://security.debian.org/</lien> 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 !
Code : Console
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) :

Code : Console
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. :lol:


On va aller dans un des fichiers de configuration :
Code : Console
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 :
Code : Console
/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 :pirate: .
Par défaut, Apache va chercher les pages dans /var/www/.
On fait donc : Code : Console
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 :Code : Console
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 :Code : Autre
1
2
3
4
5
6
7
8
9
<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 ^^ :Code : Autre
1
2
3
4
5
6
7
8
9
<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 !!
Code : Console
/etc/init.d/apache2 reload

Pour tester :
Code : Console
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 :

Installer PHP5

:magicien: PHP5 ne résistera pas très longtemps à un simpleCode : Console
aptitude install php5

Il faut redémarrer Apache 2 !
Code : Console
/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 :Code : Autre
1
2
3
4
5
6
7
8
9
10
<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 :Code : PHP
1
<?php echo shell_exec('ls /home'); ?>
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 :Code : Autre
1
2
3
4
5
6
7
8
9
10
11
<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).
Code : Console
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 :Code : Console
mysql_secure_installation


Histoire de ne pas tout avoir à faire en console, on installe PHPMyAdmin :
Code : Console
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 un onglet en haut), et cliquez sur recharger les privilèges.

MySQL est maintenant installé, configuré, et nous avons créé un utilisateur et une base de données pour le serveur FTP...

Installer le serveur FTP : vsFTPd

On installe maintenant vsFTPd et le module d'authentification par MySQL !Code : Console
aptitude install vsftpd libpam-mysql


Il faut supprimer quelques éléments de la configuration par défaut :Code : Console
deluser --remove-home ftp


Remplaçons le fichier /etc/vsftpd.conf par celui-ci :
Code : Autre
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# 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" active les utilisateurs virtuels
# "guest_username" fait correspondre tous les utilisateurs virtuels à l'utilisateur d'Apache 2
guest_enable=YES
guest_username=www-data

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

# On enferme les utilisateurs virtuels dans leur dossier
chroot_local_user=YES

# On définit le nombre maximum de sessions à 100
# On définit le nombre maximum de sessions par IP à 5
max_clients=100
max_per_ip=5

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

# Définir la plage de ports utilisée par le mode passif
pasv_min_port=20000
pasv_max_port=20050

# Message d'accueil
ftpd_banner=Bienvenue sur ce serveur FTP !

# Autoriser les utilisateurs virtuels à changer les permissions de leurs fichiers
chmod_enable=YES
virtual_use_local_privs=YES

# Utiliser le temps local et non pas le temps universel (UTC)
use_localtime=YES

# Activation du log
xferlog_enable=YES
log_ftp_protocol=YES


Ce fichier étant commenté, je ne m'étends pas dessus. ;)
Il faut créer le dossier qui contiendra les fichiers de configuration pour chaque utilisateur :Code : Console
mkdir /etc/vsftpd

Configurer vsFTPd avec pam-mysql

vsFTPd va devoir accéder à la liste des utilisateurs, qui sera placée dans notre base de donnée MySQL. Le module pam-mysql permet de faire ça. :)

On va tout d'abord retourner sur PHPMyAdmin, se logger avec l'utilisateur ftp, et sélectionner la base de donnée ftp dans le menu de gauche. Ensuite, l'onglet SQL permet de coller et d'exécuter ce code :Code : SQL
1
2
3
4
CREATE TABLE `ftp`.`users` (
`name` TEXT NOT NULL ,
 `pass` TEXT NOT NULL 
) ENGINE = MYISAM


Notre table étant créée, on va remplacer le fichier /etc/pam.d/vsftpd par le suivant (qui contient les informations d'accès à cette table) :Code : Autre
1
2
auth required pam_mysql.so host=localhost user=ftp passwd=votre_pass db=ftp table=users usercolumn=name passwdcolumn=pass crypt=1
account required pam_mysql.so host=localhost user=ftp passwd=votre_pass db=ftp table=users usercolumn=name passwdcolumn=pass crypt=1
N'oubliez pas de remplacer le mot de passe de l'utilisateur MySQL ftp (2 fois) dans ce fichier !


On redémarre le serveur FTP ! Code : Console
/etc/init.d/vsftpd restart

On va maintenant ajouter un utilisateur pour tester tout ça !

On repasse sur PHPMyAdmin (toujours avec l'utilisateur ftp) et on va ajouter un nouvel enregistrement à notre table fraîchement créée (onglet Insérer après avoir sélectionné la table). On renseigne un nom d'utilisateur et un mot de passe. Le mot de passe doit être crypté ! Il suffit de sélectionner ENCRYPT dans la liste déroulante, lors de l'insertion.

Il faut maintenant créer le fichier de configuration de l'utilisateur : /etc/vsftpd/[nom d'utilisateur].
Code : Autre
1
2
3
4
5
6
7
8
anon_world_readable_only=NO
local_root=/home/utilisateur
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
hide_file=(none)
force_dot_files=YES
Pour le détail, je vous laisse la page de documentation : http://vsftpd.beasts.org/vsftpd_conf.html. Sachez qu'en gros, on définit le dossier dans lequel l'utilisateur est enfermé, on l'autorise à y écrire, et on lui permet de voir les fichiers cachés.

Et pour finir, le plus important : on crée le dossier de l'utilisateur (avec les bons droits !).
Code : Console
mkdir /home/[nom d'utilisateur]
chown -R www-data.www-data /home/[nom d'utilisateur]
chmod -R 700 /home/[nom d'utilisateur]


Vous pouvez maintenant tenter une connexion à votre serveur FTP !

Les scripts de gestion des comptes

Le plus gros a été fait ! L'idéal serait maintenant de créer des scripts qui permettent d'ajouter / d'enlever des utilisateurs à notre place.

Pour résumer, voici la liste des opérations à faire lors de l'ajout d'un utilisateur :
  • demander les identifiants ;
  • vérifier si un utilisateur portant ce nom existe déjà ;
  • créer les dossiers /home/[nom_utilisateur] et /home/[nom_utilisateur]/public_html ;
  • régler le propriétaire et les droits du dossier /home/[nom_utilisateur] et de son contenu (www-data / 700) ;
  • créer le fichier de configuration /etc/vsftpd/[nom_utilisateur] et le remplir selon le modèle précédemment vu (seule la ligne indiquant le dossier de l'utilisateur change) ;
  • ajouter les identifiants de l'utilisateur dans la base de données ;
  • créer un utilisateur MySQL (avec les identifiants fournis) et une base de données associée.

Voici maintenant celle pour la suppression :
  • demander les identifiants ;
  • vérifier si un utilisateur portant ce nom existe bien ;
  • supprimer les identifiants de l'utilisateur dans la base de données ;
  • supprimer l'utilisateur MySQL et la base de données associée ;
  • supprimer le fichier de configuration /etc/vsftpd/[nom_utilisateur] ;
  • supprimer le dossier /home/[nom_utilisateur] et l'intégralité de son contenu.


Voici maintenant ma solution :

adduser.sh

Code : Bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/bin/sh
 
# Informations à compléter
pass_mysql_ftp=mot_de_passe_de_l'utilisateur_mysql_"ftp"
pass_mysql_root=mot_de_passe_de_l'utilisateur_mysql_"root"
 
# On demande la saisie d'un nom d'utilisateur et du mot de passe (2 fois)
echo -n "Nom d'utilisateur : "
read nom
echo "Mot de passe : "
read -s pass
echo "Mot de passe (le retour) : "
read -s pass2
 
# On vérifie que les 2 mots de passe soient identiques
if test $pass = $pass2 ; then
 
        # On vérifie qu'il n'existe pas déjà un autre utilisateur du même nom
        if test -d /home/$nom ; then
                echo "L'utilisateur existe deja"
        else
                # On crée les dossiers et on fixe les droits
                mkdir /home/$nom
                mkdir /home/$nom/public_html
                chown -R www-data.www-data /home/$nom
                chmod -R 700 /home/$nom
 
                # On crée le fichier de configuration pour vsFTPd
                echo "anon_world_readable_only=NO" > /etc/vsftpd/$nom
                echo "local_root=/home/$nom" >> /etc/vsftpd/$nom
                echo "write_enable=YES" >> /etc/vsftpd/$nom
                echo "anon_upload_enable=YES" >> /etc/vsftpd/$nom
                echo "anon_mkdir_write_enable=YES" >> /etc/vsftpd/$nom
                echo "anon_other_write_enable=YES" >> /etc/vsftpd/$nom
                echo "hide_file=(none)" >> /etc/vsftpd/$nom
                echo "force_dot_files=YES" >> /etc/vsftpd/$nom
 
                # On ajoute l'utilisateur dans la base de données
                mysql -u ftp -p"$pass_mysql_ftp" -D ftp -e "INSERT INTO users (name ,pass) VALUES ('$nom', ENCRYPT( '$pass' ));"
 
                # On crée une base de données où l'utilisateur est tout-puissant
                mysql -u root -p"$pass_mysql_root" -e "CREATE USER '$nom'@'localhost' IDENTIFIED BY '$pass';GRANT USAGE ON *.* TO '$nom'@'localhost' IDENTIFIED BY '$pass' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;CREATE DATABASE IF NOT EXISTS $nom;GRANT ALL PRIVILEGES ON $nom.* TO '$nom'@'localhost';"
                
                echo "Utilisateur ajoute avec succes"
        fi
 
else
 
        echo "Les 2 mots de passe ne sont pas identiques"
 
fi


deluser.sh

Code : Bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/bin/sh
 
# Informations à compléter
pass_mysql_ftp=mot_de_passe_de_l'utilisateur_mysql_"ftp"
pass_mysql_root=mot_de_passe_de_l'utilisateur_mysql_"root"
 
# On demande la saisie du nom de l'utilisateur à supprimer
echo -n "Nom d'utilisateur : "
read nom
 
# On vérifie qu'il existe
if test -d /home/$nom ; then
 
        # On le supprime de la liste des utilisateurs de vsFTPd
        mysql -u ftp -p"$pass_mysql_ftp" -D ftp -e "DELETE FROM users WHERE name='$nom';"
 
        # On supprime son compte et sa base de donnée MySQL
        mysql -u root -p"$pass_mysql_root" -e "DROP USER $nom@'localhost';DROP DATABASE IF EXISTS $nom;"
 
        # On supprime son fichier de configuration vsFTPd
        rm -f /etc/vsftpd/$nom
 
        # On supprime son dossier
        rm -fr /home/$nom
 
        echo "Utilisateur DETRUIT"
else
        echo "L'utilisateur n'existe pas"
fi

Pour exécuter ces scripts, en admettant qu'il soient enregistrés dans /root, il faut utiliser la commande suivante :Code : Console
sh /root/mon_du_script.sh

J'ai fait des scripts shell, mais rien ne vous empêche de les faire en PHP, par exemple.
Il faudrait dans ce cas-là installer le paquet php5-cli (voir le tuto Créer de vrais programmes en PHP de gnomnain).


Vous voilà donc en possession d'un système d'hébergement multiutilisateurs ! :D
Je vous propose quelques annexes, pour préciser ou améliorer certains points. ;)

Annexes

Sécurité



Il faut faire attention à ce que seul l'utilisateur root puisse lire les scripts que nous avons créés, car ils contiennent des mots de passe ! De plus, on pourrait créer des utilisateurs sans être root...

On va donc résumer quels sont nos fichiers / dossiers et leurs permissions :
Changer le propriétaire et le groupe d'un fichier : chown proprietaire.groupe fichier
Changer le propriétaire et le groupe d'un dossier (et de son contenu) : chown -R proprietaire.groupe dossier
Changer les permissions d'un fichier : chmod permissions fichier
Changer les permissions d'un dossier (et de son contenu) : chmod -R permissions dossier


Administrer les fichiers des utilisateurs



Posons deux choses :
Une solution serait de créer 2 comptes FTP manuellement, un dont le dossier est /home et l'autre /var/www.
Seulement, on ne va pas tout compliquer avec 2 comptes FTP lorsqu'il ne pourrait n'y en avoir qu'un ! :p


On va donc créer un compte admin dont le dossier est /home. Il ne faut surtout pas utiliser le script, mais bien créer le fichier de configuration /etc/vsftpd/admin à la main et ajouter l'utilisateur admin dans la base de donnée avec PHPMyAdmin.

Nous avons donc un compte FTP admin pouvant naviguer et écrire dans les dossiers des utilisateurs.
On va maintenant monter le dossier /var/www dans le dossier /home/www que nous créerons. Le dossier /home/www sera donc une sorte de redirection vers /var/www.

On crée le dossier /home/www et on règle ses permissions, ainsi que celle de /var/www :Code : Console
mkdir /home/www
chown -R www-data.www-data /home/www
chmod -R 700 /home/www
chown -R www-data.www-data /var/www
chmod -R 700 /var/www


On va ensuite modifier le fichier /etc/fstab, qui contient les informations sur les montages à faire au démarrage, et insérer la ligne suivante :Code : Autre
1
/var/www        /home/www        none        bind        0        0

On n'a plus qu'à faire un petit mount -a pour que les modifications soient appliquées.

On a alors accès à la racine du serveur web avec notre compte admin ! :D


Voir l'espace disque occupé



Encore une idée d'amélioration : créer un script permettant de connaître l'espace disque occupé par chaque utilisateur.
La solution qui me semble la meilleure est tout simplement d'afficher séparément la taille de tous les dossiers contenus dans le dossier /home.

Voici donc une application de cette solution :Code : Bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#!/bin/sh
 
# Pour chaque dossier contenu dans /home
for dir in /home/* ; do
        
        # Si le dossier n'est pas /home/www
        if test $dir != "/home/www" ; then
 
                # On affiche sa taille
                du -hs $dir
        else
                du -hs /var/www
        fi
done
Ce script ne tient pas compte de la taille de la base de données de l'utilisateur.



Installer des extensions PHP



Si vous avez besoin d'installer certaines extensions à PHP, comme GD pour pouvoir traiter des images par exemple, il suffit juste de l'installer avec aptitude de la manière suivante :Code : Console
aptitude install php5-gd



Les fichiers .htaccess



Les fichiers .htaccess permettent de modifier la configuration d'Apache 2 de manière exceptionnelle, c'est-à-dire seulement pour le dossier dans lequel le fichier .htaccess se trouve et sans pour autant avoir à modifier le fichier de configuration principal d'Apache 2.

Pour résumer, un .htaccess peut permettre à un utilisateur de modifier la configuration d'Apache 2, avec certaines limites.

Ces limites sont définies dans notre fichier /etc/apache2/mods-available/userdir.conf :Code : Autre
1
AllowOverride FileInfo AuthConfig Limit
AllowOverride None interdit l'usage des fichiers .htaccess.
AllowOverride All, au contraire, ne leur donne pas de restriction.


Pour plus d'informations sur la commande AllowOverride, jetez un coup d'oeil à la documentation d'Apache 2.2 ! ;)

J'espère que ce tuto vous a été profitable !

Vous pouvez me contacter par MP si vous avez un problème.


Je remercie vincent1870 pour sa correction de qualité malgré le fait qu'il était occupé :) .
Retour en haut Retour en haut


Créé : le 02/12/2007 à 11:45:18
Modifié : le 22/08/2008 à 16:08:52
Avancement : 100%
Licence : Copie non autorisée

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 569 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.3652s (0.3494s)