Il est fort recommendable de créer des utilisateurs FTP "virtuels", c'est-à-dire qui ne font pas partie du système d'authentification du système d'exploitation (SE), au cas où le mot de passe d'un compte FTP soit découvert (et nous savons qu'il est facile d'obtenir cette information puisqu'elle n'est pas encryptée lors de l'authentification de la session FTP).
Sous Linux, plusieurs serveurs FTP existent, et nous verrons ici comment configurer le serveur
ProFTPd pour qu'il utilise une table d'authentification différente de celle du SE (plus particulièrement, un fichier texte). Personnellement, j'aime aussi beaucoup
vsftpd puisqu'il n'a presque aucune dépendance, et il se peut fort bien que cela fasse l'objet d'un autre message sur mon blogue.
De plus, nous créérons un compte FTP "
webmaster" qui n'aura le droit que de modifier le contenu d'un site web.
Alors voici la marche à suivre :
- Installer ProFTPd, que ce soit avec votre packager (apt-get, yum, zipper, etc.) ou manuellement en téléchargeant la dernière version du site officiel.
- Vérifier sous quel groupe ID votre serveur HTTP roule (apache2 créé et utilise souvent le groupe www-data); dans mon cas, le GID de www-data est 33
- Modifier le fichier de configuration /etc/proftpd/proftpd.conf en s'assurant d'avoir les lignes suivantes :
DefaultRoot ~
AuthOrder mod_auth_file.c
AuthUserFile /etc/proftpd/ftpd.passwd
Umask 006 007
L'option DefaultRoot et le paramètre ~ restreignent les utilisateurs à leurs répertoires racines personnels.
L'option AuthOrder et le paramètre mod_auth_file.c obligent ProFTPd à authentifier les utilisateurs à partir d'un fichier texte.
L'option AuthUserFile et le paramètre /etc/proftpd/ftpd.passwd indiquent l'emplacement du fichier d'authentification utilisé par ProFTPd.
L'option Umask et les paramètres 006 et 007 spécifient les autorisations permises sur les fichiers et les répertoires créés par le serveur FTP, soit -rw-rw---- (660) et drwxrwx--- (770) respectivement.
Il reste à créer le compte FTP virtuel webmaster :
sudo ftpasswd --passwd --name=webmaster --uid=33 --gid=33 --home=/var/www --shell=/bin/sh
Il est important d'utiliser le GID trouvé plus haut (celui qu'utilise votre serveur HTTP) afin de donner les droits au nouvel utilisateur virtuel d'écrire dans le répertoire du site web. J'ai choisi d'utiliser le UID de www-data également (facultatif), pour que tout fichier transféré via FTP sous le compte webmaster soit créé en tant que l'utilisateur www-data et le groupe www-data. Nous utilisons ce groupe afin de permettre aux scripts PHP (roulés par le serveur HTTP) de lire et d'écrire les fichiers créés par le serveur FTP, et vice-versa.
Il ne vous reste plus qu'à définir les autorisations du répertoire de votre site web (souvent /var/www). Par exemple, pour permettre à tout utilisateur du système d'exploitation (SE) appartenant au groupe www-data de lire et d'écrire dans ce répertoire, il suffit d'effectuer les commandes suivantes :
sudo chgrp -R www-data /var/www
sudo chmod -R g+w /var/www
Si vous voulez qu'un utilisateur du SE puisse modifier, ajouter, effacer, etc. des fichiers du répertoire du site web, il suffit donc de l'ajouter au groupe www-data de votre SE (dans /etc/group).
Pour ne pas divulguer l'identité des réels propriétaires du contenu du répertoire de votre site web (par exemple, les fichiers qui auraient été créés par un utilisateur de votre SE appartenant au groupe www-data, vous pouvez utiliser les directives suivantes dans proftpd.conf qui auront pour effet de lister tous les répertoires et fichiers comme appartenant à www-data :
DirFakeUser on www-data
DirFakeGroup on www-data
ServerIdent on "FTP server."
Voici le contenu du fichier
proftpd.conf, au complet, avec la configuration de base tel que décrite ci-dessus :
Include /etc/proftpd/modules.conf
UseIPv6 off
IdentLookups off
UseReverseDNS off
ServerIdent on "FTP server."
DeferWelcome on
ServerType standalone
MultilineRFC2228 on
DefaultServer on
ShowSymlinks on
TimeoutNoTransfer 600
TimeoutStalled 600
TimeoutIdle 1200
DisplayLogin welcome.msg
DisplayChdir .message true
ListOptions "-l"
DenyFilter \*.*/
DefaultRoot ~
RequireValidShell on
Port 21
MaxInstances 30
User proftpd
Group nogroup
DirFakeUser on www-data
DirFakeGroup on www-data
Umask 006 007
AllowOverwrite on
AuthOrder mod_auth_file.c
AuthUserFile /etc/proftpd/ftpd.passwd
TransferLog /var/log/proftpd/xferlog
SystemLog /var/log/proftpd/proftpd.log
QuotaEngine off
Ratios off
DelayEngine on