VSFTP is supposed to be the bee’s knees of Linux FTP servers. Unfortunately it’s kind of confusingly documented, particularly if you want to setup a virtual (ie FTP-only, not shell or system) user. Basically, follow this tutorial, but if you want to let your virtual users have full permissions and for files to be set properly on the server, get to know all the configuration options.
Specially, while you shouldn’t enable anonymous users (
anonymous_enable=NO), virtual users are otherwise treated like them and use the same configuration directories, so enable all the
anon_*_enable directives that are relevant to you.
If, like me, you’re uploading into a directory that’ll be served by your web server, make sure to set the umask such that the server can read the files (I used the
local_umask=022 suggested in the config file’s comments). The final piece in my puzzle was figuring out that I needed to add
Of course you should be using SFTP instead, but sometimes you’re forced to use FTP because of some backwards program.