Table des matières
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 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 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'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 :
- vsftpd.conf
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
- 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