Imagen Feedbocabit.com | Sarah Palin, en contra del aborto

Publicado por Fernando Tellado | 11 Julio 2008

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:
  1. gpg --gen-key

Desencriptando los Archivos

CODE:
  1. gpg -r UID --output FILENAME.tgz --decrypt FILENAME.tgz.asc

El Script

CODE:
  1. #!/bin/bash
  2. # SiteBack Version 3.1, 2008-07-04
  3. # GNU Free Documentation License 1.2
  4. # 07-04-08 - AskApache (www.askapache.com)
  5. # Traducido por Ayuda WordPress (ayudawordpress.com)
  6. umask 022
  7.  
  8. ### OPCIONES DE CONSOLA
  9. set +o noclobber # allowed to clobber files
  10. set +o noglob # globbing on
  11. set +o xtrace # change to - to enable tracing
  12. set +o verbose # change to - to enable verbose debugging
  13. set -e # abort on first error
  14.  
  15. shopt -s extglob
  16.  
  17. ###########################################################################--=--=--=--=--=--=--=--=--=--=--#
  18. ###
  19. ### CONFIGURACIONES
  20. ###
  21. ###########################################################################==-==-==-==-==-==-==-==-==-==-==#
  22.  
  23. DT=$(date +%x); DT=${DT//\/}
  24. DTX=$(date +%x-%H%M); DTX=${DTX//\/}
  25. BDIR=${HOME}/backups
  26. RUN_FILE=${BDIR}/$$.bk.log
  27. MY_CONFIG=".sbackup"
  28. DOMAIN=;DB_NAME=;DB_USER=;DB_PASSWORD=;DB_HOST=;WP_CONFIG=;SQL_DEST=;ARC_DEST=;ENCRYPT_USER=
  29. 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=
  30.  
  31. ###########################################################################--=--=--=--=--=--=--=--=--=--=--#
  32. ###
  33. ### FUNCIONES
  34. ###
  35. ###########################################################################==-==-==-==-==-==-==-==-==-==-==#
  36.  
  37. #--=--=--=--=--=--=--=--=--=--=--#
  38. # script_title
  39. #==-==-==-==-==-==-==-==-==-==-==#
  40. function script_title(){
  41.  # ESTABLECE TITULO Y COLORES DE LA VENTANA
  42.  case ${TERM:-dummy} in
  43.   xterm*|vt*|ansi|rxvt|gnome*)
  44.   C0="\033[0m";C1="\033[1;30m";C2="\033[1;32m";C3="\033[0;32m";C4="\033[1;37m"
  45.   C5="\033[0;36m";C6="\033[1;35m";C7="\033[0;37m";C8="\033[30;42m";C9="\033[1;36m"
  46.  esac 
  47.  echo -e "${C1} __________________________________________________________________________ "
  48.  echo -e "| ${C2}             ___       __    ___                 __             ${C1}         |"
  49.  echo -e "| ${C2}            / _ | ___ / /__ / _ | ___  ___ _____/ /  ___        ${C1}         |"
  50.  echo -e "| ${C2}           / __ |(_->> ${C4}${1} ${C0} \n\n"; ;;
  51.    "info") echo -e "${C6}=> ${C4}${1} ${C0}"; ;;
  52.    "item") echo -e "${C4}-- ${C0}${1} "; ;;
  53.  esac
  54. }
  55.  
  56. #--=--=--=--=--=--=--=--=--=--=--#
  57. # yes_no
  58. #==-==-==-==-==-==-==-==-==-==-==#
  59. function yes_no(){
  60.  local ans
  61.  echo -en "${1} [y/n] " ; read -n 1 ans
  62.  case "$ans" in
  63.   n|N) E_YN=$E_NO ;;
  64.   y|Y) E_YN=$E_YES ;;
  65.  esac
  66. }
  67.  
  68. #--=--=--=--=--=--=--=--=--=--=--#
  69. # do_sleep
  70. #==-==-==-==-==-==-==-==-==-==-==#
  71. function do_sleep (){
  72.  local END DIFF
  73.  echo -en "${C5}${3:-.}"; while [ -r "$RUN_FILE" ]; do sleep ${2:-3}; echo -en "${3:-.}"; done;
  74.  echo -e "${C0}"; sleep 1; END=$(date +%s);DIFF=$(( $END - $START ))
  75.  echo -e "\n${C8} [T: ${SECONDS}] COMPLETED IN ${DIFF} SEC ${C0} \n\n"; sleep 1;
  76.  return 0;
  77. }
  78.  
  79. #--=--=--=--=--=--=--=--=--=--=--#
  80. # get_settings
  81. #==-==-==-==-==-==-==-==-==-==-==#
  82. function get_settings(){
  83.  local cha HOSTED_SITES G
  84.  clear; script_title
  85.  if [[ -r "$MY_CONFIG" ]]; then
  86.   OIFS=$IFS; while IFS=: read DOMAIN DOMAINROOT WP_CONFIG ENCRYPT_USER; do
  87.    DOMAIN=${DOMAIN}; DOMAINROOT=${DOMAINROOT}; WP_CONFIG=${WP_CONFIG}; ENCRYPT_USER=${ENCRYPT_USER}; E_YN=$E_YES; break
  88.   done <${MY_CONFIG}; IFS=$OIFS
  89.  else
  90.  echo -en "\n De que dominio quieres hacer backup?  "; read -e DOMAIN; echo
  91.  until [ -d "$DOMAINROOT" ]; do echo -en "\n Donde esta el directorio raiz?  "; read -e DOMAINROOT; echo; done
  92.  [[ -r "$DOMAINROOT/wp-config.php" ]] && WP_CONFIG=$DOMAINROOT/wp-config.php
  93.  until [[ -r "$WP_CONFIG" ]]; do echo -en "\n Donde esta el archivo wp-config.php?  "; read -e WP_CONFIG; echo; done
  94.  echo -en "\n Cual es el ID de usuario para encriptar?  "; read -e ENCRYPT_USER; echo
  95.  fi
  96.  
  97.  [[ -r "$WP_CONFIG" ]] && G=$(sed -e "/define('DB_\(NAME\|USER\|PASSWORD\|HOST\)/!d" \
  98.  -e "s/[^']*'DB_\(NAME\|USER\|PASSWORD\|HOST\)'[^']*'\([^']*\)'.*$/DB_\1='\2';/g" ${WP_CONFIG}) && eval $G;
  99.  mkdir -p ${BDIR}/${DOMAIN}
  100.  SQL_DEST=${BDIR}/${DOMAIN}/${DOMAIN}-${DT}.sql[[ -r "${SQL_DEST}.asc" ]] && SQL_DEST=${BDIR}/${DOMAIN}/${DOMAIN}-${DTX}.sql
  101.  ARC_DEST=${BDIR}/${DOMAIN}/${DOMAIN}-${DT}.tgz; [[ -r "${ARC_DEST}.asc" ]] && ARC_DEST=${BDIR}/${DOMAIN}/${DOMAIN}-${DTX}.tgz
  102.  
  103.  if [[ "$E_YN" != "$E_YES" ]]; then
  104.   for a in "DOMAIN" "DOMAINROOT" "WP_CONFIG" "ENCRYPT_USER" "DB_NAME" "DB_USER" "DB_PASSWORD" "DB_HOST"; do echo -e "${a}: ${!a}"; done
  105.   echo; yes_no "SON CORRECTAS ESTAS CONFIGURACIONES"
  106.  fi
  107.  
  108.  while [[ "$E_YN" != "$E_YES" ]]; do
  109.   for a in "DOMAIN" "DOMAINROOT" "WP_CONFIG" "ENCRYPT_USER" "DB_NAME" "DB_USER" "DB_PASSWORD" "DB_HOST"; do
  110.    echo -en "\n (Enter for Default: ${!a} )\n ${a}:> "
  111.    read -e cha; echo; [[ ${#cha} -gt 2 ]] && eval "$a"=$cha
  112.   done
  113.   yes_no "SON CORRECTAS ESTAS CONFIGURACIONES"
  114.  done
  115.    
  116.  echo -e "${DOMAIN}:${DOMAINROOT}:${WP_CONFIG}:${ENCRYPT_USER}"> $MY_CONFIG
  117. }
  118.  
  119. #--=--=--=--=--=--=--=--=--=--=--#
  120. # exit_cleanup
  121. #==-==-==-==-==-==-==-==-==-==-==#
  122. function exit_cleanup(){
  123.  cd $OLDPWD
  124.  [[ -r ${SQL_DEST} ]] && rm ${SQL_DEST}
  125.  [[ -r ${ARC_DEST} ]] && rm ${ARC_DEST}
  126. }
  127.  
  128. ############################################################################################################
  129. ###
  130. ### CODIGO PRINCIPAL
  131. ###
  132. ############################################################################################################
  133.  
  134. #=# COGE EL SCRIPT APAGADO POR EL USUARIO
  135. trap exit_cleanup SIGHUP SIGINT SIGTERM
  136.  
  137. #=# HACE AGRADABLE EL SCRIPT PRINCIPAL 
  138. renice 19 -p $$ &>/dev/null
  139.  
  140. cd `dirname $0`
  141.  
  142. get_settings
  143.  
  144. pm "CREAANDO BACKUP DE SQL"
  145. mysqldump --opt -u${DB_USER} -p${DB_PASSWORD} -h ${DB_HOST} -r ${SQL_DEST} \
  146. --add-drop-table ${DB_NAME} 1>&2 &>/dev/null && sleep 2 1>&2 &>/dev/null && rm ${RUN_FILE} 2>&1&
  147. do_sleep 1 1 ":"
  148.  
  149. pm "ENCRIPTANDO BACKUP DE SQL"
  150. gpg --armor --recipient ${ENCRYPT_USER} --output ${SQL_DEST}.asc --encrypt ${SQL_DEST} \
  151. 1>&2 &>/dev/null && sleep 2 1>&2 &>/dev/null && rm ${RUN_FILE} 2>&1&
  152. do_sleep 1 1 ":"; rm ${SQL_DEST}
  153.  
  154. pm "CREATING ARCHIVE BACKUP"
  155. tar -czf ${ARC_DEST} . 1>&2 &>/dev/null && rm ${RUN_FILE} 2>&1&
  156. do_sleep 1 5 ":"
  157.  
  158. pm "ENCRIPTANDO BACKUP DEL ARCHIVO"
  159. gpg --armor --recipient ${ENCRYPT_USER} --output ${ARC_DEST}.asc --encrypt ${ARC_DEST} \
  160. 1>&2 &>/dev/null && rm ${RUN_FILE} 2>&1&
  161. do_sleep 1 1 ":"; rm ${ARC_DEST}
  162.  
  163. echo -e "${C1} __________________________________________________________________________ "
  164. echo -e "|                                                                          |"
  165. echo -e "|                 ${C4} COMPLETADO CON EXITO ${C1}                                 |"
  166. echo -e "${C1} __________________________________________________________________________ ${C0} \n\n"
  167.  
  168. cd $OLDPWD
  169.  
  170. exit $?

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

También te puede interesar:

Escribe un comentario




XHTML: Puedes usar estas etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

LO ÚLTIMO EN LOS FOROS

Loading...

-->