How to Set up a Pure-FTPd Server with Virtual User on FreeBSD

This tutorial is for FreeBSD. If you are looking for setting up Pure-FTPd on Linux, click here.

My client likes to send me a huge data file (More than 10GB after compressed). Since I don’t care about the security during the transfer, I decide to go with the old school technology: FTP.

Basically, I need to set up a FTP server with virtual user. In the other words, the log in used by the FTP server has nothing to do with my system login, and I can easily disable that at any time.

1.) Install Pure-FTPd

sudo pkg_add -r pure-ftpd

2.) Create a user for Pure-FTPd, here I simply call it ftpuser.

sudo adduser ftpuser

3.) Let say, we want to create a user called guest to access the ftp server. guest is a virtual user, and its virtual home is in /home/ftpuser/guest

sudo mkdir /home/ftpuser/guest
sudo chown -R ftpuser:ftpuser  /home/ftpuser/
sudo chmod a+rw -R /home/ftpuser/

4.) Edit /etc/inetd.conf and add the following:

ftp     stream  tcp     nowait  root    /usr/local/sbin/pure-ftpd -O stats:/var/log/pureftpd.log       pure-ftpd -l puredb:/usr/local/etc/pureftpd.pdb

5.) Restart inetd

ps -ax | grep inetd
sudo killall -HUP inetd
sudo /usr/sbin/inetd -wW -C 6

6.) Edit /etc/syslog.conf

sudo nano /etc/syslog.conf

7.) Restart syslog

ps -ax | grep syslog
killall -HUP syslogd
/usr/sbin/syslogd -ss

8.) Create a user and add it into the Pure-FTPd database:

sudo pure-pw useradd guest -u ftpuser -d /home/ftpuser/guest/

You can also set the quota and maximum space:
1000 files, 100MB quota

pure-pw useradd guest -u ftpuser -d /home/ftpuser/guest/ -n 1000 -N 100 

9.) Set the password in case you forget the enter the password:

pure-pw passwd guest

10.) Update the database:

pure-pw mkdb

11.) If the system could not update the database, try this instead (One command, not two):

sudo pure-pw mkdb /usr/local/etc/pureftpd.pdb -f /usr/local/etc/pureftpd.passwd

That’s it!

–Derrick

Our sponsors:

Leave a Reply

Your email address will not be published. Required fields are marked *