Installation de configuration de ProFTPd
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
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.
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
etUser
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
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.
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
Les utilisateurs virtuels
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
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
Sécurisation des transactions par SSL
ProFTPd permet de sécuriser les transactions ftp par l'utilisation d'un certificat SSL.
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
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.