When I'm trying to connect to FTP server I get: "500 OOPS: cannot change directory:/home/$USER/public_html"

  • when I do echo $USER - I get proper username
  • seems like $USER isn't interpreted inside my /etc/vsftpd.conf
  • when I remove "local_root=/var/www/sites/$USER" I everything is smoothly working.

I'm running vsftpd 2.2.2 and Ubuntu 10.04.1 LTS Release: 10.04 Codename: lucid

2 Answers 2


What you need to use is a combo of user_config_dir and local_root. In the main config file /etc/vsftpd/vsftp.conf you have an entry like:


Inside that directory (/etc/vsftpd/users) you have a config file with the same name as the user ($USER in your case), and inside that file you have:


...where USER is the actual name (not literally USER or $USER).

  • 3
    The important pass here is use: user_sub_token=$USER, this makes the original poster configuration functioning because $USER variable get an usable value. See my comment in the other answer. Dec 11, 2018 at 9:51

You must set user_sub_token:

  • 3
    Fun that this is the actual real solution, what the original poster wanted to do was actually applicable. You can use it also in the other proposed example, but you don't need necessarly to enable user_config_dir. You can do it or you could not, depending on your taste. The important pass here is user_sub_token=$USER, because this is the one who fills the $USER var with something usable inside the conf. See the user_sub_token description in man page: "This option also takes affect if local_root contains user_sub_token." Dec 11, 2018 at 9:50
  • It didn't work until I change the user home directory in /etc/passwd
    – Kiruahxh
    May 7, 2020 at 13:09

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .