Header Ads

Programando sincronización en la nube

Para muchos, la sincronización de datos en los diferentes servicios en la nube se ha vuelto casi imprescindible, pero con la aparición del  ransomware, puede ocurrir que este malware tome el control de nuestro PC o servidor y cifre nuestra carpeta de datos administrada por el cliente de estos servicios, y como estas aplicaciones sincronizan todo el tiempo cuando estamos conectados, el ransomware también cifrará toda la información en la nube.
Algo similar puede ocurrir con un archivo o backup, que accidentalmente lo eliminemos, modifiquemos o dañemos; también se replicará instantáneamente en nuestra carpeta en la nube; y si es de gran tamaño, es poco probable que estos servicios, al menos en su versión gratuita, guarden copias de seguridad, por obvias razones de espacio limitado.
Son muchos los escenarios que pueden conducir al caos y pérdida de información, si sincronizamos en tiempo real. Es por eso que programar las sincronizaciones en la nube eventualmente podría ser una alternativa de solución a este problema, ya que, ante un eventual desastre, solo perderemos las horas de trabajo en que nuestro cliente no sincronizó.
La mayoría de los clientes de estos servicios cloud (para Windows, porque para Linux los clientes son limitados y en algunos casos no existen) ofrecen pausar la sincronización y reanudarla cuando queramos, solo disponible en su menú gráfico (al menos por el momento), pero no permite ser programada para que pause a una determinada hora y reinicie a otra, sin embargo, podemos echar manos de otras herramientas para lograr la programación en linux de sincronización de nuestros datos en la nube.
Programando sincronización de Dropbox Antes de comenzar es recomendable quitar cualquier versión de Dropbox (si utiliza el mismo método de instalación que a continuación se describira, puede omitir este paso):
apt-get purge dropbox
# Para Escritorio Mate
apt-get purge caja-dropbox
Luego ingrese a su carpeta Home, pulse Ctrl+H y elimine las carpetas .dropbox-dist y .dropbox
Instalación:
apt-key adv --keyserver pgp.mit.edu --recv-keys 5044912E
sh -c 'echo "deb http://linux.dropbox.com/ubuntu/ $(lsb_release -sc) main" >> /etc/apt/sources.list.d/dropbox.list'
apt-get update && apt-get -y install dropbox && apt-get -f -y install
Al terminar la instalación, iniciará la ventana de descarga y pulsamos Start Dropbox para iniciar la descarga:
Si no inicia la ventana anterior, vamos al menú y pulsamos en el icono de Dropbox y comienza la descarga:



Al concluir la descarga, se abre el navegador y pide autorización para vincular la cuenta:


Finalmente inicia Dropbox y hay que desmarcar la casilla de inicio automático (ya que el comando "dropbox autostart n" en ocasiones no funciona y es mejor asegurarnos). Copie el siguiente script de arranque y parada de Dropbox en init.d con el nombre de dbox sin extensión.  En la variable MYUSER, reemplace  user por su usuario de linux no-root (si no sabe cuál es su usuario, ejecute en el terminal sin sudo el comando  echo $USER)
#!/bin/sh
### Replace "user" with your user no-root (echo $USER)
MYUSER="user"
case "$1" in
  start)
    echo "Start Dropbox..."
    killall dropbox  >/dev/null 2>&1
    sudo -H -u $MYUSER bash -c 'DISPLAY=:0 /usr/bin/dbus-launch dropbox start -i &' >/dev/null 2>&1
    echo "OK"
  exit
  ;;
  stop)
    echo "Stop Dropbox..."
    sudo -H -u $MYUSER bash -c 'dropbox stop'
    # optional
    # killall dropbox >/dev/null 2>&1
    echo "OK"
  exit
  ;;
  *)
    echo "Usage: /etc/init.d/dbox {start|stop}"
 exit 1
    ;;
esac
exit 0
Nota: El comando "killall dropbox" se incluye porque en algunos sistemas los comandos de dropbox (dropbox stop o dropbox stop -i) no funcionan correctamente o demoran. Si no sucede en su equipo puede suprimirlos del script.
Error Notificación Ubuntu Mate
En Ubuntu Mate, es probable que salga algún error de notificación, debido a que esta distribución utiliza "caja-dropbox". También podemos agregar una variable al script apuntando a la carpeta local donde tenemos alojado Dropbox. Esto es muy útil si manejamos varias cuentas de Dropbox en el mismo terminal, para iniciarlas todas.
MY_FOLDER_DBOX=$HOME/Dropbox
MY_FOLDER2_DBOX=$HOME/ANOTHER_PATH/Dropbox
sudo -H -u $MYUSER bash -c 'DISPLAY=:0 $MY_FOLDER_DBOX /usr/bin/dbus-launch dropbox start -i &' >/dev/null 2>&1
sudo -H -u $MYUSER bash -c 'DISPLAY=:0 $MY_FOLDER2_DBOX /usr/bin/dbus-launch dropbox start -i &' >/dev/null 2>&1
Programación: Ahora le damos permisos:
chmod +x /etc/init.d/dbox
Abrimos el crontab y lo programamos en el horario de encendido y apagado que queramos. En el siguiente ejemplo se inicia a las 11:00 PM y se apaga a las 05:00 AM (para que sincronice lo del día).
sudo crontab -e
# Crontab schedule. Example:
00 23 * * * /etc/init.d/dbox start
00 05 * * * /etc/init.d/dbox stop
Programando sincronización en Mega
El mismo procedimiento y script aplicado a Dropbox puede ser usado con el cliente MegaSync, de  Mega (y en GDrive, si existiera una versión oficial para linux). Descargamos el cliente vía web o directamente de los  repositorios (según la version del SO); nombramos el script como msync (o el nombre que queramos) y lo guardamos en init.d y le damos permisos de ejecución y finalmente lo programamos en el cron de la misma forma que dbox:
#!/bin/sh
### Replace "user" with your user no-root (echo $USER)
MYUSER="user"

case "$1" in
  start)
    echo "Start MegaSync..."
    killall megasync >/dev/null 2>&1
    sudo -H -u $MYUSER bash -c 'DISPLAY=:0 /usr/bin/dbus-launch megasync start -i &' >/dev/null 2>&1
    echo "OK"
 exit
 ;;
  stop)
    echo "Stop MegaSync..."
    killall megasync >/dev/null 2>&1 
    echo "OK"
 exit
 ;;
  *)
    echo "Usage: /etc/init.d/msync {start|stop}"
 exit 1
    ;;
esac
exit 0
Programando sincronización con pCloud
pCloud es quizás uno de los mejores servicios que actualmente existen en la nube y su uso es muy sencillo, ya que no requiere de instalación, por ser una AppImage (similar a un portable en Windows). Simplemente descargamos el archivo AQUI y lo guardamos en cualquier parte. Para efectos de este tutorial lo guardaremos en Home. Ahora lo ejecutamos por primera vez para ingresar en nuestra cuenta. Normalmente crea una carpeta en Home llamada  pCloudDrive, donde montará el disco virtual.
Para programar su inicio y apagado, use el siguiente script y ejecútelo con privilegios. Si utilizó otra ubicación para guardar el programa, modifique la variable pcloudpath:
#!/bin/sh
### Replace "user" with your user no-root (echo $USER)
MYUSER="user"
pcloudpath="/home/$MYUSER/pcloud"

case "$1" in
  start)
    echo "Start pCloud..."
    sudo -H -u $MYUSER bash -c 'DISPLAY=:0 /usr/bin/dbus-launch '"$pcloudpath"' start -i &' >/dev/null 2>&1
    exit
 ;;
  stop)
    echo "Stop pCloud..."
    killall pcloud
 ;;
  *)
    echo "Usage: pcloud {start|stop}"
 exit 1
    ;;
esac
exit 0
Podemos utilizar pCloud para guardar copias de seguridad de nuestros archivos directamente en la nube, sin pasar por el disco duro, lo cual es beneficioso si tenemos un disco SSD. Con el siguiente script guardamos estos archivos comprimidos (ya que la versión gratuita solo ofrece 10GB) aunque se puede modificar para que los guarde normalmente. Se utiliza de la misma manera que los scripts de syncthing, dropbox y mega, explicados anteriormente. Modifique la variable $bk y cambie la ruta del directorio y/o archivos que va a respaldar
#!/bin/sh
### Replace "user" with your user no-root (echo $USER)
MYUSER="user"
pcloudd="/home/$MYUSER/pCloudDrive"
ZIPNAME="backup_$(date +%Y%m%d_%H%M).zip"
bk="/my_folder_backup/*"
date=`date +%d/%m/%Y" "%H:%M:%S`
sudouser="sudo -i -u $MYUSER"
log="/var/log/syslog"

case "$1" in
  'start')
 $sudouser zip -r $pcloudd/$ZIPNAME $bk
        echo "Backup Start $date" >> $log
 ;;
  'stop')
 ;;
  *)
 echo "Usage: $0 { start | stop }"
 ;;
esac
exit 0
Nota: Si va a respaldar directorios o archivos que no requieren de privilegios, entonces elimine la variable $sudouser y modifique la ruta de la variable $log a un path que no requiera privilegios (ej: Home). pCloud normalmente se monta en un directorio temporal (ej: /tmp/.mount_pcloudjUJB13 al directorio en la carpeta /home/user/pCloudDrive) pero existe una versión en línea de comandos llamada pcloudcom, que es más flexible y nos permite montar en el directorio de nuestra elección.
Programando sincronización con Syncthing
Un servicio "cloud" no es más que una (o varias) computadoras y/o servidores de "otros",
donde guardamos nuestros datos
Si bien estos servicios cloud son cómodos y llegaron para quedarse, no es sano una excesiva dependencia, ya que puede estar en juego nuestra privacidad. Una alternativa libre que soluciona este problema es syncthing, que no solo permite programar nuestras sincronizaciones (similar a como lo hacemos en las clouds tradicionales), sino que transfiere datos entre terminales (nodos) de forma descentralizada y cifrada, sin servidor intermediario.
Use los siguientes comandos para instalarlo (no-root):
curl -s https://syncthing.net/release-key.txt | sudo apt-key add -
echo "deb https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list
sudo apt update && sudo apt -y install syncthing apt-transport-https
sudo systemctl enable syncthing@$USER.service && sudo systemctl start syncthing@$USER.service
Ahora acceda por https://localhost:8384/. Y el script para su ejecución (root). Reemplace  user por su usuario:
#!/bin/sh
### Replace "user" with your user no-root (echo $USER)
MYUSER="user"

case "$1" in
  start)
    echo "Start Syncthing..."
    systemctl start syncthing@$MYUSER.service
    echo "OK"
 exit
 ;;
  stop)
    echo "Stop Syncthing..."
    systemctl stop syncthing@$MYUSER.service
    # or
    # killall syncthing >/dev/null 2>&1
    echo "OK"
 exit
 ;;
  *)
    echo "Usage: /etc/init.d/syncth {start|stop}"
 exit 1
    ;;
esac
exit 0
Es importante que cada ves que actualicemos syncthing es necesario recargar al rey de los demonios "systemctl" (systemctl daemon-reload) o sino saldrá el siguiente mensaje:
Warning: syncthing@user.service changed on disk. Run 'systemctl daemon-reload' to reload units.
Programando en el cron (sudo crontab -e):
### Crontab schedule. Example: ###
00 23 * * * /etc/init.d/syncth start
00 05 * * * /etc/init.d/syncth stop
PD: Para Windows, es más cómodo instalar SyncTrayzor (requiere NetFramework 4.5x en adelante) y programar su inicio y parada (en el programador de tareas de windows) con los siguientes .bat:
startsync.bat (para iniciar):
@echo off
"C:\Program Files\SyncTrayzor\SyncTrayzor.exe" --start-syncthing
exit

stopsync.bat (para detener):
@echo off
"C:\Program Files\SyncTrayzor\SyncTrayzor.exe" --stop-syncthing
exit
Pero si no queremos trabajar con SyncTrayzor, simplemente descargamos syncthing (x86 o x64), lo descomprimimos en la unidad local (ej: c:\Syncthing), lo configuramos y luego programamos su ejecución en el programador de tareas de windows, con el siguiente script (ej: syncthing.bat reemplace start por stop para detener el aplicativo):
@echo off
start "Syncthing" syncthing.exe -no-console -no-browser
exit
Tutoriales recomendados de syncthing:  Configuración GTK NAS Windows  y  AlwaysUp
Programando backup con Duplicati
Duplicati es un software de backup de código abierto bastante interesante, aunque limitado. Por ejemplo solo tiene PC2cloud. No incluye cloud2cloud o cloud2PC, ni tiene opción "mirror" para replicar 1 way mirror A a B y en su lugar envía los archivos comprimidos a la nube y cifrados, lo cual puede ser un proceso bastante dispendioso porque si se cae el enlace de internet durante la carga del archivo comprimido es equivalente a desastre.
Pero lo anterior no significa que no podamos usar sus virtudes, ya que realiza backups incrementales cifrados en servicios como Mega, Google Drive, Dropbox o una unidad física, NAS, etc, para almacenar nuestros archivos, dándonos una capa adicional de seguridad en una ubicación alternativa, y siempre y cuando contemos con un internet estable y rápido, Duplicati es una opción a consideras.
bash para instalarlo:
# Duplicati
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb https://download.mono-project.com/repo/ubuntu stable-bionic main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
sudo apt update
sudo apt -y install mono-devel gtk-sharp2
sudo dpkg --configure -a && sudo apt-get -f -y install
link=$(curl -s https://updates.duplicati.com/beta/latest-installers.js | grep -Po 'http[^"]*\.deb')
wget -q $link -O duplicati.deb
sudo dpkg -i duplicati.deb
sudo dpkg --configure -a && sudo apt-get -f -y install
sudo rm -f duplicati.deb
sudo systemctl enable duplicati
Una vez instalado lo configuramos (tiene modo claro y oscuro). Para conocer el funcionamiento de esta aplicación, lea la documentación
Inicio de duplicati en localhost:8200
Y el script para iniciarlo o detenerlo (programarlo en el cron):
#!/bin/sh
### Replace "user" with your user no-root (echo $USER)
MYUSER="user"

case "$1" in
  start)
    echo "Start Duplicati..."
    systemctl start duplicati
    echo "OK"
 exit
 ;;
  stop)
    echo "Stop Duplicati..."
    systemctl stop duplicati
    echo "OK"
 exit
 ;;
  *)
    echo "Usage: /etc/init.d/duplicati {start|stop}"
 exit 1
    ;;
esac
exit 0
Y si queremos que esté siempre activo, basta con crear un script vigilante que evite que el servicio se caiga:
#!/bin/bash
date=`date +%d/%m/%Y" "%H:%M:%S`
if [[ `ps -A | grep mono-sgen` != "" ]];then
        echo -e "\nONLINE"
   else
        echo -e "\n"
        systemctl stop duplicati
        killall DuplicatiServer &> /dev/null
        killall mono-sgen &> /dev/null
        systemctl start duplicati
        echo "Duplicati start $date" >> /var/log/syslog
   fi
Aunque también puede usar el siguiente script para iniciar y detener el servicio en /init.d:
https://raw.githubusercontent.com/duplicati/duplicati/master/Installer/debian/init-script-example.sh
Con la tecnología de Blogger.