Although FTP (File Transfer Protocol) is an old technology it is still used by lots of systems and hardware devices. Some IP cameras allow you to save photos to an FTP server and you can create one using a Raspberry Pi. If you’ve got the choice you would be better using SFTP but if your device only supports FTP then this guide will help you create an FTP server.
We will use vsftpd as it is a popular Linux appication that is secure, stable and extremely fast.
Initial Setup
You will need :
- A Raspberry Pi
- SD card with latest Raspbian image
- Power supply
- Keyboard and Monitor (optional)
Start off with a fresh SD card containing the latest Raspbian image. The How to Create a New SD Card for Raspberry Pi on Windows guide will explain how to do this on Windows. Setup your Pi and get it connected to your network using Ethernet or WiFi. If you want to do the FTP setup remotely then follow this guide to enable SSH.
Obtain the network IP address using :
ifconfig
It will most probably be of the form 192.168.###.###.
Step 1 – Install vsftpd
Use the following command to update your repositories and install the vsftpd software :
sudo apt-get update sudo apt-get install vsftpd
Step 2 – Update Configuration File
Once installed you can now edit the vsftpd configuration file using :
sudo nano /etc/vsftpd.conf
In this file find the following lines and un-comment them by deleting the # character :
anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 chroot_local_user=YES
Add the following lines to the end of the file :
user_sub_token=$USER local_root=/home/$USER/ftp
Save and exit using CTRL-X, Y and ENTER.
Step 3 – Create FTP Directory for Pi User
To allow you to connect to the FTP server using the default Pi user we need to create a few directories :
mkdir /home/pi/ftp mkdir /home/pi/ftp/files
Change the permissions on the ftp directory using :
chmod a-w /home/pi/ftp
Step 4 – Create New User (optional)
If you want to log into the server with another user name we can create a new user. In this example we’ll create a new user called “camera” :
sudo adduser camera
You will be prompted for a password. Make sure it is a good one!
The other details can be left blank or populated as you see fit.
You should see something like this on your screen :
This new user will also need a set of FTP directories :
mkdir /home/camera/ftp mkdir /home/camera/ftp/files
Once created change the permissions using :
chmod a-w /home/camera/ftp
This isn’t required for basic file transfer but the new user can be given the same ability to use “sudo” by running the command :
sudo adduser camera sudo
Step 5 – Restart FTP Server
Finally restart the vsftpd service so that our changes take effect :
sudo service vsftpd restart
Step 6 – Test FTP Server
All that remains is to check you can connect to the server and transfer files.
Get your Pi’s IP address using :
ifconfig
Run your preferred FTP client on your PC/laptop. Windows users can use WinSCP. Windows, Mac or Linux users can use FileZilla. If you have been connecting to the command line via SSH you maybe able to use the same client for FTP.
To connect in your client you provide the host name (IP address) of your Pi, the user name (e.g. pi or camera) and the password. Ensure it is set to use the FTP protocol and port 21.
Here is the WinSCP site manager :
Here is a screenshot of WinSCP connected to my Pi using the “camera” user name.
Navigate into the “files” directory and you should be able to transfer files into it. If this works your FTP server is ready for whatever devices you wish to connect.
FTP Session Logs
You can check the vsftpd session logs to see a history of connections made to your FTP server.
cat /var/log/vsftpd.log
Further Reading
There is a full list of vsftpd configuration file options here:
https://security.appspot.com/vsftpd/vsftpd_conf.html
File Transfer Protocol (Wiki) :
https://en.wikipedia.org/wiki/File_Transfer_Protocol
3 Comments
Give error:
Need to add in the conf file
allow_writeable_chroot=YES
Appreciate the write-up. Thanks
Thanks for sharing this great article creating a simple ftp server with a raspberry pi with us.