Serveur Debian - vsftpd
Par Seza le samedi 2 juin 2007, 18:28 - Serveur Debian - Lien permanent
CHAPITRE 3 : FTP
Commençons par installer le serveur FTP :
ALBAN@bebeserv:~$ sudo -i Password: bebeserv:~# apt-get update [...] bebeserv:~# apt-get install vsftpd libdb3-util ftp [...]
L'installateur créé automatiquement un utilisateur « ftp »
qui à le groupe « nogroup »
et le dossier « /home/ftp »
pour cet utilisateur.
Nous allons changer tout ça, et de plus vu que de base « vsftp »
autorise les connexions anonymes par défaut, même si « iptables »
ne laissera rien passer, c'est un bon reflex de couper le serveur en attendant sa configuration finale.
bebeserv:~# /etc/init.d/vsftpd stop [...]
Nous allons d'abord nettoyer un peu ce que « vsftpd »
à créer automatiquement
bebeserv:~# userdel ftp bebeserv:~# rmdir /home/ftp
Je vais conserver le groupe « nogroup »
et utiliser l'utilisateur « nobody »
qui existe déjà. Nous devons juste accorder cet utilisateur pour ce que nous voulons en faire. Ici j'anticipe un peu sachant que je vais créer des utilisateurs FTP virtuels pour mes sites internet.
bebeserv:~# usermod -g nogroup -d /home/nobody -s /usr/sbin/nologin nobody bebeserv:~# useradd -g nogroup -d /home/nobody -s /usr/sbin/nologin anonymous bebeserv:~# mkdir /home/nobody bebeserv:~# chgrp nogroup /home/nobody bebeserv:~# chmod 2770 /home/nobody
Créons aussi le dossier de notre premier utilisateur virtuel :
bebeserv:~# mkdir /home/nobody/test/ bebeserv:~# chown nobody /home/nobody/test/
Une petite explication s'impose, nous donnons d'abord au dossier le bon groupe et nous le mettons un « setgid »
dessus afin que tous fichiers et dossiers créés dans ce dossier appartiennent au groupe « nogroup »
, ensuite nous ne donnons aucun droit d'écriture sur le dossier sauf au propriétaire « root »
car « vsftpd »
accorde automatiquement les droits d'écriture dans le dossier en fonction de ces droits et nous ne souhaitons pas forcément que tous les utilisateurs puisse écrire dedans. Nous gérerons ces droits dans « vsftpd »
.
Maintenant nous allons configurer notre serveur FTP.
bebeserv:~# nano /etc/vsftpd.conf
Je change les lignes suivantes :
anonymous_enable=NO local_enable=YES write_enable=NO local_umask=022 anon_upload_enable=NO anon_mkdir_write_enable=NO dirmessage_enable=NO chown_uploads=NO chown_username=nobody xferlog_file=/var/log/vsftpd.log xferlog_std_format=YES idle_session_timeout=300 data_connection_timeout=60 nopriv_user=anonymous ftpd_banner=Welcome to bebeserv.bebenet.local FTP service. chroot_local_user=YES
Et je rajoute celles-ci :
guest_enable=YES guest_username=nobody max_clients=20 max_per_ip=5 force_dot_files=YES hide_ids=YES use_localtime=YES user_config_dir=/etc/vsftpd/user_conf # Connection sécurisée #ssl_enable=YES #allow_anon_ssl=YES #force_local_data_ssl=YES #force_local_logins_ssl=YES #ssl_sslv2=YES #ssl_sslv3=YES #ssl_tlsv1=YES
Enregistrez et quittez.
Maintenant configurons le fichier d'authentification PAM de « vsftpd »
afin d'utiliser des utilisateurs virtuels :
bebeserv:~# nano /etc/pam.d/vsftpd
Commentez toutes les lignes et mettez ceci à la fin du fichier :
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/login account required /lib/security/pam_userdb.so db=/etc/vsftpd/login
Enregistrez et quittez. Maintenant allons créer notre base d'utilisateurs virtuels :
bebeserv:~# mkdir /etc/vsftpd bebeserv:~# nano /etc/vsftpd/userdb
Créez l'utilisateur « test »
correspondant au dossier que nous avons fait plus haut :
test toto
Vérifiez toujours de bien mettre une ligne vide en fin de fichier !
La seconde ligne est le mot de passe de l'utilisateur ici donc « toto »
. Le fichier doit être écrit strictement de la sorte (avec toujours une ligne vide à la fin) :
user1 pass1 user2 pass2 user3 pass3 ...
Enregistrez et quittez.
Maintenant formatons notre base de données au format « userdb »
. pour ceci plutôt que de taper une ligne de commande fastidieuse et dont on ne se rappellera jamais, nous allons créer un petit script qui le fera pour nous.
Créons notre script :
bebeserv:~# nano /etc/vsftpd/vsftpd-makedb
Écrivez les lignes suivantes :
#!/bin/sh db3_load -T -t hash -f /etc/vsftpd/userdb /etc/vsftpd/login.db
Enregistrez et quittez. Maintenant donnons les bons droits à notre script :
bebeserv:~# chmod 500 /etc/vsftpd/vsftpd-makedb
Ajoutons un lien symbolique afin d'avoir accès directement à cette nouvelle commande, comme toutes les autres commandes.
bebeserv:~# ln -s /etc/vsftpd/vsftpd-makedb /usr/local/bin/
Maintenant et après chaque modification de la table « userdb »
il faudra faire :
bebeserv:~# vsftpd-makedb
Dorénavant notre utilisateur « test »
existe pour « vsftpd »
donnons lui des droits afin que « vsftp »
sache ce qui lui est autorisé. Mais pour ceci, afin de nous rappeler des options en permanence, nous allons créer d'abord un fichier d'exemple :
bebeserv:~# mkdir /etc/vsftpd/user_conf bebeserv:~# cd /etc/vsftpd/user_conf bebeserv:/etc/vsftpd/user_conf# nano example
Écrivez :
# donne les droits de lecture download_enable=YES anon_world_readable_only=NO # donne les droits d'écriture write_enable=YES anon_upload_enable=YES anon_mkdir_write_enable=YES # donne le droit de renommer de supprimer anon_other_write_enable=YES #donne le droit de faire des chmod chmod_enable=YES virtual_use_local_privs=YES #affiche les fichier cachés force_dot_files=YES # donne un home dans /home/nobody # exemple : local_root=test le home de l'utilisateur sera : # /home/nobody/test local_root=test # droits des fichiers créés anon_umask=002
Enregistrez et quittez.
Maintenant que nous avons un fichier d'exemple, créez celui de l'utilisateur « test »
et modifiez les options si vous le souhaiter :
bebeserv:/etc/vsftpd/user_conf# cp example test
Si ce n'est déjà fait ajoutez les lignes suivantes à votre fichier « /etc/network/iptables »
:
iptables -t filter -A INPUT -i eth0 -p tcp --dport 21 -d $MYIP -j ACCEPT iptables -t filter -A INPUT -i eth0 -p tcp --dport 20 -d $MYIP -j ACCEPT iptables -t filter -A OUTPUT -o eth0 -p tcp --dport 21 -s $MYIP -j ACCEPT iptables -t filter -A OUTPUT -o eth0 -p tcp --sport 20 -s $MYIP -j ACCEPT
Et à la fin du fichier rajoutez :
modprobe ip_conntrack_ftp ports=21
Configurons « fail2ban »
pour qu'il scanne les connexions FTP :
bebeserv:/etc/vsftpd/user_conf# nano /etc/fail2ban/jail.conf
Modifiez cette ligne :
[vsftpd] enabled = true
Enregistrez et quittez.
Maintenant que tout est prêt, redémarrez « iptables »
et « vsftpd »
:
bebeserv:/etc/vsftpd/user_conf# /etc/init.d/vsftpd start [...] bebeserv:/etc/vsftpd/user_conf# /etc/init.d/iptables-conf restart [...]
Faisons un petit test de connexion :
bebeserv:/etc/vsftpd/user_conf# ftp localhost 21 Connected to localhost. 220 Welcome to bebeserv.bebenet.local FTP service. Name :
Loguez vous avec l'utilisateur « test »
avec le mot de passe « toto »
.
La connexion réussi votre serveur ftp fonctionne.
Quittez :
ftp> quit 221 Goodbye. bebeserv:/etc/vsftpd/user_conf#
Dans cette configuration néanmoins les utilisateurs locaux ne peuvent pas se connecter en FTP classique. ce qui est en même temps un bonne chose car le FTP classique peut être remplacer par du SFTP (FTP par SSH) vous n'avez rien à changer pour que ceci fonctionne. ATTENTION ne confondez pas SFTP ET FTPS (FTP par SSL).
Afin de sécurisé aussi nos comptes virtuels nous allons faire en sorte qu'ils puisse se connecter en FTPS.
Pour ceci nous allons avoir besoin de « open-ssl »
pour générer les certificats adéquats et la connexion SSL.
bebeserv:/etc/vsftpd/user_conf# apt-get install openssl [...]
Maintenant générons un certificat pour « vsftpd »
:
bebeserv:/etc/vsftpd/user_conf# cd /etc/ssl/certs bebeserv:/etc/ssl/certs# openssl req -x509 -nodes -days 730 -newkey rsa:1024 -keyout vsftpd.pem -out vsftpd.pem
Aux questions répondez comme ceci par exemple; le plus important étant le « Common Name »
qui doit être l'adresse IP exact ou le nom de domaine exact du service), sachant que nous configurerons plus tard un sous domaine nommé « ftp »
sur notre domaine « bebenet.local »
j'utiliserai celui çi : « ftp.bebenet.local »
.
Voici ce que j'ai répondu :
Country Name (2 letter code) [AU]:FR State or Province Name (full name) [Some-State]:France Locality Name (eg, city) []:Paris Organization Name (eg, company) [Internet Widgits Pty Ltd]:bebenet.local Organizational Unit Name (eg, section) []:bebenet.local Common Name (eg, YOUR name) []:ftp.bebenet.local Email Address []:alban@bebenet.local
Vous venez de créer un certificat valide pendant deux ans. Maintenant sécurisez votre certificat avec des droits correct :
bebeserv:/etc/ssl/certs# chmod 0600 vsftpd.pem
Maintenant décommentez les lignes suivantes dans « /etc/vsftpd.conf »
:
# Connection sécurisée ssl_enable=YES allow_anon_ssl=YES force_local_data_ssl=YES force_local_logins_ssl=YES force_anon_data_ssl=YES force_anon_logins_ssl=YES ssl_sslv2=YES ssl_sslv3=YES ssl_tlsv1=YES
Enregistrez et quittez.
Rechargez la configuration de « vsftpd »
:
bebeserv:/etc/ssl/certs# /etc/init.d/vsftpd reload [...]
Vous pouvez régler le client de votre utilisateur virtuel pour se connecter en FTPS (FTP with SSL auth SSL explicit) ou (FTP with SSL auth TLS explicit).
Pensez à régler votre client en mode actif sans quoi il n'ira pas plus loin que la connexion. En effet sans SSL le serveur est régler pour géré le mode actif comme passif sans problème, seulement SSL empêche la gestion du mode passif. Pour contrer ceci nous pourrions limité la plage de ports passif sous « vsftpd »
et ouvrir dans « iptables »
ces ports mais cette idée je ne l'implémenterai pas ici.
Un petit rappel, une fois le SSL activer, les clients ne pourront plus se connecter sans mode SSL. pour les utilisateurs locaux SFTP (SSH) fonctionne toujours correctement.
Voilà pour ce chapitre.
bebeserv:/etc/ssl/certs# exit logout ALBAN@bebeserv:~$
Commentaires
Salut Seza... petite correction ou du moins chez moi sa marche pas ... au moment de créer la commande vsftpd-makedb, si on suit ton processus tu créer ton fichier sur ~ ce qui est le dossier par defaut
mais il faudrait le créer dans /etc/vsftpd/ ou alors faire un cp vsftpd-makedb /etc/vsftpd... sinon sa marchait pas ...
Hello,
Merci pour ce tuto.. je l'ai suivi à la lettre, mon serveur ftp fonctionne très bien mais j'ai un problème, je n'arrive pas à me connecter depuis l'extérieur, en local pas de problème..
J'ai la Freebox, j'ai rediriger les ports 21 et 20 ..
L'erreur que j'ai :
Réponse : 227 Entering Passive Mode (192,168,0,100,238,86)
Statut : Le serveur a retourné une adresse non routable, remplacée par l'adresse du serveur.
Commande : LIST
Voilà..
Salut!
J'ai suivi ton excellent tuto il y a quelques temps et tout était nickel. J'ai du réinstaller ma bête entre temps, et je reviens installer mon ftp. Seulement là : plus de libdb3-util!!! (apt-get ne connait plus)
Je suis en testing...
Quelque chose peut remplacer? Car du coup, je n'ai plus la commande db3_load... C'est dommage...
Hello Castrogne, mois je l'ai installé hier libdb3-util
deb http://ftp.fr.debian.org/debian/ etch main
deb-src http://ftp.fr.debian.org/debian/ etch main
avec ces sources... t'as fait un apt-get update && apt-get upgrade?
Matthieu > Tu utilise ton client FTP en mode passif ( commande PASV ) alors qu'il faut l'utiliser en mode actif (commande PORT ). Tu trouvera ceci dans les paramétrage de ton client FTP.
Si toutefois ta freebox bloque la connection. Une solution existe (moins belle certe) :
Dans le fichier /etc/vsftpd.conf ajoute ceci :
port_enable=YES
pasv_enable=YES
pasv_min_port=62000
pasv_max_port=63000
Redémarre vsftp ave la commande /etc/init.d/vsftpd restart
ajoute les règles iptables suivantes (voir mon tuto iptables) :
iptables -t filter -A INPUT -i eth0 -p tcp --dport 62000:63000 -d $MYIP -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -p udp --sport 62000:63000 -s $MYIP -j ACCEPT
Il te reste à ouvrir les ports 62000 à 63000 de ta freebox =)
Voilà tu pourras utiliser ton FTP comme bon te semble et le mode passif fonctionnera tout comme le mode actif.
Pour le paramétrage de la freebox je ne peux t'aider mais quelques me dis qu'en cherchant du côté des aides des logiciels P2P comme emule ou shareazaa tout trouvera toutes les explications nécessaires.
Ok je vais testé ça, pour le paramétrage de la Freebox, pas de soucis je sais faire ^^ !
Je te tiens au courant !
Merci :)
Castrogne,
Ce sont les aléas du testing ! Néanmoins puisque le testing est sensé devenir le futur debian stable autant se renseigner de suite.
Les paquets utilisant la base de donnée berkeley évolue, aujourd'hui dans la version testing de debian on trouve les versions 4.3 à 4.6. http://packages.debian.org/lenny/db...
Je me suis ensuite renseigné sur PAM (le système d'authentification) car c'est lui qui est charger de lire cette petite base berkeley. http://packages.debian.org/source/l... qui en est donc à sa version 0.99.7.1-6 actuellement. (celle que tu dois donc avoir sur ton serveur si tu te tiens à jour)
L'information qu'il faut trouver c'est : quelle version de base berkeley utilise le module pam_userdb dans cette version ?
Je vais donc voir le changelog du paquet PAM : http://packages.debian.org/changelo... . Il ne reste plus qu'à lire... enfin faire une recherche texte est plus rapide. En cherchant les termes "berkeley", "pam_userdb", "userdb" ceci n'a pas été très concluant mais en cherchant le terme "db4" je trouve dans le changelog de la version 0.99.7.1-2 datant du 26 aout 2007 ceci : " Migrate from db4.3 to db4.6; once again, no administrator action should be needed for upgrading on-disk database formats. "
J'en conclu que la version actuelle de berkeley pour PAM est la 4.6.
installe donc le paquet " db4.6-util ". Tu y trouvera une commande comme " db3_load " qui s'appelle " db4.6_load ". Tiens moi au courant que ça fonctionne ou pas.
Merci !
Re.. c'est bon en ouvrant les ports de 62000 a 63000 en udp et TCP ça fonctionne, Merci à toi :)
Salut,
Merci, ça marche impec avec la ligne de commande db4.6_load. En fait j'avais cherché via "apt-cache search" une commande dont le nom approchait, mais je sais pas pourquoi, je l'avais pas vu :).
Je vais essayer de mieux comprendre ta recherche, afin que je sois cappable de la refaire. N'oublies pas de signaler la modif au cas ou dans l'article.
Merci bien!!
Bonne nouvelle Castrogne !
Les commentaires sont là pour montrer les variantes =) Je mettrai le tuto à jour quand la version stable sera mise à jour pour rester cohérent avec le reste des autres tutoriels.
Merci pour les nouvelles :)
bonjour,
je n'arrive pas à me connecter de l'extérieur. cependant, pas de problème avec la commande :
ftp 127.0.0.1 21
je n'utilise pas FTPS pour l'instant, avant je veux voir si une connection "classic" fonctionne.
j'ai l'impression que c'est la configuration de iptables qui pose problème, la voici. voyez-vous une erreur ?
...
iptables -t filter -A INPUT -i eth0 -d $MYIP -p tcp --dport 21 -j ACCEPT
iptables -t filter -A INPUT -i eth0 -d $MYIP -p tcp --sport 20 -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -s $MYIP -p tcp --dport 21 -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -s $MYIP -p tcp --sport 20 -j ACCEPT
modprobe ip_conntrack_ftp ports=21
le module semble bien être chargé :
lsmod | grep ftp
ip_conntrack_ftp 7760 0
ip_conntrack 49088 1 ip_conntrack_ftp
le message d'erreur quand je me connecte de l'extérieur est :
ETIMEDOUT - Connection attempt timed out
je peux me connecter au serveur sur ssh, http etc... seulement le ftp pose problème. une idée, car vraiment je ne sais pas quoi faire.
merci d'avance !
pat
@patrick : Le fait que tu puisse te connecter depuis ton serveur avec la commande « ftp 127.0.0.1 21 » prouve que le serveur ftp fonctionne correctement. Donc en effet il faudrait s'orianté sur iptables.
Le serveur FTP doit écouter le port 21 , il faut donc autoriser les connexions entrantes sur ce port :
iptables -t filter -A INPUT -i eth0 -p tcp -d $MYIP --dport 21 -j ACCEPTLes réponses du serveur ftp doivent aussi parvenir au client :
iptables -t filter -A OUTPUT -o eth0 -p tcp -s $MYIP --sport 21 -m state --state RELATED,ESTABLISHED -j ACCEPTAvec tous ça le client distant communique mais les transferts doivent aussi être autorisés :
iptables -t filter -A INPUT -i eth0 -p tcp -d $MYIP --dport 20 -j ACCEPTiptables -t filter -A OUTPUT -o eth0 -p tcp -s $MYIP --sport 21 -m state --state RELATED,ESTABLISHED -j ACCEPT
Avec ceci les clients distants pourront se servir du serveur ftp en mode actif sans problème mais si ton serveur doit utiliser un client ftp (pour se connecter sur un serveur de backup par exemple) ou tester ton serveur ftp avec la commande « ftp 127.0.0.1 21 » tu dois ouvrir iptables aussi ainsi :
iptables -t filter -A INPUT -i eth0 -p tcp -d $MYIP --sport 21 -m state --state RELATED,ESTABLISHED -j ACCEPTiptables -t filter -A OUTPUT -o eth0 -p tcp -s $MYIP --dport 21 -j ACCEPT
iptables -t filter -A INPUT -i eth0 -p tcp -d $MYIP --sport 20 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -p tcp -s $MYIP --dport 21 -j ACCEPT
C'est pas vraiment subtil mais on s'embrouille très vite :)
Excellent !!! Ça fonctionne très bien.
Cependant, pourrais-tu nous indiquer comment configurer le iptables pour une connection FTPS ?
Je pense que les ports 115, 989, 990 doivent être ouvert en INPUT ? Est-ce que j'oublie quelque chose ? Par exemple, est-ce que
modprobe ip_conntrack_ftp ports=21 reste 21 ?
Encore une fois, merci !
Patrick
En ce qui concerne le FTPS, il faut savoir qu'il y a deux type de FTPS.
Dans mon tuto j'utilise le FTPS explicit, c'estpour ça que je n'ai rien préciser sur iptables car rien ne change.
Par contre en SSL (explicit ou implicit) ip_conntrack ne fonctionne pas car les données sont cryptées, tu peux donc décharger ce module. Ceci impose d'utiliser le client FTP en mode passif. Si tu dois absolument utiliser le mode actif la solution existe plus haut dans les commentaires. Elle consiste à définir une plage de ports spécifique au FTP pour les transfert de data.
A noter la nuance entre le SSL et TLS, ici vsftp gère les deux type de protocole (le TLS étant l'évolution du SSL version 3). Dans le client FTP l'un comme l'autre peuvent être utilisé.
A noter que pour paramétrer vsftpd pour utiliser du FTPS implicit il faut ajouter la ligne de configuration suivante
:listen_port=990
et changer celle-ci :
connect_from_port_20=NOL'utiliser du FTPS implicit impose qu'on ne puisse plus se connecter en FTPS explicit ou FTP.
Alors que le FTPS explicit peut être combiner au FTP classique en désactivant ces options :
force_local_data_ssl=NO
force_local_logins_ssl=NO
force_anon_data_ssl=NO
force_anon_logins_ssl=NO
merci beaucoup pour ces précisions !
je dois t'avouer que je trouve vsftpd un peu difficile à utiliser, la dernière version de filezilla refuse de se connecter en ftps explicit, disant d'upgrader la version du serveur ftp.
alors voici ce que j'ai fais:
apt-get install vsftpd libdb3-util ftp libcap-dev
wget dernièreversiondevsftpd
wget https://dev.openwrt.org/cgi-bin/tra...
cat 005-exit_status_const.patch | patch -p1
nano builddefs.h
make
mv /usr/sbin/vsftpd /usr/sbin/vsftpdbk
cp vsftpd /usr/sbin
/etc/init.d/vsftpd restart
vsftpd -v = 2.0.7 (pour l'instant)
maintenant, si j'ai bien compris tes explications, je n'ai pas besoin de changer les règles de iptables (conserver 21, 20), mais enlever le modprobe ip_conntrack_ftp ports=21
comment dois-je procéder si je ne veux pas définir une plage de port à ouvrir. car le vsftpd semble supporter seulement le mode passif en ftps explicit, ce qui va m'obliger à ouvrir une plage. j'ai bien essayé de dire au client ftps - explicit : mode active, mais il s'arrête à LIST. la commande FEATURE retourne seulement PASV...
patrick
Personnellement je n'aime pas filezilla et encore moins les logiciels qui ont la facheuse tendance à accuser les autres quand ça ne marche pas. (je l'ai déjà vu plusieurs fois ce message avec filezilla).
Pour être honnête filezilla n'est pas terrible et est plutôt capricieux. Le protocole FTP n'a pas changé depuis ..... au moins ça alors comment ceci peut être une histoire de mise à jour ?
Bon plus sérieusement ce qui m'a fait tiquer c'est le FEATURE qui ne liste que PASV, et vu que tu dit l'avoir configurer le client en ftp actif, il faudrait vérifier que tu as bien mis
port_enable=YES
sinon il ne proposera pas la commande port.
Salut ;
J'utilise actuellement Linux Debian Etch (4.0) et j'installe tout correctement et je vous confirme que votre tutoriel ne marche pas.
D'ayeur.. sur le net j'ai rarement vu un tutoriel sur VSFTPD qui marche, alors peut-être que je me trompe.. ? Je fais une install d'une debian par défaut, " Système Standart ", peut-être faudrait-il choisir "Serveur de fichier" aussi..
'bref, dommage que ça ne marche pas.
@+
@WAR10être CK :
Je ne sais quoi te répondre, en dehors que ça marchera avec n'importe quel type d'installation de Debian, la gestion des dépendances étant très bien faîtes sur debian il n'y a aucun soucis.Maintenant ce tuto est vieillissant, il a plus d'un an et demi, et les distribution évolue constament.
Pour t'aider dans ta réussite je me permet de te conseiller ceci : un tutorial doit être adapté à sa situation on ne le recopie jamais bêtement. Je ne pense que pas tout ceux qui écrivent des tutos se trompent généralement quand on dit ceci, c'est que l'on fait soit même une erreur.
N'hésite pas à donner des détails sur ce qui ne marche pas, ça peut aider, ou à trouver mon erreur ou la tienne.
Bonjour ;
En faites l'installation se passe très bien (ps: je ne recopie pas bêtement les lignes de codes jusqu'à avoir une réponse.. non là je ne serais pas venu me "plaindre") jusqu'au moment ou je dois me logguer avec les users écrit à l'intérieur du fichier login.txt qu'on doit transformer en .db. Je me déconnecte après avoir suivi ton tutorial en entier, et il s'avère qu'en faites, quand j'essaye de me connecter avec les users écrit dans le login.txt, le serveur me refuse l'accés, il ne me dit pas que le mot de passe est pas bon ou que ça vient du login, non il ne veut pas me connecter. Aucun autre message d'erreur :/
Et pour ce qui est du " ftp localhost 21 ", cela ne marche pas non plus puisque je ne peux me connecter en utilisateur créé dans mon login.txt. Tu utilises peut-être une version de debian stable/etch ?
Je vais essayer de percer ce foutu problème histoire que d'autre personne dans mon cas sortent de ce pétrin.
Bonne soirée :)
@WAR10CKêtre : Ton erreur ne doit pas être quelques choses de bien sorcier. Si je devais traduire ce que tu essais de me dire c'est : « Je n'accède pas au serveur » Plusieurs cause sont possible. Un message d'erreur clair (de la part de ton FTP par exemple m'aiderai genre connection timeout) mais je vais te donner des pistes.
1 . Vérifier que le serveur FTP est bien démarré (on ne sait jamais) : un petit " /etc/init.d/vsftpd restart " pour voir et un " psaux | grep vsftpd " pour s'assurer que le processus est bien présent.
2 . Vérifier que le serveur FTP écoute bien le port 21 pour cela un " netstat -poteaun " t'indiquera les processus qui écoutes le web (plage ip, port, etc).
3 . Vérifier que tu n'est pas bloquer par ton firewall (iptables) : pour cela un petit " iptables -L -n -v " pour vérifier que les règles sont correctes.
4 . Si tout ceci ne te mène à rien, que tout est normal : Vérifier les logs sur ton serveur (/var/log/vsftpd, /var/log/daemon, /var/log/messages, /var/log/auth principalement fourniront de bonnes indiquations)
5 . Si tu ne trouve toujours pas, re-vérifier la configuration de la machine, vérifier les droits sur les fichiers etc...
6 . Si tu n'as toujours pas trouver, passe le serveur en mode debug et vérifie ce qu'il te dit dans les logs.
7 . Fait appel à ton intuition féminine :p
8 . Cri au secours, appel à l'aide
9 . Abandonne et retente la semaine prochaine
10 . Laisse définitivement tomber
Mais je suis sûr que tu auras trouver la réponse du pourquoi ça ne marche pas avant le point N°4 et que tu te connectera à ton serveur (au moins un début de dialogue avec la machine). Après rien ne dit qu'autre chose ne va pas clocher comme l'authentification ou que ça marchera en SSL.
Bonne chance
Bonjour ;
J'avais déjà testé les 3 premières solutions ^^ mais je vais retenter pour voir.. sait-on jamais :P
Re :
Voilà le soucis : 1) VSFTPD ne se lance pas. Donc je ne vais pas plus loin. (Etonnant, c'est la première fois :O).
Parcontre.. je n'ai aucun message d'erreur me disant que je ne peux pas le lancer ou encore que je ne peux pas le redémarrer ou l'arrêter.
debian:/# /etc/init.d/vsftpd start
debian:/# /etc/init.d/vsftpd restart
debian:/# /etc/init.d/vsftpd stop
debian:/# /etc/init.d/vsftpd start
debian:/# ps aux | grep vsftpd
root 2637 0.0 0.0 2848 696 pts/0 D+ 16:35 0:00 grep vsftpd
Donc après, c'est logique que je ne puisse pas faire un " ftp localhost 21 " ... Je vais donc chercher d'ou ça vient en attendant ta réponse ;)
Ca serait pas le script de démarrage qui ne répondrais pas ? puisqu'après tout.. le lancement, l'arrêt et le redémarrage fonctionne grâce à ce fichier de démarrage.. alors je ne sais pas :/
À la tentative de démarage "/etc/init.d/vsftpd start" tu n'as aucun message d'erreur / d'information ? c'est étrange.
1 . un fichier de configuration incorrect ou mal former peut empecher le démarrage de certain programme
2 . vérifie qu'aucun fichier concernant vsftpd existe dans /var/run
Salut ;
En effet, /var/run/vsftpd , je n'ai aucun fichier à l'intérieur en faites, c'est juste le nom du répertoire que j'ai mais pas plus. J'ai suivi ton tuto du début jusqu'à la fin, je ne vois vraiment pas ce qui cloche...
/me crit !! ^^
Je ne voit quel peut être le problème mais ce n'est pas mon tuto qui peut provoquer ce genre d'erreur.
puisque tu es sous debian, revient à la "normal" (à l'install par défaut)
- supprime les fichier, dossier que tu as ajouter en suivant le tuto
- effectue un "dpkg-reconfigure vsftpd" (en root)
voilà tu pourras vérifier que vsftpd fonctionne de nouveau.
Si ce n'est pas le cas (ce qui me semble assez grave)
désinstalle le et réinstalle le
- apt-get remove --purge vsftpd && apt-get install vsftpd
Ceci dit si c'était mon serveur je persévérerai à trouver l'erreur, je commencerai par :
- regarder le script de démarrage
- trouver la ligne qui lance le serveur
- essayer cette ligne de code
- etc...
Bon courage
Re ;
Alors j'ai modifié le /etc/init.d/vsftpd. En effet, une erreur de script était à l'origine du problème. Mais ça ne s'arrête pas là, une fois modifié le script, je fais un " ps aux | grep vsftpd " pour voir si vraiment il était lancé et si tout fonctionnait bien, et là, Plouf rien ! Alors je vais essayer de recommencer mes configs etc.. mais je ne sais pas pourquoi ça me pose autant de soucis :/. 'bref, j'arrête de vous embêter et je vous souhaite une bonne continuation ;)
Encore merci de m'avoir accordé votre aide.
WAR10CK
Salut,
j'ai le même problème que WAR10CK. En suivant ton tuto sur une debian Etch à jour de ses correctifs, mon serveur vsftpd ne se lance pas. Pas de messages d'erreurs ni à l'écran ni dans le fichier log.
La suppression et reconfiguration du paquet ne suffit pas, je suis obligé de désinstaller et réinstaller pour retrouver un vsftpd fonctionnel. Ceci me fait penser que c'est un problème de droits avec le user nobody ?..
Cordialement,
Depuis le temps, je suis passé sous Windows Server 2003 et le service FTP d'IIS 6, c'est du windows.. mais ça marche au final et ça m'a pris 40min à installer windows + le FTP ... Chaque solution est différente mais la mienne au finale, marche.
Ce que je vais faire ce tantôt, c'est que je vais deboostrapper une debian etch sur mon pc et je vais installer vsftpd dessus et voir comment ça se passe.
Car tous les deux bloqués ça m'intrigue.
Par contre je me doit de vous demander, êtes vous réellement en debian Etch stable à jours ?
Non non je ne vous prend pas pour des imbéciles, le dernier serveurs que j'ai administrer pour "rendre service" était bien une install Etch mais en unstable (super pour un serveur) et pas à jours... quand j'ai lancer un apt-get update && ...upgrade il y avait un peu plus de 200 paquets à mettre à jours.... Vous voyez ? Et il me disais :
(pour comprendre le debootstrap je vous invite à lire mon article sur les test unitaire des pre-version PHP)
Oui mes versions de debian sont à jour et j'arrive à tout faire dessus :) et OUI c'est du stable x)
Je réessayerais bien le week-end prochain de créer le VSFTPD ;)
Je vous tiens au courant.
Messieurs,
J'ai refais tout le tuto donc et j'en ai donc profiter pour ajouter une seconde annexes au billet qui reprend tout le tuto mis à jour, au jour d'aujourd'hui.
Je ne vous cache pas qu'il y a très très peu de changement et que vsftpd à marcher du premier coup.
WAR10CK je ne te dirai pas tout le bien que je pense de 2003 server :) et pour info j'ai mis 30 minutes pour : installer une base debian avec debootstrap, faire le tuto, rédiger le tuto et ça fonctionne aussi :] (mais rien n'est parfait autant chez linux que microsoft).
Je confirme que ma debian est parfaitement à jour (installée chez OVH il y a 3 mois avec des upgrade toutes les semaines...).
Pour ce bug, honnêtement je ne sais que penser. Par contre sur l'intérêt d'une debian sur un Windows 2003, il y a pas photo je reste en debian.... :-)
Avez-vous penser à lancer vsftpd manuellement (lancer /usr/sbin/vsftpd dans le terminal) pour savoir ce qu'il vous dit ?
A savoir aussi, en y réfléchissant que ce tuto est fait pour de l'ipv4, si vous utiliser de l'ipv6 sur une dedibox par exemple le serveur ne démarre pas. Il faut mettre listen_ipv6=YES à la place de listen=YES dans la conf.
Remarquable tuto, bien détaillé et explicite!
Malgrès tout j'ai quand meme un problème... Depuis que j'ai suivi ce tuto, plus aucune connexion ne m'est possible sur vsftpd en port 21 (connection refused) et les users ajouté via le fichier "userdb" ne sont pas reconnu!
Seul une connexion sur le port 22 en sftp est possible et de plus qu'avec des users system.
Le port 21 n'est pas bloqué par iptables, j'ai aussi bien la lib "db4.6-util" et le script se lance sans probleme.
Je suis un peu perdu et novice sur Debian. Toute lumière serai tres apprécier !
En vous remerciant
Greg
Salut Greg, à première vue comme ça si la connexion n'est pas possible sur le port 21 il n'y a que deux possibilité :
- le serveur FTP n'est pas démarrer.
- un problème avec les règles iptables.
Qu'est ce que te dis la commande:
telnet localhost 21quand tu es connecté en ssh sur ton serveur ?Salut
Merci pour la qualité de ton tuto.
Chez moi j'ai problème de connexion. Voici le message résultant de quelques tentatives :
lenny503:/etc/vsftpd/user_conf# ftp localhost 21
" Connected to localhost.
J'ai parcouru les commenaires. Je pense que que le problème viendrait des règles IPTABLES. Je dois avouer que cette notion est nouvelle pour moi. Déjà j'ai pas le fichier /etc/network/iptables sur mon debian lenny 5.03 (nouvellemnt installé). J'ai IPTABLES quelque part ailleurs sur /sbin/iptables. Mais le contenu est illisible je trouve et donc je n'étais pas sûr si c'est là qu'il fallait copier les règles. Par ailleurs si j'essaie de faire les commandes de ton tuto sur le terminal (je ne sais pas si on peut faire comme ça, mais bon je voulais essayer) j'obtiens :
"
lenny503:~# iptables -t filter -A INPUT -i eth0 -p tcp --dport 21 -d $MYIP -j ACCEPT
Bad argument `ACCEPT'
Try `iptables -h' or 'iptables --help' for more information.
"
Est-ce que j'ai eu tort d'insatller cette version de lenny? Je voudrais vraiement plus reinstaller (tant il est vrai que j'ai fait le tour des configurations qui bloquent toujours à un moment donné aussi bien pour proftpd, pure-ftpd et maintant vsftpd...) D'autre part est-ce que la commande "psaux" existe? Moi j'ai plutôt : "psaux | grep vsftpd
bash: psaux: command not found" par contre ceci me donne : lenny503:~# ps aux | grep vsftpd
"root 15241 0.0 0.0 3776 980 ? S Dec23 0:00 /usr/sbin/vsftpd
root 15438 0.0 0.0 3936 768 pts/1 R+ 00:47 0:00 grep vsftpd"
Voilà je ne voudrais pas rallonger davantage mon poste. Est ce que quelqu'un a une idée sur comment contourner ce paramètrage d'IPTABLES?
Joyeux Noêl à tous.
Salut bekabeka,
Je vois que tu débutes réellement sur linux. Alors je vais essayé de répondre simplement à tes questions.
Donc pour commencer, je te conseille de lire mes tutos depuis le premier. Tu apprendras beaucoup ainsi. Tu comprendras pourquoi tu n'as pas le fichier /etc/network/iptables (puisque je le créer dans un précédant tuto). D'ailleurs j'explique aussi précédemment le fonctionnement d'iptables.
Taper directement
iptables -t filter -A INPUT -i eth0 -p tcp --dport 21 -d $MYIP -j ACCEPTdans ton terminal ne fonctionne pas c'est normal car tu n'as pas remplacer le$MYIPprésent dans la ligne. C'est expliquer aussi dans le tuto sur iptables. Sinon oui tu peux taper les commandes comme celle-ci directement dans le terminal.Sinon ne touche surtout pas au fichier /sbin/iptables et d'une manière générale ne modifie jamais ce qui se trouve dans /bin, /sbin, /usr/bin et /usr/sbin ce sont des dossiers qui contiennent les exéctables (les programmes) du système.
Sinon la commande c'est :
ps aux | grep vsftpdattention à l'espace.Je croyais que j'étais le seul à faire une nuit blanche! :D
Effectivement j'ai compris que le fichier "iptables-conf " a été crée anterieurement puis que je suis occupé sur ton tuto sur "ssh". Là je remarque intuitivement que je dois carréremnt aller sur le premier de la série...
Je reviendrai sûrement dans quelques jours le temps d'assimiler plus ou moins tes articles qui sont de précisieuses contibituons sur des manipulations importantes en linux.
Merci encore de ta disponibilité à donner une suite à ceux qui suivent tes tutos. C'est tellement important qu'on ne se sent pas largué dans ce labyrinthe de découverte ....Là je déborde je crois, non. Bon je vais aller faire dodo maintenant
Bon matin :-)
Merci pour tout ces compliments et bonne continuation ! Joyeux Noël !
En effet, il semblerait que VSFTPD ne démarre pas...
Petit message d'erreur lors d'un restart:
Restarting FTP server: vsftpdNo /usr/sbin/vsftpd found running; none killed.
.
Et second message qui indique clairement que le programme ne tourne pas => le "telnet localhost 21" me retourne:
Trying 127.0.0.1...
Trying ::1...
telnet: Unable to connect to remote host: Connection refused
iptables n'a aucune regles blocquant le port 21.
Je vous avoue que je suis un peu perdu!
Que faire? :s
Greg
Au final, j'ai tout desinstaller et reinstall.
Y a du mieux, le service vsftpd restart sans probleme, connection possible sur le ftp, par contre toujours un probleme de user.
Ils ne sont pas reconnu!
500 OOPS: missing value in config file for:
En vous remerciant!
Greg
Salut Greg,
Alors pour ton premier commentaire c'était normal comme message, vsftpd n'étant pas démarrer et toi ayant lancé une commande restart, il t'engueule en te disant que vsftpd n'est pas démarrer (pour faire un restart il faut qu'il soit on à la base sinon fait un start tout court).
Pour ton second message, bon tu a choisi de tout réinstallé c'est souvent ce que font les débutants quand ils coincent :) Alors que finalement comme te le montre ma phrase précédente un simple /etc/init.d/vsftpd start ou lieu de restart t'aurais amené au même point.
Le message d'erreur que tu montre suggère qu'il y a une erreur dans le fichier de configuration de vsftpd, reprend donc ton fichier et vérifie terme par terme qu'une petite faute de frappe par exemple ne ce soit pas glissé par ici ou par là.
Une petite aide qui est très utile c'est la commande man vsftpd.conf qui te donnera toutes les options existante pour le fichier de configuration.
Bon courage !
Bonjour !
Tout d'abord joli tuto, je le trouve complet !
Mais je rencontre un petit souci : A la connexion au serveur ftp avec mon client filezilla j'ai ce message là qui apparait :
cannot change directory:/home/nobody
Et du coup je ne peux pas me connecter au serveur en local. De plus j'ai remarqué je n'ai pas le fichier "/etc/network/iptables"
Dans mon fichier /etc/vsftpd.conf j'ai bien la ligne user_config_dir=/etc/vsftpd/user_conf et j'ai bien mon fichier test qui contient la config pour l'utilisateur test.
Auriez vous une Idée ?
Merci
Bonjour !
Après plusieurs heures de recherche, problème résolu !
C'était un problème de droit sur nobody en début de tuto...
J'ai mal suivi le tuto arf !
En tout cas super tuto, connexion FTP depuis le Wan avec Certificat SSL c'est parfait !
Merci !
Salut Kozo, Merci pour tes commentaires ! Excuse-moi de n'avoir répondu immédiatement ! Bien joué pour ton pb de droit tu as trouvé tout seul :) Pour le fichier iptables que tu ne trouves pas, il provient d'un des tuto Debian précédant comme je l'ai expliqué dans un commentaire précédant.
En tout cas je suis heureux que ce tuto t'ai rendu service !