====== Verschlüsseltes Backup mit ftplicity ====== ''ftplicity'' ist ein Wrapper-Skript um ''duplicity'', das inkrementelle Backups durchführt, die per GPG verschlüsselt werden. Das Backup wird per ''scp'' auf den Hidrive-Plattenplatz kopiert. ===== Quellen ===== * http://www.howtoforge.com/ftp-backups-with-duplicity-ftplicity-debian-etch * http://www.h-online.com/security/features/Backups-on-non-trusted-FTP-servers-747191.html ===== Installation ===== * ''duplicity'' installieren: # aptitude install duplicity * [[ftp://ftp.heise.de/pub/ct/listings/0613-216.tar.gz|ftplicity]] laden, entpacken und ''ftplicity'' nach ''/usr/local/sbin'' kopieren * ''ftplicity'' legt beim ersten Aufruf nicht das Konfigurationsverzeichnis ''/root/.ftplicity'' an, deshalb vor dem Aufruf von ''save_config'' folgende Zeile einfügen: # vi /usr/local/sbin/ftplicity [...] if [ ! -d "$CONFDIR" ] then mkdir "$CONFDIR" || error "Konnte $CONFDIR nicht erstellen." save_config * Damit bei Verwendung von ''scp'' das Kennwort aus der Umgebungsvariablen ''FTP_PASSWORD'' zur Authentifizierung dient (und nicht, wie es eigentlich besser wäre, ein SSH-Key), muss beim Aufruf von ''duplicity'' noch die Option ''--ssh-askpass'' hinzugefügt werden: # vi /usr/local/sbin/ftplicity [...] $DUPLICITY $cmd "$@" --encrypt-key $GPG_KEY \ --sign-key $GPG_KEY --verbosity $VERBOSITY \ --ssh-askpass ===== GPG ===== * GPG-Schlüssel erzeugen (als "richtiger" root per "su -"): # gpg –-gen-key ===== Konfiguration ===== * ''ftplicity'' aufrufen, um die Konfigurationsdatei zu erzeugen: # ftplicity * Konfigurationsdatei anpassen: # vi /root/.ftplicity/conf [...] GPG_KEY=... GPG_PW='...' [...] TARGET='scp://username@scp.hidrive.strato.com//users/username/backup/xxx.disorganized.de/' TARGET_PW='...' [...] MAXIMUM_AGE=1M * Folgende Dateien steuern den Ablauf von ''ftplicity''; * ''/root/.ftplicity/exclude'': Liste von Verzeichnissen und Dateimustern, die nicht gesichert werden sollen (rsync-Syntax) * ''/root/.ftplicity/pre'': Kommandos, die vor dem Backup ausgeführt werden sollen * ''/root/.ftplicity/post'': Kommandos, die nach dem Backup ausgeführt werden sollen * Exclude-Datei anlegen (nur nicht wieder herstellbare Dateien sichern, nicht das ganze Betriebssystem): # vi /root/.ftplicity/exclude **/*~ **/core **/lost+found /aquota.group /aquota.user /bin /boot /dev /initrd /lib /media /mnt /opt /private-backup /proc /sbin /srv /sys /tmp /usr /var/cache /var/lib/named/dev/* /var/lock /var/run /var/tmp ===== Erste Sicherung und Test ===== * Erste Vollsicherung durchführen: # ftplicity full [...] Errors 0 * Restore testen: # ftplicity fetch etc/passwd /tmp/passwd ===== Cron-Job ===== * Cron-Job einrichten: # crontab -e # m h dom mon dow command # Inkrementelles Backup um 5 Uhr morgens 00 5 * * * /usr/local/sbin/ftplicity backup # Vollbackup um 6 Uhr morgens an jedem ersten des Monats, # veraltete Ketten loeschen # Kommandos sollten eigentlich mit && verkettet werden! 00 6 1 * * /usr/local/sbin/ftplicity full ; /usr/local/sbin/ftplicity purge --force ===== MySQL-Backup ===== Das MySQL-Backup wird von ''ftplicity'' per ''pre''-Kommando durchgeführt. Dabei werden mit ''mysqldump'' Dumps aller Datenbanken angelegt. * MySQL-Backup-Benutzer anlegen: $ mysql -u root -p GRANT SHOW DATABASES, SHOW VIEW, SELECT, LOCK TABLES, RELOAD ON *.* to 'backup'@'localhost' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; * MySQL-Backup-Verzeichnis anlegen: # mkdir /var/backups/mysql # chown root:root /var/backups/mysql # chmod 750 /var/backups/mysql * MySQL-Backup-Skript anlegen: # vi /usr/local/sbin/mysqlbackup #!/bin/bash set -e DIR=/var/backups/mysql/ DB_USER=backup DB_PASS='password' OPT="--opt --single-transaction --quote-names --routines --flush-logs --allow-keywords" # create backups securely umask 0027 # list MySQL databases and dump each DB_LIST=`mysql -u $DB_USER -p"$DB_PASS" -e'show databases;'` DB_LIST=${DB_LIST##Database} for DB in $DB_LIST; do FILENAME=${DIR}${DB}.sql.bz2 mysqldump -u $DB_USER -p"$DB_PASS" $OPT $DB | bzip2 > $FILENAME.tmp mv $FILENAME.tmp $FILENAME done * Zugriffsrechte für MySQL-Backup-Skript setzen: # chown root:root /usr/local/sbin/mysqlbackup # chmod 700 /usr/local/sbin/mysqlbackup * MySQL-Backup-Skript vor dem Backup ausführen: # vi /root/.ftplicity/pre #!/bin/bash /usr/local/sbin/mysqlbackup * Zugriffsrechte für ''pre''-Kommando setzen: # chmod 700 /root/.ftplicity/pre ===== Ausblick ===== * Nachfolge-Projekt: [[http://duply.net/|duply]]