Cette page explique la mise en place d'un serveur FTP avec ''vsftpd'', telle qu'elle avait été réalisée à FedeRez.
Cependant, la nécessité d'utiliser PAM pour authentifier des utilisateurs en utilisant les données d'un LDAP nous a fait changer de serveur pour ''proftpd'' (''pure-ftpd'' aurait probablement convenu également).
Une autre limitation de ''vsftpd'' est l'impossibilité d'ajouter ou de modifier des fichiers ou des dossiers à la racine du FTP via un client FTP (il s'agit d'une « mesure de sécurité »).
====== Mise en place ======
C'est ''vsftpd'' qui est installé, et ce fut super chiant à mettre en place, notamment en ayant forcé TLS... Cf cette [[https://zerobin.zertrin.org/?63b0bec3ecec6ed0#+IemfQOOV7JyDCwywX0bef0TmU0LEccfhDn5TdKC9y0=|archive IRC]] pour les déboires rencontrés.
===== Liens (potentiellement) utiles =====
* Site officiel : https://security.appspot.com/vsftpd.html
* Manpage de vsftpd.conf : http://linux.die.net/man/5/vsftpd.conf
===== Installation =====
Installation plus que classique du paquet :
apt-get install vsftpd
===== Explication préalable de la configuration choisie =====
Le but de la config est de permettre à tout membre de FedeRez avec un compte [[admin:services:ldap|LDAP]] de pouvoir accéder via le FTP à un dossier commun en lecture/écriture. L'authentification des utilisateurs FTP se fera donc via le LDAP. De plus l'ensemble des transactions (authentification et échanges de données) devra se faire avec chiffrement TLS. Autrement dit seul le protocole FTPES (FTP avec connexion TLS explicite) sera supporté.
On va donc activer la gestion des //virtual users// qui s'authentifient individuellement via le LDAP de FedeRez, puis qui seront mappés par vsftpd sur l'user local ''ftp''. Ce dernier sera chrooté dans son dossier personnel qui servira de racine du FTP.
Par défaut, le dossier personnel de l'utilisateur ''ftp'' est ''/srv/ftp''. Cependant ce dossier ne se trouve pas sur la "grosse" partition de 400 Go d'[[admin:serveurs:hexagon|hexagon]]. On va donc stocker les fichiers dans le répertoire ''/home/ftp'' créé pour l'occasion.
===== Configuration =====
==== Préparation des dossiers ====
On commence par créer le répertoire ''/home/ftp''
mkdir /home/ftp
''root'' __doit__ être le proprio du dossier, sinon ça marche pas...
chown root:ftp /home/ftp
Les perms du dossier doivent être 755, sinon ça marche pas...
chmod 755 /home/ftp
L'utilisateur ''ftp'' n'a donc pas de droits d'écriture dans la racine de son home. Ça fait partie des obligations de vsftpd. Donc pour pouvoir quand même utiliser le FTP pour autre chose que de la lecture seule, on crée un sous-dossier à la racine appartenant cette fois-ci à ''ftp''
mkdir /home/ftp/federez
chown ftp:ftp /home/ftp/federez
Et pour finir, on va lier symboliquement ''/srv/ftp'' à ''/home/ftp'', j'ai essayé de demander à vsftpd d'utiliser directement ''/home/ftp'' mais la encore il n'a pas aimé du tout...
rmdir /srv/ftp
ln -s /home/ftp /srv/ftp
Bon voilà normalement vsftpd devrait être content avec cette structure. Passons à la configuration à proprement parler.
==== Config de vsftpd ====
Le fichier de configuration de vsftpd est ''/etc/vsftpd.conf''.
Voici la config en place, sans les commentaires superflus :
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
guest_enable=YES
guest_username=ftp
local_root=/srv/ftp
ftp_username=ftp
nopriv_user=ftp
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
chown_uploads=YES
chown_username=ftp
virtual_use_local_privs=YES
local_umask=022
anon_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/xferlog.log
xferlog_std_format=YES
ftpd_banner=Bienvenue sur le serveur FTP de FedeRez
pam_service_name=vsftpd
ssl_enable=YES
ssl_ciphers=HIGH
rsa_cert_file=/etc/ssl/federez/chain.pem
rsa_private_key_file=/etc/ssl/private/federez.key
force_local_data_ssl=YES
force_local_logins_ssl=YES
hide_ids=YES
==== Config du module PAM LDAP ====
Comme on a dit, on veut authentifier les utilisateurs via le LDAP de FedeRez.
Pour cela vsftpd utilise le service PAM suivant : ''/etc/pam.d/vsftpd''
auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
auth [success=1 default=ignore] pam_ldap.so minimum_uid=1000
auth requisite pam_deny.so
auth required pam_permit.so
account [success=1 new_authtok_reqd=done default=ignore] pam_unix.so
account requisite pam_deny.so
account required pam_permit.so
account [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad] pam_ldap.so minimum_uid=1000
password [success=1 default=ignore] pam_ldap.so minimum_uid=1000
password requisite pam_deny.so
password required pam_permit.so
session [default=1] pam_permit.so
session requisite pam_deny.so
session required pam_permit.so
session required pam_unix.so
session [success=ok default=ignore] pam_ldap.so minimum_uid=1000
==== Application de la nouvelle config ====
invoke-rc.d vsftpd restart