Pure-FTPd is a free and secure FTP server. It provides efficiency and ease of use, simple answers to common needs, plus unique useful features for personal users as well as hosting providers.
This how to guide will help you to setup Pure-FTPd with MySQL as user database. Also providing detailed instruction to create a user and test it.
Table of Contents
System Requirements:
- A CentOS/RHEL 6.x machine
- Internet connection
Let’s begin:
Step 1 – Install MYSQL – Skip this step if MYSQL is already installed
Install mysql and mysql-server packages using the yum command.
# yum install mysql mysql-server
Example:
Hit Y when prompt to verify installation.
Step 2 – Install Pure-FTPd on your Linux machine
Install Pure-FTPd using yum (the -y means Assume Yes):
# yum install pure-ftpd -y
Example:
Step 3 – Start MySQL server daemon and create MySQL user and database
Type the following command to start MySQL:
# /etc/init.d/mysqld start
Now log into your mysql server:
If it’s a fresh installation of MySQL then running the next command will log you in:
# mysql
Example:
If you had previous MySQL installation on your server then run:
# mysql -u root -p
And insert root’s password when prompt.
Now, let’s create the database, grant appropriate permissions and create the table, you can copy & paste the values:
mysql> CREATE DATABASE pureftpd; mysql> GRANT ALL ON pureftpd.* to 'pureftpd'@'localhost' IDENTIFIED BY '_password_'; mysql> FLUSH PRIVILEGES; mysql> use pureftpd; mysql> CREATE TABLE `users` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `User` varchar(32) NOT NULL DEFAULT '', `Password` varchar(64) NOT NULL DEFAULT '', `Uid` int(3) NOT NULL DEFAULT '500', `Gid` int(3) NOT NULL DEFAULT '500', `Dir` varchar(255) NOT NULL DEFAULT '', `QuotaSize` int(4) NOT NULL DEFAULT '50', `Status` enum('0','1') NOT NULL DEFAULT '1', `ULBandwidth` int(2) NOT NULL DEFAULT '100', `DLBandwidth` int(2) NOT NULL DEFAULT '100', `Date` date NOT NULL DEFAULT '0000-00-00', `LastModif` varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (`ID`), UNIQUE KEY `User` (`User`), KEY `Uid` (`Uid`), KEY `Gid` (`Gid`), KEY `Dir` (`Dir`) ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; mysql> quit
Example:
Step 4 – Configure Pure-FTPd
Configure pure-ftpd to store user login details in mysql database. First edit pure-ftpd main configuration file:
# vim /etc/pure-ftpd/pure-ftpd.conf
And make the following changes:
ChrootEveryone yes MaxClientsNumber 50 MaxClientsPerIP 2 VerboseLog yes AnonymousOnly no NoAnonymous yes MaxIdleTime 15 MySQLConfigFile /etc/pure-ftpd/pureftpd-mysql.conf PAMAuthentication no UnixAuthentication no
After making changes in pure-ftpd configuration, let’s edit pure-ftpd mysql configuration file:
# vim /etc/pure-ftpd/pureftpd-mysql.conf
And update the following values:
MYSQLCrypt md5
MYSQLDatabase pureftpd
MYSQLGetDir SELECT Dir FROM users WHERE User='\L'
MYSQLGetGID SELECT Gid FROM users WHERE User='\L'
MYSQLGetPW SELECT Password FROM users WHERE User='\L'
MYSQLGetUID SELECT Uid FROM users WHERE User='\L'
MYSQLPassword password
MYSQLSocket /var/lib/mysql/mysql.sock
MYSQLUser pureftpd
Replace with the password you’ve set in Step 3 inside mysql server.
Step 5 – Create a system user
At this step, we have completed pure-ftpd setup.
Now we need to test our setup by creating a ftp account. To do that we need to create a system user in Linux and then we will use that user’s UID and GID to create our virtual ftp account.
Create a user account and set it’s password:
# useradd itaig # passwd itaig
Get UID and GID of the user’s account:
# grep itaig /etc/passwd itaig:x:500:500::/home/itaig:/bin/bash
itaig:x:500:500::/home/itaig:/bin/bash
Example:
You can see that both UID and GID of the user is 500 .
Step 6 – Create a FTP account
Let’s login to mysql server again:
# mysql
or
# mysql -u root -p
Then, select the pureftpd database:
mysql> use pureftpd
Copy & paste the command which creates the virtual account:
mysql> INSERT INTO `users` (`User`, `Password`, `Uid`, `Gid`, `Dir`, `QuotaSize`, `Status`, `ULBandwidth`, `DLBandwidth`, `Date`, `LastModif`) VALUES ('itaig', md5('geekkb'), '500', '500', '/home/itaig', '20', 2, '10', '10', now(), ''); mysql> quit
Example:
Step 7 – Testing our pure-ftpd setup
Using the username and password you inserted into mysql in the previous step, open a FTP session to the server and try logging in:
# ftp localhost
Example:
You can see in the example that I’ve connected to the local ftp server using the credentials I inserted to mysql in the previous step and I’ve downloaded successfully a file called geek-kb.com from there.
I hope you liked this article, please feel free to leave comments or ask questions.
No Comments Yet