Installation de configuration de ProFTPd

De Linux Server Wiki
Sauter à la navigation Sauter à la recherche


Attention cette page wiki n'est plus à jour


Ce howto va vous montrer comment installer et configurer le serveur ftp ProFTPd afin de fournir un accès ftp et ftps (ftp sécurisé en ssl) à vos utilisateurs. Nous verrons aussi comment configurer ProFTPd pour qu'il gère les utilisateurs virtuels.

Ce howto est construit de manière à respecter mon howto sur apache 2.

Les changements de permissions effectués dans ce howto supposent que vous êtes en umask 0027

1 Installation et configuration

Pour installer ProFTPd, tapez

aptitude install proftpd

Je préfère lancer le ftp en tant que serveur autonome plutôt que par inetd. Ensuite, cela dépendra de la fréquentation de votre ftp. Si vous avez beaucoup d'utilisateur, mieux vaut le lancer en serveur autonome. Si vous en avez peu, inetd est préférable.

1.1 Les directives importantes de la configuration

La configuration de proftpd se fait dans /etc/proftpd/proftpd.conf. Ajoutez ou modifiez les lignes suivantes:

UseIPv6                         on
User                            ftpuser
Group                           ftpgroup
UseFtpUsers on
RequireValidShell on
DefaultRoot ~ !pfoo
umask 0027 0027
AuthOrder                       mod_auth_pam.c* mod_auth_unix.c

Une petite explication s'impose :

  • La directive umask défini l'umask par défaut des fichiers créés par le ftp.
  • La directive DefaultRoot permet d'enfermer tous les utilisateurs (présence du ~) sauf l'utilisateur pfoo dans leur répertoire personnel.
  • La directive RequireValidShell permet de s'assurer que le shell de l'utilisateur se connectant est listé dans /etc/shells.
  • La directive UseFtpUsers permet de spécifier si on veut utiliser ou non le fichier /etc/ftpusers pour gérer les utilisateurs n'ayant pas le droit de se connecter.
  • Les directives Group et User définissent avec quel utilisateur/groupe ProFTPd sera lancé.
  • Si votre serveur ne gère pas l'ipv6, passez la directive UseIPv6 à no.
  • Ne laissez surtout pas vide la directive AuthOrder !

Si vous constatez que vos connexions ftp sont lentes à établir vous pouvez essayer de désactiver ces deux options :

IdentLookups                    off
UseReverseDNS                   off

1.2 Autres directives pouvant être interessantes

La directive AllowStoreRestart on|off permet aux utilisateurs de reprendre un upload interrompu et la directive AllowRetrieveRestart on|off permet de reprendre un téléchargement interrompu. MaxLoginAttempts X permet d'empêcher de faire plus de X tentatives de login. MaxClients X permet de limiter le serveur à X utilisateurs maximum. MaxClientsPerHost X permet de limiter le serveur à X connexions par ip.

Il est aussi possible d'utiliser la directive limit dans différentes situations. Voici un exemple:

<Limit LOGIN>
  Allow 192.168.10.
  Deny all
</Limit>

De cette manière, seul les ips de la ligne Allow seront autorisés à se connecter. Les autres seront automatiquement déconnectées.

2 Lancement

Il faut d'abord créer le groupe de l'utilisateur défini par User et Group dans la configuration

groupadd ftpgroup
useradd -g ftpgroup -d /dev/null -s /etc ftpuser

Une fois cela fait, on peut lancer le serveur.

/etc/init.d/proftpd start

Si ProFTPd refuse de se lancer à cause d'un problème d'host, c'est parce qu'il essai de se lancer via l'hostname situé dans /etc/hostname. Si cet host n'est pas valide, il refusera de se lancer. Ajoutez simplement la ligne suivante dans votre fichier /etc/hosts :

ip_de_la_machine hostame_de_la_machine

3 Les utilisateurs virtuels

3.1 Création d'un utilisateur virtuel

Par défaut, ProFTPd permet à tous vos utilisateurs possédant un accès ssh de se connecter par ftp. Pratique, mais on ne veut pas forcément que tous le monde ait un accès ssh. C'est pourquoi ProFTPd permet la création d'utilisateurs virtuels, n'ayant pas d'accès ssh mais juste ftp. Cette création se fait par l'outil ftpasswd.

Pour créer un utilisateur, il faut obligatoirement être dans le répertoire /etc

cd /etc
ftpasswd --passwd --name=blah --uid=1000 --gid=104 --home=/srv/http/blah.com --shell=/bin/false

Ici, on a créé un utilisateur blah ayant accès au répertoire /srv/http/blah.com. Il faut remplacer l'uid de le gid (--uid et --gid) par l'uid de ftpuser et le gid de ftpgroup. Chez moi, respectivement 1000 et 104. Vous avez probablement remarqué que ftpasswd vous a affiché un message d'alerte lors de la création. C'est parce que le shell qu'on précise d'utiliser n'est pas listé dans /etc/shells. ProFTPd refusera donc la connexion de cet utilisateur. Pour empêcher cela, il suffit d'ajouter la ligne suivante à la fin de /etc/shells :

/bin/false

Une autre solution est d'ajouter la directive RequireValidShell off dans le fichier de configuration de ProFTPd.

Voilà, l'utilisateur virtuel est créé. Il faut encore créer son répertoire et lui attribuer les bonnes permissions. Si vous avez suivis mon howto sur apache 2 vous devez vous souvenir que j'ai créé le répertoire /srv/http/ appartenant à www-data:www-data. Pour que ProFTPd puisse accéder aux sous-répertoires il faut soit ajouter l'utilisateur ftpuser dans le groupe www-data soit attribuer le répertoire /srv/http/ au groupe ftpgroup. Je préfère la deuxième méthode :

chgrp ftpgroup /srv/http/

Le répertoire /srv/http/blah.com/ de l'utilisateur virtuel doit appartenir à ftpuser:ftpgroup :

mkdir /srv/http/blah.com
chown ftpuser:ftpgroup /srv/http/blah.com

Si le répertoire /srv/http/blah.com/ ou l'un de ses sous-répertoires doit être accessible par apache 2 il faut procéder comme avant : soit ajouter l'utilisateur www-data au groupe ftpgroup soit attribuer le répertoire /srv/http/blah.com/ au groupe www-data. Étant donné que à chaque fois qu'un fichier sera uploadé avec proftpd il sera créé pour l'utilisateur ftpuser et le groupe ftpgroup il vaut mieux choisir la première méthode. Ajoutez l'utilisateur www-data au groupe ftpgroup :

adduser www-data ftpgroup

3.2 Modification de la configuration

Il faut indiquer à ProFTPd où se situ le fichier contenant la liste des utilisateurs virtuels. Ouvrez le fichier de configuration /etc/proftpd/proftpd.conf et ajoutez y la ligne suivante :

AuthUserFile    /etc/ftpd.passwd

Nous allons même court-circuiter complètement les utilisateurs locaux de la machine en faisant précéder la directive AuthUserFile de la déclaration suivante :

AuthOrder mod_auth_file.c

Enfin, pour que ProFTPd prenne les modifications en compte, il faut le redémarrer:

/etc/init.d/proftpd restart

4 Sécurisation des transactions par SSL

ProFTPd permet de sécuriser les transactions ftp par l'utilisation d'un certificat SSL.

4.1 Génération du certificat ssl

Nous allons supposer que vous possédez déjà votre propre autorité de certification. Si ce n'est pas le cas vous pouvez suivre mon howto sur openssl. Si vous connaissez un peu openssl vous devez savoir qu'il est possible de verrouiller les clés avec une passphrase. ProFTPd supporte ce mécanisme mais cela l'empêchera de se lancer tout seul lors d'un redémarrage. A vous de choisir entre sécurité et disponibilité. Ajoutez les lignes suivantes dans votre fichier /etc/ssl/openssl.cnf :

[PROFTPD]
nsComment                       = "CORE Proftpd Server"
subjectKeyIdentifier            = hash
authorityKeyIdentifier          = keyid,issuer:always
issuerAltName                   = issuer:copy
basicConstraints                = critical,CA:FALSE
keyUsage                        = critical, digitalSignature, nonRepudiation, keyEncipherment
nsCertType                      = server
extendedKeyUsage                = serverAuth

Pour générer le certificat et le signer avec l'autorité core_ca :

openssl req -config /etc/ssl/openssl.cnf -newkey rsa:2048 -keyout proftpd.key -out proftpd.req
openssl ca -config /etc/ssl/openssl.cnf -name core_ca -extensions PROFTPD -in proftpd.req -out proftpd.pem

Si vous ne souhaitez pas chiffrer le certificat avec une passphrase ajoutez l'argument -nodes à la première ligne.

Déplacez les fichiers du certificat dans /etc/proftpd/ssl :

mkdir /etc/proftpd/ssl/
mv proftpd.* /etc/proftpd/ssl/
chmod -R 600 /etc/proftpd/ssl/

Et créez le fichier ca_chain contenant la chaine de certification :

cat /etc/ssl/core_ca/core_ca.pem /etc/ssl/root_ca/root_ca.pem > /etc/proftpd/ssl/ca_chain.pem

4.2 Configuration de proftpd

Vérifiez que le module TLS de ProFTPd est activé. Pour cela regardez si la ligne suivante existe dans /etc/proftpd/modules.conf :

LoadModule mod_tls.c

Ensuite, dans le fichier /etc/proftpd/proftpd.conf ajoutez les lignes suivantes :

<IfModule mod_tls.c>
  TLSEngine on
  TLSLog /var/log/proftpd/tls.log
  # Autoriser les procoles SSLv2 et TLS v1 (=SSLv3)
  TLSProtocol SSLv23 
  # Forcer les clients à passer par le chiffrement TLS. Ceci empêchera la connexion en mode non sécurisé.
  TLSRequired on
  # Certificats
  TLSRSACertificateFile /etc/proftpd/ssl/proftpd.pem
  TLSRSACertificateKeyFile /etc/proftpd/ssl/proftpd.key
  # La chaine de la ca :
  TLSCACertificateFile /etc/proftpd/ssl/ca_chain.pem
  # Autentifier les clients qui veulent utiliser le ftp tls ? (ils devront alors avoir leur propre certificat client)
  TLSVerifyClient off
  TLSRenegotiate required off
</IfModule>

Voila, il ne nous reste plus qu'à redémarrer ProFTPd.

/etc/init.d/proftpd restart

Si votre certificat est verrouillé par une passphrase, ProFTPd vous demandera de l'entrer ici.

Rappel : les fichiers du certificats doivent de préférence appartenir à root avec les droits 600.