瀏覽代碼

Fixing gpg backups

Bob Mottram 7 年之前
父節點
當前提交
0aee39ae8a
共有 3 個檔案被更改,包括 45 行新增16 行删除
  1. 1
    1
      src/freedombone-adduser
  2. 7
    2
      src/freedombone-base-email
  3. 37
    13
      src/freedombone-utils-backup

+ 1
- 1
src/freedombone-adduser 查看文件

143
 echo "Name-Real:  $ADD_USERNAME" >> /home/$ADD_USERNAME/gpg-genkey.conf
143
 echo "Name-Real:  $ADD_USERNAME" >> /home/$ADD_USERNAME/gpg-genkey.conf
144
 echo "Name-Email: $ADD_USERNAME@$HOSTNAME" >> /home/$ADD_USERNAME/gpg-genkey.conf
144
 echo "Name-Email: $ADD_USERNAME@$HOSTNAME" >> /home/$ADD_USERNAME/gpg-genkey.conf
145
 echo 'Expire-Date: 0' >> /home/$ADD_USERNAME/gpg-genkey.conf
145
 echo 'Expire-Date: 0' >> /home/$ADD_USERNAME/gpg-genkey.conf
146
-echo "Passphrase: ''" >> /home/$ADD_USERNAME/gpg-genkey.conf
146
+echo "Passphrase: $NEW_USER_PASSWORD" >> /home/$ADD_USERNAME/gpg-genkey.conf
147
 chown $ADD_USERNAME:$ADD_USERNAME /home/$ADD_USERNAME/gpg-genkey.conf
147
 chown $ADD_USERNAME:$ADD_USERNAME /home/$ADD_USERNAME/gpg-genkey.conf
148
 su -m root -c "gpg --homedir /home/$ADD_USERNAME/.gnupg --batch --full-gen-key /home/$ADD_USERNAME/gpg-genkey.conf" - $ADD_USERNAME
148
 su -m root -c "gpg --homedir /home/$ADD_USERNAME/.gnupg --batch --full-gen-key /home/$ADD_USERNAME/gpg-genkey.conf" - $ADD_USERNAME
149
 chown -R $ADD_USERNAME:$ADD_USERNAME /home/$ADD_USERNAME/.gnupg
149
 chown -R $ADD_USERNAME:$ADD_USERNAME /home/$ADD_USERNAME/.gnupg

+ 7
- 2
src/freedombone-base-email 查看文件

1480
 }
1480
 }
1481
 
1481
 
1482
 function create_gpg_subkey {
1482
 function create_gpg_subkey {
1483
+    # Note: currently not used
1483
     if [ ! -d /etc/exim4 ]; then
1484
     if [ ! -d /etc/exim4 ]; then
1484
         return
1485
         return
1485
     fi
1486
     fi
1508
     echo "Name-Email: $MY_EMAIL_ADDRESS" >> /home/$MY_USERNAME/gpg-genkey.conf
1509
     echo "Name-Email: $MY_EMAIL_ADDRESS" >> /home/$MY_USERNAME/gpg-genkey.conf
1509
     echo "Name-Comment: $GPG_KEY_USAGE" >> /home/$MY_USERNAME/gpg-genkey.conf
1510
     echo "Name-Comment: $GPG_KEY_USAGE" >> /home/$MY_USERNAME/gpg-genkey.conf
1510
     echo 'Expire-Date: 0' >> /home/$MY_USERNAME/gpg-genkey.conf
1511
     echo 'Expire-Date: 0' >> /home/$MY_USERNAME/gpg-genkey.conf
1511
-    echo "Passphrase: ''" >> /home/$MY_USERNAME/gpg-genkey.conf
1512
+    echo "Passphrase: $PROJECT_NAME" >> /home/$MY_USERNAME/gpg-genkey.conf
1512
     chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/gpg-genkey.conf
1513
     chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/gpg-genkey.conf
1513
     su -m root -c "gpg --homedir /home/$MY_USERNAME/.gnupg --batch --full-gen-key /home/$MY_USERNAME/gpg-genkey.conf" - $MY_USERNAME
1514
     su -m root -c "gpg --homedir /home/$MY_USERNAME/.gnupg --batch --full-gen-key /home/$MY_USERNAME/gpg-genkey.conf" - $MY_USERNAME
1514
     chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.gnupg
1515
     chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.gnupg
1624
         echo "Name-Real:  $MY_NAME" >> /home/$MY_USERNAME/gpg-genkey.conf
1625
         echo "Name-Real:  $MY_NAME" >> /home/$MY_USERNAME/gpg-genkey.conf
1625
         echo "Name-Email: $MY_EMAIL_ADDRESS" >> /home/$MY_USERNAME/gpg-genkey.conf
1626
         echo "Name-Email: $MY_EMAIL_ADDRESS" >> /home/$MY_USERNAME/gpg-genkey.conf
1626
         echo 'Expire-Date: 0' >> /home/$MY_USERNAME/gpg-genkey.conf
1627
         echo 'Expire-Date: 0' >> /home/$MY_USERNAME/gpg-genkey.conf
1627
-        echo "Passphrase: ''" >> /home/$MY_USERNAME/gpg-genkey.conf
1628
+        if [ -f $IMAGE_PASSWORD_FILE ]; then
1629
+            echo "Passphrase: $(printf `cat $IMAGE_PASSWORD_FILE`)" >> /home/$MY_USERNAME/gpg-genkey.conf
1630
+        else
1631
+            echo "Passphrase: $PROJECT_NAME" >> /home/$MY_USERNAME/gpg-genkey.conf
1632
+        fi
1628
         chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/gpg-genkey.conf
1633
         chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/gpg-genkey.conf
1629
         echo $'Generating a new GPG key'
1634
         echo $'Generating a new GPG key'
1630
         su -m root -c "gpg --homedir /home/$MY_USERNAME/.gnupg --batch --full-gen-key /home/$MY_USERNAME/gpg-genkey.conf" - $MY_USERNAME
1635
         su -m root -c "gpg --homedir /home/$MY_USERNAME/.gnupg --batch --full-gen-key /home/$MY_USERNAME/gpg-genkey.conf" - $MY_USERNAME

+ 37
- 13
src/freedombone-utils-backup 查看文件

31
 # whether a given site is being suspended during backup
31
 # whether a given site is being suspended during backup
32
 SUSPENDED_SITE=
32
 SUSPENDED_SITE=
33
 
33
 
34
+# Dummy password used for the backup key
35
+BACKUP_DUMMY_PASSWORD='backup'
36
+
34
 function suspend_site {
37
 function suspend_site {
35
     # suspends a given website
38
     # suspends a given website
36
     SUSPENDED_SITE="$1"
39
     SUSPENDED_SITE="$1"
48
     SUSPENDED_SITE=
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
 function configure_backup_key {
70
 function configure_backup_key {
52
     if [[ $(is_completed $FUNCNAME) == "1" ]]; then
71
     if [[ $(is_completed $FUNCNAME) == "1" ]]; then
53
         return
72
         return
59
         return
78
         return
60
     fi
79
     fi
61
 
80
 
81
+    backup_create_password
82
+
62
     # Generate a GPG key for backups
83
     # Generate a GPG key for backups
63
     BACKUP_KEY_EXISTS=$(gpg_key_exists "$MY_USERNAME" "$MY_NAME (backup key)")
84
     BACKUP_KEY_EXISTS=$(gpg_key_exists "$MY_USERNAME" "$MY_NAME (backup key)")
64
     if [[ $BACKUP_KEY_EXISTS == "no" ]]; then
85
     if [[ $BACKUP_KEY_EXISTS == "no" ]]; then
70
         echo "Name-Email: $MY_EMAIL_ADDRESS" >> /home/$MY_USERNAME/gpg-genkey.conf
91
         echo "Name-Email: $MY_EMAIL_ADDRESS" >> /home/$MY_USERNAME/gpg-genkey.conf
71
         echo "Name-Comment: backup key" >> /home/$MY_USERNAME/gpg-genkey.conf
92
         echo "Name-Comment: backup key" >> /home/$MY_USERNAME/gpg-genkey.conf
72
         echo 'Expire-Date: 0' >> /home/$MY_USERNAME/gpg-genkey.conf
93
         echo 'Expire-Date: 0' >> /home/$MY_USERNAME/gpg-genkey.conf
73
-        echo "Passphrase: ''" >> /home/$MY_USERNAME/gpg-genkey.conf
74
         chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/gpg-genkey.conf
94
         chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/gpg-genkey.conf
75
         echo $'Backup key does not exist. Creating it.'
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
         chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.gnupg
97
         chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.gnupg
78
 
98
 
79
         shred -zu /home/$MY_USERNAME/gpg-genkey.conf
99
         shred -zu /home/$MY_USERNAME/gpg-genkey.conf
80
         echo $'Checking that the Backup key was created'
100
         echo $'Checking that the Backup key was created'
81
         BACKUP_KEY_EXISTS=$(gpg_key_exists "$MY_USERNAME" "$MY_NAME (backup key)")
101
         BACKUP_KEY_EXISTS=$(gpg_key_exists "$MY_USERNAME" "$MY_NAME (backup key)")
82
         if [[ $BACKUP_KEY_EXISTS == "no" ]]; then
102
         if [[ $BACKUP_KEY_EXISTS == "no" ]]; then
103
+            backup_remove_password
83
             echo $'Backup key could not be created'
104
             echo $'Backup key could not be created'
84
             exit 43382
105
             exit 43382
85
         fi
106
         fi
89
     echo "Backup key: $MY_BACKUP_KEY_ID"
110
     echo "Backup key: $MY_BACKUP_KEY_ID"
90
     MY_BACKUP_KEY=/home/$MY_USERNAME/backup_key
111
     MY_BACKUP_KEY=/home/$MY_USERNAME/backup_key
91
     su -m root -c "gpg --homedir /home/$MY_USERNAME/.gnupg --output ${MY_BACKUP_KEY}_public.asc --armor --export $MY_BACKUP_KEY_ID" - $MY_USERNAME
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
     if [ ! -f ${MY_BACKUP_KEY}_public.asc ]; then
114
     if [ ! -f ${MY_BACKUP_KEY}_public.asc ]; then
115
+        backup_remove_password
94
         echo 'Public backup key could not be exported'
116
         echo 'Public backup key could not be exported'
95
         exit 36829
117
         exit 36829
96
     fi
118
     fi
97
     if [ ! -f ${MY_BACKUP_KEY}_private.asc ]; then
119
     if [ ! -f ${MY_BACKUP_KEY}_private.asc ]; then
120
+        backup_remove_password
98
         echo 'Private backup key could not be exported'
121
         echo 'Private backup key could not be exported'
99
         exit 29235
122
         exit 29235
100
     fi
123
     fi
105
 
128
 
106
     shred -zu ${MY_BACKUP_KEY}_public.asc
129
     shred -zu ${MY_BACKUP_KEY}_public.asc
107
     shred -zu ${MY_BACKUP_KEY}_private.asc
130
     shred -zu ${MY_BACKUP_KEY}_private.asc
131
+    backup_remove_password
108
 
132
 
109
     mark_completed $FUNCNAME
133
     mark_completed $FUNCNAME
110
 }
134
 }
258
             mkdir -p $USB_MOUNT/backup/${2}
282
             mkdir -p $USB_MOUNT/backup/${2}
259
         fi
283
         fi
260
         set_obnam_client_name
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
         if [[ $ENABLE_BACKUP_VERIFICATION == "yes" ]]; then
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
             if [ ! "$?" = "0" ]; then
289
             if [ ! "$?" = "0" ]; then
266
                 umount $USB_MOUNT
290
                 umount $USB_MOUNT
267
                 rm -rf $USB_MOUNT
291
                 rm -rf $USB_MOUNT
274
                 exit 683252
298
                 exit 683252
275
             fi
299
             fi
276
         fi
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
         if [ ! "$?" = "0" ]; then
302
         if [ ! "$?" = "0" ]; then
279
             umount $USB_MOUNT
303
             umount $USB_MOUNT
280
             rm -rf $USB_MOUNT
304
             rm -rf $USB_MOUNT
308
         mkdir ${1}
332
         mkdir ${1}
309
     fi
333
     fi
310
     set_obnam_client_name
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
 function restore_directory_from_friend {
338
 function restore_directory_from_friend {
326
         mkdir ${1}
350
         mkdir ${1}
327
     fi
351
     fi
328
     set_obnam_client_name
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
 function backup_database_to_usb {
356
 function backup_database_to_usb {
365
         mkdir -p $SERVER_DIRECTORY/backup/${2}
389
         mkdir -p $SERVER_DIRECTORY/backup/${2}
366
     fi
390
     fi
367
     set_obnam_client_name
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
     if [[ $ENABLE_VERIFICATION == "yes" ]]; then
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
         if [ ! "$?" = "0" ]; then
396
         if [ ! "$?" = "0" ]; then
373
             if [[ ${1} == "/root/temp"* || ${1} == *"tempbackup" ]]; then
397
             if [[ ${1} == "/root/temp"* || ${1} == *"tempbackup" ]]; then
374
                 shred -zu /root/temp${2}/*
398
                 shred -zu /root/temp${2}/*
381
             exit 953
405
             exit 953
382
         fi
406
         fi
383
     fi
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
     if [ ! "$?" = "0" ]; then
409
     if [ ! "$?" = "0" ]; then
386
         if [[ ${1} == "/root/temp"* || ${1} == *"tempbackup" ]]; then
410
         if [[ ${1} == "/root/temp"* || ${1} == *"tempbackup" ]]; then
387
             shred -zu /root/temp${2}/*
411
             shred -zu /root/temp${2}/*