VSFTP+SSL+Utilisateur Virtuel +FileZilla

Bonjour à tous :smiley:

C’est un long message ^^ J’espère que vous prendrez le temps de le lire (merci d’avance à ceux qui le liront^^)

Je suis actuellement en train de configurer un VSTFP via SSL. Mais j’ai quelques soucis. :confused: J’ai suivi ce tuto : http://ressources-info.fr/tutoriels-systemes/afficher/8/
Je suis actuellement sous Debian 7.4 i686.
Voici toutes les commandes que j’ai pu taper (je suis en train de tout refaire pour la nième fois en même temps comme ça moins de risque de fail dans les commandes.)
Note : toutes les commandes sont faîtes en root

apt-get update apt-get upgrade apt-get install sudo vsftpd fail2ban db-util gcc make mcrypt rm -rf /etc/ftpusers mkdir /etc/vsftpd
Pour faire ma liste utilisateur et enlever l’utilisateur “www-data” voici ce que je fais:

cat /etc/passwd | awk -F: '{print $ 1}' > /etc/vsftpd/user_list sed -i '/www-data/d' /etc/vsftpd/user_list

Création des dossiers pour mes utilisateurs avec mise en place des droits:

mkdir /var/www/work mkdir /var/www/fmaille chmod 777 /var/www -R chown www-data:www-data /var/www/ -R
Vérification :

ls -all /var/www/ drwxrwxrwx 4 www-data www-data 4096 Mar 25 19:25 . drwxr-xr-x 12 root root 4096 Mar 25 19:08 .. drwxrwxrwx 2 www-data www-data 4096 Mar 25 19:25 fmaille -rwxrwxrwx 1 www-data www-data 177 Mar 25 19:09 index.html drwxrwxrwx 2 www-data www-data 4096 Mar 25 19:25 work

Je génère mon certificat (je ne vous montre pas la commande ça au moins je suis sûr ^^).

Fichier vsftpd.conf:

[code]############################################

Configuration globale du serveur VSFTP

############################################
#Port d’écoute (on utilise le port SSL)
listen_port=465
#Interdiction d’utiliser le port 20
connect_from_port_20=no
#bannière d’accueil du FTP
ftpd_banner=Bienvenue mon SRV FTP
#fichier de config PAM
pam_service_name=vsftpd
#Mode standalone
listen=yes
#Connexions anonymes refusées
anonymous_enable=no
#Les users virtuels pourront mapper un compte local
local_enable=yes
#fichier des users interdits (ex: root)
userlist_file=/etc/vsftpd/user_list
#on charge la liste
userlist_enable=yes
#on refuse tous les comptes qu’elle contient
userlist_deny=yes
#les users virtuels seront mappés sur le compte local “ftp”
guest_enable=yes
guest_username=www-data
#un user virtuel pourra télécharger des fichiers (on assure un minimum
#de service en cas d’erreur de config)
anon_world_readable_only=no
#“emprisonnement” des users
chroot_local_user=yes
#nombre de connexions simultannées maximum
max_clients=10
#nombre maximum de connexion avec la même adresse IP
max_per_ip=2
#fichier de log
xferlog_enable=yes
#######################

Connexion via SSL

#######################
#On autorise le SSL
ssl_enable=yes
#On force l’utilisation du SSL
force_local_data_ssl=yes
#on accepte les différentes versions d’SSL
ssl_tlsv1=yes
ssl_sslv2=yes
ssl_sslv3=yes
#Renseignement du certificat à utiliser
rsa_cert_file=/etc/vsftpd/vsftpd.pem
##################################

Configuration au cas par cas

##################################
#Répertoire où se trouvent tous les fichiers de conf users
user_config_dir=/etc/vsftpd/vsftpd_user_conf[/code]

Ouverture des ports (pare-feu):

# FTP (SSL) iptables -t filter -A OUTPUT -p tcp --dport 465 -j ACCEPT iptables -t filter -A INPUT -p tcp --dport 465 -j ACCEPT

Création de la BDD (utilisateur virtuels) : /etc/vsftpd/login.txt

titi titi
Permission et hash du fichier :

db5.1_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db chmod 600 /etc/vsftpd/login.*

Fichier pam.d:

auth sufficient pam_unix.so account sufficient pam_unix.so auth required /lib/i386-linux-gnu/security//pam_userdb.so db=/etc/vsftpd/login account required /lib/i386-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/login

Restart et reboot en cours.
Au reboot on tente de se connecter au moins une fois histoire de voir même si les utilisateurs ne sont pas encore dans leur dossier respectif et voici l’erreur :

[quote]Response: 220 Bienvenue mon SRV FTP
Command: AUTH TLS
Response: 234 Proceed with negotiation.
Status: Initializing TLS…
Error: GnuTLS error -12: A TLS fatal alert has been received.
Error: Could not connect to server[/quote]
En cherchant sur le net j’ai vu qu’il fallait ajouter cette ligne dans notre /etc/vsftpd.conf

ssl_ciphers=HIGH

Et là on se dit OUAIS !!! :smiley: :smiley: je vois enfin mon certificat, on accepte tout content :smiley: et là c’est le drame :angry:

[quote]Status: Delaying connection for 1 second due to previously failed connection attempt…
Status: Connecting to 192.168.0.106:465…
Status: Connection established, waiting for welcome message…
Response: 220 Bienvenue mon SRV FTP
Command: AUTH TLS
Response: 234 Proceed with negotiation.
Status: Initializing TLS…
Status: Verifying certificate…
Command: USER titi
Status: TLS/SSL connection established.
Response: 331 Please specify the password.
Command: PASS ****
Error: GnuTLS error -15: An unexpected TLS packet was received.
Error: Could not connect to server[/quote]

En cherchant encore sur le net (car je veux le faire marcher même en étant depuis 4 jours dessus :013 ) on apprend que c’est un bug entre FileZilla et VSFTP et que la version de VSFTP est en 2.3.5.3 ne marche pas ou mal … Là on trouve un bon tuto pour installer et compiler notre vsftpd :
https://forum.ubuntu-fr.org/viewtopic.php?id=997111
Note les explications sont en peu plus bas dans la page (j’ai suivi à la lettre ^^ )

Mais ayant un problème avec la compilation car il nous dit ne pas trouver le “crypt”. En cherchant un peu on voit qu’il faut modifier le fichier vsf_findlibs.sh Auquel je rajoute à la ligne 26 (je précise la ligne car il cherche justement le ‘crypt’ donc je lui donne le chemin :smiley: (je suis gentil hein ^^ )

Ligne rajoutée dans vsf_findlibs.sh:

locate_library /usr/lib/i386-linux-gnu/libcrypt.so && echo "-lcrypt";

on recompile :smiley: et je fais les dernières étapes du tuto :

service vsftpd stop cp vsftpd /usr/sbin service vsftpd start

On rajoute à notre fichier /etc/vsftpd.conf la ligne suivante comme demandé dans le tuto :

allow_writeable_chroot=YES

Et là il nous balance l’erreur :

[quote]Status: Connecting to 192.168.0.106:465…
Status: Connection attempt failed with “ECONNREFUSED - Connection refused by server”.
Error: Could not connect to server
Status: Waiting to retry…[/quote]

J’avoue que je ne sais vraiment plus quoi faire :confused: Si une âme charitable veut bien m’aider svp. Je planche dessus depuis 4 maintenant 5 jours et je n’y arrive vraiment pas :confused:
Merci en tout cas d’avance pour votre aide qui me sera surement très précieuse.

zaewyr
Merci encore à ceux qui ont lu le message :smiley:
EDIT : J’ai ré-ouvert les ports par la suite donc ce n’est pas le pare-feu qui bloque et sur mon pc j’ai viré tous les pare-feu donc bon…

EDIT 2 : J’ai rajouté mon dossier /etc/vftpd/vsftpd_user_conf

[code]mkdir /etc/vsftpd/vsftpd_user_conf
cat /etc/vsftpd/vsftpd_user_conf/titi

local_root=/var/www
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
[/code]
Et lorsque j’essaye de me connecter avec FileZilla, voici un petit cat /var/log/vsftpd.log

Tue Mar 25 19:49:26 2014 [pid 2] CONNECT: Client "192.168.0.100"
Tue Mar 25 19:49:31 2014 [pid 1] [titi] OK LOGIN: Client "192.168.0.100"
Tue Mar 25 19:49:36 2014 [pid 2] CONNECT: Client "192.168.0.100"
Tue Mar 25 19:49:39 2014 [pid 1] [titi] OK LOGIN: Client "192.168.0.100"

Mais j’ai toujours l’erreur :

[quote]Status: Connecting to 192.168.0.106:465…
Status: Connection attempt failed with “ECONNREFUSED - Connection refused by server”.
Error: Could not connect to server
Status: Waiting to retry…[/quote]

Petit up !

J’ai réussi à me connecter à ma base de données en utilisant une base de données MySQL (tuto sdz :http://fr.openclassrooms.com/informatique/cours/un-serveur-d-hebergement-multiutilisateur-sous-linux/installer-le-serveur-ftp-vsftpd) et en faisant un chmod a-w sur mon dossier mais après forcément je n’arrive plus à écrire dans mon dossier.
J’ai donc repris par la suite la version 3.0.2 et ajouter cette PUT*** de ligne allow_wirteable_chroot=YES mais ça ne fonctionne toujours pas :confused:
Je ne sais plus trop quoi faire :confused:

Je veux simplement un utilisateur virtuel qui pointe sur le dossier /var/www avec VSFTPD. Je ne comprends pas pourquoi chez les autres ça fonctionnent et non chez moi :confused: (Le fait que je sois sous une machine virtuelle (pour mes tests avant de déployer sur un serveur dédié) change-t-il quelque chose ?? )

Merci d’avance pour vos réponses.
Amicalement,
zaewyr

Re tout le monde,

J’avance dans mon problème en revanche là je bloque sur un truc tout bête…
J’arrive enfin à me connecter et à écrire dans un dossier mais pas celui que je veux :confused:
Je souhaiterais pouvoir écrire directement à la racine de /var/www et là je ne peux écrire que dans le dossier /var/www/web. Si vous pouviez m’aider à résoudre ce problème je vous en serais reconnaissant.
Voici ce que j’ai fait :

chmod 555 /var/www mkdir /var/www/web chown -R www-data:www-data /var/www/web echo "/var/www /var/www/web none bind 0 0" >> /etc/fstab mount -a service vsftpd restart
Lorsque je me connecte j’arrive à écrire dans le dossier /var/www/web mais pas à la racine :confused: Une idée ?

Amicalement,
zaewyr

Bonjour à tous,
Je vous remets tous les fichiers de configuration avec toutes les commandes tapées pour que ça fonctionne. Pour résumé mon fichier vsftpd.conf :
-on interdit les connexions anonymes.

  • tous les utilisateurs systèmes sauf www-data est accepté
    -tous les utilisateurs seront chrootés dan leur dossier
    J’ai utilisé MySQL pour les utilisateurs Virutels et l’utilisateur web ou admin si vous voulez pointe directement sur /var/www (apache quoi )
    Le script qui automatise tout ça :

[code]deluser --remove-home ftp
mkdir -p /etc/vsftpd/vsftpd_user_conf
cp /etc/vsftpd.conf /etc/vsftpd/vsftpd.old

USERS ON SYSTEM

cat /etc/passwd | awk -F: ‘{print $ 1}’ > /etc/vsftpd/user_list
sed -i ‘/www-data/d’ /etc/vsftpd/user_list

DB MySQL

echo “CREATE USER ftp_user@localhost IDENTIFIED BY ‘web’;
GRANT USAGE ON * . * TO ftp_user@localhost IDENTIFIED BY ‘web’ WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS ftp_user ;
GRANT ALL PRIVILEGES ON ftp_user . * TO ftp_user@localhost;
CREATE TABLE ftp_user.users (name TEXT NOT NULL , pass TEXT NOT NULL ) ENGINE = MYISAM;
INSERT INTO ftp_user.users VALUES (‘web’,ENCRYPT(‘test’));” > /etc/vsftpd/mysql_create.sql
cat /etc/vsftpd/mysql_create.sql | mysql -u root -p

VSFTPD.CONF

echo "listen_port=465
connect_from_port_20=no
ftpd_banner=Welcome on my FTP
pam_service_name=vsftpd
listen=yes
anonymous_enable=no
local_enable=yes
#All sys user are lock except www-data
userlist_file=/etc/vsftpd/user_list
userlist_enable=yes
userlist_deny=yes
guest_enable=yes
guest_username=www-data
anon_world_readable_only=no
chroot_local_user=yes
max_clients=50
max_per_ip=4
xferlog_enable=yes
#######################

SSL (LATER)

#######################
#ssl_enable=yes
#force_local_data_ssl=yes
#ssl_tlsv1=yes
#ssl_sslv2=yes
#ssl_sslv3=yes
#rsa_cert_file=/etc/vsftpd/vsftpd.pem
##################################

Configuration au cas par cas

##################################
user_config_dir=/etc/vsftpd/vsftpd_user_conf" > /etc/vsftpd.conf

FILE PAM

echo “auth required pam_mysql.so host=localhost user=ftp_user passwd=web db=ftp_user table=users usercolumn=name passwdcolumn=pass crypt=1
account required pam_mysql.so host=localhost user=ftp_user passwd=web db=ftp_user table=users usercolumn=name passwdcolumn=pass crypt=1” > /etc/pam.d/vsftpd

CONFIG USER

echo “anon_world_readable_only=NO
local_root=/home/web
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
hide_file=(none)
force_dot_files=YES” > /etc/vsftpd/vsftpd_user_conf/web

IS IT RIGHT ?

mkdir -p /home/web/www
chmod 555 /home/web
chmod 777 /var/www
echo “/var/www /home/web/www none bind 0 0” >> /etc/fstab
mount -a
service vsftpd restart[/code]

Amicalement,
zaewyr