| 

.NET C# Java Javascript Exception

3
Hallo,

per Cronjob möchte ich auf der Linux Shell mein bisheriges (funktionierendes) Backup über

tar -cpzf - /srv/www/vhosts/ | ncftpput -S .tmp -pxxx -ubackup -c backupserver.de  backup.tar.gz


mit GPG zusätzlich verschlüsseln.

In der von mir angedachten Art und Weise funkt es leider nicht:

tar -cpzf - /root/test.txt | gpg -passphrase zyx -batch -no-tty -c -o - | ncftpput -S .tmp -pxxx -ubackup -c backupserver.de  backup.tar.gz.gpg


Als Ergebnis enthält die Backupdatei das (unverschlüsselte) Helpfile von GPG. Kann es sein, dass GPG kein STDIN kennt (außer bei --passphrase)? Lässt sich dieses Task wirklich nicht über eine schlanke Cronjob-Zeile lösen?

Vielen Dank für einen Tipp!
21.07.2011
doublem 683 1 1 9
2 Antworten
4
Schreib dir doch einfach ein Bashscript und lege es nach /sbin, dann kann auch nur root darauf zugreifen.

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
export IFS=$' \t\n'
export LANG=C

# helper
clean_exit () { echo "$@";exit 1; }

MYDIR="/srv/www/vhosts";
TEMPFILE="/tmp/$(mktemp)";
FTPFILE="/tmp/Backup_$(date '+%d_%m_%y').tar.gz";
GPGKEY=/root/key.gpg.pub; # öffentlicher schlüssel ohne passwort - der private Schlüssel darf nicht auf dem Rechner liegen sonst bringt dir das Verschlüsseln einen S...dreck. Er muss bei Bedarf hochgeladen werden und mit Shred überschrieben

id | grep -q uid=0 || clean_exit "$0: error: must be root to do this" # Account ermitteln

cd /tmp/ # nach /tmp wechseln
tar -cpzf $TEMPFILE $MYDIR; # packen
gpg -ea -r dein@user.de $TEMPFILE; # verschlüsseln
mv $TEMPFILE.asc $FTPFILE.asc; # umtaufen
ncftpput -S .tmp -pxxx -ubackup -c backupserver.de $FTPFILE.asc; # hochschieben
chattr +s $FTPFILE $TEMPFILE; # Attribut Sicheres löschen hinzufügen
rm $FTPFILE $TEMPFILE; # anschliessen löschen


Das hab ich allerdings nicht getestet, ist komplett aus dem Kopf, würde ich vorher Schritt für Schritt testen!!!

Ablauf ist allerdings Packen, verschlüsseln, umtaufen, hochschieben, Daten überschreiben und löschen.

Vorteil vom Script ist, du kannst dich auch via mail informieren lassen bei Fehlern. Würde das nicht unbedingt mit einem Einzeiler machen.

Der Privatkey von dem GPG Account sollte nicht auf dem Server liegen und schon gar nicht in einem Script stehen. Du brauchst einen Privatekey nur zum Signieren, das Verschlüsseln funktioniert mit dem Public Key deines gegenübers.

mktemp erstellt die eine eindeutige Datei die nicht durch Zufall eine andere Datei überschreibt und wenn ich mich recht entsinne sollte GPG beim Datei verschlüsseln eine asc Datei erstellen. Der Aufruf von chattr sorgt für das sichere Entfernen der Dateien aus dem Dateisystem.

Im Cron würde ich einfach ein

* 3 * * * * root nice -n 19 /sbin/backupscript | mail -s "Backupjob vom $(date '+%d.%m.%y')" meine@mail.de

Dank nice sollte deine Festplatten IO auch nicht explodieren :-)
Und Mail nimmt den STDOUT von deinem Script und mailt es dir zu, fertig.

p.s. Ist es nicht vielleicht intelligenter SCP mit Keypair Authentifizierung zu verwenden und auf dem Backupserver den User via scponly zu chrooten?
12.09.2011
Lord_Pinhead 778 1 8
1
Eines ging mir gestern noch durch den Kopf.
Ist der Backupserver von dir administriert?

Ich will nur nochmal darauf hinweisen, das ein fehlerhaftes Bit in der GPG Datei das komplette Backup unbrauchbar macht, weshalb ich eher zu einem kleinen VServer mit OpenVPN Unterstützung raten würde. Dein Server exportiert dann durch das VPN eine NFS Freigabe und auf dem VServer syncs durch einfach mittels Rsync deine Ordner. Wäre vielleicht der sauberere Ansatz und auf dem VServer kannst du mehr machen als nur Backups ziehen, z.B. ein Loggingserver mit RSyslog. Und vergiss auch nicht deine Datenbanken zu sichern, sofern du das nicht sowisso in den /srv/www/vhosts/ machst. Nützt kaum etwas die Webseiten zu sichern wenn die Inhalte verschwunden sind :)
13.09.2011
Lord_Pinhead 778 1 8

Stelle deine Linux-Frage jetzt!