Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
backup [2017/03/30 08:00]
mike
backup [2020/02/08 07:24] (aktuell)
mike
Zeile 18: Zeile 18:
  
 Das Backup wird komprimiert mittels gzip und asymmetrisch verschlüsselt. Der Publickey zum Verschlüsseln liegt dabei am Server, der Privatekey wird sicher verwahrt und wird nur zum entschlüsseln eines Backups benötigt - er liegt nicht innerhalb der VM. Das Backup wird komprimiert mittels gzip und asymmetrisch verschlüsselt. Der Publickey zum Verschlüsseln liegt dabei am Server, der Privatekey wird sicher verwahrt und wird nur zum entschlüsseln eines Backups benötigt - er liegt nicht innerhalb der VM.
 +
 +===== Cron =====
 +
 +Das Backup wird über Cron gesteuert, die Crontab (für root) sieht dabei so aus:
 +
 +<​file>​
 +0 4 * * * /​opt/​webserver/​backup/​backup.sh
 +0 4 1 * * /​opt/​webserver/​backup/​backup.sh month
 +0 4 1 1 * /​opt/​webserver/​backup/​backup.sh year
 +</​file>​
 +
 +Die Backups erfolgen dabei immer um 4 Uhr früh (Täglich, am 1. des Monats und jedes Jahr am 1. 1.)
 +
  
 ===== Skripte ===== ===== Skripte =====
Zeile 47: Zeile 60:
  
 BACKUP_DIR=/​srv/​backup BACKUP_DIR=/​srv/​backup
-DATABASE="​datenschutz"+DATABASE="​datareporter"
  
 +# Remove backups older than 2 days
 +# They should already be synced to S3 bucket
 +find $BACKUP_DIR/​*.enc -mtime +2 -exec rm {} \;
  
 DOW=$(date +%u) DOW=$(date +%u)
Zeile 59: Zeile 75:
 YEARLY_FILE="​mysqldump_yearly_$YEAR.sql.gz.enc"​ YEARLY_FILE="​mysqldump_yearly_$YEAR.sql.gz.enc"​
  
 +# Remove backups older than 2 days
 +# They should already be synced to S3 bucket
 +find $BACKUP_DIR/​*.enc -mtime +2 -exec rm {} \;
  
 BACKUPFILE=$BACKUP_DIR/​$DAILY_FILE BACKUPFILE=$BACKUP_DIR/​$DAILY_FILE
Zeile 75: Zeile 94:
 openssl smime -encrypt -binary -text -aes256 -out $BACKUPFILE -outform DER /​opt/​webserver/​backup/​mysqldump-secure.pub.pem openssl smime -encrypt -binary -text -aes256 -out $BACKUPFILE -outform DER /​opt/​webserver/​backup/​mysqldump-secure.pub.pem
 </​code>​ </​code>​
 +
 +==== mysqldump.cnf ====
 +
 +Konfigurationsdatei für mysqldump um das Passwort für die Datenbank nicht in der Prozessliste anzuzeigen
 +
 +<​file>​
 +[mysqldump]
 +host=localhost
 +user=root
 +password=******
 +</​file>​
 +
 +==== mysqldump-secure.pub.pem ====
 +
 +Öffentlicher Schlüssel mit dem die Backups verschlüsselt werden
 +
 +==== restore.sh ====
 +
 +Skript mit dem die Backups wieder entschlüsselt werden können. Dazu muss der private Schlüssel ins System kopiert werden (sollte aber nach dem Entschlüsseln sofort wieder entfernt werden). Alternativ kann die Entschlüsselung auf einem externen System erfolgen.
 +
 +<​code>​
 +#!/bin/bash
 +
 +KEYFILE=/​opt/​webserver/​backup/​mysqldump-secure.priv.pem
 +
 +DESTINATIONFILE=/​opt/​webserver/​backup/​datenschutz.sql
 +
 +
 +echo "​Checking for file $1"
 +if [ -e $1 ]; then
 +  echo "​Database backup file $1 found"
 +else
 +  echo "File $1 not found, please check for file path..."​
 +  exit
 +fi
 +
 +
 +echo "​Checking for private key in $KEYFILE"​
 +if [ -e $KEYFILE ]; then
 +  echo "Key found!"​
 +else
 +  echo "No private key found, please copy key to $KEYFILE"​
 +  exit
 +fi
 +
 +if [ -e $DESTINATIONFILE ]; then
 +  echo "​$DESTINATIONFILE exists, removing..."​
 +  rm $DESTINATIONFILE
 +fi
 +
 +echo "​Restoring to $DESTINATIONFILE"​
 +openssl smime -decrypt -in $1 -binary -inform DEM -inkey $KEYFILE | \
 +gunzip >​$DESTINATIONFILE
 +
 +if [ -e $DESTINATIONFILE ]; then
 +  echo "​Restore operation successful, backup restored to $DESTINATIONFILE"​
 +fi
 +
 +echo "** please delete your private key now: $KEYFILE"​
 +</​code>​
 +
 +===== AWS Backup auf S3 Bucket =====
 +
 +Die erstellten und verschlüsselten Backups werden dann auf einen S3 Bucket synchronisiert. Der Bucket ist mit Versioning erstellt, so dass alle Objekte versioniert werden.
 +
 +Konfiguration:​
 +
 +aws configure
 +
 +Benutzer Key / Shared Secret eingeben
 +
 +region: eu-central-1
 +
 +Crontab für upload:
 +
 +<​file>​
 +0 6 * * * /​usr/​bin/​aws s3 sync /srv/backup s3://​datenschutz.traunau.at/​develop
 +</​file>​
 +