dimanche 6 mars 2011

Configurer ProFTPd avec des utilisateurs virtuels

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
  • Finalement, afin de ne pas divulguer la version de votre serveur FTP, vous pouvez changer la bannière de bienvenue en utilisant la directive suivante :
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

Aucun commentaire:

Publier un commentaire