|
@@ -31,6 +31,9 @@
|
31
|
31
|
# whether a given site is being suspended during backup
|
32
|
32
|
SUSPENDED_SITE=
|
33
|
33
|
|
|
34
|
+# Dummy password used for the backup key
|
|
35
|
+BACKUP_DUMMY_PASSWORD='backup'
|
|
36
|
+
|
34
|
37
|
function suspend_site {
|
35
|
38
|
# suspends a given website
|
36
|
39
|
SUSPENDED_SITE="$1"
|
|
@@ -48,6 +51,22 @@ function restart_site {
|
48
|
51
|
SUSPENDED_SITE=
|
49
|
52
|
}
|
50
|
53
|
|
|
54
|
+function backup_create_password {
|
|
55
|
+ BACKUP_PASSWORD_FILE=$(mktemp /tmp/fileXXXXX)
|
|
56
|
+ # Note: this doesn't need to be secure, it's just a way of
|
|
57
|
+ # getting around the forced interactivity of the gpg agent
|
|
58
|
+ echo -n "$BACKUP_DUMMY_PASSWORD" > $BACKUP_PASSWORD_FILE
|
|
59
|
+}
|
|
60
|
+
|
|
61
|
+function backup_remove_password {
|
|
62
|
+ if [ ! $BACKUP_PASSWORD_FILE ]; then
|
|
63
|
+ return
|
|
64
|
+ fi
|
|
65
|
+ if [ -f $BACKUP_PASSWORD_FILE ]; then
|
|
66
|
+ shred -zu $BACKUP_PASSWORD_FILE
|
|
67
|
+ fi
|
|
68
|
+}
|
|
69
|
+
|
51
|
70
|
function configure_backup_key {
|
52
|
71
|
if [[ $(is_completed $FUNCNAME) == "1" ]]; then
|
53
|
72
|
return
|
|
@@ -59,6 +78,8 @@ function configure_backup_key {
|
59
|
78
|
return
|
60
|
79
|
fi
|
61
|
80
|
|
|
81
|
+ backup_create_password
|
|
82
|
+
|
62
|
83
|
# Generate a GPG key for backups
|
63
|
84
|
BACKUP_KEY_EXISTS=$(gpg_key_exists "$MY_USERNAME" "$MY_NAME (backup key)")
|
64
|
85
|
if [[ $BACKUP_KEY_EXISTS == "no" ]]; then
|
|
@@ -70,16 +91,16 @@ function configure_backup_key {
|
70
|
91
|
echo "Name-Email: $MY_EMAIL_ADDRESS" >> /home/$MY_USERNAME/gpg-genkey.conf
|
71
|
92
|
echo "Name-Comment: backup key" >> /home/$MY_USERNAME/gpg-genkey.conf
|
72
|
93
|
echo 'Expire-Date: 0' >> /home/$MY_USERNAME/gpg-genkey.conf
|
73
|
|
- echo "Passphrase: ''" >> /home/$MY_USERNAME/gpg-genkey.conf
|
74
|
94
|
chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/gpg-genkey.conf
|
75
|
95
|
echo $'Backup key does not exist. Creating it.'
|
76
|
|
- su -m root -c "gpg --homedir /home/$MY_USERNAME/.gnupg --batch --full-gen-key /home/$MY_USERNAME/gpg-genkey.conf" - $MY_USERNAME
|
|
96
|
+ su -m root -c "gpg --homedir /home/$MY_USERNAME/.gnupg --batch --passphrase-fd $BACKUP_PASSWORD_FILE --full-gen-key /home/$MY_USERNAME/gpg-genkey.conf" - $MY_USERNAME
|
77
|
97
|
chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.gnupg
|
78
|
98
|
|
79
|
99
|
shred -zu /home/$MY_USERNAME/gpg-genkey.conf
|
80
|
100
|
echo $'Checking that the Backup key was created'
|
81
|
101
|
BACKUP_KEY_EXISTS=$(gpg_key_exists "$MY_USERNAME" "$MY_NAME (backup key)")
|
82
|
102
|
if [[ $BACKUP_KEY_EXISTS == "no" ]]; then
|
|
103
|
+ backup_remove_password
|
83
|
104
|
echo $'Backup key could not be created'
|
84
|
105
|
exit 43382
|
85
|
106
|
fi
|
|
@@ -89,12 +110,14 @@ function configure_backup_key {
|
89
|
110
|
echo "Backup key: $MY_BACKUP_KEY_ID"
|
90
|
111
|
MY_BACKUP_KEY=/home/$MY_USERNAME/backup_key
|
91
|
112
|
su -m root -c "gpg --homedir /home/$MY_USERNAME/.gnupg --output ${MY_BACKUP_KEY}_public.asc --armor --export $MY_BACKUP_KEY_ID" - $MY_USERNAME
|
92
|
|
- su -m root -c "gpg --homedir /home/$MY_USERNAME/.gnupg --output ${MY_BACKUP_KEY}_private.asc --armor --export-secret-key $MY_BACKUP_KEY_ID" - $MY_USERNAME
|
|
113
|
+ su -m root -c "gpg --homedir /home/$MY_USERNAME/.gnupg --output ${MY_BACKUP_KEY}_private.asc --armor --passphrase-fd $BACKUP_PASSWORD_FILE --export-secret-key $MY_BACKUP_KEY_ID" - $MY_USERNAME
|
93
|
114
|
if [ ! -f ${MY_BACKUP_KEY}_public.asc ]; then
|
|
115
|
+ backup_remove_password
|
94
|
116
|
echo 'Public backup key could not be exported'
|
95
|
117
|
exit 36829
|
96
|
118
|
fi
|
97
|
119
|
if [ ! -f ${MY_BACKUP_KEY}_private.asc ]; then
|
|
120
|
+ backup_remove_password
|
98
|
121
|
echo 'Private backup key could not be exported'
|
99
|
122
|
exit 29235
|
100
|
123
|
fi
|
|
@@ -105,6 +128,7 @@ function configure_backup_key {
|
105
|
128
|
|
106
|
129
|
shred -zu ${MY_BACKUP_KEY}_public.asc
|
107
|
130
|
shred -zu ${MY_BACKUP_KEY}_private.asc
|
|
131
|
+ backup_remove_password
|
108
|
132
|
|
109
|
133
|
mark_completed $FUNCNAME
|
110
|
134
|
}
|
|
@@ -258,10 +282,10 @@ function backup_directory_to_usb {
|
258
|
282
|
mkdir -p $USB_MOUNT/backup/${2}
|
259
|
283
|
fi
|
260
|
284
|
set_obnam_client_name
|
261
|
|
- obnam force-lock -r $USB_MOUNT/backup/${2} --encrypt-with $MY_BACKUP_KEY_ID ${1}
|
262
|
|
- obnam backup -r $USB_MOUNT/backup/${2} --encrypt-with $MY_BACKUP_KEY_ID ${1}
|
|
285
|
+ echo "$BACKUP_DUMMY_PASSWORD" | obnam force-lock -r $USB_MOUNT/backup/${2} --encrypt-with $MY_BACKUP_KEY_ID ${1}
|
|
286
|
+ echo "$BACKUP_DUMMY_PASSWORD" | obnam backup -r $USB_MOUNT/backup/${2} --encrypt-with $MY_BACKUP_KEY_ID ${1}
|
263
|
287
|
if [[ $ENABLE_BACKUP_VERIFICATION == "yes" ]]; then
|
264
|
|
- obnam verify -r $USB_MOUNT/backup/${2} --encrypt-with $MY_BACKUP_KEY_ID ${1}
|
|
288
|
+ echo "$BACKUP_DUMMY_PASSWORD" | obnam verify -r $USB_MOUNT/backup/${2} --encrypt-with $MY_BACKUP_KEY_ID ${1}
|
265
|
289
|
if [ ! "$?" = "0" ]; then
|
266
|
290
|
umount $USB_MOUNT
|
267
|
291
|
rm -rf $USB_MOUNT
|
|
@@ -274,7 +298,7 @@ function backup_directory_to_usb {
|
274
|
298
|
exit 683252
|
275
|
299
|
fi
|
276
|
300
|
fi
|
277
|
|
- obnam forget --keep=30d -r $USB_MOUNT/backup/${2} --encrypt-with $MY_BACKUP_KEY_ID
|
|
301
|
+ echo "$BACKUP_DUMMY_PASSWORD" | obnam forget --keep=30d -r $USB_MOUNT/backup/${2} --encrypt-with $MY_BACKUP_KEY_ID
|
278
|
302
|
if [ ! "$?" = "0" ]; then
|
279
|
303
|
umount $USB_MOUNT
|
280
|
304
|
rm -rf $USB_MOUNT
|
|
@@ -308,7 +332,7 @@ function restore_directory_from_usb {
|
308
|
332
|
mkdir ${1}
|
309
|
333
|
fi
|
310
|
334
|
set_obnam_client_name
|
311
|
|
- obnam restore -r $USB_MOUNT/backup/${2} --to ${1}
|
|
335
|
+ echo "$BACKUP_DUMMY_PASSWORD" | obnam restore -r $USB_MOUNT/backup/${2} --to ${1}
|
312
|
336
|
}
|
313
|
337
|
|
314
|
338
|
function restore_directory_from_friend {
|
|
@@ -326,7 +350,7 @@ function restore_directory_from_friend {
|
326
|
350
|
mkdir ${1}
|
327
|
351
|
fi
|
328
|
352
|
set_obnam_client_name
|
329
|
|
- obnam restore -r $SERVER_DIRECTORY/backup/${2} --to ${1}
|
|
353
|
+ echo "$BACKUP_DUMMY_PASSWORD" | obnam restore -r $SERVER_DIRECTORY/backup/${2} --to ${1}
|
330
|
354
|
}
|
331
|
355
|
|
332
|
356
|
function backup_database_to_usb {
|
|
@@ -365,10 +389,10 @@ function backup_directory_to_friend {
|
365
|
389
|
mkdir -p $SERVER_DIRECTORY/backup/${2}
|
366
|
390
|
fi
|
367
|
391
|
set_obnam_client_name
|
368
|
|
- obnam force-lock -r $SERVER_DIRECTORY/backup/${2} --encrypt-with ${ADMIN_BACKUP_KEY_ID} ${1}
|
369
|
|
- obnam backup -r $SERVER_DIRECTORY/backup/${2} --encrypt-with ${ADMIN_BACKUP_KEY_ID} ${1}
|
|
392
|
+ echo "$BACKUP_DUMMY_PASSWORD" | obnam force-lock -r $SERVER_DIRECTORY/backup/${2} --encrypt-with ${ADMIN_BACKUP_KEY_ID} ${1}
|
|
393
|
+ echo "$BACKUP_DUMMY_PASSWORD" | obnam backup -r $SERVER_DIRECTORY/backup/${2} --encrypt-with ${ADMIN_BACKUP_KEY_ID} ${1}
|
370
|
394
|
if [[ $ENABLE_VERIFICATION == "yes" ]]; then
|
371
|
|
- obnam verify -r $SERVER_DIRECTORY/backup/${2} --encrypt-with ${ADMIN_BACKUP_KEY_ID} ${1}
|
|
395
|
+ echo "$BACKUP_DUMMY_PASSWORD" | obnam verify -r $SERVER_DIRECTORY/backup/${2} --encrypt-with ${ADMIN_BACKUP_KEY_ID} ${1}
|
372
|
396
|
if [ ! "$?" = "0" ]; then
|
373
|
397
|
if [[ ${1} == "/root/temp"* || ${1} == *"tempbackup" ]]; then
|
374
|
398
|
shred -zu /root/temp${2}/*
|
|
@@ -381,7 +405,7 @@ function backup_directory_to_friend {
|
381
|
405
|
exit 953
|
382
|
406
|
fi
|
383
|
407
|
fi
|
384
|
|
- obnam forget --keep=30d -r $SERVER_DIRECTORY/backup/${2} --encrypt-with ${ADMIN_BACKUP_KEY_ID}
|
|
408
|
+ echo "$BACKUP_DUMMY_PASSWORD" | obnam forget --keep=30d -r $SERVER_DIRECTORY/backup/${2} --encrypt-with ${ADMIN_BACKUP_KEY_ID}
|
385
|
409
|
if [ ! "$?" = "0" ]; then
|
386
|
410
|
if [[ ${1} == "/root/temp"* || ${1} == *"tempbackup" ]]; then
|
387
|
411
|
shred -zu /root/temp${2}/*
|