FTP is used to transfer files from one host to another over TCP network. This article explains how to setup FTP server on ubuntu 14.04 .
There are 3 popular FTP server packages available PureFTPD, VsFTPD and ProFTPD. Here i’ve used VsFTPD which is lightweight and less Vulnerability.
Setup FTP server on Ubuntu 14.04
Step 1 » Update repositories .
krizna@leela:~$ sudo apt-get update
Step 2 » Install VsFTPD package using the below command.
krizna@leela:~$ sudo apt-get install vsftpd
Step 3 » After installation open /etc/vsftpd.conf file and make changes as follows.
Uncomment the below lines (line no:29 and 33).
write_enable=YES
» Uncomment the below line (line no: 120 ) to prevent access to the other folders outside the Home directory.
local_umask=022
chroot_local_user=YES
and add the following line at the end.
allow_writeable_chroot=YES
» Add the following lines to enable passive mode.
pasv_enable=Yes
pasv_min_port=40000
pasv_max_port=40100
Step 4 » Restart vsftpd service using the below command.
krizna@leela:~$ sudo service vsftpd restart
Step 5 » Now ftp server will listen on port 21. Create user with the below command.Use /usr/sbin/nologin shell to prevent access to the bash shell for the ftp users .
krizna@leela:~$ sudo useradd -m john -s /usr/sbin/nologin
krizna@leela:~$ sudo passwd john
Step 6 » Allow login access for nologin shell . Open /etc/shells and add the following line at the end.
/usr/sbin/nologin
Now try to connect this ftp server with the username on port 21 using winscp or filezilla client and make sure that user cannot access the other folders outside the home directory.
Please note using ftp on port 21 is a big security risk . it’s highly recommended to use SFTP. Please continue for SFTP configuration
Secure FTP ( SFTP )
SFTP is called as “Secure FTP” which generally use SSH File Transfer Protocol . so we need openssh-server package installed , Issue the below command if it’s not already installed.
krizna@leela:~$ sudo apt-get install openssh-server
Step 7 » Create a new group ftpaccess for FTP users.
krizna@leela:~$ sudo groupadd ftpaccess
Step 8 » Now make changes in this /etc/ssh/sshd_config file.
» Find and comment the below line
Subsystem sftp /usr/lib/openssh/sftp-server
and Add these lines at the end of the file.
Subsystem sftp internal-sftp
Match group ftpaccess
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
Step 9 » Restart sshd service.
krizna@leela:~$ sudo service ssh restart
Step 10 » The below steps must be followed while creating Users for sftp access.
Create user john with ftpaccess group and /usr/bin/nologin shell.
krizna@leela:~$ sudo useradd -m john -g ftpaccess -s /usr/sbin/nologin
Change ownership for the home directory.
krizna@leela:~$ sudo passwd john
krizna@leela:~$ sudo chown root /home/john
Create a folder inside home directory for writing and change ownership of that folder.
krizna@leela:~$ sudo mkdir /home/john/www
krizna@leela:~$ sudo chown john:ftpaccess /home/john/www
Now try to connect server using SFTP ( port : 22 ) and makesure Users can upload files to www directory and cannot access other folders outside home directory.
If you want use both FTP and SFTP together, please perform above steps ( Step 10 ) while creating users . For existing users, move them to ftpaccess group and create folder structure and ownership changes as below.
krizna@leela:~$ sudo usermod john -g ftpaccess -s /usr/sbin/nologin
krizna@leela:~$ sudo chown root /home/john
krizna@leela:~$ sudo mkdir /home/john/www
krizna@leela:~$ sudo chown john:ftpaccess /home/john/www
Now john can able to upload files to www folder using FTP as well as SFTP.
Also see :
» Setup FTP server on ubuntu 16.04
» Setup FTP server on centos 7
» Configure ftp server on centos 6
All the best.
Is it possible to create an SFTP user which can upload files to the “var/www/html” directory without accessing files and folders outside this directory?
I’m new to this…
why do we do chown and mkdir (Step 10) ? why not just let john own /home/john?
Very useful for local development on Ubuntu.
Thank you
After finishing all sftp steps:
Server unexpectedly closed network connection
Could not connect to server
Edit: Problem solved.
How did you solve it?
I missed this step:
sudo chown root /home/john
I tried the steps mentioned above to set up FTP server in my ubuntu laptop. However the filezilla test only works on my local PC. When I tried to access from outside my network using Filezilla, the connection doesn’t get established. What am I missing here?
DO NOT FOLLOW THIS GUIDE. This is causing massive problems on my system. Good thing a took a Snapshot.
I didn’t see any problems here , I’ve followed the steps on ubuntu and debian6 hosted on digital ocean nearly 10 servers and works as expected . Can you explain what kinda problems you faced ?
Could not chdir to home directory /home/jhon: No such file or directory
This service allows sftp connections only.
Hi, I am able to view the /home/username folder via SFTP but I am unable to make any changes or transfer file. Can you please help?
I have setup an ftp server in ubuntu. I am having access to my ftpserver. What i need right now is i need to unzip files in my ftpserver using ssh connection. (there is unzip command in ssh). How can i do this in C program? Thanks in advance
hii.. i already follow all the steps.. everything was fine, but after i give permission to sub folder /var/www/html using chown, i got error connection timed out and i can’t even access my server anymore.. anybody get same problem
Dear tutorial makers. Please start providing any and all requirements along with keeping your shit up to date. Thanks very fucking much!
My users are comming in the map /var/www/
But as user martinmeijer i can see the domain map of an other user…
How can i make it work that users only see their maps and not from other users
I hope you understand what i mean
The SFTP return error “No supported authentication methods available (server sent: publickey)”