So, hier ist der Patch für die aktuelle Version reoback-1.0-3 (wenig getestet und ohne jegliche Gewähr):
Code:
diff -ru orig/etc/reoback/settings.conf enc/etc/reoback/settings.conf
--- orig/etc/reoback/settings.conf 2008-02-07 11:04:47.000000000 +0100
+++ enc/etc/reoback/settings.conf 2008-02-07 10:52:33.000000000 +0100
@@ -71,3 +71,12 @@
# Password for remote user.
ftppasswd = passwordhere
######################################################
+
+######################################################
+# REQUIRED IF ENCRYPTION OF DATA IS NEEDED
+#######
+# enable encryption
+encrypt = 1
+# GPG key ID to use
+encid = 8DA96714
+######################################################
diff -ru orig/usr/bin/reoback.pl enc/usr/bin/reoback.pl
--- orig/usr/bin/reoback.pl 2008-02-07 11:04:47.000000000 +0100
+++ enc/usr/bin/reoback.pl 2008-02-07 10:49:16.000000000 +0100
@@ -42,9 +42,11 @@
my $DATESTAMP = `date +%Y%m%d`; # Current date in format: 04092001
my $DATESTAMPD = `date +%Y-%m-%d`; # Current date in format: 04092001
my $TIMESTAMP = `date +%I%M%p`; # Current time in format: 0945PM
-my $TARCMD = "tar -cpzf"; # Command to use to create tar files
+my $TARCMD = "tar -cpf -"; # Command to use to create tar files
my $NFSCMD = "mount -o rw,soft,intr,wsize=8192,rsize=8192";
-my $EXT = "\.tgz"; # Tar file extension
+my $EXT = "\.tar\.bz2"; # Tar file extension
+my $GPGCMD = "gpg";
+my $BZIPCMD = "bzip2 -9c";
# GLOBAL VARIABLES
###########################################################################
@@ -66,6 +68,10 @@
&parseConfig();
&backupType();
+if ($config{"encrypt"}) {
+ $EXT = $EXT . ".gpg";
+}
+
# Make sure that dirs exist (localmount and localbackup are checked below)
if ( not -e $config{"tmpdir"} ) {
&mkdirp( $config{"tmpdir"}, 0700 ) or
@@ -190,16 +196,46 @@
# Create the tar archive. Use this method instead of system() so that we
# can filter out the "Removing leading `/'" messages. '2>&1' redirects
# error messages from tar to stdout so we can catch them.
- if ( $skipFile ) {
- open PROC, "$TARCMD $fileName -T $listName.incl -X $listName.excl 2>&1|";
- }
- else {
- open PROC, "$TARCMD $fileName -T $listName.incl 2>&1|";
- }
- foreach ( <PROC> ) {
- if ( $_ !~ /Removing leading `\/'/ ) { print $_; }
+ if ($config{"encrypt"}) {
+
+ my $encID = $config{"encid"};
+ checkGPG($encID);
+
+ if ( $skipFile ) {
+ open PROC, "$TARCMD -T $listName.incl -X $listName.excl | $BZIPCMD | $GPGCMD -e -r $encID > $fileName 2>&1|";
+ }
+ else {
+ open PROC, "$TARCMD -T $listName.incl | $BZIPCMD | $GPGCMD -e -r $encID > $fileName 2>&1|";
+ }
+ foreach ( <PROC> ) {
+ if ( $_ !~ /Removing leading `\/'/ ) { print $_; }
+ }
+ close PROC;
+ }
+ else { # regular backup w/o encryption
+ if ( $skipFile ) {
+ open PROC, "$TARCMD -T $listName.incl -X $listName.excl | $BZIPCMD > $fileName 2>&1|";
+ }
+ else {
+ open PROC, "$TARCMD -T $listName.incl | $BZIPCMD > $fileName 2>&1|";
+ }
+ foreach ( <PROC> ) {
+ if ( $_ !~ /Removing leading `\/'/ ) { print $_; }
+ }
+ close PROC;
+ }
+}
+
+# Description: Routine for checking whether the GPG encryption will work
+# Parameter(s): "Key ID of recipient"
+# Returns: Nothing
+sub checkGPG{
+ my $encID = $_[0]; # Recipient Key ID
+
+ my $gpgtest = system("$GPGCMD --list-keys $encID >/dev/null");
+ if ($gpgtest != 0) {
+ die("GPG failed with code " . ($gpgtest/256) . "\n");
}
- close PROC;
}
# Description: Routine for transferring a file to the remote backup
Anwendung: Abspeichern als "/tmp/reo_enc.patch"
Code:
cd /
patch -p1 < /tmp/reo_enc.patch
Das fügt den zusätzlichen bzw. geänderten Code in /etc/reoback/settings.conf und /usr/bin/reoback.pl ein. Vorher überprüfen, ob die Pfade mit der installierten Version zusammen passen (stammen aus dem RPM von sourceforge).
Der Patch setzt voraus, dass GPG installiert ist und ein entsprechender (öffentlicher) Schlüssel im Schlüsselbund von root vorhanden ist und dieser von root signiert und mit den entsprechenden Trust-Parametern ausgestattet ist. Dazu muss man ggfs. für root erst einen eigenen Schlüssel erstellen -- insofern kann man gleich den root-Schlüssel verwenden. Falls kein root-Schlüssel existiert:
Das Verzeichnis /root/.gnupg sollte man anschließend in ein Archiv (tar, zip, etc) packen und an einem sicheren Ort aufbewahren (nicht auf dem Server!) -- ohne die Datei "secring.gpg" hat man keine Chancen, jemals wieder an seine Backup-Daten zu kommen (wahrscheinlich kann einem da nichteinmal die CIA helfen)!
Die (hexadezimale) ID des zu verwendenen Schlüssels (gpg --list-keys) muss entsprechend (encid) in /etc/reoback/settings.conf eingetragen werden.
Zum Entschlüsseln ruft man einfach "gpg
archive.tar.bz2.gpg" auf und erhält dann nach Eingabe des Passworts die .tar.bz2-Datei, die man anschließend wie gehabt auspacken kann.
Ach ja, der Patch ändert auch die Komprimierung des Backups. Statt gzip wird das leistungsfähigere bzip2 verwendet, dementsprechend ist die Endung auch ".tar.bz2" anstatt ".tgz". Die entsprechende tar-Option ist dann nicht mehr 'z' sondern 'j' (also tar -tjvf archiv.tar.bz2) oder man packt das Archiv mit "bunzip2" aus.
Viele Grüße,
LinuxAdmin
PS: Ein Seiteneffekt: Aufgrund der Art und Weise, wie Perl und die Shell Ausgaben-Umleitungen durchführen, taucht jetzt leider die Meldung von tar auf ("Removing leading / from ...."), die vorher abgefangen wurde -- das sollte aber nicht wesentlich stören.