vsFTPd (pour Very Secure FTP Daemon) s'annonce lui-même comme étant "probablement le plus sur et le plus rapide des serveurs FTP pour systèmes Unix".
La configuration portera essentiellement sur deux usages :
- utilisation du FTP avec du SSL
- utilisation du FTP avec des utilisateurs virtuels qui peuvent uloader
L'environnement est un serveur Ubuntu en version 12.04 LTS muni d'un noyau Linux en version 3.2.13.
1 – Installer vsFTPd
La version 2.3.5 est disponible sur les dépôts Ubuntu, l'installation est donc la plus aisée :
# apt-get install vsftpd
Et … voilà.
2 – Configurer vsFTPd
Le but ici est d'utiliser le serveur FTP uniquement avec des utilisateurs virtuels, et non avec les utilisateurs locaux du système Unix.
La configuration se trouve dans le fichier /etc/vsftpd.conf
2.1 – Configuration de base
Le fichier de configuration de base est plutôt restrictif et bien rempli, nous allons néanmoins y apporter quelques modifications.
anonymous_enable=NO
Par défaut, les accès anonymes sont autorisés. Cela ne nous intéresse pas, nous passons donc la directive à NO.
local_enable=YES
Cette option à YES permettra d'autoriser les utilisateurs locaux à utiliser le FTP, y compris les utilisateurs virtuels.
write_enable=NO
Cette option désactive l'écriture.
chroot_local_user=YES
Cet option activée permettra d'emprisonner l'utilisateur dans son propre répertoire afin d'éviter qu'il aille ailleurs.
nopriv_user=ftpsecure
Le démon vsftpd peut utiliser un utilisateur sans privilège. Par défaut, il utilisera nobody, comme tout autre démon : c'est pourquoi il vaut mieux lui dédié un utilisateur comme ftpsecure, qu'il faudra donc créer :
# useradd -r -s /bin/false ftpsecure
guest_enable=YES guest_username=ftpvirtual
La première option active le map entre les utilisateurs virtuels et un utilisateur réel.
La deuxième indique le nom de cet utilisateur réel, ici ftpvirtual, qu'il faut créer et donc le répertoire utilisateur sera le répertoire de dépôt FTP de nos utilisateurs virtuels.
# useradd -m ftpvirtual
Il faut les droits en écriture sur ce répertoire, sous peine de ne pouvoir se connecter (restriction imposée par les versions récentes de vsftpd) :
# chmod a-w /home/ftpvirtual/
user_config_dir=/etc/vsftpd_user_conf
Ce paramètre permet d'activer la configuration par utilisateur, permettant ainsi d'attribuer des droits spécifiques comme la possibilité d'écrire, alors que c'est interdit dans la configuration de base.
Les configurations seront centralisées dans ce répertoire, qu'il faut donc créer :
# mkdir /etc/vsftpd_user_conf
Et voilà pour la configuration de base !
2.2 – Configurer SSL pour vsFTPd
Toujours dans le fichier /etc/vsftpd.conf, la configuration SSL est assez simple : il suffit d'activer SSL et de lui donner le couple de clé privée/publique (pour la génération de ces clés, voir l'article http://blog.moncoindunet.fr/linux/openssl-creer-un-certificat-auto-signe/).
Voici donc les trois directives à ajouter :
ssl_enable=YES rsa_private_key_file=/etc/ssl/private/vsftpd.key.pem rsa_cert_file=/etc/ssl/certs/vsftpd.cert.pem
Enregistrer et quitter, c'est bon !
2.3 – Configurer des utilisateurs virtuels
2.3.1 – Créer une base de données
Les utilisateurs virtuels avec leur mot de passe associé doivent se trouver dans une base de données de type Berkeley DB.
Le but est donc de créer un fichier texte pour ensuite le convertir.
Créer donc un fichier texte :
# vim vsftpd_logins.txt
Y mettre une suite d'utilisateurs/mot de passe séparés par un retour chariot :
user password user2 password2
Enregistrer le fichier et quitter.
Installer ensuite les outils de base de données Berkeley :
# apt-get install db-util
Convertir alors le fichier texte :
# db_load -T -t hash -f /etc/vsftpd_logins.txt /etc/vsftpd_login.db
Puis modifier les droits des deux fichiers pour un peu plus de discrétion :
# chmod 600 /etc/vsftpd_login.txt # chmod 600 /etc/vsftpd_login.db
2.3.2 – Créer un fichier de règle PAM
La prochaine étape consiste à créer un fichier PAM pour utiliser cette base de données lors de l'authentification des utilisateurs.
Supprimer le fichier PAM existant :
# rm /etc/pam.d/vsftpd
Et en ouvrir un nouveau :
# vim /etc/pam.d/vsftpd
Y ajouter ces deux lignes :
auth required /lib/i386-linux-gnu/security/pam_userdb.so db=/etc/vsftpd_login account required /lib/i386-linux-gnu/security/pam_userdb.so db=/etc/vsftpd_login
Enregistrer et quitter.
2.3.3 – Créer un fichier de configuration par utilisateur
Avec la configuration actuelle, les utilisateurs virtuels peuvent lire les fichiers présents dans le répertoire de dépôt FTP.
On peut vouloir donner plus de droits à un utilisateur, pour lui permettre par exemple d'uploader lui-même des fichiers.
Pour cela, chaque utilisateur virtuel devra avoir sa propre configuration située dans le répertoire /etc/vsftpd_user_conf.
Cette étape n'est pas obligatoire et ne concernent que les utilisateurs ayant des droits supérieurs aux droits de base, c'est à dire qui ont besoin de faire plus que simplement lire les fichiers de répertoire de dépôt FTP.
Editer le fichier de configuration d'un utilisateur virtuel :
# vim /etc/vsftpd_user_conf/user
Et y inscrire ces options :
anon_world_readable_only=NO
Permet de télécharger des fichiers qui ne sont pas seulement en lecture pour tous.
write_enable=YES
Permet les droits d'écriture.
anon_upload_enable=YES
Permet de pouvoir uploader des fichiers.
anon_mkdir_write_enable=YES
Permet de créer des dossiers.
anon_other_write_enable=YES
Permet d'autres opérations d'écriture comme supprimer ou renommer.
3 – Redémarrer et tester
3.1 – Redémarrer
Redémarrer le service vsftpd :
# service vsftpd restart vsftpd stop/waiting vsftpd start/running, process 32009
3.2 – Tester
Se connecter au serveur :
# ftp localhost Connected to localhost.localdomain. 220 (vsFTPd 2.3.5)
Inscrire le nom et le mot de passe d'un utilisateur virtuel créé :
Name (localhost:aldur): user 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp>
C'est bon, la connexion est effectuée !
On peut faire un test de lecture :
ftp> ls 200 PORT command successful. Consider using PASV. 150 Here comes the directory listing. drwxr-xr-x 2 1004 1004 4096 Dec 16 16:31 user -rw-r--r-- 1 0 0 458 Dec 16 15:27 hosts 226 Directory send OK.
On peut se déplacer dans un répertoire :
ftp> cd user 250 Directory successfully changed
Et y placer un fichier :
ftp> put resolv.conf local: resolv.conf remote: resolv.conf 200 PORT command successful. Consider using PASV. 150 Ok to send data. 226 Transfer complete. 61 bytes sent in 0.00 secs (676.9 kB/s)
C'est OK ! On peut quitter :
ftp> bye 221 Goodbye.
Le serveur vsFTPd est maintenant installé, configuré et les utilisateurs virtuels peuvent désormais l'utiliser !
4 – Problèmes et solutions
4.1 – Emplacement des modules PAM
La connexion FTP échoue et ce message apparait dans les logs d'authentification :
vsftpd: PAM unable to dlopen(/lib/security/pam_userdb.so): /lib/security/pam_userdb.so: cannot open shared object file: No such file or directory vsftpd: PAM adding faulty module: /lib/security/pam_userdb.so
C'est que le module PAM userdb n'est pas au bon endroit.
Il faut alors préciser le chemin correct dans le fichier /etc/pam.d/vsftpd (par exemple, dans mon cas il est dans /lib/i386-linux-gnu/security/ au lieu d'être habituellement dans /lib/security/).
4.2 – Droits en écriture sur le répertoire de dépôt
La connexion FTP se déroule bien mais se termine sur ce message :
500 OOPS: vsftpd: refusing to run with writable root inside chroot() Login failed.
Il faut enlever les droits en écriture sur le répertoire racine de l'utilisateur réel (restriction imposée par les versions récentes de vsFTPd) :
# chmod a-w /home/ftpvirtual/
Leave a Reply