Installation d'un serveur FTP chroot

Installer et configurer un serveur FTP en environnement sécurisé sous FreeBSD

Problématique

Par défaut, sous FreeBSD, une connexion FTP donne accès à tous les répertoires et fichiers de la machine. Pour des raisons de sécurité et de simplicité d'utilisation, il peut être utile de limiter les utilisateurs à un répertoire et ses sous-répertoires.

Solution

Pour limiter les accès d'une connexion à un répertoire, il faut configurer le daemon ftp (ftpd) en mode chroot.

Création d'un groupe

Commençons par créer un compte spécifique dans /etc/group, par exemple ftpusers, à l'aide d'un éditeur standard (vi, etc.) :

ftpusers:*:201:

Le premier champ indique le nom du groupe, le deuxième le mot de passe (mais nous n'en mettrons pas, ils sont gérés au niveau des utilisateurs), le troisième champ l'identifiant du groupe et le dernier (ici vide) la liste des invités (utilisateurs ou groupes).

Création du fichier /etc/ftpchroot

La configuration de chroot pour ftp est contenue dans /etc/ftpchroot. Comme ftpd n'est pas configuré par défaut pour cela, le fichier n'existe pas.

Créons un fichier /etc/ftpchroot à l'aide d'un éditeur standard et ajoutons ceci :

@ftpusers /home/ftp/partage ./partage

Nous indiquons ainsi que tous les invités du groupe (@) ftpusers sont redirigés vers /home/ftp/partage nommé partage.

Nous pouvons aussi simplement rediriger les utilisateurs vers leur répertoire personnel dans ce cas :

utilisateur1
utilisateur2

etc. Pour plus d'exemple, consulter man ftpchroot (après la compilation).

Pour des raisons pratiques, nous créons ici un groupe spécifique dont les utilisateurs partagerons tous le même répertoire. Mais vous pouvez aussi ajouter des groupes existant déjà, ou des utilisateurs actifs.

Compilation

ftpd n'est pas compilé pour prendre en charge le chroot. Il faut donc le recompiler. Si vous ne disposez pas des sources, installez-les avec sysinstall. Téléchargez les sources /bin et /libexec.

En effet, le chroot de ftpd agit simplement sur la commande ls, lui interdisant de sortir du répertoire configuré dans /etc/ftpchroot. Il est donc nécessaire de compiler ftpd (dans libexec) avec la commande ls (qui se trouve dans /bin).

Pour éviter les problèmes au moment de la configuration, interrompons tous les services ftpd.

Modifions le fichier /etc/make.conf en lui ajoutant la ligne suivante :

FTPD_INTERNAL_LS=YES

Rendons-nous dans le répertoire des sources de ftpd :

cd /usr/src/libexec/ftpd

Puis compilons les sources :

make clean
make all
make install

Remarque

Si la commande make all donne le message d'erreur suivant :

"make: don't know how to make ls.c. Stop"

c'est que vous n'avez pas téléchargé les sources /bin et que vous ne pouvez pas compiler ftpd avec la commande ls. Dans ce cas, téléchargez-les avec sysinstall.

C'est prêt !

Connexion

Créons un nouvel utilisateur associé au groupe ftpusers et connectons-nous avec lui à l'aide de notre client ftp préféré (Filezilla, ...). Nous constatons que nous sommes bien dans le répertoire /home/ftp/partage et que nous ne pouvons pas remonter l'arborescence.

Si la configuration nn'était pas parfaite, il suffirait alors de se déconnecter, de modifier /etc/ftpchroot et de se reconnecter pour que les modifications soient prisent en compte.

Pour aller plus loin…

Pour améliorer encore la sécurisé de notre serveur, nous pourrions aussi configurer le sFTP...