Installer et configurer un serveur ProFTPd

D’abord, installer Debian, puis installer et paramétrer ProFTPd pour servir dans un contexte scolaire avec authentification des utilisateurs par LDAP.

ProFTPd sur Debian 12 netinstall

Introduction

  1. Télécharger et installer une distribution Debian
  2. Mettre à jour la distribution et installer les paquets proftpd
  3. Configurer ProFTPd
  4. Créer un utilisateur
  5. Tester la configuration

1a. Télécharger

Depuis cette page : https://www.debian.org/distrib/ sélectionner Une image d’installation de taille réduite

soit la version netinstall. Sous Linux, ouvrir un terminal et télécharger avec l’outil wget :

wget https://cdimage.debian.org/debian-cd/current/i386/iso-cd/debian-12.1.0-i386-netinst.iso

Sous Windows, essayer wget dans le PowerShell : c’est un alias de la commande Invoke-WebRequest, ou encore en mode graphique avec le logiciel open source Free Download Manager.

1b. Installer

Nous devons dimensionner l’installation en fonction de l’objectif de stockage, et des ressources : puissance processeur et mémoire système. Par exemple, attribuer au serveur un espace de 30 Go avec 8 Go de RAM sur un serveur physique évolutif pouvant recevoir des espaces de stockage supplémentaires pour les données statiques.

Une installation de test est réalisée en machine virtuelle.

Pour une installation sur un ordinateur dédié, il sera possible de s’y connecter directement, ou en SSH moyennant l’installation du paquet openssh-serveur, par une authentification login/mot de passe, ou par la mise en place de clés SSH.

Pour ce test le mot de passe est rootroot (à ne surtout pas faire en production).

De même l’utilisateur créé se nomme mainadmin et, toujours pour cette installation de test uniquement, son mot de passe est mainadmin.

Pour tout ce qui est mise en production les mots de passe seront générés et stockés dans une base de données par un logiciel de gestion de mots de passe (par exemple avec le logiciel KeepassXC).

L’outil de partitionnement assisté propose de séparer certains répertoires. C’est à considérer dans la mesure où cela peut permettre de mieux gérer les espaces de stockage, en particulier pour les répertoires var, qui peut se retrouver plein si les logs s’accumulent trop (même si des stratégies de rotation de logs existent).

Voici un plan de partitionnement possible :

[—Système 30 Go—][—point de montage /var 20 Go—][—montage var/www 200 Go—][— /home 15 Go]

De plus, cela pourra être installé sur un volume LVM permettant au besoin de redimensionner les partitions à la volée, le tout sur une table de partitions GPT pour pouvoir installer des périphériques de stockages dotés de volumes supérieurs à 2,2 To, et de créer autant de partitions que souhaitées (limitées à 128 partitions ça laisse de la marge – https://fr.wikipedia.org/wiki/GUID_Partition_Table).

2. Mettre à jour et installer les paquets proftpd

Après l’installation du système, mise à jour des sources puis des paquets et installation de ProFTPd avec les dépendances que nous souhaitons.

Ce qui est proposé :

Paquets suggérés : openbsd-inetd | inet-superserver proftpd-mod-ldap proftpd-mod-mysql proftpd-mod-odbc proftpd-mod-pgsql proftpd-mod-sqlite proftpd-mod-geoip proftpd-mod-snmp proftpd-mod-crypto proftpd-mod-wrap

Ne connaissant pas tous les paquets je procède rapidement à une recherche avec « apt-show <paquet> » pour décider de ce que j’ajoute.

Par exemple, « apt show libmemcached11 » fournit un ensemble d’informations (plus ou moins compréhensibles 😂 ) dont l’URL vers memcached.org où il est écrit que c’est « un système de mise en cache d’objets à mémoire distribuée ».

Dans la liste des paquets suggérés on peut choisir certains composants pour le besoin spécifique de la structure : le mod-ldap si on veut l’intégrer à l’AD, choisir entre MySQL ou PosGreSQL etc.

Les choix pour cette installation :

proftpd, proftpd-mod-ldap, proftpd-mod-mysql, proftpd-mod-geoip, proftpd-mod-snmp

3. Configurer ProFTPd et sftp

Le fichier de configuration fourni comporte de nombreuses possibilités. Voici les choix réalisés pour notre cas de figure, en se basant sur ceux fournis par le site du projet ainsi que d’autres bon tutoriels.

3a. proftpd.conf

Rendons-nous sous « /etc/proftpd » puis passons en mode administrateur root. Nous y trouvons le fichier proftpd.conf, que nous modifierons avec un éditeur de textes.

En détail : pour éviter que nos configurations soient écrasées lors de mises à jour ultérieures nous copions les fichiers que nous devons éditer dans le sous-répertoire /etc/proftpd/conf.d.

/!\ Toute directive non fournie par le fichier de configuration, mais présentée dans des documentations récentes peut généralement être ajoutée dans le fichier de configuration personnalisé.

– Copier le fichier dans le sous-répertoire conf.d, changer de répertoire, et ouvrir le fichier en mode édition. Passer en mode administrateur root pour ces différentes opérations.

Le signe ‘#’ devant les lignes de commandes signifie qu’on est dans un environnement root, et ne doit pas être confondu avec le même signe ‘#’ dans les fichiers de configuration, qui lui, signale un commentaire non pris en compte par le système
# cp /etc/proftpd/proftpd.conf /etc/proftpd/conf.d/
# cd /etc/proftpd/conf.d/
# vim proftpd.conf        //  éditeur au choix, vim, nano, mc…
Il est aussi possible de renommer le fichier de configuration lorsqu’il est installé dans le sous-répertoire conf.d. du moment qu’il porte l’extension « .conf », comme « proftpd-ecoles.conf » ou autre.

– Changer le nom du serveur

Figure 1: On change la variable pour ServerName en MAIN

– Choisir le type de serveur (ici ligne 20)

ServerType standalone

C’est un choix adapté à un usage par de nombreux utilisateurs, (contrairement à inetd ou xinetd).

Il est possible de changer par la suite, en installant le paquet inetd et en configurant les fichiers proftpd.conf et inetd.conf (situés sous /etc/proftpd pour le premier et sous /etc pour le second).

– Confiner les utilisateurs dans le répertoire qui leur est assigné (ligne 39)

DefaultRoot ~

Autre choix possible : indiquer un nom de groupe que nous créons spécialement, plutôt que l’emplacement du répertoire personnel par défaut, auquel cas tous les membres de ce groupe pourront accéder au même répertoire. (Non pertinent si on veut créer plusieurs groupes).

Cela dépend de l’architecture que nous voulons construire. Par exemple créer des groupes pour l’usage des enseignants dans une école, (oui, il y a des méthodes de partages de fichiers plus adaptées, mais c’est juste un exemple) 1 par école, tant dans l’AD que dans le serveur ProFTPd, assigner les utilisateurs à ces groupes en fonction de leur affectation à l’une ou l’autre des écoles.

– Configuration du port

* Ligne 46, nous désactivons le port par défaut, qui sera configuré dans le fichier sftp.conf.

# Port 21

* Ligne 148 nous décommentons la ligne Include /etc/proftpd/sftp.conf

3b. sftp.conf

* Nous copions un fichier sftp.conf dans conf.d pour l’adapter à nos besoins.

Traduction des lignes 4 à 6 du fichier:

# Une fois activé, vous pouvez même désactiver le support du serveur sftps
# de OpenSSH sur le port 22
# Pour faire cela, commentez la ligne
# Subsystem sftp /usr/lib/openssh/sftp-server
# dans /etc/ssh/sshd_config et redémarrez le service.

Nous éditons le fichier /etc/ssh/sshd_config comme indiqué ci-dessus, car c’est pertinent dans notre contexte, et parce que tout service fonctionnant sans nécessité est une source de faille potentielle.

Dans le sftp.conf à nouveau, sous <IfModule mod_sftp.c> (ligne 9) on décommente les 3 lignes suivantes:

SFTPEngine     on
Port           2222
SFTPLog        /var/log/proftpd/sftp.log

La suite du fichier concerne des clés SSH, une méthode d’authentification qui nécessite la création de clés de chiffrement, à réserver aux administrateurs.

Pour les utilisateurs nous préférons la méthode login/mot de passe en passant par LDAP (avec Active Directory ou avec le logiciel libre UCS/Univention, par exemple) pour uniformiser les accès pour chaque utilisateur.

Pour cette raison, après la ligne #SFTPAuthMethods publickey nous ajoutons:

SFTPAuthMethods password

C’est tout pour ce fichier.

Référence : https://blog.victor-hery.com/2019/03/installer-sftp-proftpd.html

3c. Retournons dans l’édition du fichier proftpd.conf

À la ligne 46, nous avions commenté le Port 21 puisque configuré dans sftp.conf, avec le port 2222. (N’importe quel port peut lui être attribué tant que ce n’est pas un port réservé, cf. IANA.ORG).

– Permissions fichiers et répertoires

À la ligne 78 nous trouvons le Umask:

Umask 022 022 (Fichiers/Répertoires)
Les permissions par défaut étant 666 sur les fichiers et 777 sur les répertoires, nous ôtons 22 à chacun pour obtenir 644 755.

Le Umask 022 donnt les droits de lecture et d’écriture sur les fichiers pour le propriétaire et lecture uniquement pour le groupe et les autres.

Le même Umask sur les répertoires ajoute les droits d’accès pour tous. (Le droit d’exécution étant en fait un droit d’accès quand il s’applique à des répertoires).

– Authentification par LDAP

À la ligne 82 et 83 (en bas sur la capture d’écran) nous pouvons configurer le serveur SFTP pour s’authentifier par LDAP sur l’Active Directory:

Nous pouvons le laisser de côté pour l’instant et le configurer plus tard une fois que l’AD et les différents services seront déjà mis en place, l’important étant de pouvoir déjà le tester avec un premier utilisateur.

Si nous choisissons d’utiliser l’authentification LDAP pour se connecter au serveur SFTP, nous devrons également décommenter la ligne 137:

#Include /etc/proftpd/ldap.conf

et configurer le fichier ldap.conf.

Nous serons aussi intéressés par les fonctionnalités suivantes:

  • dnsbl (blacklisting par le DNS)
  • geoip (pour utiliser un anti-spam basé sur la géolocalisation)

Mais pas tout de suite : comme pour l’accès par LDAP, cela pourra se faire dans un second temps. Le fichier /etc/proftpd/modules.conf devra alors aussi être configuré, pour permettre le chargement des modules correspondants.

Dans la mesure où nous gérons l’ensemble des utilisateurs à travers une structure Active Directory, nous serons amenés à créer un groupe dédié pour l’accès au serveur SFTP.

Nous pourrons choisir de créer un accès individuel pour chaque enseignant, ou un accès commun pour chacune des 7 écoles, par exemple, puisque nous gérerons des regroupements scolaires.

Cela implique une logique dans la mise en commun de documents éducatifs, qui seront pertinents pour des classes de niveaux proches, en même temps qu’une simplification de la gestion des comptes : lorsqu’un compte sera créé, il sera ajouté au bon groupe, et lorsqu’il sera supprimé, il suffira de l’enlever du ou des groupes auxquels il est affecté.

4. Créer un utilisateur

Je souhaite maintenant créer un utilisateur pour tester la configuration. Bien sûr j’ai déjà un utilisateur de type Unix (utilisateur du système) que je pourrais utiliser pour tester.

Le but est de pouvoir créer des utilisateurs indépendants du système (non Unix) pour les gérer séparément, pour cette raison l’utilisateur déjà créé ne sera pas utilisé pour le test d’accès.

Nous allons créer deux nouveaux fichiers sous /etc/proftpd :

  • ftpd.passwd
  • ftpd.group

nous devrons passer des lignes de commandes pour créer l’utilisateur, son répertoire, son UUID, et le restreindre à l’accès au serveur FTP.

Pour ce dernier point, afin que les utilisateurs ne puisse pas se connecter au système d’exploitation proprement dit, nous allons ajouter /bin/false dans la liste du fichier /etc/shell.

# /etc/shells: valid login shells
/bin/sh
/bin/bash
/bin/rbash
/bin/dash
/bin/false

(false est un binaire qui ne fait rien : voir « man false »)

Premier utilisateur virtuel imaginaire, Bernard Dubois, abrégé en bdubois. Le groupe sera nommé groupe_zola pour l’école Emile Zola (toute ressemblance avec une école existant ou ayant existé serait une pure coïncidence).

Une particularité sous Debian, comme dans certaines autres distributions, certaines commandes ne sont pas dans le $PATH : le chemin des executables. La commande echo $PATH en simple utilisateur, ou après être passé en mode root avec la commande su liste les répertoires du chemin des exécutables, le répertoire /sbin n’en fait pas partie.

La conséquence c’est qu’on n’aura aucun résultat si on envoie la commande ftpasswd dans la console, sans être dans un environnement root complet.

Pour passer « full root », nous invoquons ‘su -’.

Install Proftpd 7

Et nous créons le dossier home qui lui correspond (mkdir /home/bdubois) puis le premier utilisateur avec l’UID 1002 et ainsi de suite.

$ su -
# ftpasswd --passwd --name=bdubois --uid=1002 --file=/etc/proftpd/ftpd.passwd--home=/home/bdubois --shell=/bin/false

(Le \ en fin de ligne indique à l’interpréteur d’ignorer le saut de ligne qui suit, il considérera donc la ligne suivante comme la continuation de celle-ci. Cette astuce permet de découper une longue ligne en plusieurs lignes plus courtes, pour en améliorer la lisibilité).

Le shell demande un mot de passe. Ici, c’est 123azeqsd pour bdubois

Ensuite, nous créons le groupe groupe_zola et lui assignons l’utilisateur bdubois.

ftpasswd --group --name=groupe_zola --gid=1100 –file=/etc/proftpd/ftpd.group --member=bdubois

RESTE À FAIRE

Comment créer un accès :

configurer le répertoire de stockage pour le groupe auquel l’utilisateur appartient, lui fournir un fichier de test

passer en mode bridge, configurer une adresse IP statique

Comment configurer des quotas (ex : 200 Go, garder 5% de réserve sur le stockage)

Démarrer les services : Tester depuis Virtualbox/VMware

http://www.proftpd.org/docs/configs/basic.conf

https://fr.wikibooks.org/wiki/Administration_r%C3%A9seau_sous_Linux/ProFTPD

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.