Backups de WordPress Encriptados

Precisamente porque los backups contienen información sensible parece inteligente encriptar tus copias de seguridad de SQL … o cualquier backup de tu sitio ¿no crees?

Lo que vamos a ver hoy es un script de consola útil para hacer backups seguros de los archivos y la base de datos de tu blog WordPress de una manera sencilla y que no te complique. Solo tienes que generar una llave GPG una vez, introducirla en 3 configuraciones y desde ese momento ya se puede ejecutar por cualquier usuario, y desde donde quieras.

¿Que hace?

Una vez lo ejecutas, este script te pide la localización de la carpeta raiz de tu blog y también donde está tu archivo wp-config.php. También te pedirá un UID (ID de usuario) de encriptación. A continuación el script guarda esas configuraciones en un fichero llamado .sbackup para que la siguiente vez que ejecutes el script se ejecute sin tener que volver a introducir esa información, muy útil para los cronjobs o para backups a voluntad rápidos y sencillos. Otra característica interesante de este script es que automáticamente analiza tu fichero wp-config.php para extraer el nombre de la base de datos MySQL, el usuario, servidor y contraseña. Con esto no comprometes tu seguridad al tiempo que no pierdes tiempo tecleando esos datos manualmente.

¿De que se hace backup?

Este script crea un fichero tar y gzip de toda tu directorio raiz en la carpeta ~/backups/domain.com/domain.com-fecha.tgz y también crea una copia de seguridad de tu base de datos de WordPress en un formato ideal para restaurarlo a posteriori. Ambos archivos se encriptan utilizando tu llave GPG, y pueden descargarse con seguridad ya que son necesarias la contraseña y la llave para desencriptarlos.

Generando la Llave GPG

Si no tienes aún una llave configurada para tu cuenta shell ejecuta este comando recordando (o apuntando) el UID que introduces en el script.

gpg --gen-key

Desencriptando los Archivos

gpg -r UID --output FILENAME.tgz --decrypt FILENAME.tgz.asc

El Script

#!/bin/bash
# SiteBack Version 3.1, 2008-07-04
# GNU Free Documentation License 1.2
# 07-04-08 - AskApache (www.askapache.com)
# Traducido por Ayuda WordPress (ayudawordpress.com)
umask 022
 
### OPCIONES DE CONSOLA
set +o noclobber # allowed to clobber files
set +o noglob # globbing on
set +o xtrace # change to - to enable tracing
set +o verbose # change to - to enable verbose debugging
set -e # abort on first error
 
shopt -s extglob
 
###########################################################################--=--=--=--=--=--=--=--=--=--=--#
###
### CONFIGURACIONES
###
###########################################################################==-==-==-==-==-==-==-==-==-==-==#
 
DT=$(date +%x); DT=${DT//\/}
DTX=$(date +%x-%H%M); DTX=${DTX//\/}
BDIR=${HOME}/backups
RUN_FILE=${BDIR}/$$.bk.log
MY_CONFIG=".sbackup"
DOMAIN=;DB_NAME=;DB_USER=;DB_PASSWORD=;DB_HOST=;WP_CONFIG=;SQL_DEST=;ARC_DEST=;ENCRYPT_USER=
E_SUCCESS=0;E_YN=0;E_YES=251;E_NO=250;E_RETURN=65;C0=;C1=;C2=;C3=;C4=;C5=;C6=;C7=;C8=;C9=
 
###########################################################################--=--=--=--=--=--=--=--=--=--=--#
###
### FUNCIONES
###
###########################################################################==-==-==-==-==-==-==-==-==-==-==#
 
#--=--=--=--=--=--=--=--=--=--=--#
# script_title
#==-==-==-==-==-==-==-==-==-==-==#
function script_title(){
 # ESTABLECE TITULO Y COLORES DE LA VENTANA
 case ${TERM:-dummy} in
  xterm*|vt*|ansi|rxvt|gnome*)
  C0="\033[0m";C1="\033[1;30m";C2="\033[1;32m";C3="\033[0;32m";C4="\033[1;37m"
  C5="\033[0;36m";C6="\033[1;35m";C7="\033[0;37m";C8="\033[30;42m";C9="\033[1;36m"
 esac  
 echo -e "${C1} __________________________________________________________________________ "
 echo -e "| ${C2}             ___       __    ___                 __             ${C1}         |"
 echo -e "| ${C2}            / _ | ___ / /__ / _ | ___  ___ _____/ /  ___        ${C1}         |"
 echo -e "| ${C2}           / __ |(_->> ${C4}${1} ${C0} \n\n"; ;;
   "info") echo -e "${C6}=> ${C4}${1} ${C0}"; ;;
   "item") echo -e "${C4}-- ${C0}${1} "; ;;
 esac
}
 
#--=--=--=--=--=--=--=--=--=--=--#
# yes_no
#==-==-==-==-==-==-==-==-==-==-==#
function yes_no(){
 local ans
 echo -en "${1} [y/n] " ; read -n 1 ans
 case "$ans" in
  n|N) E_YN=$E_NO ;;
  y|Y) E_YN=$E_YES ;;
 esac
}
 
#--=--=--=--=--=--=--=--=--=--=--#
# do_sleep
#==-==-==-==-==-==-==-==-==-==-==#
function do_sleep (){ 
 local END DIFF
 echo -en "${C5}${3:-.}"; while [ -r "$RUN_FILE" ]; do sleep ${2:-3}; echo -en "${3:-.}"; done;
 echo -e "${C0}"; sleep 1; END=$(date +%s);DIFF=$(( $END - $START ))
 echo -e "\n${C8} [T: ${SECONDS}] COMPLETED IN ${DIFF} SEC ${C0} \n\n"; sleep 1; 
 return 0; 
}
 
#--=--=--=--=--=--=--=--=--=--=--#
# get_settings
#==-==-==-==-==-==-==-==-==-==-==#
function get_settings(){
 local cha HOSTED_SITES G
 clear; script_title
 if [[ -r "$MY_CONFIG" ]]; then
  OIFS=$IFS; while IFS=: read DOMAIN DOMAINROOT WP_CONFIG ENCRYPT_USER; do
   DOMAIN=${DOMAIN}; DOMAINROOT=${DOMAINROOT}; WP_CONFIG=${WP_CONFIG}; ENCRYPT_USER=${ENCRYPT_USER}; E_YN=$E_YES; break
  done < ${MY_CONFIG}; IFS=$OIFS
 else
 echo -en "\n De que dominio quieres hacer backup?  "; read -e DOMAIN; echo
 until &#91; -d "$DOMAINROOT" &#93;; do echo -en "\n Donde esta el directorio raiz?  "; read -e DOMAINROOT; echo; done
 &#91;&#91; -r "$DOMAINROOT/wp-config.php" &#93;&#93; && WP_CONFIG=$DOMAINROOT/wp-config.php
 until &#91;&#91; -r "$WP_CONFIG" &#93;&#93;; do echo -en "\n Donde esta el archivo wp-config.php?  "; read -e WP_CONFIG; echo; done
 echo -en "\n Cual es el ID de usuario para encriptar?  "; read -e ENCRYPT_USER; echo
 fi
 
 &#91;&#91; -r "$WP_CONFIG" &#93;&#93; && G=$(sed -e "/define('DB_\(NAME\|USER\|PASSWORD\|HOST\)/!d" \
 -e "s/&#91;^'&#93;*'DB_\(NAME\|USER\|PASSWORD\|HOST\)'&#91;^'&#93;*'\(&#91;^'&#93;*\)'.*$/DB_\1='\2';/g" ${WP_CONFIG}) && eval $G;
 mkdir -p ${BDIR}/${DOMAIN}
 SQL_DEST=${BDIR}/${DOMAIN}/${DOMAIN}-${DT}.sql;  &#91;&#91; -r "${SQL_DEST}.asc" &#93;&#93; && SQL_DEST=${BDIR}/${DOMAIN}/${DOMAIN}-${DTX}.sql
 ARC_DEST=${BDIR}/${DOMAIN}/${DOMAIN}-${DT}.tgz; &#91;&#91; -r "${ARC_DEST}.asc" &#93;&#93; && ARC_DEST=${BDIR}/${DOMAIN}/${DOMAIN}-${DTX}.tgz
 
 if &#91;&#91; "$E_YN" != "$E_YES" &#93;&#93;; then
  for a in "DOMAIN" "DOMAINROOT" "WP_CONFIG" "ENCRYPT_USER" "DB_NAME" "DB_USER" "DB_PASSWORD" "DB_HOST"; do echo -e "${a}: ${!a}"; done
  echo; yes_no "SON CORRECTAS ESTAS CONFIGURACIONES"
 fi

 while &#91;&#91; "$E_YN" != "$E_YES" &#93;&#93;; do
  for a in "DOMAIN" "DOMAINROOT" "WP_CONFIG" "ENCRYPT_USER" "DB_NAME" "DB_USER" "DB_PASSWORD" "DB_HOST"; do
   echo -en "\n (Enter for Default: ${!a} )\n ${a}:> "
   read -e cha; echo; [[ ${#cha} -gt 2 ]] && eval "$a"=$cha
  done
  yes_no "SON CORRECTAS ESTAS CONFIGURACIONES"
 done
   
 echo -e "${DOMAIN}:${DOMAINROOT}:${WP_CONFIG}:${ENCRYPT_USER}" > $MY_CONFIG
}
 
#--=--=--=--=--=--=--=--=--=--=--#
# exit_cleanup
#==-==-==-==-==-==-==-==-==-==-==#
function exit_cleanup(){
 cd $OLDPWD
 [[ -r ${SQL_DEST} ]] && rm ${SQL_DEST}
 [[ -r ${ARC_DEST} ]] && rm ${ARC_DEST}
}
 
############################################################################################################
###
### CODIGO PRINCIPAL
###
############################################################################################################
 
#=# COGE EL SCRIPT APAGADO POR EL USUARIO
trap exit_cleanup SIGHUP SIGINT SIGTERM
 
#=# HACE AGRADABLE EL SCRIPT PRINCIPAL  
renice 19 -p $$ &>/dev/null
 
cd `dirname $0`
 
get_settings
 
pm "CREAANDO BACKUP DE SQL"
mysqldump --opt -u${DB_USER} -p${DB_PASSWORD} -h ${DB_HOST} -r ${SQL_DEST} \
--add-drop-table ${DB_NAME} 1>&2 &>/dev/null && sleep 2 1>&2 &>/dev/null && rm ${RUN_FILE} 2>&1& 
do_sleep 1 1 ":"
 
pm "ENCRIPTANDO BACKUP DE SQL"
gpg --armor --recipient ${ENCRYPT_USER} --output ${SQL_DEST}.asc --encrypt ${SQL_DEST} \
1>&2 &>/dev/null && sleep 2 1>&2 &>/dev/null && rm ${RUN_FILE} 2>&1& 
do_sleep 1 1 ":"; rm ${SQL_DEST}
 
pm "CREATING ARCHIVE BACKUP"
tar -czf ${ARC_DEST} . 1>&2 &>/dev/null && rm ${RUN_FILE} 2>&1& 
do_sleep 1 5 ":"
 
pm "ENCRIPTANDO BACKUP DEL ARCHIVO"
gpg --armor --recipient ${ENCRYPT_USER} --output ${ARC_DEST}.asc --encrypt ${ARC_DEST} \
1>&2 &>/dev/null && rm ${RUN_FILE} 2>&1& 
do_sleep 1 1 ":"; rm ${ARC_DEST}
 
echo -e "${C1} __________________________________________________________________________ "
echo -e "|                                                                          |"
echo -e "|                 ${C4} COMPLETADO CON EXITO ${C1}                                 |"
echo -e "${C1} __________________________________________________________________________ ${C0} \n\n"
 
cd $OLDPWD
 
exit $?

Esta maravilla de script lo han creado en AskApache y también lo puedes descargar directamente en este enlace.

VALORA Y COMPARTE ESTE ARTÍCULO PARA MEJORAR LA CALIDAD DEL BLOG…
(0 votos, promedio: 0)

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!

AVISO: Esta publicación es de hace 3 años o más. Si es un código o un plugin podría no funcionar en las últimas versiones de WordPress, y si es una noticia podría estar ya obsoleta. Luego no digas que no te hemos avisado.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

 

Ir arriba Ir al contenido