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