====== Créer un FTP privé ======
Le tour de force de cette configuration est qu'elle vous évite de créer des utilisateurs UNIX sur votre machine, comme ce serait le cas avec d'autres solutions, telle que **proftpd**. A chaque connexion le serveur FTP va interroger la base de donnée pour savoir si l'utilisateur utilise le bon mot de passe. C'est donc un cran au dessus en terme de sécurité :p
Vous aurez pour cela besoin d'une base de donnée ainsi que d'un serveur **vsftpd** (peuvent être sur deux machines différentes).
* 1 : Installez **vsftpd** :
apt-get install vsftpd
* 2 : Configuration de **vsftpd** :
Réglage des ports :
listen_port=22
pasv_min_port=20000
pasv_max_port=20050
Nous allons utiliser les utilisateurs locaux :
local_enable=YES
On veut aussi que ces utilisateurs soient restreints à un dossier, par exemple pour les restreindre au **/home** de l'utilisateur **ftp**:
chroot_local_user=YES
local_root=/home/ftp/
secure_chroot_dir=/var/run/vsftpd
On active les utilisateurs virtuels et on les fait se passer pour un compte, ici ftp:
guest_enable=YES
guest_username=ftp
On retire ensuite tous les droits par défaut...
anon_world_readable_only=YES
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
hide_file=*
force_dot_files=YES
On oublie pas de dire où trouver la configuration par utilisateur :
Je vous conseille de créer un dossier **/etc/vsftpd** et de la mettre dedans...
user_config_dir=/etc/vsftpd
On indique le service pam à utiliser pour l'authentification:
pam_service_name=vsftpd
Reglez la bannière de votre FTP :
ftpd_banner=Bienvenue sur ce serveur FTP !
Pensez aussi à régler votre masque comme bon vous semble...
local_umask=022
* 3 : Une conf par utilisateur, par exemple pour tony, éditez /etc/vsftpd/tony :
anon_world_readable_only=NO
local_root=/home/ftp/tony
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
hide_file=(none)
force_dot_files=YES
* 4 : Nous allons utiliser **mysql** comme base de donnée. Installez donc **libpam-mysql** :
apt-get install libpam-mysql
* 5 : Préparation de la base de données :
Prenez votre base de données et créez une table contenant les champs name et pass.
Nous supposons qu'un utilisateur **bidule** avec le mot de passe **truc** a des droits sur la base de donnée **ftp** où existe la table **users** définie comme précédement, le tout sur le serrveur à l'adresse **ip_server** ...
* 6 : On configure le service Pam en éditant le fichier /etc/pam.d/vsftpd:
auth required pam_mysql.so host=ip_server user=bidule passwd=truc db=ftp table=users usercolumn=name passwdcolumn=pass crypt=3
account required pam_mysql.so host=ip_server user=bidule passwd=truc db=ftp table=users usercolumn=name passwdcolumn=pass crypt=3
# Standard behaviour for ftpd(8).
auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
# Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so.
# Standard pam includes
#@include common-account
#@include common-session
#@include common-auth
#auth required pam_shells.so
Les mots de passes sont en MD5.
Il ne vous reste plus qu'à exécuter cette commande mysql pour ajouter tony...
INSERT INTO 'users'(`name`, `pass`) VALUES('tony',MD5('tony_password'))
Et voilà !!!
il se peut que le message d'erreur suivant apparaisse : 500 OOPS: priv_sock_get_cmd, dans ce cas rajoutez simplement dans le fichier conf la ligne
seccomp_sandbox=NO