Very Secure FTPd

vsFTPd est un serveur FTP qui mise beaucoup sur la sécurité et est l’un des premiers logiciels serveurs à mettre en œuvre la séparation des privilèges, minimisant ainsi les risques de piratage.

Installation de vsftpd

Installation du paquet en ligne de commande :

# apt-get install vsftpd

Configuration de vsftpd

Le fichier de configuration de VsFTPd se situe dans /etc/vsftpd.conf

Connexion des utilisateurs locaux

Pour permettre aux utilisateurs déjà présent sur le serveur (possédant déjà un compte) de se connecter au FTP et d’avoir les droits d’écriture, il faut modifier le fichier /etc/vsftpd.conf :

# Uncomment this to allow local users to log in.
local_enable=YES
# Uncomment this to enable any form of FTP write command.
write_enable=YES

Modifier le umask

Quand un utilisateur crée ou upload un nouveau fichier sur le FTP le u-mask appliqué par défaut est à 077, ce qui fait que les droits sur les répertoires et les fichiers sont respectivement à 700 et 600. Si on applique un u-mask de 022 les répertoires auront par défaut les droits 755 et les fichiers 644.

# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022

Donc lorsqu’un dossier ou fichier sera déplacé ou créé sur le FTP :
777-022=755 soit rwx-r-xr-x pour les dossiers (alors qu’avec un u-mask de 077 on aurait eu 700)
666-022=644 soit rx-r--r-- pour les fichiers

Message d’accueil / de bienvenue

C’est toujours amusant de personnaliser un texte d’accueil. Deux méthodes : Soit un texte simple sur une seule ligne :

# You may fully customise the login banner string:
ftpd_banner=Salut, les lapins sont des animaux dangereux

Soit un fichier texte contenant une mise en forme (ASCII par exemple)

# When you create a longer banner you may want to just create a file and then
# make a reference to that file. This can be done by using the banner_file option.
banner_file=/etc/vsftpd.banner.txt

Petit aperçu :

Ne pas autoriser de connexions anonymes

Ne pas autoriser de connexion anonyme sur le FTP.

# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=NO # ( Attention, si cette ligne est commentée alors la connexion anonyme sera autorisée)

Limiter l’accès aux utilisateurs à leur dossier personnel

Il nous est précisé : “You may specify an explicit list of local users to chroot() to their home directory. If chroot_local_user is YES, then this list becomes a list of users to NOT chroot().

# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
chroot_local_user=YES
chroot_list_enable=NO
# (default follows)
chroot_list_file=/etc/vsftpd.chroot_list

SI chroot_local_user=YES ALORS :

  • tous les utilisateurs seront chrootés dans leur home directory SAUF ceux de la liste vsftpd.chroot_list

SI chroot_local_user=NO ALORS :

  • aucun utilisateur ne sera chrooté dans leur home directory SAUF ceux de la liste vsftpd.chroot_list

Selon le cas, il faut spécifier les identifiants des utilisateurs dans /etc/vsftpd.chroot_list.

Relancer le serveur

Il est necessaire de relancer, du moins il vaut mieux, le serveur FTP.

# /etc/init.d/vsftpd reload
Stopping FTP server: vsftpd.
Starting FTP server: vsftpd.

Ou en utilisant service

# service vsftpd reload
Stopping FTP server: vsftpd.
Starting FTP server: vsftpd.

3. Création d’un utilisateur

Lorsque l’on ajoute un utilisateur, le système créé automatiquement un répertoire dans /home portant son nom. Exemple : si on ajoute l’utilisateur user1 alors le répertoire /home/user1 sera créé. Ce répertoire appartient à user1 et au groupe user1.

Cas 1 : L’utilisateur n’existe pas

Dans ce cas on ajoute un nouvel utilisateur et son dossier personnel sera accessible via le ftp :

# adduser bender-rodriguez

Erreur possible :

Please enter a username matching the regular expression configured via the NAME_REGEX[_SYSTEM} 
configuration variable.
Use the `--force-badname' option to relax this check or reconfigure NAME_REGEX.

Si vous avez cette erreur, c’est que le nom utilisé comporte des caractères qui ne conviennent pas. Dans ce cas il faut utiliser l’option --force-badname

# adduser bender-rodriguez --force-badname

Il nous sera demandé un mot de passe (obligatoire) et des informations que l’on peut laisser vides

Cas 2 : Un dossier porte déjà le nom d’un utilisateur

Imaginons que le répertoire /home/bender-rodriguez existe déjà et de plus contienne des fichiers.
Si ce répertoire existe, c’est que quelqu’un d’autre (en général root) l’a précédemment créer et de ce fait le propriétaire et le groupe propriétaire ne sont pas ceux attendus pour ce répertoire.

Changement du propriétaire :

# chown -R bender-rodriguez /home/bender-rodriguez/

De façon récursive tous les fichiers présent dans le répertoire [ainsi que le répertoire] auront comme propriétaire bender-rodriguez

Changement du groupe propriétaire propriétaire :

# chgrp -R bender-rodriguez /home/bender-rodriguez/

De façon récursive tout les fichiers présent dans le répertoire [ainsi que le répertoire] auront comme groupe propriétaire bender-rodriguez

Iptables

Ne pas oublier d’ouvrir les ports FTP, par défaut 20 et 21

# --- FTP ----------------------------------:
iptables -t filter -A INPUT -p tcp --dport 20 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 20 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 21 -j ACCEPT

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/bender-rodriguez/

Pour quand même forcer vsftp : http://lindev.fr/index.php?post/2013/04/05/wheezy-vsftpd-et-chroot

Documentation

https://security.appspot.com/vsftpd.html
http://vsftpd.beasts.org/vsftpd_conf.html
http://lindev.fr/index.php?post/2013/04/05/wheezy-vsftpd-et-chroot

> Partager <