Installing vsFTPd on CentOS
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.
Add a user to your system.
useradd bob
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.