Créer un serveur FTP

De quoi s'agit-il ?

FTP (File Transfert Protocol) est un protocole standard de transfert de fichier. Pour l'utiliser, il faut un client FTP, comme Filezilla (mais un navigateur internet suffit). Pour que cela fonction il faut que le serveur distant soit lui-même configuré en serveur FTP.
Dans cet article, il s'agit de créer un serveur FTP pour exposer le répertoire public d'un site Web. En effet, un site web doit être fréquemment mis à jour et il est rare d'utiliser un éditeur HTML directement dur le serveur. La plupart du temps, les pages Web sont crées sur un PC de bureau puis transférées via FTP sur le répertoire racine du serveur Web, le répertoire /var/www/pub en l’occurrence.

Pré-requis

Bien que le protocole FTP soit utilisable dans de nombreux contextes, l'exemple de cet article est de permettre d'accéder au répertoire /var/www/pub considéré comme racine du serveur Web du cluster. Mais on pourrait atteindre un but équivalent sur le répertoire /var/www d'un serveur Apache fonctionnant seul en dehors du cluster.
Dans le cas d'un fonctionnement en cluster avec ClusterHat, il est nécessaire de vérifier quelques pré-requis :
  • Cela suppose qu'un serveur Apache a été installé sur au moins un serveur esclave du cluster (slave02 dans l'exemple). Consulter l'article intitulé "Créer un serveur Web".
  • Cela suppose également que le répertoire /var/www/pub est partagé via NSF. Consulter l'article intitulé "Partager un dossier par NFS".
  • Cela suppose bien sûr que le répertoire /var/www/pub est monté sur chacun des serveurs Web du cluster dans le répertoire racine de celui-ci (/var/www/html). Consulter l'article intitulé "Monter un dossier distant via NFS".
  • Cela suppose enfin que l'équilibrage de charge entre les serveurs Web du cluster soit opérationnel à travers un proxy installé sur le contrôleur du cluster. Consulter l'article intitulé "Haute disponibilité et équilibrage de charge avec ClusterHAT".

Installer FTP sur Rasbian

Il existe plusieurs paquets disponibles sur Rasbian pour implémenter un serveur FTP. Dans cet article, c'est proftpd qui est utilisé. L'installation de proftpd se fait de façon standard avec la commande apt-get.
pi@cluster01:~ $ sudo apt-get install proftpd-basic
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances

. . .

pi@cluster01:~ $

Configuration

Le fonctionnement de proftpd peut être paramétré dans le fichier /etc/proftpd/proftpd.conf.
pi@cluster01:~ $ sudo nano /etc/proftpd/proftpd.conf
pi@cluster01:~ $

Dans /etc/proftpd/proftpd.conf, modifier les trois lignes ci-dessous pour interdire les connexions en IPv6, pour donner un nom au serveur FTP et pour limiter à 5 minutes le temps d'inactivité au bout duquel l'utilisateur est automatiquement déconnecté.
#
# /etc/proftpd/proftpd.conf -- This is a basic ProFTPD configuration file.
# To really apply changes, reload proftpd after modifications, if
# it runs in daemon mode. It is not required in inetd/xinetd mode.
#

# Includes DSO modules
Include /etc/proftpd/modules.conf

# Set off to disable IPv6 support which is annoying on IPv4 only boxes.
UseIPv6                         off
# If set on you can experience a longer connection delay in many cases.
IdentLookups                    off

ServerName                      "cluster01"
# Set to inetd only if you would run proftpd by inetd/xinetd.
# Read README.Debian for more information on proper configuration.
ServerType                              standalone
DeferWelcome                    off

MultilineRFC2228                on
DefaultServer                   on
ShowSymlinks                    on

TimeoutNoTransfer               600
TimeoutStalled                  600
TimeoutIdle                     300

DisplayLogin                    welcome.msg
DisplayChdir                    .message true
ListOptions                     "-l"

DenyFilter                      \*.*/

# Use this to jail all users in their homes
# DefaultRoot                   ~

# Users require a valid shell listed in /etc/shells to login.
# Use this directive to release that constrain.
# RequireValidShell             off

# Port 21 is the standard FTP port.
Port                            21

. . .

# Include other custom configuration files
Include /etc/proftpd/conf.d/
La dernière ligne du fichier de configuration indique que des configurations supplémentaires peuvent être chargée à partir du répertoire conf.d. L’intérêt de ce répertoire est que l’on peut modifier un fichier de configuration sans pour autant risquer de détruire la configuration de base.
pi@cluster01:~ $ sudo nano /etc/proftpd/conf.d/proftpd-custom.conf
pi@cluster01:~ $
La configuration ci-dessous permet au seuls utilisateurs membres du groupe www-data d’accéder au répertoire /var/www/pub pour mettre à jour le site web.
# FTP user doesn't need a valid shell
<Global>
        RequireValidShell       off
</Global>

# Default directory is Web Http Home
DefaultRoot     /var/www/pub


# Limit login to the www-data group
<Limit LOGIN>
        DenyGroup !www-data
</Limit>
Pour que la nouvelle configuration soit prise en compte, il faut maintenant redémarrer le service :
pi@cluster01:~ $ sudo service proftpd restart
pi@cluster01:~ $

Tester l'installation

La vérification se fait sur un autre ordinateur avec un client FTP. Le plus couramment utilisé est FileZilla.
Lancer FileZilla :

  • Dans Hôte, taper le nom du serveur : cluster01.
  • Dans Identifiant, taper le nom de l’utilisateur : pi.
  • Dans Mot de passe, taper le mot de passe de l’utilisateur pi.
  • Dans Port, taper 21 (c’est la valeur par défaut).
  • Cliquer le bouton Connexion rapide.

Si tout se passe bien, une connexion est établie. Déplacer alors les fichiers du site Web situés dans Site local vers le dossier destination par un glisser-déplacer de la gauche vers la droite. En principe, les droits d'écriture accordés à l'utilisateur pi membre du groupe www-data permettent la copie des fichiers dans la partie Site distant dans lequel on retrouve les fichiers déplacés.
A remarquer que le répertoire /var/www/pub du contrôleur du cluster est considéré comme répertoire racine / par proftpd.

Commentaires

Posts les plus consultés de ce blog

Gérer la mise en veille

Configurer VSCode pour programmer et déboguer à distance sur Raspberry Pi

Créer un nouvel utilisateur Raspbian