Преглед на файлове

Beginning of social key management

Bob Mottram преди 10 години
родител
ревизия
a87f61c756
променени са 2 файла, в които са добавени 56 реда и са изтрити 22 реда
  1. 30
    20
      src/freedombone
  2. 26
    2
      src/freedombone-splitkey

+ 30
- 20
src/freedombone Целия файл

381
 ENABLE_BATMAN="no"
381
 ENABLE_BATMAN="no"
382
 BATMAN_IPV6=
382
 BATMAN_IPV6=
383
 
383
 
384
+# social key management
385
+ENABLE_SOCIAL_KEY_MANAGEMENT="no"
386
+
384
 function show_help {
387
 function show_help {
385
   echo ''
388
   echo ''
386
   echo 'freedombone -c [configuration file]'
389
   echo 'freedombone -c [configuration file]'
716
   fi
719
   fi
717
 
720
 
718
   if [ -f $CONFIGURATION_FILE ]; then
721
   if [ -f $CONFIGURATION_FILE ]; then
722
+      if grep -q "ENABLE_SOCIAL_KEY_MANAGEMENT" $CONFIGURATION_FILE; then
723
+          ENABLE_SOCIAL_KEY_MANAGEMENT=$(grep "ENABLE_SOCIAL_KEY_MANAGEMENT" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
724
+      fi
719
       if grep -q "IPV6_NETWORK" $CONFIGURATION_FILE; then
725
       if grep -q "IPV6_NETWORK" $CONFIGURATION_FILE; then
720
           IPV6_NETWORK=$(grep "IPV6_NETWORK" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
726
           IPV6_NETWORK=$(grep "IPV6_NETWORK" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
721
       fi
727
       fi
1696
   if grep -Fxq "create_backup_script" $COMPLETION_FILE; then
1702
   if grep -Fxq "create_backup_script" $COMPLETION_FILE; then
1697
       return
1703
       return
1698
   fi
1704
   fi
1699
-  apt-get -y install rsyncrypto cryptsetup
1705
+  apt-get -y install rsyncrypto cryptsetup ssss
1700
 
1706
 
1701
   get_mariadb_password
1707
   get_mariadb_password
1702
   get_mariadb_gnusocial_admin_password
1708
   get_mariadb_gnusocial_admin_password
3801
   echo -n '    echo "$NOW Starting backup to $REMOTE_SERVER" >> ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3807
   echo -n '    echo "$NOW Starting backup to $REMOTE_SERVER" >> ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3802
   echo "$REMOTE_BACKUPS_LOG" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3808
   echo "$REMOTE_BACKUPS_LOG" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3803
 
3809
 
3804
-  echo "    if [ -d /home/$MY_USERNAME/.gnupg_fragments ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3805
-  echo "        cd /home/$MY_USERNAME/.gnupg_fragments" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3806
-  echo '        no_of_fragments=$(ls -afq | wc -l)' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3807
-  echo '        no_of_fragments=$((no_of_fragments - 2))' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3808
-  echo '        if [[ ${no_of_fragments} > 0 ]]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3809
-  echo '            key_files=(/home/$MY_USERNAME/.gnupg_fragments/data*)' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3810
-  echo '            key_filename=${key_files[ctr]}' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3811
-  echo "            mkdir -p /home/$MY_USERNAME/tempkey/.gnupg_fragments" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3812
-  echo "            cp $key_filename /home/$MY_USERNAME/tempkey/.gnupg_fragments" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3813
-  echo -n '            /usr/bin/sshpass -p $REMOTE_PASSWORD ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3814
-  echo "scp -r -P $REMOTE_SSH_PORT /home/$MY_USERNAME/tempkey/.gnupg_fragments $REMOTE_SERVER" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3815
-  echo "            shred -zu /home/$MY_USERNAME/tempkey/.gnupg_fragments/*" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3816
-  echo "            rm -rf /home/$MY_USERNAME/tempkey" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3817
-  echo '            ctr=$((ctr + 1))' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3818
-  echo '            if [[ ${ctr} >= ${no_of_fragments} ]]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3819
-  echo '                ctr=0' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3820
-  echo '            fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3821
-  echo '        fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3822
-  echo '    fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3810
+  if [[ $ENABLE_SOCIAL_KEY_MANAGEMENT == "yes" ]]; then
3811
+      echo "    if [ -d /home/$MY_USERNAME/.gnupg_fragments ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3812
+      echo "        cd /home/$MY_USERNAME/.gnupg_fragments" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3813
+      echo '        no_of_fragments=$(ls -afq data* | wc -l)' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3814
+      echo '        no_of_fragments=$((no_of_fragments - 2))' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3815
+      echo '        if [[ ${no_of_fragments} > 0 ]]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3816
+      echo '            key_files=(/home/$MY_USERNAME/.gnupg_fragments/data*)' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3817
+      echo '            key_filename=${key_files[ctr]}' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3818
+      echo "            mkdir -p /home/$MY_USERNAME/tempkey/.gnupg_fragments" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3819
+      echo '            ctrb=$((ctr + 1))' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3820
+      echo "            sed \"$ctrbq;d\" /home/$MY_USERNAME/.gnupg_fragments/shares.txt > /home/$MY_USERNAME/tempkey/.gnupg_fragments/share.txt" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3821
+      echo "            cp $key_filename /home/$MY_USERNAME/tempkey/.gnupg_fragments" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3822
+      echo -n '            /usr/bin/sshpass -p $REMOTE_PASSWORD ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3823
+      echo "scp -r -P $REMOTE_SSH_PORT /home/$MY_USERNAME/tempkey/.gnupg_fragments $REMOTE_SERVER" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3824
+      echo "            shred -zu /home/$MY_USERNAME/tempkey/.gnupg_fragments/*" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3825
+      echo "            rm -rf /home/$MY_USERNAME/tempkey" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3826
+      echo '            ctr=$((ctr + 1))' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3827
+      echo '            if [[ ${ctr} >= ${no_of_fragments} ]]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3828
+      echo '                ctr=0' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3829
+      echo '            fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3830
+      echo '        fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3831
+      echo '    fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3832
+  fi
3823
 
3833
 
3824
   echo -n '    rsync -ratlzv --rsh="/usr/bin/sshpass -p $REMOTE_PASSWORD ssh -p $REMOTE_SSH_PORT -o StrictHostKeyChecking=no" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3834
   echo -n '    rsync -ratlzv --rsh="/usr/bin/sshpass -p $REMOTE_PASSWORD ssh -p $REMOTE_SSH_PORT -o StrictHostKeyChecking=no" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3825
   echo '$SERVER_DIRECTORY/backup $REMOTE_SERVER' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3835
   echo '$SERVER_DIRECTORY/backup $REMOTE_SERVER' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME

+ 26
- 2
src/freedombone-splitkey Целия файл

37
 KEY_FRAGMENTS=3
37
 KEY_FRAGMENTS=3
38
 MY_USERNAME=
38
 MY_USERNAME=
39
 MY_EMAIL_ADDRESS=
39
 MY_EMAIL_ADDRESS=
40
+PASSPHRASE=
40
 
41
 
41
 function show_help {
42
 function show_help {
42
     echo ''
43
     echo ''
43
-    echo 'freedombone-splitkey -u [username] -n [number of fragments] -e [email address]'
44
+    echo 'freedombone-splitkey -u [username] -n [number of fragments] -e [email address] -p [passphrase]'
44
     echo ''
45
     echo ''
45
     exit 0
46
     exit 0
46
 }
47
 }
65
     shift
66
     shift
66
     MY_EMAIL_ADDRESS=$1
67
     MY_EMAIL_ADDRESS=$1
67
     ;;
68
     ;;
69
+    -p|--passphrase)
70
+    shift
71
+    PASSPHRASE=$1
72
+    ;;
68
     *)
73
     *)
69
     # unknown option
74
     # unknown option
70
     ;;
75
     ;;
113
 shred -zu /home/$MY_USERNAME/privkey.txt
118
 shred -zu /home/$MY_USERNAME/privkey.txt
114
 shred -zu /home/$MY_USERNAME/pubkey.txt
119
 shred -zu /home/$MY_USERNAME/pubkey.txt
115
 
120
 
121
+# generate a random passphrase if one isn't supplied
122
+if [ ! $PASSPHRASE ]; then
123
+    PASSPHRASE=$(openssl rand -base64 64)
124
+fi
125
+
116
 # encrypt the keys file with a passphrase
126
 # encrypt the keys file with a passphrase
117
-gpg --output $KEYS_FILE.gpg --symmetric $KEYS_FILE
127
+echo "$PASSPHRASE" | gpg --passphrase-fd 0 --output $KEYS_FILE.gpg --symmetric $KEYS_FILE
118
 if [ ! "$?" = "0" ]; then
128
 if [ ! "$?" = "0" ]; then
119
     echo "Unable to encrypt the data prior to splitting"
129
     echo "Unable to encrypt the data prior to splitting"
120
     exit 7352
130
     exit 7352
121
 fi
131
 fi
122
 shred -zu $KEYS_FILE
132
 shred -zu $KEYS_FILE
123
 
133
 
134
+# split the passphrase into shares
135
+echo "$PASSPHRASE" | ssss-split -q -t $KEY_FRAGMENTS -n $KEY_FRAGMENTS > \
136
+                                /home/$MY_USERNAME/.gnupg_fragments/shares.txt
137
+
138
+# (maybe) overwrite passphrase after use
139
+PASSPHRASE=$(openssl rand -base64 64)
140
+
141
+# check that passphrase shares were created
142
+if [ ! -f /home/$MY_USERNAME/.gnupg_fragments/shares.txt ]; then
143
+    echo 'Passphrase for key fragments could not be split'
144
+    shred -zu $KEYS_FILE.gpg
145
+    exit 74549
146
+fi
147
+
124
 # generate fragments
148
 # generate fragments
125
 GPG_KEYS_SIZE_BYTES=$(wc -c <"$KEYS_FILE.gpg")
149
 GPG_KEYS_SIZE_BYTES=$(wc -c <"$KEYS_FILE.gpg")
126
 GPG_BYTES_PER_FRAGMENT=$((GPG_KEYS_SIZE_BYTES / KEY_FRAGMENTS))
150
 GPG_BYTES_PER_FRAGMENT=$((GPG_KEYS_SIZE_BYTES / KEY_FRAGMENTS))