I would like to setup a basic FTP server on my Ubuntu Server install. I have been playing with VSFTPD, but am having issues getting the server to allow me to create directories and copy files. I have set the system to allow local users, but it appears that doesn't mean I get access to create directories. This may be an instance where I need to be better grounded in Ubuntu server setup in order to configure this FTP server adequately. The end goal is to be able to move files from my local dev folder into my www folder for deployment. Directories need to be able to move as well. Any help would be greatly appreciated.

  • You mentioned moving files and folders form local dev to www folder - are you doing this all on the same machine or different machines? Commented Aug 9, 2010 at 0:51
  • Also are you complete sold with VSFTPD? Or would you be interested in other types of FTP softwares like pureftp? Commented Aug 9, 2010 at 0:52
  • Local dev is a separate machine altogether. I'm familiar with moving files to web servers via FTP, perhaps there is a better way. Commented Aug 9, 2010 at 1:04
  • I am not sold on VSFTPD, it was the first that I found while googling, if you have a simpler solution I'm all ears. Commented Aug 9, 2010 at 1:04

7 Answers 7


I'm going to recommend PureFTPD because it's been the simplest and easiest to use in my opinion. You'll need to install it first: sudo apt-get install pure-ftpd once it's installed it'll start itself up. By default it uses PAM Authentications - meaning it uses the accounts which already exist on the system for it's auth. All you'll need to do is create a user account with the home directory being your www path and set the password for that account. You should then be able to connect with that user/pass combination to upload/download files.

Something like this:

sudo adduser ftpman --home /var/www/ --ingroup www-data

Which will create the ftpman user and put him in the www-data group which Apache uses and will walk you through the rest of the setup script. Once that's defined make sure to chmod the WWW folder if you get errors about it already existing to the user/group combination you created.

Lastly if you want to lock down SSH access for that account run: sudo chsh -s /bin/false ftpman which will change that users shell to false. (Replace ftpman with your ftp user)

  • 5
    PureFTP is the easiest to set up as far as I'm concerned. Commented Aug 9, 2010 at 6:24
  • 2
    You have an habit of giving complete explanation always like a teacher. Awesome!!!
    – user3215
    Commented Mar 31, 2011 at 8:02
  • 1
    I tried this but I can't connect with the newly created user. Existing users work fine
    – wim
    Commented Feb 2, 2012 at 6:52
  • 1
    This all works fine, except when I run the chsh this seems to prevent users from logging in via the FTP as well. Setting back to /bin/bash allows it to work again.
    – DanH
    Commented Aug 6, 2013 at 3:36
  • 1
    Thank you, and I can confirm I spent a full day with vsftpd and 5 minutes with pureftpd in setup time. For a simple setup, and secure, use pureftpd. I am confused why mainstream touts vsftpd!
    – RyBolt
    Commented Apr 6, 2014 at 14:19

In my opinion SFTP is a better way to go. Hey, it's got the word "secure" in the name, it must be better :)

SFTP uses ssh to do file transfers (as distinct from FTPS, which is FTP + TLS, basically). What that means is that if you can ssh to the target machine, you can almost always SFTP to it, as it uses the same auth mechanisms, so no having to install and configure different server daemons at all (i.e. no pureftpd or vsftpd). As long as your permissions are set correctly for /var/www - which is probably a matter of sudo chmod g+w /var/www; sudo usermod -g $USER -G www-data $USER - you should be able to use SFTP immediately.

Most client software nowadays will do SFTP pretty happily, and you can also use scp from a shell on the dev server to copy stuff across (scp -R will copy entire folders across, and is very handy). You can even go another step and automate logins with public keys, meaning no more typing passwords :)

  • 3
    hint hint... if you have Windows clients they can use WinSCP winscp.net/eng/index.php for accessing a sftp server. Commented Aug 9, 2010 at 8:51
  • According to your comment the OP should of course use vsftpd, because vs stands for very secure. :-)
    – qbi
    Commented Aug 9, 2010 at 10:47
  • PureFTPD uses the same authentication that SFTP does - its actually more secure in my opinion because if your account information is leaked then no one as SSH access to your machine. At worst they have File access. Commented Aug 9, 2010 at 13:47
  • If your app only supports FTP, and you're tunneling it over SSH, what's the difference? :)
    – endolith
    Commented Mar 14, 2012 at 21:46

I would strongly recommend using vsftpd. It is one of the most secure FTP daemons in Linux. Many others had weaknesses in the past and it seems the FTP is hard to implement in a secure way.

vsftpd starts right after you install it. Ubuntu enables local users to log in. So start your FTP client and log in as normal user with your system password (My example uses lftp):

> lftp ftp
lftp> user qbi
Password: #typing my password which I also use to log in via GDM
lftp [email protected]:~> ls
drwxr-xr-x 10 1000 1000   4096 2008-07-28 16:32 Desktop
... many more

Now I'm using some kind of file manager (Nautilus, Shell etc.) to create a new directory foo and go back to my FTP client:

ftp [email protected]:~> ls -l
drwxr-xr-x 2 1000 1000   4096 2010-08-09 13:32 foo

Directory is there and I'm able to cd into it and use it. This is also the same if you have special users. There you can also create directories and they are immediately accessible. Here it is important to look for access rights.


I humbly recommend an FTP server I wrote myself from scratch: JetFTP. It is extremely simple to install and use.


  • Add my PPA to your software sources and update:

      sudo apt-add-repository ppa:george-edison55/george-edison
  • Run the following command:

      sudo apt-get install jetftp
  • That's it!

Using JetFTP is simple - just connect to port 8021 using a login name and password on the computer JetFTP is running on.


Do not use ftp, it is an inherently insecure protocol because it sends the username and password in the clear to the server. Implementing sftp is just as easy and you gain a huge advantage in the security of your connection.

  • clear problem is the best answer :-) Commented Aug 11, 2010 at 18:00

There are three different ways to set up an ftp server:

(1) Anonymous FTP :

People can access the server only with the anonymous account and without a password. Of course, the server administrator will set a limit for uploads to prevent users from putting illegal files like pirated music/films/games.

(2) FTP with both anonymous access and users with a passworded account:

This method lets both anonymous and passworded account users to enter the server. They will only have access to a specified directory, except for the user root who can view/modify/delete all files and/or folders.

(3) FTP with mysql support for virtual users authentication :

This method allows access to the server only for some user groups that haven't got a virtual users authentication shell account on the system. It uses an external mysql server that stores user information.

First Option : Anonymous FTP

Before starting the creation of an anonymous ftp server, you have to add a user called ftp into your system, with a home directory too. This step is really easy, just follow these commands:

useradd -d /home/ftp/ftp -s /bin/false ftp

mkdir -p /home/ftp/upload

Doing this permits only this account to write in this folder. You can use more variables to specify what the ftp server will do. Here are some examples:

-e Allow access to the server only by anonymous users
-B Start the server with background demon
-i Anonymous users can't upload files
-M Let anonymous users create folders
-s ftp user files cannot be downloaded

Second Option : '''Both anonymous and passworded account users'''

To make it possible to have both anonymous and passworded account users in the same server, follow this small guide :

-B ,-i ,M, -r, -s same of before
-u <uid> Enable users with a specified user id (uid) to access the server 
-V <Ip address> Only specified IPs will be able to access the server in non-anonymous mode 

Third Option : '''Virtual Users with Mysql'''

To create a server with mysql support follow this steps :

Download and install User Manager for PureFTPd which you can find here http://machiel.generaal.net/index.php?subject=user_manager_pureftpd

Decompress it and upload all its contents into your web server www directory and then write on your browser this link link http://localhost/ftp/install.php Follow all the steps that the installer asks to you Copy and save rge pureftpd-mysql.conf into pureftpd user manager directory

Done. Access to the administration panel using this link http://localhost/ftp

More options to add before launch the server process

-c <num> Max client that can connect to the server
-C <num> Max connections for a IP
-T <bandwitdh> Max bandwitdh disponible for each connection
-n <MBytes> Max MB that a user can have into its home folder
-m <Cpu Loading> Stops the anonymous uploads if the cpu loading exceed from this value 

And see this for some ftp server application:


The default install of VSFTPD doesn't allow any create/modify changes by default. You need to edit /etc/vsftpd.conf and uncomment the following line...


And secondly you need to configure the appropriate file-system permissions on the respective files and folders.

You must log in to answer this question.

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