Vsftpd : 500 OOPS: cannot change directory:/var/www

Hello,

Sur Ubuntu 14 (oui, je sais… mais je n’ai pas choisi… je reprends ce qui est en place), j’essaye de mettre en place un vsftpd que mon prédécesseur avait visiblement laissé à l’abandon avec une conf qui ne fonctionne plus.

Lui utilisait les comptes locaux, moi je veux utiliser les comptes virtuels, comme sur ma vieille Jessie.

J’ai donc repris la même conf, qui est celle-ci :

 listen=YES
ftpd_banner=FTP server ready
message_file=.message
dirmessage_enable=YES
anonymous_enable=NO
local_enable=YES
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
guest_enable=YES
guest_username=www-data
anon_umask=022
chroot_local_user=YES
allow_writeable_chroot=YES
max_clients=200
max_per_ip=4
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
dual_log_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.xfer.log
log_ftp_protocol=YES
vsftpd_log_file=/var/log/vsftpd.log
user_config_dir=/etc/vsftpd/vsftpd_user_conf

et pour le ficher de conf d’un user :

anon_world_readable_only=NO
local_root=/home/connect
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

et pour le etc/pam.d/vsftpd :

# 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 pam includes
#@include common-account
#@include common-session
#@include common-auth
#auth   required        pam_shells.so
 # --------------------------
#auth    required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/login
#account required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/login
 # --------------------------
auth       required     pam_userdb.so db=/etc/vsftpd/login crypt=hash
account    required     pam_userdb.so db=/etc/vsftpd/login crypt=hash
session    required     pam_loginuid.so

J’ai volontairement laissé les commentaires pour montrer que j’ai essayé différentes conf qui n’aboutissaient pas (le dernier bloc étant celui fonctionnant sur ma jessie, et le bloc du milieu étant celui recommandé dans les tutos).

Mon problème ==> A la connexion, dans mon client FTP, j’ai l’erreur suivante :

|Statut :|Connexion à x.x.x.x:21…|
|—|---|
|Statut :|Connexion établie, attente du message d’accueil…|
|Statut :|Serveur non sécurisé, celui-ci ne supporte pas FTP sur TLS.|
|Commande :|USER toto|
|Réponse :|331 Please specify the password.|
|Commande :|PASS **************|
|Réponse :expressionless:500 OOPS: cannot change directory:/var/www|
|Erreur :|Erreur critique : Impossible d’établir une connexion au serveur|

Côté logs, j’ai ceci :

Wed Apr 4 10:58:08 2018 [pid 24273] FTP response: Client “x.x.x.x”, "220 FTP server ready"
Wed Apr 4 10:58:08 2018 [pid 24273] FTP command: Client “x.x.x.x”, "AUTH TLS"
Wed Apr 4 10:58:08 2018 [pid 24273] FTP response: Client “x.x.x.x”, "530 Please login with USER and PASS."
Wed Apr 4 10:58:08 2018 [pid 24273] FTP command: Client “x.x.x.x”, "AUTH SSL"
Wed Apr 4 10:58:08 2018 [pid 24273] FTP response: Client “x.x.x.x”, "530 Please login with USER and PASS."
Wed Apr 4 10:58:08 2018 [pid 24273] FTP command: Client “x.x.x.x”, "USER toto"
Wed Apr 4 10:58:08 2018 [pid 24273] [toto] FTP response: Client “x.x.x.x”, "331 Please specify the password."
Wed Apr 4 10:58:08 2018 [pid 24273] [toto] FTP command: Client “x.x.x.x”, "PASS "
Wed Apr 4 10:58:08 2018 [pid 24272] [toto] OK LOGIN: Client “x.x.x.x”

Dernier détail, j’ai généré ma base d’user comme ceci :

db5.3_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db

Voilà.

Je vois sur le net que lorsque ce problème se pose, c’est l’histoire de selinux, à la différence qu’ici, il n’y a pas de selinux sur cette machine !

Voyez-vous quelque-chose ? Merci de votre aide !

Réponse à moi même, le problème réside certainement dans la clause “guest_username=www-data”. Si je change celle-ci est remplace par root, je n’ai plus de message d’erreur, mais me retrouve sous la homedirectory de root, au lieu de celle de mon utilisateur virtuel… c’est casse pied.

J’avance, le problème était bien là, voir plus loin : le problème était lié au fait que la home directory de mon user www-data n’existe pas ! J’ai donc mis la home directory sous etc/etc/etc/html et zou, ça marche…

…presque…

…car si j’arrive à me connecter et lister, impossible d’écrire dans mes répertoire ! erreur 550 (rep) & 553 (fichier) à la création de quoi que ce soit, malgré les clauses write_enable=YES et allow_writeable_chroot=YES
Je sèche !

Salut,

sur mon vsftpd, j’ai ça dans ma conf (/etc/vsftpd.conf):
chroot_local_user=YES

J’utilise un seul user pour la connexion au FTP, son $HOME est /ftp MAIS il n’a pas les droits d’écriture dessus:
dr-xr-x--- 4 user_ftp user_ftp 4,0K avril 1 13:32 ftp

En revanche, dans /ftp, user_ftp a les droits rwx sur un autre répertoire (que j’ai appelé data) et dans lequel il peut donc écrire (uploader des fichiers).

Je n’ai pas trouvé plus élégant, il est en effet impossible d’avoir un utilisateur chrooté dans un répertoire sur lequel il a les droits d’écriture.

Merci pour ta réponse !

En fait ce dernier problème se posait car je n’avais pas positionné les bons droits sur le /usr/share/nginx/html/monsite. J’étais en root:www-data au lieu de www-data:www-data.

Du coup, là tout roule !

Merci jhfra,
J’avais le même problème. Les utilisateurs anonymes pointaient sur /srv/ftp car
anon_root=/srv/ftp, sauf que ce dossier n’existait pas ( ou plus ).
Pour autant j’essayais de me connecter avec un utilisateur virtuel, avec un login = OK dans le log, mais la reddirection ne se faisait pas, car par défaut vsftp doit certainement d’abord exécuter anon_root=/srv/ftp, avant le redirect par fichier. Ton post m’a bien aidé, car ce n’est pas intuitif…