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.
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)
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 :)
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 127.0.0.1 ftp lftp 127.0.0.1:~> user qbi Password: #typing my password which I also use to log in via GDM lftp firstname.lastname@example.org:~> 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@example.com:~> 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.
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: