Installation du serveur FTP

Le serveur FTP qui a retenu mon attention est pure-ftpd. Ce serveur permet de « chrooter » (emprisonner) les utilisateurs dans leurs répertoires respectifs mais, correctement configuré, permet également d’utiliser des liens symboliques. De plus, couplé à une base de données SQL, vous pouvez utiliser des utilisateurs virtuels.

ATTENTION A RESTREINDRE CORRECTEMENT LES DROITS UTILISATEURS AU RISQUE DE VOIR VOS UTILISATEURS PRENDRE LA MAIN SUR LES FICHIER PARTAGES DANS LES FTP

 

  1. Création de la base de données et liaison vers le serveur FTP

Ouvrez « phpMyAdmin » et saisissez le script suivant dans une requête SQL (en modifiant « login mysql » et « password mysql » par votre login et mot de passe « phpMyAdmin ») :

CREATE DATABASE pureftpd;
USE `pureftpd`;
CREATE TABLE `ftpduser` (
`Id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`User` varchar(16) NOT NULL default '',
`status` enum('0','1') NOT NULL default '0',
`Password` varchar(64) NOT NULL default '',
`Uid` varchar(11) NOT NULL default '-1',
`Gid` varchar(11) NOT NULL default '-1',
`Dir` varchar(128) NOT NULL default '',
`ULBandwidth` smallint(5) NOT NULL default '0',
`DLBandwidth` smallint(5) NOT NULL default '0',
`ipaccess` varchar(15) NOT NULL default '*',
`QuotaSize` smallint(5) NOT NULL default '0',
`QuotaFiles` int(11) NOT NULL default '0',
PRIMARY KEY  (`Id`)
) TYPE=MyISAM COMMENT='Utilisateur du Serveur FTP';
GRANT SELECT, INSERT, UPDATE, DELETE ON pureftpd.* TO 'login mysql'@'localhost' IDENTIFIED BY 'password mysql' WITH GRANT OPTION;

Cliquez sur exécuter, votre base de données et la table des utilisateurs sera ainsi créé.

 

  1. Configurer Pure-ftpd avec MySQL

Afin d’indiquer à Pure-ftpd quelle table de la base de données et quels sont les valeurs à utiliser, nous allons renseigner le fichier /etc/pure-ftpd/db/mysql.conf :

nano /etc/pure-ftpd/db/mysql.conf

Ajoutez-y les lignes suivantes en modifiant le login et mot de passe pour se connecter à la base MySQL, pensez également à commenter toutes les lignes préexistantes du fichier de configuration:

MYSQLSocket      /var/run/mysqld/mysqld.sock
MYSQLUser       login mysql
MYSQLPassword   password mysql
MYSQLDatabase   pureftpd
MYSQLCrypt      crypt
MYSQLGetPW      SELECT Password FROM ftpduser WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetUID     SELECT Uid FROM ftpduser WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetGID     SELECT Gid FROM ftpduser WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetDir     SELECT Dir FROM ftpduser WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpduser WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpduser WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetQTASZ   SELECT QuotaSize FROM ftpduser WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetQTAFS   SELECT QuotaFiles FROM ftpduser WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")

Relancez le serveur ftp pour qu’il prenne en compte les nouveaux paramètres :

service pure-ftpd-mysql restart

 

  1. Configurer les options principales du serveur FTP

Pour obtenir le fonctionnement désiré, certaines options doivent être rêglées avant d’aller plus loin.
Editer le fichier /etc/default/pure-ftpd-common :

nano /etc/default/pure-ftpd-common

Et modifiez la ligne « VIRTUALCHROOT=false » par « VIRTUALCHROOT=true »
Enregistrer le fichier ainsi modifié.
Executez les commandes suivantes :

echo "yes" > /etc/pure-ftpd/conf/ChrootEveryone
echo "yes" > /etc/pure-ftpd/conf/CreateHomeDir
echo "027 007" > /etc/pure-ftpd/conf/Umask
echo "90" > /etc/pure-ftpd/conf/MaxDiskUsage
echo "no" > /etc/pure-ftpd/conf/DisplayDotFiles

Une fois ces modifications effectués, vous pouvez redémarrer le serveur FTP pour prendre en charge les modifications :

service pure-ftpd-mysql restart

 

  1. Configurer les options secondaires du serveur FTP

Pure-ftpd se configure exclusivement par plusieurs fichiers de paramètres ; chaque fichiers correspond à un paramètres et ne contient qu’une seule ligne ; vous trouverez ci-dessous la liste des paramètres possible :

 

Create file name

Format

Description

NoTruncateYes/NoCette option permet de renommer automatiquement un fichier si un autre du même nom existe déjà sur le serveur.Cette option est incompatible avec les « Quotas virtuels »
LogPIDYes/NoLog le PID de chaque session dans Syslog
IPV4OnlyYes/NoÉcoute uniquement les connections IP V4
IPV6OnlyYes/NoÉcoute uniquement les connections IP V6
TrustedGID1 nombreSeulement les membres du groupe peuvent se connecter.
FSCharsetTable de Caractères
ClientCharsetTable de Caractères
ChrootEveryoneYes/NoChroot tous les utilisateurs
DaemonizeYes/NoDémarrer le serveur en mode Standalone (en démon)
MaxClientsNumber1 nombreAutorise au maximum clients à se connecter simultanément au serveur (Défaut = 50)
MaxClientsPerIP1 nombreNombre maximum de connexions simultanées par client (adresse IP)
VerboseLogYes/NoEnvoie des messages de débogage dans Syslog (A utiliser seulement en cas de problème) Pour avoir également les logs de réponses, il faut doubler ce paramètre.
DisplayDotFilesYes/NoAffiche les fichiers commençant par un point (Paramètre à activer pour les puristes et à désactiver pour les simples utilisateurs)
AnonymousOnlyYes/NoAutorise uniquement les utilisateurs anonymes. A utiliser uniquement pour les sites FTP publiques.
NoAnonymousYes/NoAutorise uniquement les utilisateurs authentifiés. Les utilisateurs anonymes sont interdits.
SysLogFacilityParamètres (1 mot)Indique la « facility » à utiliser pour syslog (Défaut = local2). « -f none » permet de désactiver les logs.
FortunesFileChemin vers fichierAffiche une ligne de texte aléatoire à la connexion en provenance du fichier « fortune file » (ex : Astuce du jour). Pour afficher un texte à la connexion, il faut également utiliser cette option.
NoRenameYes/NoAutoriser ou non les utilisateurs à renommer les fichiers
DontResolveYes/NoPar défaut, les noms pleinement qualifiés sont logués en faisant une requête DNS inverse sur l’adresse IP. Cette option permet d’éviter de rechercher le nom pleinement qualifié dans le but d’accélérer le temps de connexion. Cette option est donc conseillée pour les sites publics très chargés.
AnonymousCantUploadYes/NoInterdit l’accès en écriture sur le serveur (upload) pour les utilisateurs anonymes.
MaxIdleTime1 nombreChange la durée de connexion maximum en minutes (Défaut = 15)
CreateHomeDirYes/NoCréer automatiquement le home de l’utilisateur s’il n’existe pas.
MaxDiskUsage1 nombreInterdit les chargements sur le serveur (upload) si la partition utilisée est chargée à plus de
KeepAllFilesYes/NoAutorise les utilisateurs à charger des fichiers sur le serveur, mais les interdit de les renommer ou les supprimer.
LimitRecursion2 nombresCette option permet d’éviter le nombre de fichiers listes et le nombre de niveau de recherches pour éviter les dénis de services. (Défaut = 2000 fichiers et 5 niveaux de répertoire)
MaxLoad1 nombreInterdit les téléchargements anonymes si la charge du CPU atteint XX
AnonymousCanCreateDirsYes/NoAutorise les utilisateurs anonymes à créer des répertoires.
Quota2 nombresSi le serveur supporte les quotas virtuels, cette option permet de les configurer
NATmodeYes/NoMode NAT
AltLogChemin vers fichier logEnregistre les logs des fichiers transférés dans un fichier spécifique. Plusieurs formats sont supportés : CLF (Apache-like), Stats, W3C and xferlog. (exemple :stats:/var/log/pureftpd.log)
PassivePortRange2 nombresPermet de modifier les ports sur lesquels le serveur Écoute
CallUploadScriptYes/NoAppel ou non le script UploadScript (par exemple pour exécuter un antivirus sur le fichier uploader)
ForcePassiveIPChemin vers fichierForce l’adresse IP ou le nom de la machine pour le retour
AnonymousRatio2 nombresActive les ratios pour les utilisateurs anonymes
UserRatio2 nombresActive les ratios pour tous les utilisateurs
AutoRenameYes/NoNe jamais écraser un fichier existant. Le fichier est automatiquement renommé si c’est nécessaire.
NoChmodYes/NoInterdit aux utilisateurs d’utiliser les commandes CHMOD
AntiWarezYes/NoInterdit aux utilisateurs anonymes de télécharger des fichiers
UserBandwidth1 ou 2 nombresActive la limitation de la bande passante en kilooctets/seconds. Il est possible d’avoir une bande passante différente avec la syntaxe « -t [] : [] »
AnonymousBandwidth1 ou 2 nombresActive la limitation de la bande passante en kbps pour les utilisateurs anonymes. Il est possible d’avoir une bande passante différente avec la syntaxe « -t [] : [] »
MinUID1 nombreInterdit les accès pour les utilisateurs ayant un uid inférieur à celui indiqué.
Umask2 nombresChange le mask de création des fichiers et dossiers. (Défaut = 133 022)
TrustedIPAdresse IPAutorise les accès non anonymes seulement pour l’adresse IP spécifiée. Les autres adresses IP auront un accès anonyme.
ProhibitDotFilesWriteYes/NoInterdit les utilisateurs anonymes à écrire des fichiers commençant par un point.
ProhibitDotFilesReadYes/NoInterdit les utilisateurs anonymes à lire et écrire des fichiers commençant par un point.
PerUserLimits2 nombresPermet de limiter le nombre de session simultanées qu’un utilisateur peut ouvrir (Défaut = 0 = illimités)
TLS1 nombre0: pas de TLS | 1: TLS + texte clair | 2: appliquer TLS | 3: appliquer canal de données chiffrées
AllowDotFilesYes/NoAutorise les utilisateurs anonymes à lire les fichiers et les dossiers commençant par un point.
BrokenClientsCompatibilityYes/NoPeut résoudre des problèmes de connexion lorsque l’on se connecte par un navigateur Web
CustomerProofYes/NoActive certaine protection contre les erreurs des utilisateurs (ex chmod 0 filename)
AllowAnonymousFXPYes/NoActive le protocole FXP (File eXchange Protocol) pour les utilisateurs anonyme
AllowUserFXPYes/NoActive le protocole FXP (File eXchange Protocol) pour les utilisateurs authentifiés
BindAdresse IP, portIndique à pure-ftpd si il doit écouter sur un autre port

 

Pour activer une option :
– Créer un fichier avec le nom de l’option dans /etc/pure-ftpd/conf
– Editer ce fichier avec la valeur correspondante,
– Sauvegarder les modifications
– Redémarrer le serveur FTP :

service pure-ftpd-mysql restart
  1. Script de gestion des utilisateurs

A ce stade, votre serveur est capable d’accepter les connexions venant d’utilisateur inscrit dans votre base de données qui, pour l’instant, est vide.
Pour remédier à ce problème, je vous propose de découvrir le script que j’ai mis en place pour gérer les utilisateurs de mon serveur.
Pour expliquer son fonctionnement, j’ai considéré les utilisateurs ftp Primaire comme étant les répertoires qui seront partagés aussi bien sur le réseau local qu’avec les autres utilisateurs du serveur.

Supposons que la racine de votre serveur se trouve dans le répertoire « /ftp« .

Les répertoires Confidentiel et Dossier sont ce que j’appelle des ftp primaires. Si l’on observe bien, on voit que les répertoires des utilisateurs sont situés dans le répertoire « /ftp/User« .

Les deux utilisateurs déclarés ont tous les deux accès au répertoire « /ftp/Dossier« , mais seul l’utilisateur « Direction » à accès au répertoire « Confidentiel ».

En jouant correctement sur les droits d’accès au fichier (via les ACL, voir ici) vous pourrez autoriser certains de vos utilisateurs à accéder en lecture/écriture ou seulement en lecture sur vos ftp primaire.

/ftp
├── Confidentiel
├── Dossier
└── User
    ├── Compta -> /ftp/Dossier
    └── Direction
        ├── Confidentiel -> /ftp/Confidentiel
        └── Dossier -> /ftp/Dossier

On peut alors imaginer partager les FTP primaires via SAMBA pour rendre les documents accessible depuis l’extérieur en FTP.

Afin que ce script soit exécutable facilement, nous le créerons dans le « path » pour ne pas indiquer son emplacement sur le disque dur à chaque appel du script.

cd /usr/local/bin

Télécharger le script dans ce répertoire

chmod +x ftpusermanager.sh

Si vous voulez lancez le script, il vous suffit alors de saisir :

/usr/local/bin/ftpusermanager.sh

Une fois saisi le login et mot de passe de l’utilisateur MySQL, vous arriverez sur un menu qui vous proposera les choix suivants :

1Création d'un UtilisateurPermet de créer un utilisateur
2Désactiver un UtilisateurL’utilisateur ne pourra plus se connecter
3Réactiver un UtilisateurL’utilisateur pourra se connecter
4Affecter un Quota à un UtilisateurLimite la bande passante de l’utilisateur
5Supprimer un UtilisateurEfface l’utilisateur
6Créer un Utilisateur FTP PrimaireCréé un Utilisateur « primaire »
7Affecter un FTP primaire à un utilisateurCréé les liens symboliques entre l’utilisateur et les ftp primaires
8QuitterQuitte le script

 

Note : Lors de la création d’utilisateur, un test de connexion au serveur ftp sera automatiquement exécuté pour valider le fonctionnement et créer le répertoire local de l’utilisateur.

 

Gawindx
Gawindx

Gawindx

Passionné de l'outil informatique dès mon plus jeune âge (j'ai commencé sur un MO5), je mets mes compétences au service de la communauté. Je "flirte" avec Linux depuis 2005 et j'ai complétement basculé dans le libre depuis plus de 3 ans.