瀏覽代碼

Script to encrypt an entire Maildir

Bob Mottram 10 年之前
父節點
當前提交
d60b8b4673
共有 1 個文件被更改,包括 117 次插入3 次删除
  1. 117
    3
      install-freedombone.sh

+ 117
- 3
install-freedombone.sh 查看文件

@@ -209,6 +209,9 @@ USB_MOUNT=/mnt/usb
209 209
 # Name of a script used to create a backup of the system on usb drive
210 210
 BACKUP_SCRIPT_NAME="backup"
211 211
 
212
+# Name of a script used to restore the system from usb drive
213
+RESTORE_SCRIPT_NAME="restore"
214
+
212 215
 # name of a script used to backup to friends servers
213 216
 BACKUP_TO_FRIENDS_SCRIPT_NAME="backup2friends"
214 217
 
@@ -219,9 +222,6 @@ RESTORE_FROM_FRIEND_SCRIPT_NAME="restorefromfriend"
219 222
 # this will be automatically generated
220 223
 BACKUP_TO_FRIENDS_PASSPHRASE=
221 224
 
222
-# Name of a script used to restore the system from usb drive
223
-RESTORE_SCRIPT_NAME="restore"
224
-
225 225
 # memory limit for php in MB
226 226
 MAX_PHP_MEMORY=32
227 227
 
@@ -232,6 +232,8 @@ MARIADB_PASSWORD=
232 232
 XMPP_DIRECTORY="/var/lib/prosody"
233 233
 
234 234
 # file containing a list of remote locations to backup to
235
+# Format: [username@friendsdomain//home/username] [ssh_password]
236
+# With the only space character being between the server and the password
235 237
 FRIENDS_SERVERS_LIST="/home/$MY_USERNAME/backup.list"
236 238
 
237 239
 #list of encryption protocols
@@ -2080,6 +2082,117 @@ function encrypt_outgoing_email {
2080 2082
   echo 'encrypt_outgoing_email' >> $COMPLETION_FILE
2081 2083
 }
2082 2084
 
2085
+function encrypt_all_email {
2086
+  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
2087
+      return
2088
+  fi
2089
+  if grep -Fxq "encrypt_all_email" $COMPLETION_FILE; then
2090
+      return
2091
+  fi
2092
+  if [[ $GPG_ENCRYPT_STORED_EMAIL != "yes" ]]; then
2093
+      return
2094
+  fi
2095
+  echo '#!/bin/bash' > /usr/bin/encmaildir
2096
+  echo '#' >> /usr/bin/encmaildir
2097
+  echo '# GPLv2' >> /usr/bin/encmaildir
2098
+  echo '# GPG Encrypt a Maildir using gpgit.pl, removing any S= or W= virtual flags.' >> /usr/bin/encmaildir
2099
+  echo '# Oct 03, 2014' >> /usr/bin/encmaildir
2100
+  echo '#' >> /usr/bin/encmaildir
2101
+  echo '# Change log:' >> /usr/bin/encmaildir
2102
+  echo '#     Sep 03, 2011' >> /usr/bin/encmaildir
2103
+  echo '#               - Temporary file is based on file_owner to avoid issues with permission differences.' >> /usr/bin/encmaildir
2104
+  echo '#               - Temporary file is removed after run.' >> /usr/bin/encmaildir
2105
+  echo '#               - Optional arguments passed to "find".' >> /usr/bin/encmaildir
2106
+  echo '#               - Full paths to binaries.' >> /usr/bin/encmaildir
2107
+  echo '#               - Removed unneccessary need of "cat", "grep", etc.' >> /usr/bin/encmaildir
2108
+  echo '#     Sep 04, 2011' >> /usr/bin/encmaildir
2109
+  echo '#               - Dont remove Dovecot index/uid unless messages have been GPG encrypted.' >> /usr/bin/encmaildir
2110
+  echo '#               - Adjust file tests to not just use -e' >> /usr/bin/encmaildir
2111
+  echo '#               - Quote all file operations' >> /usr/bin/encmaildir
2112
+  echo '#     Sep 05, 2011' >> /usr/bin/encmaildir
2113
+  echo '#               - Dont arbitrarily copy files, only overwrite the file in ~/Maildir if it differs after calling gpgencmail.pl' >> /usr/bin/encmaildir
2114
+  echo '#               - Only rebuild the index if we have modified ~/Maildir' >> /usr/bin/encmaildir
2115
+  echo '#     Oct 03, 2014' >> /usr/bin/encmaildir
2116
+  echo '#               - Minor modifications for use with Freedombone' >> /usr/bin/encmaildir
2117
+  echo '' >> /usr/bin/encmaildir
2118
+  echo 'if [[ -z "$1" || -z "$2" || -z "$3" ]]; then' >> /usr/bin/encmaildir
2119
+  echo '  echo "Usage is ./encmaildir.sh    {optional arguments passed to find for messages such as -mtime 0}"' >> /usr/bin/encmaildir
2120
+  echo '  exit 0' >> /usr/bin/encmaildir
2121
+  echo 'fi' >> /usr/bin/encmaildir
2122
+  echo '' >> /usr/bin/encmaildir
2123
+  echo 'MAIL_DIR=$1' >> /usr/bin/encmaildir
2124
+  echo 'EMAIL_ADDRESS=$2' >> /usr/bin/encmaildir
2125
+  echo 'USERNAME=$3' >> /usr/bin/encmaildir
2126
+  echo 'if [ ! -d "$MAIL_DIR" ]; then' >> /usr/bin/encmaildir
2127
+  echo "  MAIL_DIR='/home/$MY_USERNAME/Maildir'" >> /usr/bin/encmaildir
2128
+  echo 'fi' >> /usr/bin/encmaildir
2129
+  echo '' >> /usr/bin/encmaildir
2130
+  echo 'if [ ! $EMAIL_ADDRESS ]; then' >> /usr/bin/encmaildir
2131
+  echo "  EMAIL_ADDRESS='$MY_USERNAME@$DOMAIN_NAME'" >> /usr/bin/encmaildir
2132
+  echo 'fi' >> /usr/bin/encmaildir
2133
+  echo '' >> /usr/bin/encmaildir
2134
+  echo 'if [ ! $USERNAME ]; then' >> /usr/bin/encmaildir
2135
+  echo "  USERNAME='$MY_USERNAME'" >> /usr/bin/encmaildir
2136
+  echo 'fi' >> /usr/bin/encmaildir
2137
+  echo '' >> /usr/bin/encmaildir
2138
+  echo '# Does this key exist?' >> /usr/bin/encmaildir
2139
+  echo 'gpg --list-keys "$EMAIL_ADDRESS" > /dev/null 2>&1' >> /usr/bin/encmaildir
2140
+  echo 'if [ $? -gt 0 ]; then' >> /usr/bin/encmaildir
2141
+  echo '  echo "A GPG key for $EMAIL_ADDRESS could not be found!"' >> /usr/bin/encmaildir
2142
+  echo '  exit 0' >> /usr/bin/encmaildir
2143
+  echo 'fi' >> /usr/bin/encmaildir
2144
+  echo '' >> /usr/bin/encmaildir
2145
+  echo '# Find all files in the Maildir specified.' >> /usr/bin/encmaildir
2146
+  echo 'echo "Calling find"' >> /usr/bin/encmaildir
2147
+  echo -n 'find "$MAIL_DIR" -type f -regex ' >> /usr/bin/encmaildir
2148
+  echo -n "'.*/\(cur\|new\)/.*' " >> /usr/bin/encmaildir
2149
+  echo '$4|while read line; do' >> /usr/bin/encmaildir
2150
+  echo '     gpgit.pl --encrypt-mode prefer-inline "$EMAIL_ADDRESS"  "/tmp/msg_$USERNAME"' >> /usr/bin/encmaildir
2151
+  echo '' >> /usr/bin/encmaildir
2152
+  echo '     # Check to see if there are differences between the existing' >> /usr/bin/encmaildir
2153
+  echo '     # Maildir file and what was created by gpgit.pl' >> /usr/bin/encmaildir
2154
+  echo '     diff -qa "$line" "/tmp/msg_$USERNAME" > /dev/null 2>&1;' >> /usr/bin/encmaildir
2155
+  echo '     if [ $? -gt 0 ]; then' >> /usr/bin/encmaildir
2156
+  echo '       # Preserve timestamps, set ownership.' >> /usr/bin/encmaildir
2157
+  echo '       chown $USERNAME:$USERNAME "/tmp/msg_$USERNAME"' >> /usr/bin/encmaildir
2158
+  echo '       chmod 600   "/tmp/msg_$USERNAME"' >> /usr/bin/encmaildir
2159
+  echo '       touch   "/tmp/msg_$USERNAME" --reference="$line"' >> /usr/bin/encmaildir
2160
+  echo '' >> /usr/bin/encmaildir
2161
+  echo '       # Unlink the original Maildir message' >> /usr/bin/encmaildir
2162
+  echo '       unlink "$line"' >> /usr/bin/encmaildir
2163
+  echo '' >> /usr/bin/encmaildir
2164
+  echo '       # Strip message sizes, retain experimental flags' >> /usr/bin/encmaildir
2165
+  echo '       # and status flags, and copy the file over.' >> /usr/bin/encmaildir
2166
+  echo '       STRIPSIZES=$(/bin/echo "$line"|/bin/sed -e "s/W=[[:digit:]]*//" -e "s/S=[[:digit:]]*//" -e "s/,,//" -e "s/,:2/:2/")' >> /usr/bin/encmaildir
2167
+  echo '       cp -av "/tmp/msg_$USERNAME" "$STRIPSIZES"' >> /usr/bin/encmaildir
2168
+  echo '' >> /usr/bin/encmaildir
2169
+  echo '       #Indexes must be rebuilt, weve modified Maildir.' >> /usr/bin/encmaildir
2170
+  echo '       touch "/tmp/rebuild_index_$USERNAME"' >> /usr/bin/encmaildir
2171
+  echo '     else' >> /usr/bin/encmaildir
2172
+  echo '       echo "Not copying, no differences between /tmp/msg_$USERNAME and $line"' >> /usr/bin/encmaildir
2173
+  echo '     fi' >> /usr/bin/encmaildir
2174
+  echo '' >> /usr/bin/encmaildir
2175
+  echo '     # Remove the temporary file' >> /usr/bin/encmaildir
2176
+  echo '     unlink "/tmp/msg_$USERNAME"' >> /usr/bin/encmaildir
2177
+  echo 'done' >> /usr/bin/encmaildir
2178
+  echo '' >> /usr/bin/encmaildir
2179
+  echo '#Remove Dovecot index and uids for regeneration.' >> /usr/bin/encmaildir
2180
+  echo 'if [ -f "/tmp/rebuild_index_$USERNAME" ]; then' >> /usr/bin/encmaildir
2181
+  echo '  echo "Removing Dovecot indexes and uids"' >> /usr/bin/encmaildir
2182
+  echo -n '  find "$MAIL_DIR" -type f -regex ' >> /usr/bin/encmaildir
2183
+  echo "'.*\(dovecot-\|dovecot\.\|\.uidvalidity\).*' -delete" >> /usr/bin/encmaildir
2184
+  echo '' >> /usr/bin/encmaildir
2185
+  echo '  # Remove the temporary file' >> /usr/bin/encmaildir
2186
+  echo '  unlink "/tmp/rebuild_index_$USERNAME"' >> /usr/bin/encmaildir
2187
+  echo 'else' >> /usr/bin/encmaildir
2188
+  echo '  echo "No messages found needing GPG encryption, not' >> /usr/bin/encmaildir
2189
+  echo '  echo "removing Dovecot indexes and UIDs."' >> /usr/bin/encmaildir
2190
+  echo 'fi' >> /usr/bin/encmaildir
2191
+  echo 'exit 0' >> /usr/bin/encmaildir
2192
+  chmod +x /usr/bin/encmaildir
2193
+  echo 'encrypt_all_email' >> $COMPLETION_FILE
2194
+}
2195
+
2083 2196
 function email_client {
2084 2197
   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
2085 2198
       return
@@ -4265,6 +4378,7 @@ folders_for_email_addresses
4265 4378
 dynamic_dns_freedns
4266 4379
 create_public_mailing_list
4267 4380
 #create_private_mailing_list
4381
+encrypt_all_email
4268 4382
 import_email
4269 4383
 script_for_attaching_usb_drive
4270 4384
 install_web_server