Das Problem: ein Backup von wenigen aber wichtigen kleinen Dateien von einem Server machen, aber irgendwie keine Zeit den eigentlichen Backup-Client einzurichten. Sowieso ist in diesem Fall der Backup-Client auf dem Server eigentlich ein bisschen wie mit Kanonen auf Spatzen zu schiessen. Backup muss aber dennoch gemacht werden.
Die Loesung: die Backupmailbox. Auf dem Mailserver wird eine Backup-Aliasmailadresse eingerichtet. Backups gehen dann per Mail an diese Adresse, ein Skript extrahiert die Anhaenge und legt sie im Dateisystem in einer Ordnerstruktur ab. Diese Ordner werden dann ueber den Backupclient – der auf dem Mailserver sowieso laeuft – mit ins regulaere Backup geschoben. Die Anhaenge werden in Unterordner gespeichert, die dem Namen der EMailadresse entsprechen um sie besser auseinanderzuhalten. Dabei wird das @ gegen einen . ersetzt. Weiter werden nur Emails bearbeitet, die als Betreff ein definiertes Zufallspasswort haben.
Die Umsetzung: Man benoetigt einen Email-Alias, ein Skript, zwei Ordner im Dateisystem, ein Zufallspasswort und 15min Zeit eines Systemadministrators.
Zuerst lege man in der /etc/aliases einen neuen Backup-Alias an:
backupalias: "| /path/to/attatchExtract.sh" |
und uebernehme diesen mit dem Kommando newaliases. Danach lege man unter dem definierten Pfad das folgende Skript ab:
#!/bin/bash ## base path where attachments and logfile should be stored without trailing slash BASEPATH=/var/local/backup/ ## The subject needs to match this string, otherwise the mail is dropped without action SECRETSUBJECT="12345" ## uniq filename for temp file FILENAME=$(date +%s) echo "Filename = $FILENAME" >> $BASEPATH/logfile ## safe email to tmp file /bin/cat > /tmp/$FILENAME ## extract sender from email SENDER=$(grep "From:" /tmp/$FILENAME | sed 's/.*< *//;s/ *>.*//' | tr "@" ".") echo "Sender = $SENDER" >> $BASEPATH/logfile ## extract subject from email SUBJECT=$(grep "Subject:" /tmp/$FILENAME | sed '/^Subject: */!d; s///; q') echo "Subject = $SUBJECT" >> $BASEPATH/logfile ## only do something if secret subject is matched if [ "$SUBJECT" == "$SECRETSUBJECT" ]; then ## create folder for email address if doesn't exist if [ ! -d "$BASEPATH/$SENDER" ] ; then echo "Directory $BASEPATH/$SENDER does not exist, creating it" >> $BASEPATH/logfile mkdir -p $BASEPATH/$SENDER fi ## extract files from email and safe to correcet folder /usr/bin/uudeview -i -a -p $BASEPATH/$SENDER/ /tmp/$FILENAME >> $BASEPATH/logfile echo >> /$BASEPATH/logfile ## otherwise just do nothing else echo "Subject didn't match secret Subject. Doing nothing..." >> $BASEPATH/logfile fi ## delete tmp file /bin/rm /tmp/$FILENAME |
In dem Skript passe man nun das Zufallspasswort gegen ein eigenes an (makepasswd –chars 40) und aktualisiere den BASEPATH. Zuletzt noch das Skript mit chmod 755 ausfuehrbar machen und das Ergebnis aus dem Mailclient seiner Wahl testen.
Sollte es zu Problemen kommen, dass keine Logdatei und Anhaenge abgelegt werden liegt dieses meistens an fehlenden Rechten.