Tutoriel d'un serveur d’hébergement web mutualisé sur Debian

Préparation


La machine virtuel est utilisée sur Virtualbox et configuré en Nat.
Image iso utilisé Debian 6.0.3-i386-CD-1

Configuration:

Nom du serveur : srvweb
Password root : toor
User : me
Password : me
Ip server: 10.0.0.10/24
Password MySQL: toor
Windows srv name : srvdns (user administrateur:P@ssword, IP:10.0.0.10/24)            
Client xp name : xpclient (user:client,IP:10.0.0.6/24)

 Installé:
Ø  Vim
(Modifié le vimrc pour que ça soit en couleur et qu’il y a les numéros de lignes, chemin (vim /etc/vim/vimrcà à la ligne 19 décommenter syntax on et dernière ligne rajouter set nu)

Ø  Ssh
Ø  Mysql
Ø  Php5
Ø  Apache2

Apache2

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.

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.

fichier à modifier /etc/apache2/mods-available/userdir.conf

<IfModule mod_userdir.c>
        UserDir /home/*/public_html

        <Directory /home/*/public_html>
                AllowOverride FileInfo AuthConfig Limit
                Options MultiViews Indexes IncludesNoExec
                IndexOptions FoldersFirst FancyIndexing IgnoreCase

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.

Recharger la configuration d'Apache 2 :
/etc/init.d/apache2 reload

enfermer le PHP de chaque utilisateur dans son dossier respectif. Ajouter les  lignes dans le 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 safe_mode "1"
                php_admin_value open_basedir ".."

  • 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.
Permet aux utilisateurs de mettre du PHP dans leur dossier public_html sans pour autant poser de problèmes de sécurité.

Mysql & Phpmyadmin


Installer MySQL, pour que nos utilisateurs aient leur base de données (MySQL servira également pour vsFTPd).
Apt-get 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
Installation PHPMyAdmin :
Apt-get install phpmyadmin
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...

Vsftpd


Installation vsFTPd et le module d'authentification par MySQL !
aptitude install vsftpd libpam-mysql


Supprimer quelques éléments de la configuration par défaut :
deluser --remove-home ftp

Remplacer le fichier /etc/vsftpd.conf par celui-ci :

# 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

Créer le dossier qui contiendra les fichiers de configuration pour chaque utilisateur :
mkdir /etc/vsftpd

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. 

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 :
CREATE TABLE `ftp`.`users` (
`name` TEXT NOT NULL ,
 `pass` TEXT NOT NULL
) ENGINE = MYISAM

Remplacer le fichier /etc/pam.d/vsftpd par le suivant (qui contient les informations d'accès à cette table) :
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
Ne oubliez pas de remplacer le mot de passe de l'utilisateur MySQL ftp (2 fois) dans ce fichier !

Redemarrer FTP
/etc/init.d/vsftpd restart

Test:
PHPMyAdmin (avec l'utilisateur ftp) et ajouter un nouvel enregistrement à notre table 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].
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


Définir le dossier dans lequel l'utilisateur est enfermé, on l'autorise à y écrire, et on lui permet de voir les fichiers cachés.
le plus important : on crée le dossier de l'utilisateur (avec les bons droits !).
mkdir /home/[nom d'utilisateur]
chown -R www-data.www-data /home/[nom d'utilisateur]
chmod -R 700 /home/[nom d'utilisateur]


Tester en tentant une connexion au serveur FTP !

enjoy à vous de préparer l'interface web que vous pourrez  combiné à un webmail 

Aucun commentaire:

Enregistrer un commentaire