Après avoir longtemps utilisé pure-ftpd, dont je reste très content, je suis passé à vsftpd juste parce que pure-ftpd demande de modifier les “capabilites” des VM openvz, et vsftpd non… (mais pure-ftpd permet d'utiliser des quotas sur les users virtuels, sa conf est assez simple et il est aussi très sécure donc reste un excellent choix en général).
Pour mon usage, je préfère n'avoir que des users virtuels, et me passer de base de données pour l'authentification. On prendra donc la solution d'un fichier texte que l'on créé avec htpasswd (idem apache donc)
aptitude install vsftpd # et on aura besoin de ça pour utiliser pam avec un fichier txt user/pass aptitude install libpam-pwdfile
Configuration de base de /etc/vsftpd.conf
anonymous_enable=NO # un user pour faire tourner le server nopriv_user=ftpserver #On definit le nombre maximum d’utilisateurs connectés max_clients=20 #Nombre maximum d’utilisateurs par IP max_per_ip=5 # mode passif autorisé pasv_enable=YES # avec check IP pasv_promiscuous=NO # On autorise les users virtuels # on laisse virtual_use_local_privs à no ce qui donne à nos users virtuels les même droits que "anonyme" (quasi rien) guest_enable=YES guest_username=ftpguestuser anon_umask=022 # on ajoute une racine par défaut et un rep par défaut (la connexion sera refusée s'il n'existe pas) local_root=/var/ftp/$USER user_sub_token=$USER # le dossier des conf par user user_config_dir=/etc/vsftpd.d/users_conf
(cf http://vsftpd.beasts.org/vsftpd_conf.html)
Reste à configurer l'autentification avec pam (cf http://howto.gumph.org/content/setup-virtual-users-and-directories-in-vsftpd/), dans /etc/pam.d/vsftpd on remplace la ligne auth par
auth required pam_pwdfile.so pwdfile /etc/vsftpd.d/passwd account required pam_permit.so
Et on ajoute nos users avec les commandes classiques htpasswd (on peut d'ailleurs utiliser le même fichier htpasswd que celui d'un vhost apache, pour partager les user/pass entre l'authentif http et le ftp)
htpasswd /etc/vsftpd.d/passwd mon_nouveau_user # et on créé son fichier de conf kivabien echo 'local_root=/chemin/vers/rep/kivabien write_enable=YES anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES' > /etc/vsftpd.d/users_conf/mon_nouveau_user