Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
amazon ec2 LAMP and FTP installation and setup

Amazon ec2 LAMP and FTP installation and setup

Tutorial: Installing a LAMP Web Server on Amazon Linux

Go through this amazon link

Associate and Elastic IP address to your EC2 instance.

This is so you have the same EIP if you restart your EC2 server.

Click the following link to Elastic IP in your management console. Click "Allocate new Address" button.

Click the Action button and assign the new created EIP to you instance ID i-50d663a6.

FTP Setup in Amazon EC2 instance

Step #1: Install vsftpd

SSH to your EC2 server. Type:

sudo yum install vsftpd

Step #2: Open up the FTP ports on your EC2 instance

Next, you'll need to open up the FTP ports on your EC2 server. Log in to the AWS EC2 Management Console and select Security Groups from the navigation tree on the left. Select the security group assigned to your EC2 instance. Select the Inbound tab and add port range 20-21

Also add port range 1024-1048

Type Protocol Port Range Source
SSH TCP 22 ip/32
Custom TCP Rule TCP 20 - 21
Custom TCP Rule TCP 1024 - 1048

Step #3: Make updates to the vsftpd.conf file

Edit your vsftpd conf file by typing:

sudo nano /etc/vsftpd/vsftpd.conf

Disable anonymous FTP by changing this line:




Then add the following lines to the bottom of the vsftpd.conf file:

pasv_address=<Public IP of your instance>

Your vsftpd.conf file should look something like the following - except make sure to replace the pasv_address with your public facing IP address:


# Additional configuration

Step #4: Restart vsftpd

Restart vsftpd by typing:

sudo /etc/init.d/vsftpd restart

Step #5: Create an FTP user

If you take a peek at /etc/vsftpd/user_list, you'll see the following:

# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.

This is basically saying, "Don't allow these users FTP access." vsftpd will allow FTP access to any user not on this list.

So, in order to create a new FTP account, you may need to create a new user on your server. (Or, if you already have a user account that's not listed in /etc/vsftpd/user_list, you can skip to the next step.)

Creating a new user on an EC2 instance is pretty simple. For example, to create the user gunjan, type:

sudo adduser gunjan-ftp
sudo passwd gunjan-ftp

Step #6: Restricting users to their home directories

At this point, your FTP users are not restricted to their home directories. That's not very secure, but we can fix it pretty easily.

Edit your vsftpd conf file again by typing:

sudo nano /etc/vsftpd/vsftpd.conf

Un-comment out the line:


Restart the vsftpd server again like so:

sudo /etc/init.d/vsftpd restart

Surviving a reboot

vsftpd doesn't automatically start when your server boots. If you're like me, that means that after rebooting your EC2 instance, you'll feel a moment of terror when FTP seems to be broken - but in reality, it's just not running!. Here's a handy way to fix that:

sudo chkconfig --level 345 vsftpd on

Alternatively, if you are using redhat, another way to manage your services is by using this nifty graphic user interface to control which services should automatically start: sudo ntsysv

To change the default FTP upload folder


edit /etc/vsftpd/vsftpd.conf

Create a new entry at the bottom of the page:


To apply read, write, delete permission to the files under folder so that you can manage using a FTP device

sudo find /var/www/html -type d -exec chmod 755 {} \;

If still doesn't working

It will not be ok until you add your user to the group www by the following commands:

sudo usermod -a -G www <USER>

Note that you will probably need to add the user you created to the "FTP" usergroup:

gpasswd -a <usr> ftp

This documented is generated based on



This comment has been minimized.

Copy link

nileshlets commented Nov 21, 2016

Nice one goga. It helped me,


This comment has been minimized.

Copy link

carcagi commented Dec 8, 2016

Awesome, thanks a lot... but I have a connection denied message when I try to create new files... :(


This comment has been minimized.

Copy link

soopernerdy commented Jan 5, 2017

To correct carcagi's problem with permissions, i used the following to correct:

sudo chown -R YOUR_FTP_USERNAME /var/www/html


This comment has been minimized.

Copy link

mdadnanali commented Mar 9, 2017

when i restart vsftpd service i recive following error
Starting vsftpd for vsftpd: 500 OOPS: bad bool value in config file for: anonymous_enable


Allow anonymous FTP? (Beware - allowed by default if you comment this out).

Uncomment this to allow local users to log in.


This comment has been minimized.

Copy link

samphors commented Mar 21, 2017

That's really useful


This comment has been minimized.

Copy link

bobsawyer commented Mar 30, 2017

This just saved me hours. Thank you!


This comment has been minimized.

Copy link

taekunger commented Mar 4, 2018

Awesome Man. Now it works thank you a lot.


This comment has been minimized.

Copy link

IAMNGP commented Aug 3, 2018

that's cool, i did this

sudo chown -R <YOUR_FTP_USERNAME>:apache /var/www

after that it's working


This comment has been minimized.

Copy link

cantacoop commented Sep 4, 2018

Fix: To change the default FTP upload folder
local_root=/var/www/html to local_root=/var/www

Change chmod www folder
sudo chmod 555 /var/www

Set chmod html folder
sudo chmod -R 755 /var/www/html

Change owner folder
sudo chown -R youruser-ftp /var/www

This work for us ;)


This comment has been minimized.

Copy link

khasim1227 commented Dec 26, 2018

Nice tutorial It helped me a lot thank U bro.


This comment has been minimized.

Copy link

tunele commented Feb 6, 2019

this one is not working anymore on the new aws linux ami 2
sudo /etc/init.d/vsftpd restart
You should use instead:
sudo systemctl enable vsftpd.service
sudo systemctl restart vsftpd.service


This comment has been minimized.

Copy link

abdulrauf618 commented May 14, 2019

This command works for me
sudo usermod -d /var/www/html ftpuser1


This comment has been minimized.

Copy link

ghost commented Jul 3, 2019

I am using AWS AMI Linux 2 and this still works flawless! Good job GunJanPatel!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.