17.03.2008
|
Code
|
1 Kommentar
Sehr oft stellen Anbieter von Root-Servern oder vServern Backup-Platz auf einem FTP-Server im gleichen Subnetz zur Verfügung, also innerhalb des Rechenzentrum, in dem die eigene Kiste steht. Das Problem dabei: Der eigene Backupplatz dort ist nicht vor den Augen Dritter sicher, so kann der Anbieter selbst bzw. der Admin des Backup-Rechners mal vorbei gucken oder vielleicht gibts sogar einen Fehler im FTP-Server oder dem Netzsegment und die Daten stehen sperrangelweit offen (Fehler sind menschlich und passieren auch in den besten Umgebungen).
Natürlich möchte man nicht, dass alle Daten, ob Mails, Webseiten, SQL-Dumps oder Konfigurationsdateien einfach so offen liegen.
Des weiteren muss man natürlich auch regelmäßig Backups machen, damit diese was nützen. Dabei sollten diese aber wenig Platz verbrauchen. Meist hat man nur recht geringen Platz zur Verfügung (30 bis 50 GB sind so der Durchschnitt bei den meisten Anbietern nach meinen Erfahrungen).
Alle beiden Dinge kann man relativ simpel lösen:
Duplicity!
Duplicity ist ein Programm, dass verschlüsselte, inkrementielle Backups erstellen und diese dann zum Beispiel auf FTP-Servern speichern kann. Duplicity ist im Debian-Repository (und auch in (K)Ubuntu) enthalten und kann einfach installiert werden:
sudo aptitude install gpg
sudo aptitude install duplicity
Nun kann man schon Backups erzeugen:
FTP_PASSWORD=secret duplicity /home/exampleuser ftp://backupuser@backup.example.com/subdirectory
Beim ersten Lauf wird ein Vollbackup erzeugt, erst bei erneutem Aufruf werden dann inkrementielle Backups erzeugt.
Mit dem Parameter
--exclude kann man Verzeichnisse vom Backup ausschließen. Backups wiederherstellen geht auch relativ simpel:
FTP_PASSWORD=secret duplicity ftp://backupuser@backup.example.com/ /home/exampleuser
Allerdings kann man dies so noch nicht automatisiert verwenden (z.B. in Cron Jobs). Duplicity benötigt ein Passwort zur Verschlüsselung und fragt so jedesmal nach. Damit das reibungslos geht, müssen wir erstmal in GnuPG einen Schlüssel dafür anlegen.
debianserver:/home/exampleuser# gpg --gen-key
Ob das ganze richtig funktioniert hat, kann man einfach nachprüfen:
gpg --list-keygibt eine Liste der Schlüssel aus. Da sollte der gerade angelegte mit den richtigen Daten dabei sein.
So, nun können wir uns ein kleines Skript schreiben, das den eigentlichen Aufruf von duplicity übernimmt:
#!/bin/bash
export PASSPHRASE=secret
export FTP_PASSWORD=ftpsecret
duplicity --encrypt-key "9D6F907C" --sign-key "9D6F907C" \
--exclude /proc \
--exclude /dev \
--exclude /sys \
--exclude /swap \
/ ftp://user@backup-server.de/
Natürlich muss man hier noch Anpassungen vornehmen. Als
PASSPHRASE wird das Passwort für die GPG-Verschlüsselung eingetragen, das wir auch oben bei der Erstellung verwendet haben. Als
encrypt-key und
sign-key trägt man die ID des Schlüssels ein (das ist oben in rot markiert). Zur Erhöhung der Sicherheit kann man auch zwei unterschiedliche Schlüssel verwenden. Die FTP-Daten muss man entsprechend den Daten anpassen, die man von seinem Anbieter bekommen hat.
Auch sollte man sich überlegen, welche Verzeichnisse man genau ausklammern will und entsprechende Zeilen hinzufügen.
In diesem Beispiel wird die komplette Verzeichnisstruktur bis auf die paar mit
exclude ausgenommenen Verzeichnisse gesichert (dafür ist das
/ in der letzten Zeile verantwortlich). Ob man wirklich so umfangreiche Sicherungen will, ist je nach Situation unterschiedlich. Darüber sollte man durchaus erstmal nachdenken und das Für und Wider einer großen, allgemeinen zu einer kleinen, speziellen Sicherung abwägen.
Wer will, kann sich das Ergebnis immer per Mail zuschicken lassen (dazu einfach
| mail -s "duplicity backup" root@pumuckl-fanclub.de hinten dran anhängen). Wer sich aber Ergebnisse von Cron-Jobs eh per Mail zuschicken lässt (
MAILTO-Anweisung in der crontab) kann darauf verzichten, da er diese Ergebnisse sowieso bekommt.
Als letzten Schritt speichert man obiges Skript z.B. unter
/usr/local/bin/ftpbackup und macht dies mit
chmod +x /usr/local/bin/ftpbackup ausführbar. Dann editiert man mit
crontab -e die Crontab von root (vorher evtl. mit
sudo su auf root wecheln). Das Skript muss als root laufen, wenn wie im obigen Beispiel die gesamte Verzeichnisstruktur gesichert werden soll. Soll nur z.B. ein Homeverzeichnis eines bestimmten Benutzers gesichert werden, reicht es auch aus, den Aufruf in die crontab dieses Nutzers einzutragen.
Wie dem auch sei, man trägt eine Zeile für das Backup ein:
27 5 * * * /usr/local/bin/ftpbackup
Diese Zeile bewirkt, dass jeden Tag frühs um 05:27 Uhr das Backup gestartet wird.
Das sollte reichen. Jetzt startet man am besten erstmal manuell ein Backup, da das erste ja ein Full Backup wird und somit relativ lange dauern dürfte. In Zukunft kommen dann inkrementielle Backups hinzu.
Noch ein Tipp:
Mit folgender Zeile kann man sich den Restplatz auf dem FTP-Backup-Server anzeigen lassen (allerdings ist dieser Tipp nicht auf meinen Mist gewachsen, sondern das habe ich irgendwo aufgeschnappt, weiß aber leider die Quelle nicht mehr. Dennoch ein Dank an dieser Stelle an Unbekannt dafür

):
echo du . | lftp -u FTPUSER,FTPPASSWORT FTPSERVER | awk -v LIMIT="50" '$1~/[0-9]+/ {QUOTA=LIMIT*1024*1024; print (QUOTA-$1)/1024/1024 " GB left"}'
Natürlich müssen die roten Werte an die Werte der eigenen Umgebung angepasst werden. Als LIMIT wird der vom Anbieter zugewiesene Platz in GB genannt, in diesem Fall 50 GB. Das ganze kann man auch (ähnlich wie oben) als Skript verpacken, z.B. unter
/usr/local/bin/ftpbackupleft o.ä.