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

**URL:** <https://www.debian-fr.org/t/vsftpd-500-oops-cannot-change-directory-var-www/76318>\
**Category:** Support Debian\
**Created:** [Avril 4, 2018, 9:14 UTC](https://www.debian-fr.org/t/vsftpd-500-oops-cannot-change-directory-var-www/76318 "2018-04-04T09:14:56Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![jhfra](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/j/eb9ed0/32.png) [@jhfra](https://www.debian-fr.org/u/jhfra)\
**Post date:** [Avril 4, 2018, 9:14 UTC](https://www.debian-fr.org/t/vsftpd-500-oops-cannot-change-directory-var-www/76318/1 "2018-04-04T09:14:57Z")

</div>

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 :

```nohighlight
# 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 😑 **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](https://www.makesurehow.com/Setup-FTP-Server-on-Centos-(-VSFTP-)), à la différence qu’ici, il n’y a pas de selinux sur cette machine !

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

---

<div class="post-metadata">

**Author:** ![jhfra](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/j/eb9ed0/32.png) [@jhfra](https://www.debian-fr.org/u/jhfra)\
**Post date:** [Avril 4, 2018, 9:37 UTC](https://www.debian-fr.org/t/vsftpd-500-oops-cannot-change-directory-var-www/76318/2 "2018-04-04T09:37:06Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![jhfra](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/j/eb9ed0/32.png) [@jhfra](https://www.debian-fr.org/u/jhfra)\
**Post date:** [Avril 4, 2018, 12:33 UTC](https://www.debian-fr.org/t/vsftpd-500-oops-cannot-change-directory-var-www/76318/3 "2018-04-04T12:33:19Z")

</div>

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 !

---

<div class="post-metadata">

**Author:** ![Sputnik93](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/35a633/32.png) [@Sputnik93](https://www.debian-fr.org/u/Sputnik93)\
**Post date:** [Avril 4, 2018, 2:32 UTC](https://www.debian-fr.org/t/vsftpd-500-oops-cannot-change-directory-var-www/76318/4 "2018-04-04T14:32:45Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![jhfra](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/j/eb9ed0/32.png) [@jhfra](https://www.debian-fr.org/u/jhfra)\
**Post date:** [Avril 5, 2018, 7:24 UTC](https://www.debian-fr.org/t/vsftpd-500-oops-cannot-change-directory-var-www/76318/5 "2018-04-05T07:24:16Z")

</div>

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 !

---

<div class="post-metadata">

**Author:** ![ricoBolo06](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/c37758/32.png) [@ricoBolo06](https://www.debian-fr.org/u/ricoBolo06)\
**Post date:** [Septembre 6, 2021, 12:40 UTC](https://www.debian-fr.org/t/vsftpd-500-oops-cannot-change-directory-var-www/76318/6 "2021-09-06T12:40:34Z")

</div>

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…
