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
Ecrit par Ulrich le 20 juil. 2015
Ecrit par Gringo le 6 janv. 2014
Ecrit par Pascal le 4 oct. 2013
Ecrit par Toofff le 23 nov. 2012
Ajouter un commentaire