My friend who work as R & D for small company told me about new policy from their management. Every one must backup their work once in a week and that backup also include internet backup. Such solution like dropbox is not allowed since their management a bit worry about control. What if they need to conduct audit of their backup or see bad pattern from there. One of management person told him about FTP as alternative that located in vps. Since my friend never use ftp before he ask me to create demo for him. Not a big deal since I ever work with such solution, utilize pureftp as ftp server and mysql as database server where they store user information like directory, password etc. In this post I’ll use FreeBSD 10 as operating system.
Preparation
I use Vultr as vps provider. In reality I should use their ‘strorage series‘ that utilize sata storage. But for demo purpose and speed access. I choose performance series.
Operating system
FreeBSD 10 x64 with latest patch (automatic freebsd-update using posti install) from vultr.
Server Size
In case you choose storage series you’ll get server that utilize 1 cpu, 512MB memory, 160 GB storage and 1000 GB transfer.
Since I use performance series I got 768MB memory, 15GB SSD storage.
Vultr provide 10 gigabit connectivity but for this demo purpose I choose standard connectivity.
Click Order will trigger installation process and you can only wait during that time.
After a while I can see login box and able to ssh to the sever.
# uname -a
FreeBSD freebsd-3883 10.0-RELEASE-p10 FreeBSD 10.0-RELEASE-p10 #0: Mon Oct 20 12:42:25 UTC 2014 [email protected]:/usr/obj/usr/src/sys/GENERIC amd64
Yes, got latest patch.
Checking disk space
# df -H
Filesystem Size Used Avail Capacity Mounted on
/dev/label/rootfs0 14G 853M 12G 7% /
devfs 1.0k 1.0k 0B 100% /dev
Setting Hostname
From command line
# hostname -s pureftp.rasyid.net
Check it
# hostname
pureftp.rasyid.net
For permanent hostname edit /etc/rc.donf
# ee /etc/rc.conf
Edit hostname section from
# Auto-Enabled NICs from pc-sysinstall
ifconfig_vtnet0=”inet 104.207.128.100 netmask 255.255.254.0″
defaultrouter=”104.207.128.1″
hostname=”freebsd-3883″
sshd_enable=YES
static_routes=linklocal
route_linklocal=”-net 169.254.0.0/16 -interface vtnet0″
Into this
# Auto-Enabled NICs from pc-sysinstall
ifconfig_vtnet0=”inet 104.207.128.100 netmask 255.255.254.0″
defaultrouter=”104.207.128.1″
hostname=”pureftp.rasyid.net”
sshd_enable=YES
static_routes=linklocal
route_linklocal=”-net 169.254.0.0/16 -interface vtnet0″
save. (press esc button followed by choose leave editor).
Setting timeout period for openssh, to prevent ‘Write failed: Broken pipe‘ message.
# ee /etc/ssh/sshd_config
ClientAliveInterval 30
ClientAliveCountMax 5
save and restart openssh server
# /etc/rc.d/sshd restart
Change message of the day display.
# ee /etc/motd
fill anything you want, I used to enter value for something simple like company name etc or you can use google. Look for ascii banner.
Or quick way
# echo ‘ftp server’>/etc/motd
Install Pureftp
Since I don’t know which option used if I choose pure-ftp by pkg command (mysql enable etc) then I choose ports for pure-ftp and the rest handled by pkg (to minimize compile process if needed).
# portsnap fetch
# portsnap extract
# cd /usr/ports/ftp/pure-ftpd/
# make install
All options available for pure-ftpd, I choose : Docs, examples, MySQL, PAM, Privsep, sendfile, TLS, uploadscript and virtualchroot.
Hit OK and let installer work. The rest of confirmation is yours, just accept default values.
After you see # sign, check what’s installed with this command :
# pkg info
ca_root_nss-3.17.2 The root certificate bundle from the Mozilla Project
cmake-3.0.2 Cross-platform Makefile generator
cmake-modules-3.0.2 Modules and Templates for CMake
curl-7.38.0_2 Non-interactive tool to get files from FTP, GOPHER, HTTP(S) servers
dialog4ports-0.1.5_2 Console Interface to configure ports
expat-2.1.0_1 XML 1.0 parser written in C
gettext-0.18.3.1_1 GNU gettext package
indexinfo-0.2 Utility to regenerate the GNU info page index
mysql55-client-5.5.40 Multithreaded SQL database (client)
perl5-5.16.3_11 Practical Extraction and Report Language
pkg-1.3.8_3 Package manager
pkgconf-0.9.7 Utility to help to configure compiler and linker flags
pure-ftpd-1.0.36_3 Small, easy to set up, fast, and secure FTP server
py27-Babel-1.3_2 Collection of tools for internationalizing Python applications
py27-Jinja2-2.7.3 Fast and easy to use stand-alone template engine
py27-MarkupSafe-0.23 Implements a XML/HTML/XHTML Markup safe string for Python
py27-docutils-0.12 Python Documentation Utilities
py27-pygments-1.6_2 Syntax highlighter written in Python
py27-pytz-2014.7,1 World Timezone Definitions for Python
py27-setuptools27-5.5.1 Python packages installer
py27-sphinx-1.2.3 Python documentation generator
python27-2.7.8_5 Interpreted object-oriented programming language
note : in case you want to speed installation process you can install others as package then followed by pure-ftpd from ports.
ex :
# pkg install ca_root_nss cmake cmake-modules curl dialog4ports expat gettext indexinfo mysql55-client perl5 pkgconf py27-Babel py27-Jinja2 py27-MarkupSafe py27-docutils py27-pygments py27-pytz py27-setuptools27 py27-sphinx python27
# cd /usr/ports/ftp/pure-ftpd/ && make install
Configure Pure-ftpd
Enable the service first
# echo 'pureftpd_enable=YES' >>/etc/rc.conf
Create configuration file
# cp /usr/local/etc/pure-ftpd.conf.sample /usr/local/etc/pure-ftpd.conf
Start Service
# /usr/local/etc/rc.d/pure-ftpd start
Starting pureftpd.
Running: /usr/local/sbin/pure-ftpd -g/var/run/pure-ftpd.pid -A -c50 -B -C8 -D -fftp -H -I15 -L10000:8 -m4 -s -U133:022 -u100 -k99 -Z
Check the service
# ps ax | grep ftp
77338 – Is 0:00.00 pure-ftpd (SERVER) (pure-ftpd)
At this stage pure-ftp installed successfully. In next post I’ll show how to test ftp service from client and how to configure and enable TLS support for this FTP server.
Stay tune and happy weekend.