Installing vsFTPd on CentOS

Updated on July 8, 2015
Installing vsFTPd on CentOS header image

vsFTPd is a versatile piece of software designed for customization and ease of use. It allows for MySQL authentication, local users, limitation of upload/download speeds for users, chrooting users to specific directories, and various other options.

vsFTPd is also a very lightweight FTP daemon. Many users can be supported without any performance issues on a decently sized VPS, for example, Vultr's 768MB plan.

This guide explains how to install vsFTPd and configure MySQL for authentication.

#Step 1: Installing the required packages To begin, we'll need to install the EPEL (Extra Packages for Enterprise Linux) repository. Run the following commands as the root user.

yum install epel-release

Great - now you have the EPEL repository installed.

Now, let's install vsFTPd.

yum install vsftpd mysql mysql-server httpd php php-mysql php-mcrypt phpmyadmin -y

Start the web server.

service httpd start

#Step 2: Configuring the FTP server Now that you have all of the required packages installed, you can configure the software. If you want to allow local users, open your favorite text editor:

nano /etc/vsftpd/vsftpd.conf

Change local_enable = no to local_enable = yes.

Since we're using MySQL to authenticate users, we need to configure MySQL.

mysql_secure_installation

Follow all of the steps and make sure you change the MySQL root password.

Then, modify the phpMyAdmin configuration file:

nano /etc/httpd/conf.d/phpMyAdmin.conf

Remove the line where it specifies require local, then save and exit.

Restart Apache.

service httpd restart

Create a MySQL database and table to store user data.

mysql -uroot -pthepasswordyousetforthemysqlrootpassword

CREATE DATABASE vsftpd;

CREATE TABLE `accounts` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 30 ) NOT NULL ,
`pass` VARCHAR( 50 ) NOT NULL ,
UNIQUE (
`username`
)
) ENGINE = MYISAM ;

quit

Configure vsFTPd to use the MySQL database.

echo /dev/null > /etc/pam.d/vsftpd
nano /etc/pam.d/vsftpd

Now that you have your text editor open, paste the following text into the vsftpd file. Make sure to replace yourmysqlrootpassword with your MySQL root password.

auth required pam_mysql.so user=root passwd=yourmysqlrootpassword host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass     crypt=2
account required pam_mysql.so user=root passwd=yourmysqlrootpassword host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass     crypt=2

Restart vsFTPd by running the following command.

service vsftpd restart

Adding users

To add a user to vsFTPd, follow these steps.

  1. Add a user to your system.

     useradd bob
  2. Add the user to your MySQL server.

     mysql -uroot -pyourmysqlrootpassword
     use vsftpd;
     INSERT INTO accounts (username, pass) VALUES('bob', PASSWORD('yourpasswordforbob'));
     quit;

That user will now be able to log in with FTP and access their home directory.