Przeglądaj źródła

Backup to friends servers

Bob Mottram 10 lat temu
rodzic
commit
f942eda9e0
1 zmienionych plików z 83 dodań i 0 usunięć
  1. 83
    0
      install-freedombone.sh

+ 83
- 0
install-freedombone.sh Wyświetl plik

@@ -199,6 +199,9 @@ MAX_PHP_MEMORY=32
199 199
 # default MariaDB password
200 200
 MARIADB_PASSWORD=
201 201
 
202
+# file containing a list of remote locations to backup to
203
+FRIENDS_SERVERS_LIST=/home/$MY_USERNAME/backup.list
204
+
202 205
 #list of encryption protocols
203 206
 SSL_PROTOCOLS="TLSv1 TLSv1.1 TLSv1.2"
204 207
 
@@ -1442,6 +1445,41 @@ function encrypt_incoming_email {
1442 1445
   echo 'encrypt_incoming_email' >> $COMPLETION_FILE
1443 1446
 }
1444 1447
 
1448
+function encrypt_outgoing_email {
1449
+  # encrypts outgoing mail using your GPG public key
1450
+  # so even if an attacker gains access to the data at rest they still need
1451
+  # to know your GPG key password to be able to read sent mail
1452
+  if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" ]]; then
1453
+      return
1454
+  fi
1455
+  if grep -Fxq "encrypt_outgoing_email" $COMPLETION_FILE; then
1456
+      return
1457
+  fi
1458
+  if [[ $GPG_ENCRYPT_STORED_EMAIL != "yes" ]]; then
1459
+      return
1460
+  fi
1461
+
1462
+  echo 'sent_items_router:' > /etc/exim4/conf.d/router/170_exim4-config_encryptsent
1463
+  echo '   driver    = accept' >> /etc/exim4/conf.d/router/170_exim4-config_encryptsent
1464
+  echo '   transport = sent_items_transport' >> /etc/exim4/conf.d/router/170_exim4-config_encryptsent
1465
+  echo '   condition = ${if !eq{$authenticated_id}{}}' >> /etc/exim4/conf.d/router/170_exim4-config_encryptsent
1466
+  echo '   unseen' >> /etc/exim4/conf.d/router/170_exim4-config_encryptsent
1467
+  echo '   no_verify' >> /etc/exim4/conf.d/router/170_exim4-config_encryptsent
1468
+
1469
+  # TODO
1470
+  echo 'sent_items_transport:'
1471
+  echo '   driver           = pipe'
1472
+  echo '   user             = $authenticated_id'
1473
+  echo '   group            = Debian-exim'
1474
+  echo '   temp_errors      = *'
1475
+  echo '   transport_filter = /usr/bin/gpgit.pl $sender_address'
1476
+  echo '   command          = /usr/bin/pipe2imap.pl --ssl --user master --authas $authenticated_id --passfile /etc/exim4/master_imap_password.txt --folder "Sent Items" --flags "\\seen"'
1477
+  echo '   log_defer_output = true'
1478
+
1479
+  service exim4 restart
1480
+
1481
+  echo 'encrypt_outgoing_email' >> $COMPLETION_FILE
1482
+}
1445 1483
 
1446 1484
 function email_client {
1447 1485
   if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_NONMAILBOX" ]]; then
@@ -3576,6 +3614,49 @@ IPT_NAME
3576 3614
   echo 'create_restore_script' >> $COMPLETION_FILE
3577 3615
 }
3578 3616
 
3617
+function backup_to_friends_servers {
3618
+  if grep -Fxq "backup_to_friends_servers" $COMPLETION_FILE; then
3619
+      return
3620
+  fi
3621
+  if [ ! $FRIENDS_SERVERS_LIST ]; then
3622
+      return
3623
+  fi
3624
+
3625
+  apt-get -y --force-yes install duplicity
3626
+
3627
+  # script to do backups
3628
+  echo '#!/bin/bash' > /usr/bin/backup2friends
3629
+  echo 'GPG_KEY=$1' >> /usr/bin/backup2friends
3630
+  echo '' >> /usr/bin/backup2friends
3631
+  echo 'if [ ! $GPG_KEY ]; then' >> /usr/bin/backup2friends
3632
+  echo '    echo "No GPG key specified"' >> /usr/bin/backup2friends
3633
+  echo '    exit 1' >> /usr/bin/backup2friends
3634
+  echo 'fi' >> /usr/bin/backup2friends
3635
+  echo '' >> /usr/bin/backup2friends
3636
+  echo "if [ ! -f $FRIENDS_SERVERS_LIST ]; then" >> /usr/bin/backup2friends
3637
+  echo '    exit 2' >> /usr/bin/backup2friends
3638
+  echo 'fi' >> /usr/bin/backup2friends
3639
+  echo '' >> /usr/bin/backup2friends
3640
+  echo 'while read remote_server' >> /usr/bin/backup2friends
3641
+  echo 'do' >> /usr/bin/backup2friends
3642
+  echo '    SERVER="${* %%remote_server}"' >> /usr/bin/backup2friends
3643
+  echo '    FTP_PASSWORD="${remote_server%% *}"' >> /usr/bin/backup2friends
3644
+  echo "    duplicity incr --ssh-askpass --encrypt-key $GPG_KEY --full-if-older-than 4W --exclude-other-filesystems /home/$MY_USERNAME $SERVER" >> /usr/bin/backup2friends
3645
+  echo '    duplicity --ssh-askpass --force cleanup $SERVER' >> /usr/bin/backup2friends
3646
+  echo '    duplicity --ssh-askpass --force remove-all-but-n-full 2 $SERVER' >> /usr/bin/backup2friends
3647
+  echo "done < $FRIENDS_SERVERS_LIST" >> /usr/bin/backup2friends
3648
+  echo 'exit 0' >> /usr/bin/backup2friends
3649
+  chmod +x /usr/bin/backup2friends
3650
+
3651
+  # update crontab
3652
+  echo '#!/bin/bash' > /etc/cron.daily/backuptofriends
3653
+  echo 'GPG_KEY=' >> /etc/cron.daily/backuptofriends
3654
+  echo '/usr/bin/backup2friends $GPG_KEY' >> /etc/cron.daily/backuptofriends
3655
+  chmod +x /etc/cron.daily/backuptofriends
3656
+
3657
+  echo 'backup_to_friends_servers' >> $COMPLETION_FILE
3658
+}
3659
+
3579 3660
 function install_final {
3580 3661
   if grep -Fxq "install_final" $COMPLETION_FILE; then
3581 3662
       return
@@ -3622,6 +3703,7 @@ time_synchronisation
3622 3703
 configure_internet_protocol
3623 3704
 configure_ssh
3624 3705
 check_hwrng
3706
+backup_to_friends_servers
3625 3707
 search_for_attached_usb_drive
3626 3708
 regenerate_ssh_keys
3627 3709
 script_to_make_self_signed_certificates
@@ -3631,6 +3713,7 @@ create_procmail
3631 3713
 configure_imap
3632 3714
 configure_gpg
3633 3715
 encrypt_incoming_email
3716
+#encrypt_outgoing_email
3634 3717
 email_client
3635 3718
 configure_firewall_for_email
3636 3719
 folders_for_mailing_lists