#!/bin/bash # +--------------------------------------------------------------------+ # EFA Backup # Version 20140201 # +--------------------------------------------------------------------+ # Copyright (C) 2012~2014 http://www.efa-project.org # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # +--------------------------------------------------------------------+ action="$1" #----------------------------------------------------------------# # Variables #----------------------------------------------------------------# BACKUPDIR="/var/EFA/backup" MYSQLROOTPWD="`grep MYSQLROOTPWD /etc/EFA-Config | sed 's/.*://'`" TMPDIR="/tmp" DAYSTOKEEP=5 #----------------------------------------------------------------# #----------------------------------------------------------------# # Begin Backup Purge #----------------------------------------------------------------# function start_purge() { echo "Purging Backups older than $DAYSTOKEEP..." # Do not purge if no recent backups are present if [[ -n `find $BACKUPDIR -type f -mtime -$((DAYSTOKEEP+1))` ]]; then find $BACKUPDIR -type f -mtime +$DAYSTOKEEP -exec rm -f {} \; echo "Old backups purged." else echo "No recent backups are present! Skipping purge." fi } #----------------------------------------------------------------# #----------------------------------------------------------------# # Begin Backup #----------------------------------------------------------------# function start_backup() { # Get current date and time CDATE=`date +%m%d%Y` CTIME=`date +%H%M%S` echo "Beginning System Backup at $CDATE $CTIME" WORKINGDIR=$TMPDIR/$CDATE$CTIME/backup mkdir -p $WORKINGDIR # Perform SQL Dump mkdir -p $WORKINGDIR/sql mysqldump --user=root --password=$MYSQLROOTPWD --all-databases --events > $WORKINGDIR/sql/backup.sql # Backup Postfix Settings mkdir -p $WORKINGDIR/etc/postfix/ssl cp -a /etc/postfix/*cf $WORKINGDIR/etc/postfix cp -a /etc/postfix/*access $WORKINGDIR/etc/postfix cp -a /etc/postfix/transport $WORKINGDIR/etc/postfix cp -a /etc/postfix/virtual $WORKINGDIR/etc/postfix cp -a /etc/postfix/sasl_passwd $WORKINGDIR/etc/postfix cp -a /etc/postfix/relocated $WORKINGDIR/etc/postfix cp -a /etc/postfix/access $WORKINGDIR/etc/postfix cp -a /etc/postfix/canonical $WORKINGDIR/etc/postfix cp -a /etc/postfix/generic $WORKINGDIR/etc/postfix cp -a /etc/postfix/header_checks $WORKINGDIR/etc/postfix cp -a /etc/postfix/ssl/smtpd.pem $WORKINGDIR/etc/postfix/ssl # Backup EFA-Config cp -a /etc/EFA-Config $WORKINGDIR/etc # Backup sysconfig mkdir $WORKINGDIR/etc/sysconfig/ cp -ra /etc/sysconfig/* $WORKINGDIR/etc/sysconfig # Backup portions of /etc cp -a /etc/passwd $WORKINGDIR/etc cp -a /etc/fstab $WORKINGDIR/etc cp -a /etc/shadow $WORKINGDIR/etc cp -a /etc/clamd.conf $WORKINGDIR/etc cp -a /etc/hosts* $WORKINGDIR/etc cp -a /etc/networks $WORKINGDIR/etc cp -a /etc/my.cnf $WORKINGDIR/etc cp -a /etc/php.ini $WORKINGDIR/etc cp -a /etc/resolv* $WORKINGDIR/etc cp -a /etc/sudo.conf $WORKINGDIR/etc cp -a /etc/webmin.config $WORKINGDIR/etc # Backup MailScanner settings mkdir -p $WORKINGDIR/etc/MailScanner cp -ra /etc/MailScanner/* $WORKINGDIR/etc/MailScanner # Backup Cron cp -ra /etc/cron* $WORKINGDIR/etc # Backup SQLGrey mkdir -p $WORKINGDIR/etc/sqlgrey cp -a /etc/sqlgrey/* $WORKINGDIR/etc/sqlgrey # Backup SSH Config mkdir -p $WORKINGDIR/etc/ssh cp -a /etc/ssh/* $WORKINGDIR/etc/ssh # Backup pki mkdir -p $WORKINGDIR/etc/pki cp -ra /etc/pki/* $WORKINGDIR/etc/pki # Backup MailWatch Config mkdir -p $WORKINGDIR/var/www/html/mailscanner cp -a /var/www/html/mailscanner/conf.php $WORKINGDIR/var/www/html/mailscanner # Backup Apache mkdir -p $WORKINGDIR/etc/httpd cp -ra /etc/httpd/* $WORKINGDIR/etc/httpd # Gzip tarball the collection tar -cpzf $TMPDIR/backup-$CDATE-$CTIME.tar.gz -C $TMPDIR/$CDATE$CTIME . rm -rf $TMPDIR/$CDATE$CTIME mv $TMPDIR/backup-$CDATE-$CTIME.tar.gz $BACKUPDIR chmod 0600 $BACKUPDIR/backup-$CDATE-$CTIME.tar.gz echo "Backup Completed at `date +%m%d%Y\ %H%M%S`" } #----------------------------------------------------------------# #----------------------------------------------------------------# # Check if we are root #----------------------------------------------------------------# function user_check() { if [ `whoami` == root ] then echo "[EFA] Good you are root" if [[ ${action} == "-backup" ]]; then start_backup elif [[ ${action} == "-purge" ]]; then start_purge fi else echo "[EFA] Please become root to run this backup" exit 0 fi } #----------------------------------------------------------------# #----------------------------------------------------------------# # show the usage #----------------------------------------------------------------# function show_usage() { echo "Usage: $0 [option]" echo "Where [option] is:" echo "" echo "-backup" echo " Initiate backup" echo "" echo "-purge" echo " Purge oldest backups" echo "" } #----------------------------------------------------------------# #----------------------------------------------------------------# # Parse action #----------------------------------------------------------------# function parse_action() { case $action in -backup) user_check ;; -purge) user_check ;; *) show_usage ;; esac exit 0 } #----------------------------------------------------------------# #----------------------------------------------------------------# # Main function #----------------------------------------------------------------# function main() { if [ "X${action}" == "X" ] then show_usage exit 0 else parse_action fi } #----------------------------------------------------------------# #----------------------------------------------------------------# # Run main #----------------------------------------------------------------# main #----------------------------------------------------------------#