Le protocole FTP (File Transfert Protocole) est un moyen simple de partage, il permet de rendre accessible un espace disque à travers le web ou simplement d’un réseau local. Je vais vous décrire comment créer simplement un serveur de type FTP grâce à Very secure FTPd. VsFTPd est un logiciel sous licence GPL fortement axé sur la sécurité, d’ailleurs aucune faille n’a été trouvée à ce jour et c’est l’une des raisons de son utilisation par des entreprises telles que Suse, Red hat ou encore OpenBSD.
Very secure FTPd est un outil très complet, stable, sécurisé et performant à la fois. Il permet une gestion du serveur à la carte selon les besoins de l’administrateur, sa relative complexité ne doit surtout pas être un frein à son utilisation car au final on se rend bien compte que les multiples possibilités d’utilisations font de VsFTPd un logiciel puissant, hautement configurable. Sans nul doute, ce logiciel est ce qui se fait de mieux en la matière !
Dans le cadre de cet article, nous allons faire en sorte que l’espace disque soit partagé de deux manières. Un utilisateur que l’on nommera paul aura les droits suivants : lecture, écriture et suppression. Le deuxième qui s’appellera tom pourra uniquement avoir accès en lecture seule, il ne pourra en aucun cas uploader, déplacer où encore supprimer un fichier contrairement à paul. Autre point important, l’accès au serveur en anonyme sera tout simplement refusé par soucis de sécurité.
Important :
Cet article n’est en aucun cas un tutoriel complet ! La configuration présentée se trouve être celle que j’utilise, il s’agit d’une certaine façon d’un simple « pense bête ». Vous voilà donc prévenu, en espérant tout de même que cet article vous aidera d’une manière ou d’une autre .
Pré-requis :
Commencez par créer le répertoire qui contiendra tout les fichiers nécessaires :
# mkdir /etc/vsftpd |
Installation :
Très simple, il vous suffit d’installer le paquet vsftpd.
# apt-get install vsftpd |
Création d’un méta-utilisateur virtuel :
Imaginons que vous voulez que le répertoire /home/serveur_ftp soit la racine de votre serveur et bien sûr vous ne voulez en aucun cas qu’un utilisateur se balade ailleurs. Nous allons donc créer un meta-utilisateur virtuel, en prenant soin de lui créer un répertoire dans lequel il sera emprisonné « chrooté« . Ainsi Paul et Tom n’auront accès qu’au répertoire /home/serveur_ftp et ne pourrons pas remonter plus haut.
On crée le groupe ftp :
# groupadd ftp |
Puis on ajoute l’utilisateur virtuel muftp (meta utilisateur ftp) en lui indiquant son répertoire :
# useradd -g ftp -d /home/serveur_ftp/ muftp |
On crée ensuite véritablement le répertoire en changeant le propriétaire du dossier ainsi que les permissions :
# mkdir /home/serveur_ftp # chown 'votre_login':ftp /home/serveur_ftp/ |
(votre_login étant votre nom d’utilisateur.)
# chmod 770 /home/serveur_ftp |
Création de la base de donnée :
La base de donnée sera dans notre cas fort simple et se présentera sous cette forme :
Nom de l'utilisateur virtuel 1 Mot de passe de l'utilisateur virtuel 1 Nom de l'utilisateur virtuel 2 Mot de passe de l'utilisateur virtuel 2 ... |
On va simplement créer un fichier login.txt et y inscrire la liste des utilisateurs virtuels et leurs mots de passe.
# gedit /etc/vsftpd/login.txt |
paul mot de passe de paul tom mot de passe de tom |
Attention, le fichier login.txt doit obligatoirement se terminer par un retour à la ligne !
On assure ensuite sa protection :
# chmod 600 /etc/vsftpd/login.txt |
Il va falloir convertir ce fichier en une base de donné au format « Berkeley db« , installez tout d’abord les paquets nécessaires à la création de celle-ci :
# apt-get install libdb4.4 db4.4-util db4.4-doc |
Attention la version des paquets est peut être différente selon la distribution utilisée !
Puis on convertit le fichier login.txt tout en modifiant les permissions :
# db4.4_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db # chmod 600 /etc/vsftpd/login.db |
Par la suite si vous ajoutez des utilisateurs à votre base de donnée, il vous suffira de renouveler l’opération .
L’authentification des utilisateurs sera assurée par le service PAM, on va indiquer ou se trouve notre base de donnée. Créez tout d’abord le fichier vsftpd :
$ gedit ~/vsftpd |
Recopiez ces deux lignes :
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/login account required /lib/security/pam_userdb.so db=/etc/vsftpd/login |
Puis placez celui-ci dans le bon répertoire :
# cp ~/vsftpd /etc/pam.d/vsftpd |
Configuration du fichier vsftpd.conf :
La configuration se fait comme souvent sous les système Unix grâce à un simple fichier texte, il s’agit ici du fichier vsftpd.conf situé dans le répertoire /etc/. Bien sûr seul l’administrateur du système aura la permission d’éditer celui-ci.
Si ce n’est pas déjà fait, sauvegardez le fichier :
# cp /etc/vsftpd.conf /etc/vsftpd.conf.bak |
Recopiez ensuite ce fichier de configuration :
# Mode "standalone" listen=YES # Désactivation des connexions anonymes anonymous_enable=NO # Activation des connexions non-anonymes local_enable=YES # Activation des utilisateurs virtuels guest_enable=YES # Nom du "meta-utilisateur" virtuel guest_username=muftp # Chroot des utilisateurs virtuels chroot_local_user=YES # Activation du changement de propriétaire des fichiers uploadés chown_uploads=YES # Nom du propriétaire des fichiers uploadés (votre_login étant votre nom d'utilisateur.) chown_username=votre_login # Définition de umask local_umask=000 # Désactivation des droits en écriture write_enable=NO anon_upload_enable=NO anon_mkdir_write_enable=NO anon_other_write_enable=NO # Message d'accueil ftpd_banner=Bienvenue sur un serveur VsFtpd. # Autorisation Xferlog xferlog_enable=YES xferlog_file=/var/log/vsftpd.log # Régularisation des connections connect_from_port_20=YES idle_session_timeout=600 data_connection_timeout=120 max_clients=200 max_per_ip=4 # # # Debian customization # # Some of vsftpd's settings don't fit the Debian filesystem layout by # default. These settings are more Debian-friendly. # # This option should be the name of a directory which is empty. Also, the # directory should not be writable by the ftp user. This directory is used # as a secure chroot() jail at times vsftpd does not require filesystem # access. secure_chroot_dir=/var/run/vsftpd # # This string is the name of the PAM service vsftpd will use. pam_service_name=vsftpd # # This option specifies the location of the RSA certificate to use for SSL # encrypted connections. rsa_cert_file=/etc/ssl/certs/vsftpd.pem # |
N’oubliez pas de renseigner la ligne « # Nom du propriétaire des fichiers uploadés« .
Gestion des permissions :
Peut-être l’avez vous remarqué, toutes les actions en écriture sont désactivées dans ce fichier de configuration. Mais alors comment faire par exemple pour autoriser l’upload d’un fichier ? Dans les faits, il suffit d’activer le service « per-user » et d’indiquer les permissions des utilisateurs dans un fichier texte propre à chacun d’entre eux. VsFTPd appliquera les règles décrites dans ces fichiers sans prendre compte de celles établies dans vsftpd.conf.
Comme dit précédemment il y aura deux types d’utilisateurs, Paul qui aura le droit de lire, d’écrire et de supprimer et Tom qui aura accès au serveur en lecture seule. Il faut donc indiquer à VsFTPd, les permissions des utilisateurs inscrits à notre base de donnée.
Commencez par ajouter la ligne suivante dans le fichier de configuration vsftpd.conf :
# Activation du per-user user_config_dir=/etc/vsftpd/ |
Nous allons donner à Tom son droit de lecture :
# gedit /etc/vsftpd/tom |
# Droit de lecture # anon_world_readable_only=NO |
Attribuons les droits de Paul :
# gedit /etc/vsftpd/paul |
# Droit de lecture # anon_world_readable_only=NO # droit d'écriture # write_enable=YES anon_upload_enable=YES # Création de dossiers # anon_mkdir_write_enable=YES # Droit de renommer, supprimer... # anon_other_write_enable=YES |
Pensez à redémarrer VsFTPd afin de prendre en charge les modifications :
# /etc/init.d/vsftpd restart |
Test :
Il est temps d’utiliser votre serveur ! On va tout d’abord y ajouter un fichier et par la même occasion en créer un autre qui servira simplement à tester l’upload.
$ touch /home/serveur_ftp/test1 $ touch ~/test2 |
Ce test va permettre de voir clairement les différences entre les deux utilisateurs. Nous effectuerons plusieurs opérations : Téléchargement, suppression, envoie d’un fichier et pour finir création d’un répertoire.
Loggez vous en tant que tom :
~$ ftp localhost 21
# Connection au serveur grâce à la commande ftp localhost 21 #
Connected to localhost.
220 Bienvenue sur mon serveur FTP
Name (localhost:gnu): tom
331 Please specify the password.
Password:
230 Login successful.
# Connection au serveur. Name : tom Password : mot de passe de tom #
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
# Affichage du contenu présent dans le répertoire #
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-r–r– 1 1000 1000 0 Dec 07 13:01 test1
226 Directory send OK.
ftp> get test1
# Téléchargement du fichier test1 #
local: test1 remote: test1
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for test1 (0 bytes).
226 File send OK.
ftp> delete test1
# Suppression du fichier test1 #
550 Permission denied.
ftp> put test2
# Envoie du fichier test2 #
local: test2 remote: test2
200 PORT command successful. Consider using PASV.
550 Permission denied.
ftp> mkdir tom/
# Création d’un repertoire tom/ #
550 Permission denied.
ftp> ls
# Affichage du contenu présent dans le répertoire #
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-r–r– 1 1000 1000 0 Dec 07 13:01 test1
226 Directory send OK.
ftp> quit
# Déconnection #
221 Goodbye.
Loggez vous en tant que paul :
~$ ftp localhost 21
# Connection au serveur grâce à la commande ftp localhost 21 #
Connected to localhost.
220 Bienvenue sur mon serveur FTP
Name (localhost:gnu): paul
331 Please specify the password.
Password:
230 Login successful.
# Connection au serveur. Name : paul Password : mot de passe de paul #
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
# Affichage du contenu présent dans le répertoire #
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-r–r– 1 1000 1000 0 Dec 07 12:56 test1
226 Directory send OK.
ftp> get test1
# Téléchargement du fichier test1 #
local: test1 remote: test1
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for test1 (0 bytes).
226 File send OK.
ftp> delete test1
# Suppression du fichier test1 #
250 Delete operation successful.
ftp> put test2
# Envoie du fichier test2 #
local: test2 remote: test2
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 File receive OK.
ftp> mkdir paul/
# Création d’un repertoire paul/ #
257 « /paul/ » created
ftp> ls
# Affichage du contenu présent dans le répertoire #
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxrwxrwx 2 1001 1001 4096 Dec 07 13:00 paul
-rw——- 1 1000 1001 0 Dec 07 13:00 test2
226 Directory send OK.
ftp> quit
# Déconnection #
221 Goodbye.
À travers ces deux exemples, on se rend bien compte des différentes permissions accordées aux utilisateurs. Ainsi tom n’a que le droit de lecture contrairement à paul qui a le droit de lire, d’écrire, de déplacer, de modifier et de supprimer. VsFTPd a donc bien passé outre son fichier de configuration en utilisant les droits indiqués dans /etc/vsftpd/paul et /etc/vsftpd/tom.
Commandes VsFTPd :
Voici la liste des commandes indispensables à la gestion de votre serveur FTP :
# /etc/init.d/vsftpd stop (Stop VsFTPd) |
# /etc/init.d/vsftpd start (Démarre VsFTPd) |
# /etc/init.d/vsftpd restart (Stop et redémarre VsFTPd) |
# /etc/init.d/vsftpd reload (Recharge les fichiers de configurations) |
Important : Après la modification d’un fichier de configuration, n’oubliez pas de relancer VsFTPd.
Surveillance du serveur :
Il est tout à fait possible de savoir qui fait quoi sur le serveur en temps réel, il suffit de rentrer cette commande dans votre terminal :
# tail -f /var/log/vsftpd.log |
Liens :
Documentations sur labo-linux.org
7 décembre 2008 à 21:08
Merci pour ce tuto, je vais l’essayer d’ici peu
7 décembre 2008 à 22:21
Merci pour cet article, je suis sous intrepid mais je n’ai pas le paquet libdb3-util dans les dépôts peu être que la version a évoluée. Peux tu m’en dire plus.
Merci d’avance.
7 décembre 2008 à 22:32
je viens de voir la doc.ubuntu-fr.org
qu’il faut ces paquets libdb4.4 db4.4-util db4.4-doc
7 décembre 2008 à 23:28
@M.I.B : Merci pour l’info En effet la version du paquet n’est pas la même…
8 décembre 2008 à 2:24
J’avais fais un tuto très similaire à celui-çi il y a un an et demi. (http://www.paradoxal.org/blog/post/2007/06/02/Serveur-Debian-vsftpd)
Çela fait plaisir de voir que de plus en plus de gens s’intéresse à vsftpd, c’est un très bon serveur très fiable malgré sa configuration parfois déroutante, c’est donc chouette de voir des variantes.
8 décembre 2008 à 18:53
@Seza : J’utilise VsFTPd depuis mes débuts sous GNU/Linux… Et j’en suis pleinement satisfait d’ailleurs je n’ai jamais testé autre chose que lui ! Dommage que je n’ai pas eu connaissance de ton tuto avant …
N’ hesitez pas à me faire part de votre opinion sur cet article Surtout si vous trouvez des erreurs et/ou disfonctionnements.
8 décembre 2008 à 21:09
Oui moi aussi exactement de même, certains de mes collègue lui préfère proftpd plus facile à configurer mais moins stable en revers.
A l’époque j’avais pas mal galérer pour trouver des infos sur les utilisateurs virtuels avec vsftpd mais j’avais mal cherché surement car d’autre tuto du même genre plus ancien existe pourtant.
Ce que j’aime c’est voir comment chacun mais sa petite sauce dedans
8 décembre 2008 à 22:32
@Seza : Pour ma part j’avais suivi le tuto disponible sur le site andesi.org. Les utilisateurs virtuels sont en effet difficile à gérer surtout en ce qui concerne les permissions des fichiers uploadés. Il m’était au début impossible d’avoir accés à ces fichiers j’ai ensuite ajouté ces 2 régles :
* anon_umask=000
Ce qui permet d’avoir tout les droits sur les répertoires uploadés.
* chown_uploads=YES
* chown_username=votre_login
Ce qui permet de modifier à la volé le propriétaire des fichiers uploadés.
Je ne sais pas si cela à des conséquence négative sur le bon fonctionnement du serveur mais en tout cas cela fonctionne admirablement bien chez moi.
9 décembre 2008 à 22:35
Salut WeedFast
encore merci pour cet article car depuis que j’ai quitté FileZilla Server en 2006 du moins depuis je suis passé à Ubuntu 6.06, j’avais laissé tomber mon serveur ftp. Mais maintenant il va reprendre du service.
Sinon je voudrai juste te dire que tu ne précises pas qu’il ne faut commenter tout le fichier
/etc/pam.d/vsftpd
avant d’ajouter:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/login
sinon on ne peut pas se connecter au serveur.
9 décembre 2008 à 23:27
@M.I.B : Que veux tu dire par commenter ? Mon fichier /etc/pam.d/vsftpd ne contient que c’est 2 lignes et l’ensemble fonctionne sans problème.
J’avoue avoir du mal à comprendre ta phrase… Je suis fatigué (Bête ?) ce soir
Merci pour ton commentaire
9 décembre 2008 à 23:59
Je veux dire que dans mon fichier était à l’origine comme ça
# Standard behaviour for ftpd(8).
auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
# Note: vsftpd handles anonymous logins on its own. Do not enable
# pam_ftp.so.
# Standard blurb.
@include common-account
@include common-session
@include common-auth
auth required pam_shells.so
et j’ai mis un # devant toutes les lignes
je ne sais pas si j’ai bien fait, à toi de me le dire.
10 décembre 2008 à 17:46
J’ai supprimer l’intégralité du fichier… En suivant un tutos bien sûr ! Et cela ne m’a pas posé de problème
2 janvier 2009 à 1:23
Bonsoir,
J’ai suivi le tuto mais il a fallu que je remplace la ligne ci-dessous placé dans vsftpd.conf
# Activation des connexions non-anonymes
anon_enable=YES
par
# Activation des connexions non-anonymes
local_enable=YES
Si je pouvais avoir plus de précision à propos de ce changement que j’ai du faire.
Merci, Tony.
2 janvier 2009 à 15:31
J’ai découvert ton blog par pur hasard en cherchant un truc concernant Squid
Excellent billet. J’ai longtemps rechigné à propos de vsFTPd même si je le trouve excellent mais très compliqué à configurer en effet.
J’ai opté pour ProFTPd depuis un moment mais cela ne m’empêchera pas du tout de tester ton tuto. Merci Weedfast
Salutations amicales
2 janvier 2009 à 19:16
@ Tony : Je regarde ça de suite car il est vrai que ce « anon_enable » fait louche…
Edit : J’ai modifié le tutoriel, il semble que ce soit une faute venant de ma part.
@ ButterflyOfFire : Merci, fais moi part de ton expérience
3 janvier 2009 à 22:01
Je suis un vrai looser :p je comprends un peu le principe de la configuration de vsftpd mais je n’arrive pas à le faire fonctionner. J’ai pourtant suivit le tuto du début jusqu’à la fin.
J’ai peut être raté quelque chose car en faisant un nmap localhost, il semble que vsftpd n’est pas même lancé et le port 21 toujours libre. Bizarre.
3 janvier 2009 à 22:07
Re … j’ai réussi à le faire démarrer ça fonctionne impec je continue mes tests
4 janvier 2009 à 19:08
Merci pour vos retours
27 janvier 2009 à 17:19
Merci,
Un très bon tutos qui fonctionne à merveille sur mon pc.
Très didactique on « comprend » ce qui se passe quant on débute comme moi.
Merci encore
27 janvier 2009 à 18:15
@artefact : Merci pour ton commentaire, cela fait plaisir à lire d’autant que je me suis appliqué à rendre ce tutos simple d’accés.
2 février 2009 à 13:48
[...] Installation d’un serveur FTP : VsFTPd [...]
2 février 2009 à 17:40
Bonjour,
Tout d’abord un grand merci pour votre tuto qui est très clair. J’en avais essayé d’autres qui ne m’avaient pas emballé à l’exception de celui d’Andesi.
Personnellement je l’ai combiné avec 2 autres tutos pour « fignoler » l’installation entre autre sur la partie SSL.
J’ai toutefois noté une petite erreur qui n’est pas génante du tout pour le fonctionnement, mais quitte à être précis ….
Dans cette ligne « sudo apt-get install libdb4.4 db4.4-util db4.4doc », il faut bien sur lire « db4.4-doc » à la place de db4.4doc » pour que la doc soit installée !
Encore merci.
2 février 2009 à 18:05
@21ch181: Corrigé et merci pour l’info !!
19 février 2009 à 9:24
Bonjour,
J’ai un soucis de connection sur le serveur je n’arrive pas a me connecter il me met « connection refused »
Y’a t’il une manière particulière de ce connecter?
2 mars 2009 à 15:40
J’ai exactement le même problême que toi geo. J’ai tout configuré exactement comme expliqué sur ce tuto (très clair, soit dit en passant), mais au moment de réaliser le test, ça ne fonctionne pas. Peut-être que je ne fais pas exactement ce qu’il faut. Où faut-il se connecter ? Dans Konsole ?
Est-ce que quelqu’un peut expliquer comment se connecter de manière très claire, genre vas là, fais ça…
Merci
4 mars 2009 à 20:23
@Wap @geo : Essayez de vous connecter via un logiciel tel que Gftp ou en entrant simplement l’IP du poste où est installé Vsftpd. Exemple : ftp 192.168.1.20
10 juin 2009 à 16:38
je suis tombé sur ton tutoriel concernant l’instalation d’un serveur vsftpd.
J’utilise un serveur Debian que je loue chez ovh pour faire divers tests.
Ton tutoriel est super clair et pourtant je n’arrive pas me connecter:
Quand je cherche à me connecter, j’ai une erreur 530 login incorrect.
Aurais tu une petite idée, vers ou il faudrait que je cherche pour me connecter.
Cordialement,
10 juin 2009 à 17:06
@beb : Si tu as suivi le tutoriel, je ne vois vraiment pas d’où provient cette erreur 530… N’ayant eu précédement aucune erreur de ce genre, je ne peux que te conseiller de regarder sur les liens présents en fin d’article. Bon courage
11 juin 2009 à 10:25
C’est tout bon! j’ai tout repassé en revu et j’ai fais une erreur dans le fichier pam!
pffff!
ça marche nickel!!!
Merci pour ce tuto.
19 juillet 2010 à 16:25
Très bon tuto, merci.
Pour information, en date du 19 Juillet 2010 pour une installation sur Ubuntu Server 10.04, on ne peut plus utiliser les paquets :
libdb4.4 db4.4-util db4.4-doc
il faut donc les remplacer par :
libdb4.8 db4.8-util db4.8-doc
26 octobre 2011 à 10:38
Bonjour, cela fait 3 ou 4 tutos différents que j’essaye de configurer vsftpd… Sans les utilisateurs virtuels cela fonctionne nickel. Par contre dès que j’essaye de les configurer j’obtiens l’erreur 530 login incorrect. J’ai refait plus de 10X les tutos de a à z et je ne comprends pas d’où cela peut venir… J’ai fait un copier/coller de votre vsftpd.conf et de votre fichier pam sans succès… Auriez-vous une idée? Merci d’avance…
8 février 2012 à 13:22
Bonjour,
j’ai suivi ce tuto, tout se passe bien, mais j’ai un soucis avec les test.
j’obtiens cette erreur : local: test1: Permission denied et cela quelque soit l’utilisateur.
ftp> get test1
local: test1 remote: test1
local: test1: Permission denied
Merci de m’éclairer….
14 mars 2012 à 16:49
Bonjour et tout d’abord je tient à te remercier pour ce tuto.
De moi côté je suis au stade de « sebird » et « jeandez » avec l’erreur 530 ou un permission denied.
J’ai vérifié un connexion en local sur localhost, vérifié les droits, vérifié les syntaxes et tester avec un filezilla à distance sur 3 logins différents.
Toujours le même problème.
Voici les logs Filezilla:
Statut : Connexion établie, attente du message d’accueil…
Réponse : 220 Bienvenue sur un serveur VsFtpd.
Commande : USER usertest
Réponse : 331 Please specify the password.
Commande : PASS ****
Réponse : 530 Login incorrect.
Erreur : Erreur critique
Erreur : Impossible d’établir une connexion au serveur
17 novembre 2012 à 22:37
Salut est-ce possible d’avoir une commande compatible pour openSuSE 11.4 ou 12.2, j’ai cheché partout et je ne trouve pas.
Ce sont ces deux la:
# apt-get install libdb4.4 db4.4-util db4.4-doc
Sur OpenSuSE c’est zypper install, mais ja’arrive pas à trouver des paquets qui font la même chose.
# db4.4_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db
Et pour celle là, c’est toujours les paquets.
Merci d’avance pour la possible aide que vous allez me donner.
Sandro