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.
[code]gpg –gen-key[/code]

Desencriptando los Archivos

[code]gpg -r UID –output FILENAME.tgz –decrypt FILENAME.tgz.asc[/code]

El Script

[code]#!/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 [ -d "$DOMAINROOT" ]; do echo -en "\n Donde esta el directorio raiz? "; read -e DOMAINROOT; echo; done [[ -r "$DOMAINROOT/wp-config.php" ]] && WP_CONFIG=$DOMAINROOT/wp-config.php until [[ -r "$WP_CONFIG" ]]; 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 [[ -r "$WP_CONFIG" ]] && G=$(sed -e "/define('DB_\(NAME\|USER\|PASSWORD\|HOST\)/!d" \ -e "s/[^']*'DB_\(NAME\|USER\|PASSWORD\|HOST\)'[^']*'\([^']*\)'.*$/DB_\1='\2';/g" ${WP_CONFIG}) && eval $G; mkdir -p ${BDIR}/${DOMAIN} SQL_DEST=${BDIR}/${DOMAIN}/${DOMAIN}-${DT}.sql; [[ -r "${SQL_DEST}.asc" ]] && SQL_DEST=${BDIR}/${DOMAIN}/${DOMAIN}-${DTX}.sql ARC_DEST=${BDIR}/${DOMAIN}/${DOMAIN}-${DT}.tgz; [[ -r "${ARC_DEST}.asc" ]] && ARC_DEST=${BDIR}/${DOMAIN}/${DOMAIN}-${DTX}.tgz if [[ "$E_YN" != "$E_YES" ]]; 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 [[ "$E_YN" != "$E_YES" ]]; 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 $?
[/code]
Esta maravilla de script lo han creado en AskApache y también lo puedes descargar directamente en este enlace.

AVISO: esta publicación es de hace dos 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.

Valora este artículo para mejorar la calidad del blog ...

Al hacer una valoración se recoge una cookie con la IP de tu dispositivo

FlojitoNo está malEstá bienMe ha servidoFantástico (sin valoración aún)
Cargando…

Autor: Fernando Tellado

Fernando Tellado, apasionado de WordPress, profesor, consultor y ponente. Maquero cansino, padre de tres hijos y de una perrita Beagle, Bilbaíno de nacimiento, Español de corazón y ciudadano de donde me quieran. Autor del libro WordPress - La tela de la araña. Mi blog personal es Navegando con red, donde he crecido como escritor en la red y ofrezco mis visiones acerca de la Web 2.0 y la blogosfera.

Comparte esta entrada en
468 ad

Pin It on Pinterest