The Linux Page - backup files and directories

HOME
Back to the Linux Page

How to back up files and directories to another computer on the network ... and have it done automatically

In the course of my many Linux projects, the one I always seemed to put on the back burner was setting up an automated backup process that would copy my files and directories to another server. I paid the price when the hard drive crashed on my main file and print share server, and I spent over 30 hours trying to recover data and rebuild the server. That was enough. I researched and set up a system that would perform a daily backup to another server. And now, I present a step by step method to make a simple routine backup.

This tutorial was created on 9/4/07

Note: This instruction set is a guidline. It has been tested with Fedora Core 6 and will work, but the reader is encouraged to make changes to fit his/her tastes

In this tutorial, we will be setting up a backup from computerstore to computerbackup with a user named backupuser

Before starting, make sure you have these programs installed: ssh, cron, rsync

Create user named backupuser to all computers involved in the backup process

	# adduser -m backupuser

	# passwd backupuser

and enter password

Verify that the files that the bkuser group has permissions to access the directories and files being backed up. In my case, a few of the files and directories were accessible to user-myuser and group-myuser. So I made the following change:

	# usermod -G myuser backupuser

To see what groups backupuser is a memeber of:

	# groups backupuser

Then, login as backupuser to the computer where the files will be backed up to
Test the rsync by copying the directory foo and its contents from computerstore to computerbackup:

	$ rsync -aogvz -e ssh backupuser@computerstore:/path/to/foo /home/backupuser

If successful, continue by configuring computerbackup while logged in as backupuser

	$ mkdir /home/backupuser/backupstuff
	$ ssh-keygen -t dsa -b 1024 -f /home/backupuser/backupstuff/backupkey

When prompted for the passphrase, I just hit Enter to leave it blank

There are now two new files in /home/backupuser/backupstuff:
backupkey (the identification file) and backupkey.pub (the public key file)
Verify/change permissions so that only authorized users have access to the identification file

The next step will be to copy the backupkey.pub file to computerstore using the scp command (secure copy)

	$ scp /home/backupuser/backupstuff/backupkey.pub backupuser@computerstore:/home/backupuser

Now, either go directly to

computerstore

or ssh into

computerstore

From there, verify you are in /home/backupuser:

	$ pwd

If not, then change to that directory
Make an .ssh directory and an authorized_keys file, if they don't already exist.

	$ if [ ! -d .ssh ] then mkdir .ssh ; chmod 700 .ssh 
	$ mv backupkey.pub .ssh
	$ cd .ssh/
	$ if [ ! -f authorized_keys ] then touch authorized_keys ; chmod 600 authorized_keys 
	$ cat backupkey.pub >> authorized_keys

As a security measure, I've also disabled ssh access from root by editing /etc/ssh/sshd_config. It is not required, but I highly recommend it.

	#PermitRootLogin yes

Is changed to

	PermitRootLogin no

Now, exit from

computerstore

and go back to

computerbackup

and test rsync with option of using key instead of password

	$ rsync -aogvz -e "ssh -i /home/backupuser/backupstuff/backupkey" backupuser@computerstore:/path/to/foo /home/backupuser

If successful, then it's time to create a script for this process to be automated

#!/bin/sh
RSYNC=/usr/bin/rsync
SSH=/usr/bin/ssh
KEY=/home/backupuser/backupstuff/backupkey
RUSER=backupuser  # Username being used on computerstore
RHOST=computerstore
RPATH=/path/to/foo # directory of what's being backed up 
LPATH=/home/backupuser # directory to store files to

$RSYNC -aogz -e "$SSH -i $KEY" $RUSER@$RHOST:$RPATH $LPATH

Save the script to something obvious, like mybackupscript.sh
In my own case, I also moved it to /home/backupuser/backupstuff so as not to lose it in all the files and directories that will be copied over
Then make it executable

	$ chmod a+x mybackupscript.sh

Now, edit the crontab file

	$ crontab -e

and insert the following line:

0 2 * * 0 /home/backupuser/backupstuff/mybackupscript.sh

This line tells the computer to run the mybackupscript.sh at 2AM every Sunday.  The order of the line of numbers is as follows:

0=minute 2=hour (in a 24 hour clock) *=day *=month 0=day of week (where 0 is Sunday)

Save and close the script by hitting the Esc key, then type :wq
Your script is now set to back up files automatically

Please report any errors to fedorafreak@fincelfamily.com

Credits go to the author of the tutorial "BACKUP: USING RSYNC AND SSH" as found at rhcelinuxguide.wordpress.com


Back to the Linux Page
HOME