12

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

Castaglia
  • 3,239
  • 3
  • 19
  • 40
Pawel
  • 225
  • 1
  • 2
  • 5

2 Answers2

21

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:

chroot_local_user=YES
user_config_dir=/etc/vsftpd/users

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:

local_root=/var/www/sites/USER
dirlist_enable=YES
download_enable=YES
write_enable=YES

...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. – user3450548 Dec 11 '18 at 09:51
8

You must set user_sub_token:

user_sub_token=$USER
local_root=/var/www/sites/$USER
  • 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." – user3450548 Dec 11 '18 at 09:50
  • It didn't work until I change the user home directory in /etc/passwd – Kiruahxh May 07 '20 at 13:09