Installation d’un serveur FTP avec utilisateur virtuel sur Debian Squeeze

J’ai opté pour le serveur vsFTPD car il permet d’utiliser des comptes virtuels et de les stocker dans une base de données autre que SQL.
Pourquoi des utilisateurs virtuels ? Car je ne veux pas utiliser les utilisateurs linux, ainsi je peux créer des comptes linux sans autorisation de login. Pas de connexion ssh c’est moins de risque d’utiliser un exploit pour passer root.
Pourquoi pas de base SQL ? Je n’ai pas envie de surcharger un peu plus MySQL avec une base pour 2/3 comptes. Une base Berkeley répond sans problème au besoin.

EDIT: la mise à jour pour Debian Wheezy et Debian Jessie sont dans les commentaires de l'article.

1. Installation.

Normalement une base Berkeley devrait être installée sur le serveur.

 
> aptitude search libdb4

Vous devriez voir différente version : libdb4.6, libdb4.7, libdb4.8. Si un « i » précède un des noms de version c’est que la librairie est installée sur le serveur. Sinon il faut l’installer.
On aura besoin des utilitaires correspondants à la version de la base que l’on souhaite utiliser, la version 4.8 dans mon cas.

 
> aptitude install db4.8-util vsftpd

 

2. Création de la base d’utilisateur

La base berkeley est une base de hash, on va y stocker les couples login / mot de passe en allant à la ligne à chaque entrée :

 
login1
password1
login2
password2
…

On va créer un fichier text avec les identifiants en clair puis ensuite on hashera le fichier pour obtenir notre base.

 
> mkdir /etc/vsftpd
> vim  /etc/vsftpd /login.txt

Ajouter les logins et les mots de passe puis enregistrer. Bien évidement ce fichier est dangereux car tout est en clair à l’intérieur. On va limiter les droits de lecture à root uniquement.

 
> chmod 600 /etc/vsftpd/login.txt

Ensuite il faut utiliser l’utilitaire db4.x_load pour hasher et créer la base de données.

 
> db4.8_load  -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db

On va aussi restreindre les droits sur ce fichier pour éviter que la base soit récupérée et exploitée.

 
> chmod 600 /etc/vsftpd/login.db

Pour ajouter, modifier ou supprimer un utilisateur il faut éditer le fichier login.txt puis relancer la création de la base avec la commande ci-dessus.

 

3. Configuration de vsFTPd

a. Configuration générale

Plus haut, on a créé la base des utilisateurs, mais encore faut-il dire à vsFTPd de l‘utiliser. Cela se passe dans le fichier /etc /pam.d/vsftpd
Il suffit de remplacer son contenu par ses lignes :

 
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/login

Maintenant configurons le serveur lui-même. Le fichier de config à éditer est /etc/vsftpd.conf
Voici tous les paramètres que j’ai changé.

 
# pas d’utilisateur anonyme
anonymous_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
# par default pas de droit d’écriture, on spécifiera les droits par utilisateur plus tard
write_enable=NO
# on n’autorise pas les utilisateurs à se faire passer pour d’autre
chown_uploads=NO
chown_username=nobody
# on restreint les utilisateur à leur home 
chroot_local_user=YES
# on autorise les utilisateurs locaux 
local_enable=YES
 
#Ajout de quelques paramètres manquant :
#active les utilisateurs virtuels et spécifie le chemin des configs
guest_enable=YES
guest_username=www-data
user_config_dir=/etc/vsftpd/user_conf
 
#quelques restrictions sur le serveur :
max_clients=20
max_per_ip=5

 

b. Configuration des utilisateurs

Pour chaque utilisateur il faut créer un fichier de configuration spécifiant ses droits et le dossier de partage.

 
> mkdir /etc/vsftpd/user_conf
> cd /etc/vsftpd/user_conf
> vim user1

Y ajouter les paramètres de config suivant :

 
# droits de lecture  de l’utilisateur
download_enable=YES
anon_world_readable_only=NO
# droits d'écriture de l’utilisateur
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
# droit de renommer et de supprimer
anon_other_write_enable=YES
# droit de faire des chmod
chmod_enable=YES
virtual_use_local_privs=YES
#affiche les  fichiers cachés (important pour l’utilisation des fichiers htaccess)
force_dot_files=YES
# Définis le dossier du FTP
local_root=/home/user1/public_html
# Définis a qui appartiendront les fichiers uploader
guest_username=user1

Le serveur est maintenant prêt à être utilisé il ne reste plus qu’à redémarrer vsFTPd et à tester.

 
> /etc/init.d/vsftpd restart

 

4. Sécurisation de vsFTPd avec Fail2ban

Un serveur FTP est une porte ouverte sur l’extérieur et bien sur un malin peut essayer d’entrer par cette porte. Fail2Ban va faire le travail pour nous, il va vérifier les connexions et bannir les IP qui échouent un peu trop. Pour ça on édite le fichier /etc/fail2ban/jail.conf ou jail.local suivant votre configuration :

 
[vsftpd]
enabled  = true
port     = ftp,ftp-data,ftps,ftps-data
filter   = vsftpd
logpath  = /var/log/vsftpd.log
# or overwrite it in jails.local to be
# logpath = /var/log/auth.log
# if you want to rely on PAM failed login attempts
# vsftpd's failregex should match both of those formats
maxretry = 5

 

5. Monitoring de vsFTPd avec Munin

Vous avez déjà installé Munin pour monitorer votre serveur ? Cool un plugin pour vsFTPd existe (http://exchange.munin-monitoring.org/plugins/vsftpd/details), il ne reste plus qu’à l’ajouter.

Le depot des plugins est maintenant sur github: https://github.com/munin-monitoring/contrib/ et celui qui nous interesse est https://github.com/munin-monitoring/contrib/blob/master/plugins/ftp/vsftpd

 
 
> chmod 755 /usr/share/munin/plugins/vsftpd-v1
> cd /etc/munin/plugins/
> ln -s /usr/share/munin/plugins/vsftpd-v1

Ensuite il faut modifier la config de munin et redémarrer le service.

 
> vim /etc/munin/plugin-conf.d/munin-node

Puis ajout des lignes :

 
[vsftpd-v1]
user root

Et on redémarre munin :

 
> /etc/init.d/munin-node restart

 

Il y a 5 commentaires.

Ecrit par imars le 16 nov. 2015

Merci pour le tuto, sous Debian 8 Jessie il faut rajouter allow_writeable_chroot=YES dans le fichier vsftpd.conf Une petite précision car j'ai eu l'erreur sur la ligne guest_username=user1 il faut mettre guest_username=www-data sinon pas d'accès au répertoire.

Ecrit par Ulrich le 20 juil. 2015

Pour une installation sur Debian Jessie il faut remplacer les paquets libdb4.8 et db4.8-util par libdb5.3 et db5.3-util.

 
> apt-get install libdb5.3 db5.3-util

La génération de la base s'obtient par la commande:

 
> db5.3_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db

Le fichier /etc/pam.d/vsftpd doit contenir:

 
auth required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/login
account required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/login
 

 

 

 

Ecrit par Gringo le 6 janv. 2014

Bonjour, j'ai bien suivis votre tuto et modifier avec les commentaires de Pascal mais j'ai un message d'erreur: 500 OOPS: cannot locate user entry: (utilisateur crée dans le login.txt et ensuite db)

Ecrit par Pascal le 4 oct. 2013

Bonjour, Merci pour ce tuto que j'ai utilisé fréquemment. Je viens d'installeer vsftpd sur wheezy. Voici quelques différences : aptitude search libdb5 au lieu de aptitude search libdb4 puis on installe par exemple (en fonction de la version) aptitude install db5.1-util vsftpd Enfin pour générer le fichier de base de données des mots de passe db5.1_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db Enfin le fichier : /etc /pam.d/vsftpd auth required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/login account required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/login pam_userdb.so a été déplacé. Pascal

Ecrit par Toofff le 23 nov. 2012

Génial ton tuto!!! Super simple et efficace!!! Merci

Ajouter un commentaire