-
Mise en place d'un serveur FTP avec ProFTPD
ProFTPD est un serveur FTP libre permettant de transférer des fichiers par Internet ou par le biais d'un réseau local.
ProFTPD permet entre autres la gestion des virtualhosts, du FTPS et du chroot des utilisateurs.
Tutoriel réalisé sur Debian Wheezy.
Pour installer ProFTPD (GNU/Linux Debian) utiliser la commande suivante :
sudo apt-get install proftpd
Durant l'installation il vous sera demandé de quelle manière ProFTPD doit être lancé.
inetd : pour un serveur avec peu de connexions simultanées.Le serveur FTP ne consommera pas de ressources sur le serveur lorsque personne ne sera connecté, mais le démarrage du serveur FTP sera plus lent.
indépendamment : pour un serveur avec un très grand nombre de connexions simultanées.ProFTPd sera lancé dès le démarrage du serveur et tournera toujours en toile de fond mais consommera plus de ressources.Ce mode est appelé le mode standalone.
Afin que mon serveur FTP soit plus réactif, je choisis indépendamment.
(cliquer sur l'image pour l'agrandir)
Je vais maintenant vérifier que ProFTPD est lancé à l'aide la commande suivante dans un terminal :
ps aux | grep proftpd
Ici vous pouvez voir que ProFTPD est lancé avec le le numéro d'identification du processus (pid) 3947.
PS : après chaque modification effectuée dans le fichier de configuration ( proftpd.conf ), n'oubliez pas de relancer ProFTPD avec la commande :
sudo /etc/init.d/proftpd restart
(cliquer sur l'image pour l'agrandir)
Je vais maintenant tester une 1ère connexion à mon serveur FTP.
Pour cela je rentre le nom d'hôte ou adresse_ip, mon login/mot de passe et le port (1).
Si les informations de connexions sont bonnes, alors la connexion s'établit (2).
Une fois la connexion établie, je peux voir mon dossier personnel apparaître (3).
(cliquer sur l'image pour l'agrandir)
Je teste la création d'un dossier.
(cliquer sur l'image pour l'agrandir)
Vous pouvez voir que la création de mon dossier a réussi.
(cliquer sur l'image pour l'agrandir)
Vous pouvez également constater que je peux remonter dans l'arborescence et accéder aux dossiers systèmes situés à la racine.
Nous verrons un peu plus loin dans le tutoriel comment "emprisonner" des utilisateurs dans leurs dossiers personnels afin qu'ils ne puissent pas remonter dans l'arborescence.
(cliquer sur l'image pour l'agrandir)
Nous allons voir maintenant les directives basiques pour la configuration de ProFTPD.
Pour cela éditez le fichier de configuration à l'aide de la commande suivante :
sudo nano /etc/proftpd/proftpd.conf
ServerName : nom de votre serveur.
ServerType : mode de fonctionnement du serveur ( inetd ou standalone ).
Les commandes timeout permettent de déconnecter le client au bout de "x" secondes :
TimeoutNoTransfer : s'il n'opère aucun transfert.
TimeoutStalled : s'il a stoppé le transfert.
TimeoutIdle : s'il n'a effectué aucune activité après la saisie du login/passwd.
DefaultRoot : permet de "chrooter" les utilisateurs FTP locaux dans leurs répertoires personnels.
RequireValidShell (on/off) : si cette directive est mise sur "on", proftpd exigera que les utilisateurs qui se connectent aient des shells valides ( ex : bin/sh ou /bin/bash ).
Port : port d'écoute du serveur ftp.
PassivePorts : plage des ports passifs que ProFTPd utilisera pour répondre aux clients
PS : L'échange de données client / serveur peut fonctionner suivant 2 possiblités :
Mode actif : le client FTP (en utilisant la commande PORT) détermine le port d'écoute et joue le rôle de serveur pour le canal de données.
Mode passif : le client FTP (en utilisant la commande PASV) choisit le mode passif et c'est le serveur FTP qui détermine le port d'écoute et joue le rôle de serveur pour le canal de données.
MaxInstances : nombre maximal de connexions simultanées.
Umask 022 022: droits du propriétaire du fichier ou dossier.
022 donnes des droits 664 ( rw-r--r-- ) pour les fichiers et 755 ( rwxr-xr-x ) pour les dossiers.
AllowOverwrite (on/off) : si la directive est mise à "on", cela permettra à un utilisateur de remplacer ses anciens fichiers par ses nouveaux, cette option sera inutile si vous interdisez l'écriture.
User userftp : définit avec quel utilisateur ProFTPD sera lancé ( vous pouvez modifier le nom de l'utilisateur comme vous le souhaitez ).
Group groupftp : définit avec quel groupe ProFTPD sera lancé ( vous pouvez modifier le groupe de l'utilisateur comme vous le souhaitez ).
Pour avoir une liste détaillée de toutes les directives de ProFTPD :
Nous allons voir maintenant comment créer des utilisateurs virtuels.En effet, il peut être parfois long et fastidieux de créer des comptes locaux pour autant de comptes FTP associés.
La création d'utilisateurs virtuels pour proFTPD permettra de créer des comptes qui ne seront disponibles que pour le FTP.
Cette méthode permettra de créer des utilisateurs FTP sans être obligé de créer des utilisateurs système.
Pour créer ces utilisateurs nous aurons besoin d'ajouter quelques directives dans notre fichier de configuration :
AuthUserFile /etc/proftpd/ftpd.passwd : emplacement du fichier contenant la liste des utilisateurs virtuels.
AuthGroupFile /etc/proftpd/ftpd.group : emplacement du fichier contenant la liste des groupes virtuels.
UseFtpUsers on : active l'utilisation du fichier /etc/ftpusers qui donne la liste des utilisateur n'ayant pas d'accès au serveur ftp ( vous pouvez ajouter d'autres utilisateurs interdits dans ce fichier ).
Nous allons d'abord commencer par créer l'utilisateur ( userftp ) et le groupe ( groupftp ) que nous avons définis dans notre fichier de configuration avec la commande :
sudo groupadd groupftp && sudo useradd -g groupftp -d /dev/null -s /bin/false userftp
Nous vérifions ensuite que la groupe a bien été crée avec la commande :
cat /etc/group | grep groupftp
Vous pouvez voir que le groupe a bien été crée avec l'identifiant de groupe (GID) 1001.
(cliquer sur l'image pour l'agrandir)
Nous vérifions ensuite que l'utilisateur a bien été crée avec la commande :
cat /etc/passwd | grep userftp
Vous pouvez voir que l'utilisateur a bien été crée avec l'identifiant d'utilisateur (UID) 1001.
(cliquer sur l'image pour l'agrandir)
Maintenant, je vais créer un utilisateur virtuel.
La création des utilisateurs virtuels se fait à l'aide de la commande ftpasswd sous la forme :
sudo ftpasswd --passwd --name=nom_utilisateur --uid=numéro_uid --file=/etc/proftpd/ftpd.passwd --home=emplacement_dossier_utilisateur --shell=/bin/false
Ici, je vais créer l'utilisateur ftpuser1, ayant pour uid 1002, pour répertoire personnel /home/ftpuser1 et dont l'identifiant/mot de passe seront stockés dans /etc/proftpd/ftpd.passwd.
PS : vous pouvez mettre un numéro de uid au hasard du moment que celui-ci n'existe pas dans /etc/passwd.
sudo ftpasswd --passwd --name=ftpuser1 --uid=1002 --file=/etc/proftpd/ftpd.passwd --home=/home/ftpuser1 --shell=/bin/false
PS : L'utilisation du shell ”/bin/false” permet d'interdire l'accès au shell pour les utilisateurs FTP.Le shell /bin/false n'existant pas dans le fichier /etc/shells, il vous suffira simplement de le rajouter.
Pour changer le mot de passe d'un utilisateur, utiliser la commande :
sudo ftpasswd --passwd --name=nom_utilisateur --change-password
(cliquer sur l'image pour l'agrandir)
Pendant la création de l'utilisateur, il vous sera demandé de créer son mot de passe.
(cliquer sur l'image pour l'agrandir)
J'édite maintenant le fichier ftpd.passwd et je vois que mon utilisateur virtuel ftpuser1 a bien été crée.
Vous pourrez également remarquer que le mot de passe a été crypté par ftpasswd.
(cliquer sur l'image pour l'agrandir)
Je vais maintenant créer le groupe virtuel ftpgroup1, groupe auquel appartiendra l'utilisateur ftpuser1.
La création des groupes virtuels se fait à l'aide de la commande ftpasswd sous la forme :
sudo ftpasswd --group --name=nom_groupe --gid=numéro_gid --file=/etc/proftpd/ftpd.group --member=nom_utilisateur
PS : vous pouvez mettre un numéro de gid au hasard du moment que celui-ci n'existe pas dans /etc/group.
sudo ftpasswd --group --name=ftpgroup1 --gid=1100 --file=/etc/proftpd/ftpd.group --member=ftpuser1(cliquer sur l'image pour l'agrandir)
J'édite maintenant le fichier ftpd.group et je vois que le groupe virtuel ftpgroup1 a bien été crée et que ftpuser1 fait bien partie de ce groupe.
(cliquer sur l'image pour l'agrandir)
Pour finir, je vais créer le répertoire personnel de ftpuser1 à l'aide de la commande suivante :
sudo mkdir /home/ftpuser1
Je modifie les permissions de son répertoire personnel avec la commande :
sudo chown -R 1002:1100 /home/ftpuser1
De cette manière ftpuser1 et le groupe ftpgroup1 seront propriétaires du répertoire personnel.
Le -R ( récursivité ) appliquera ces permissions à tous les sous-dossiers et fichiers contenus dans son dossier personnel.
Je vérifie que les droits ont bien été appliqués avec la commande :
ls -l /home | grep ftpuser1
(cliquer sur l'image pour l'agrandir)
Pour terminer, je vais "emprisonner" ftpuser1 dans son répertoire personnel afin qu'il ne puisse accéder aux dossiers systèmes situés à la racine, ni même aux dossiers des autre utilisateurs.
Pour cela, j'édite le fichier de proftp.conf et je décommente la ligne DefaultRoot et j'y ajoute !mickael.
Cette directive permettra d'emprisonner tous les utilisateurs ( présence du ~ ) sauf l'utilisateur mickael ( présence du !mickael ) dans leurs répertoires personnels.
(cliquer sur l'image pour l'agrandir)
Je vais maintenant tester la connexion au serveur FTP avec l'utilisateur ftpuser1.
Vous pouvez observer que la connexion a bien fonctionné.
(cliquer sur l'image pour l'agrandir)
Je vais maintenant vérifier que ftpuser1 est bien emprisonné dans son répertoire personnel.
Pour cela, je clique sur "Vers un rép. de plus haut niveau".
Vous remarquerez que ftpuser1 ne peut pas remonter dans l'arborescence et qu'il est effectivement emprisonné dans son dossier personnel.
(cliquer sur l'image pour l'agrandir)
Je vais tenter la même chose avec l'utilisateur mickael.
(cliquer sur l'image pour l'agrandir)
Vous pourrez constater que je ne suis pas "emprisonné" dans mon dossier personnel et que la configuration du "chroot" de ProFTPD a bien fonctionné.
(cliquer sur l'image pour l'agrandir)
(cliquer sur l'image pour l'agrandir)
Le FTP est un protocole en clair.L'authentification est basée sur un nom d'utilisateur et un mot de passe non chiffrés et les données transitent en clair sur le réseau.
Pour remédier a cela, vous pouvez utiliser le FTPS ( FTP over SSL ).
Avec cette méthode l'authentification sera chiffrée et le canal de données le sera également.
Il existe 2 méthodes de chiffrement FTPS.
FTPS explicite :
Le client FTP envoie une commande ( par exemple "SSL AUTH" ou "AUTH TLS" ) au serveur ftp pour établir une connexion de commande sécurisée.
Cette méthode utilise le port 20 pour le canal de données et le port 21 pour le canal de contrôle.
Avec le SSL explicit, la connexion se fait en clair, le chiffrement s'effectue après l'authentification.
FTPS implicite :
La connexion est automatiquement sécurisée dès que le client FTP établit une connexion au serveur FTP.
Cette méthode utilise le port 989 pour le canal de données et le port 990 pour le canal de contrôle.
Avec le SSL implicite, le chiffrement s'effectue dès le début.
Ce mode bien que obsolète est toujours largement utilisé.
Avec le FTPS, l'authentification client/serveur s'effectuera par l'intermédiaire s'un certificat d'authentification qui permettra d'effectuer une authentification mutuelle et qui permettra également au client de vérifier l'identité du serveur.
Pour mettre le place le FTPS, nous aurons besoin de openssl.
Si celui-ci n'est pas installé sur votre serveur :
sudo apt-get install openssl
Ensuite nous allons ouvrir le fichier de configuration proftpd.conf et y insérer les directives suivantes à la fin du fichier.
(cliquer sur l'image pour l'agrandir)
Maintenant, nous allons procéder à la création du certificat et de la clé avec la commande suivante :
sudo openssl req -new -x509 -days 365 -nodes -out /etc/ssl/certs/proftpd.cert.pem -keyout /etc/ssl/certs/proftpd.key.pem
Pendant la création du certificat, certaines informations vous seront demandées ( pays, ville etc...)
(cliquer sur l'image pour l'agrandir)
Je vérifie que mon certificat et ma clé ont bien été crées.
(cliquer sur l'image pour l'agrandir)
Je me connecte à nouveau à mon serveur FTP en choisissant cette fois-ci "Connexion FTP explicite sur TLS"
(cliquer sur l'image pour l'agrandir)
Vous pouvez voir à gauche le mécanisme d'authentification pour invoquer FTPS.
Le serveur nous présente le certificat que nous avons crée juste auparavant afin que nous puissions vérifier son identité.
Une fois que l'identité du serveur a bien été vérifié, cliquez sur "Valider".
(cliquer sur l'image pour l'agrandir)
ftpuser1 peut maintenant télécharger/transférer des fichiers de manière sécurisée.
(cliquer sur l'image pour l'agrandir)
Maintenant que ProFTPD est configuré, nous allons surveiller les connexions en cours.
Pour cela, il suffit de vous connecter en ssh a votre serveur et d'entrer la commande suivante :
ftptop -d 1 -f /var/run/proftpd.scoreboard
-d 1 est la fréquence de rafraichissement en secondes
-f /var/run/proftpd.scoreboard pour indiquer le chemin ou se trouve le tableau de bord de ProFTPD.
Le retour de la commande se découpe en 3 parties :
La 1ère avec la date, l'heure, et le temps écoulé depuis le dernier (re)démarrage du serveur FTP.
La 2ème nous indique le nombre de sessions FTP en cours.
La 3ème qui va nous détailler les sessions en cours.
(cliquer sur l'image pour l'agrandir)
Vous pouvez voir maintenant que ftpuser1 s'est connecté au serveur FTP depuis 28 secondes avec l'identifiant de processus ( PID ) 2629, l'adresse IP 192.168.1.45 et qu'il n'effectue aucune action pour le moment car il est en mode idle (repos).
(cliquer sur l'image pour l'agrandir)
Maintenant, ftpuser1 va uploader 2 fichiers sur le serveur.
Vous pouvez que 2 processus ( PID 2630, 2631 ) se sont lancés et la commande STOR ( store ) signifie que le client envoie des données sur le serveur.
(cliquer sur l'image pour l'agrandir)
Maintenant, ftpuser1 va downloader 2 fichiers depuis le serveur.
Vous pouvez que 2 processus ( PID 2632, 2633 ) se sont lancés et la commande RETR ( retrieve ) signifie que le serveur envoie des données au client.
(cliquer sur l'image pour l'agrandir)
Conclusion :
Ce tutoriel n'est qu'un exemple simple des possibilités offertes par ProFTPD.
Si vous voulez configurer ProFTPD de manière graphique, il existe :
Vous pouvez également vous tourner vers VsFTPd ou bien encore Pure-ftpd.
Même si FTPS apporte un gain de sécurité, je préfère néanmoins le SFTP basé sur le ssh car plus simple à mettre en place.
N'hésitez pas à mes faire part de vos remarques sur ce tutoriel...
Tags : proftp, utilisateur, serveur, ssl
-
Commentaires
Bonjour Flo
Même si ProFTPd est un peu plus gourmand en ressources par rapport à d'autres serveurs FTP ( vsFTPd, PureFTPd ), il n'en reste pas moins mon préféré car il est simple et rapide à configurer....
Cordialement
3YackuzaJeudi 2 Avril 2015 à 21:21Bonsoir,
Merci pour ce tutoriel très explicite est très enrichissant ;)
Je viens de finir la partie FTPS, je testerai prochainement le SSH.
@+
Merci Yackusa....
La mise en place du SSH n'est pas très difficile, je conseille généralement aux gens le SSH avec authentification par clé privée / clé publique.
De manière générale, je n'utilise que le SSH sur mes serveurs y compris pour le transfert de fichiers....
@+
5Master-DVendredi 1er Mai 2015 à 22:33Bonjour, je te remercie pour se tuto qui ma grandement aidé, cela fait presque que 1 ans que je cherché un tuto simple est j'avoue que avec ton tuto je me suis régalé.
simple, clair je pense que on peux pas vraiment faire mieux de se coté la !
Ps: tu devrait mettre une page de dons :)
6Master-DVendredi 1er Mai 2015 à 22:36il serait bien que fasse un petit script en .sh pour que les utilisateur qui doive le faire sur plusieur serveur.
Salut,
Après des heures de recherches, je crois que je suis sur la bonne page qui pourrait régler mon problème.
Je m'explique.J'ai un site créé en virtualhost appelé monsite.com
Le site se trouve donc dans /home/monsite/www
Le nom d'utilisateur est : monsitePour se connecter en FTP filezilla, j'utilise comme login le nom d'utilisateur monsite.
Là, tout fonctionne.
Maintenant, dans mon site, j'ai le répertoire AAA se trouvant ici :
/home/monsite/www/AAAJe souhaite ajouter un utilisateur FTP qui ait tous les droits sur ce dossier (ainsi que sur tout ce qui s'y trouve à l'intérieur) mais qu'il ne puisse pas voir/accéder aux dossiers se trouvant au meme niveau que AAA et ceux au-dessus.
Comment ajouter cet utilisateur avec proftp ?
Voici mon fichier proftpd.conf
http://ekladata.com/NUFlyEKMTolQBLAOR8Ybaj_uZRI/proftpd.confJ'ai créé l'utilisateur ftpuser1 grace au tuto mais lorsque je me connecte avec filezilla, il me dit :
Statut : Connexion à 62.123.123.225:21...
Statut : Connexion établie, attente du message d'accueil...
Réponse : 220 ProFTPD 1.3.4a Server (Debian) [62.123.123.225]
Commande : USER ftpuser1
Réponse : 331 Mot de passe requis pour ftpuser1
Commande : PASS ********
Réponse : 530 Authentification incorrecte.
Erreur : Erreur critique : Impossible d'établir une connexion au serveur
Merci beaucoup !
Bonjour Gokgek
Concernant ton problème essaie tout d'abord de faire un test en te connectant avec un compte utilisateur du système ( ton compte ou le compte root par exemple).
As tu rajouté le shell /bin/false dans /etc/shells avant de de créer ton utilisateur virtuel?
Regarde ensuite dans tes logs, tu trouveras peut être une piste concernant le problème de connexion avec ftpuser1.
Tiens moi au courant.
Cordialement.
Effectivement, seul l'utilisateur monsite peut se connecter en FTP.
J'ai rajouté /bin/false dans le fichier /etc/shells
Et j'ai rajouté le répertoire www dans /home/ftpuser1Maintenant, je peux me connecter en ftp avec l'utilisateur ftpuser1.
J'accède donc au répertoire /home/ftpuser1/www/Comment puis-je dire que l'utilisateur ftpuser1 se connecte directement à /home/monsite/www/AAA avec tous les droits ?
Merci !!!
Lors de la création de ton utilisateur virtuel avec ftppasswd , tu peux indiquer que son dossier personnel sera /home/ftpuser1/www/AAA, ainsi lors de sa connexion, il devrait etre emprisonné dans le répertoire AAA.
Il faut savoir que l'on peut insérer plusieurs lignes DefaultRoot dans le fichier de configuration.
Ex : DefaultRoot /home/ftpuser1 ! gokgek
DefaultRoot /home/ftpuser2 ! gokgek
Après, il faudra juste que tu mettes les utilisateurs virtuels dans des groupes virtuels différents lors de leurs créations pour que cela fonctionne...
Mon ftpuser1 arrive maintenant à accéder à /home/monsite/www/AAA
Mais il y a des problèmes de droits...
Comme je suis dans le répertoire home de l'utilisateur monsite, si je veux exécuter des fichiers ça ne fonctionne pas (par exemple lancer une install de Wordpress par un navigateur).
Hors, dans filezilla, je peux créer/éditer des fichiers et dossiers avec l'utilisateur ftpuser1 car tous mes fichiers sont en 1010:1100 (uid de ftpuser1 et gid de ftpgroup1).Du coup, pour faire mon install de Wordpress, j'ai du faire un chown -r monsite:monsite de mon dossier AAA
Et lorsqu'à la fin de l'install, je repasse tout en ftpuser1:ftpgroup1, le site wordpress ne fonctionne plus (message: 500 Internal Server Error).Ma question, comment faire en sorte que ftpuser1 puisse faire tout ce qu'il veut dans le répertoire /home/monsite/www/AAA ?
On va y arriver !
Merci :)Meme en passant l'utilsateur ftpuser1 dans le groupe monsite (gid=1001), j'obtiens un message "permission non accordée" lorsque je transfert vers le servuer un fichier modifié (via filezilla).
sudo ftpasswd --passwd --name=ftpuser1 --uid=1010 --gid=1001 --file=/etc/proftpd/ftpd.passwd --home=/home/monsite/www/AAA --shell=/bin/false
Le but n'étant pas de mettre tous les fichiers du site avec les droits 777.
Actuellement, tous les fichiers et dossiers dans AAA appartiennent au propriétaire monsite (1001) et au groupe monsite (1001).
Pourquoi le fait que ftpuser1 appartienne au meme groupe que le propriétaire des fichiers ne lui permet-il pas de modifier quoique ce soit ?
C'est pas logique... Une autre manip à faire ?Merci !
As tu bien fait chown -R 1010:1100 /home/monsite/www/AAA.
Peux tu me donner le résultat de ls -l /home/monsite/www/AAA et de ls -l /home/monsite/www/AAA/* ?
Je n'ai jamais fais d'installations de wordpress, mais je pense par contre que l'utiilisateur/groupe propriétaire pour les fichiers de wordpress doit être www-data.
WordPress : problème sur les droits des fichiers et répertoires
Sécuriser ses fichiers WordPress
14GianniDimanche 19 Juillet 2015 à 19:57Bonjour,
Merci pour ce tuto, il est super bien fait et rend vraiment service !
Je l'ai enregistré pour de futur installation (serveur Kimsufi).
16teenytuxJeudi 19 Novembre 2015 à 11:12Merci pour ce tuto très claire. il m'a beaucoup aidé. Je sais pas si j'ai sauté quelque chose mais il est necessaire de modifier les droit de ftpd.passwd pour pouvoir de connecter avec ftpuser1.
Bonjour Teenytux
Peux tu me dire ce que tu as fait concernant les droits de ftp.passwd?
Cordialement
Ajouter un commentaire
Merci beaucoup!!! Je cherchais comment paramétrer mon serveur ProFTPd sous Xampp et ça marche du tonnerre! :)