|
@@ -46,6 +46,62 @@ keyserver_variables=(ONION_ONLY
|
46
|
46
|
KEYSERVER_DOMAIN_NAME
|
47
|
47
|
KEYSERVER_CODE)
|
48
|
48
|
|
|
49
|
+function check_keyserver_directory_size {
|
|
50
|
+ dirsize=$(du /var/lib/sks/DB | awk -F ' ' '{print $1}')
|
|
51
|
+ # 500M
|
|
52
|
+ if [ $dirsize -gt 500000 ]; then
|
|
53
|
+ echo "1"
|
|
54
|
+ return
|
|
55
|
+ fi
|
|
56
|
+ echo "0"
|
|
57
|
+}
|
|
58
|
+
|
|
59
|
+function keyserver_watchdog {
|
|
60
|
+ ADMIN_USERNAME=$(cat $COMPLETION_FILE | grep "Admin user" | awk -F ':' '{print $2}')
|
|
61
|
+ ADMIN_EMAIL_ADDRESS=${ADMIN_USERNAME}@${HOSTNAME}
|
|
62
|
+ keyserver_size_warning=$"The SKS keyserver database is getting large. Check that you aren't being spammed"
|
|
63
|
+ keyserver_disabled_warning=$"The SKS keyserver has been disabled because it is getting too large. This is to prevent flooding attacks from crashing the server. You may need to restore the keyserver from backup."
|
|
64
|
+ keyserver_mail_subject_line=$"${PROJECT_NAME} keyserver warning"
|
|
65
|
+ keyserver_mail_subject_line_disabled=$"${PROJECT_NAME} keyserver disabled"
|
|
66
|
+ read_config_param KEYSERVER_DOMAIN_NAME
|
|
67
|
+ keyserver_watchdog_script=/etc/cron.hourly/keyserver-watchdog
|
|
68
|
+ echo '#!/bin/bash' > $keyserver_watchdog_script
|
|
69
|
+ echo "dirsize=\$(du /var/lib/sks/DB | awk -F ' ' '{print \$1}')" >> $keyserver_watchdog_script
|
|
70
|
+ echo 'if [ $dirsize -gt 450000 ]; then' >> $keyserver_watchdog_script
|
|
71
|
+
|
|
72
|
+ echo " echo \"$keyserver_size_warning\" | mail -s \"$keyserver_mail_subject_line\" $ADMIN_EMAIL_ADDRESS" >> $keyserver_watchdog_script
|
|
73
|
+
|
|
74
|
+ echo ' if [ $dirsize -gt 500000 ]; then' >> $keyserver_watchdog_script
|
|
75
|
+ echo " nginx_dissite $KEYSERVER_DOMAIN_NAME" >> $keyserver_watchdog_script
|
|
76
|
+ echo ' systemctl stop sks' >> $keyserver_watchdog_script
|
|
77
|
+ echo ' systemctl disable sks' >> $keyserver_watchdog_script
|
|
78
|
+ echo " echo \"$keyserver_disabled_warning\" | mail -s \"$keyserver_mail_subject_line_disabled\" $ADMIN_EMAIL_ADDRESS" >> $keyserver_watchdog_script
|
|
79
|
+ echo ' fi' >> $keyserver_watchdog_script
|
|
80
|
+ echo 'fi' >> $keyserver_watchdog_script
|
|
81
|
+
|
|
82
|
+ chmod +x $keyserver_watchdog_script
|
|
83
|
+}
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+function configure_firewall_for_keyserver {
|
|
87
|
+ if [[ $ONION_ONLY != "no" ]]; then
|
|
88
|
+ return
|
|
89
|
+ fi
|
|
90
|
+ firewall_add keyserver 11370 tcp
|
|
91
|
+ firewall_add keyserver 11371 tcp
|
|
92
|
+ firewall_add keyserver 11372 tcp
|
|
93
|
+ mark_completed $FUNCNAME
|
|
94
|
+}
|
|
95
|
+
|
|
96
|
+function keyserver_reset_database {
|
|
97
|
+ if [ -d /var/lib/sks/DB ]; then
|
|
98
|
+ rm -rf /var/lib/sks/DB
|
|
99
|
+ fi
|
|
100
|
+ sks build
|
|
101
|
+ chown -Rc debian-sks: /var/lib/sks
|
|
102
|
+ systemctl restart sks
|
|
103
|
+}
|
|
104
|
+
|
49
|
105
|
function logging_on_keyserver {
|
50
|
106
|
echo -n ''
|
51
|
107
|
}
|
|
@@ -59,6 +115,8 @@ function reconfigure_keyserver {
|
59
|
115
|
}
|
60
|
116
|
|
61
|
117
|
function upgrade_keyserver {
|
|
118
|
+ keyserver_watchdog
|
|
119
|
+
|
62
|
120
|
CURR_KEYSERVER_WEB_COMMIT=$(get_completion_param "keyserver web commit")
|
63
|
121
|
if [[ "$CURR_KEYSERVER_WEB_COMMIT" == "$KEYSERVER_WEB_COMMIT" ]]; then
|
64
|
122
|
return
|
|
@@ -96,24 +154,149 @@ function upgrade_keyserver {
|
96
|
154
|
}
|
97
|
155
|
|
98
|
156
|
function backup_local_keyserver {
|
99
|
|
- echo -n ''
|
|
157
|
+ # remove any unused log files
|
|
158
|
+ cd /var/lib/sks/DB
|
|
159
|
+ db_archive -d
|
|
160
|
+
|
|
161
|
+ source_directory=/etc/sks
|
|
162
|
+ if [ -d $source_directory ]; then
|
|
163
|
+ systemctl stop sks
|
|
164
|
+ dest_directory=keyserverconfig
|
|
165
|
+ function_check backup_directory_to_usb
|
|
166
|
+ backup_directory_to_usb $source_directory $dest_directory
|
|
167
|
+ systemctl start sks
|
|
168
|
+ fi
|
|
169
|
+ if [[ "$(check_keyserver_directory_size)" != "0" ]]; then
|
|
170
|
+ echo $'WARNING: Keyserver database size is too large to backup'
|
|
171
|
+ return
|
|
172
|
+ fi
|
|
173
|
+ source_directory=/var/lib/sks/DB
|
|
174
|
+ if [ -d $source_directory ]; then
|
|
175
|
+ systemctl stop sks
|
|
176
|
+ dest_directory=keyserver
|
|
177
|
+ function_check backup_directory_to_usb
|
|
178
|
+ backup_directory_to_usb $source_directory $dest_directory
|
|
179
|
+ systemctl start sks
|
|
180
|
+ fi
|
100
|
181
|
}
|
101
|
182
|
|
102
|
183
|
function restore_local_keyserver {
|
103
|
|
- echo -n ''
|
|
184
|
+ if [ ! -d /var/lib/sks/DB ]; then
|
|
185
|
+ return
|
|
186
|
+ fi
|
|
187
|
+ echo $"Restoring SKS Keyserver"
|
|
188
|
+ systemctl stop sks
|
|
189
|
+
|
|
190
|
+ temp_restore_dir=/root/tempkeyserverconfig
|
|
191
|
+ function_check restore_directory_from_usb
|
|
192
|
+ restore_directory_from_usb $temp_restore_dir keyserverconfig
|
|
193
|
+ cp -r $temp_restore_dir/etc/sks/* /etc/sks/
|
|
194
|
+ rm -rf $temp_restore_dir
|
|
195
|
+ chown -Rc debian-sks: /etc/sks/sksconf
|
|
196
|
+ chown -Rc debian-sks: /etc/sks/mailsync
|
|
197
|
+
|
|
198
|
+ temp_restore_dir=/root/tempkeyserver
|
|
199
|
+ function_check restore_directory_from_usb
|
|
200
|
+ restore_directory_from_usb $temp_restore_dir keyserver
|
|
201
|
+ mv /var/lib/sks/DB /var/lib/sks/DB_prev
|
|
202
|
+ cp -r $temp_restore_dir/var/lib/sks/DB /var/lib/sks/DB
|
|
203
|
+ if [ ! "$?" = "0" ]; then
|
|
204
|
+ # restore the old database
|
|
205
|
+ rm -rf /var/lib/sks/DB
|
|
206
|
+ mv /var/lib/sks/DB_prev /var/lib/sks/DB
|
|
207
|
+
|
|
208
|
+ rm -rf $temp_restore_dir
|
|
209
|
+ function_check set_user_permissions
|
|
210
|
+ set_user_permissions
|
|
211
|
+ function_check backup_unmount_drive
|
|
212
|
+ backup_unmount_drive
|
|
213
|
+ exit 5627294
|
|
214
|
+ fi
|
|
215
|
+ rm -rf $temp_restore_dir
|
|
216
|
+ chown -Rc debian-sks: /var/lib/sks
|
|
217
|
+
|
|
218
|
+ # remove the old database
|
|
219
|
+ rm -rf /var/lib/sks/DB_prev
|
|
220
|
+
|
|
221
|
+ systemctl enable sks
|
|
222
|
+ systemctl start sks
|
|
223
|
+ nginx_ensite $KEYSERVER_DOMAIN_NAME
|
104
|
224
|
}
|
105
|
225
|
|
106
|
226
|
function backup_remote_keyserver {
|
107
|
|
- echo -n ''
|
|
227
|
+ # remove any unused log files
|
|
228
|
+ cd /var/lib/sks/DB
|
|
229
|
+ db_archive -d
|
|
230
|
+
|
|
231
|
+ source_directory=/etc/sks
|
|
232
|
+ if [ -d $source_directory ]; then
|
|
233
|
+ systemctl stop sks
|
|
234
|
+ dest_directory=keyserverconfig
|
|
235
|
+ function_check backup_directory_to_friend
|
|
236
|
+ backup_directory_to_friend $source_directory $dest_directory
|
|
237
|
+ systemctl start sks
|
|
238
|
+ fi
|
|
239
|
+ if [[ "$(check_keyserver_directory_size)" != "0" ]]; then
|
|
240
|
+ echo $'WARNING: Keyserver database size is too large to backup'
|
|
241
|
+ return
|
|
242
|
+ fi
|
|
243
|
+ source_directory=/var/lib/sks/DB
|
|
244
|
+ if [ -d $source_directory ]; then
|
|
245
|
+ systemctl stop sks
|
|
246
|
+ dest_directory=keyserver
|
|
247
|
+ function_check backup_directory_to_friend
|
|
248
|
+ backup_directory_to_friend $source_directory $dest_directory
|
|
249
|
+ systemctl start sks
|
|
250
|
+ fi
|
108
|
251
|
}
|
109
|
252
|
|
110
|
253
|
function restore_remote_keyserver {
|
111
|
|
- echo -n ''
|
|
254
|
+ if [ ! -d /var/lib/sks/DB ]; then
|
|
255
|
+ return
|
|
256
|
+ fi
|
|
257
|
+ echo $"Restoring SKS Keyserver"
|
|
258
|
+ systemctl stop sks
|
|
259
|
+
|
|
260
|
+ temp_restore_dir=/root/tempkeyserverconfig
|
|
261
|
+ function_check restore_directory_from_friend
|
|
262
|
+ restore_directory_from_friend $temp_restore_dir keyserverconfig
|
|
263
|
+ cp -r $temp_restore_dir/etc/sks/* /etc/sks/
|
|
264
|
+ rm -rf $temp_restore_dir
|
|
265
|
+ chown -Rc debian-sks: /etc/sks/sksconf
|
|
266
|
+ chown -Rc debian-sks: /etc/sks/mailsync
|
|
267
|
+
|
|
268
|
+ temp_restore_dir=/root/tempkeyserver
|
|
269
|
+ function_check restore_directory_from_friend
|
|
270
|
+ restore_directory_from_friend $temp_restore_dir keyserver
|
|
271
|
+ mv /var/lib/sks/DB /var/lib/sks/DB_prev
|
|
272
|
+ cp -r $temp_restore_dir/var/lib/sks/DB /var/lib/sks/DB
|
|
273
|
+ if [ ! "$?" = "0" ]; then
|
|
274
|
+ # restore the old database
|
|
275
|
+ rm -rf /var/lib/sks/DB
|
|
276
|
+ mv /var/lib/sks/DB_prev /var/lib/sks/DB
|
|
277
|
+
|
|
278
|
+ rm -rf $temp_restore_dir
|
|
279
|
+ function_check set_user_permissions
|
|
280
|
+ set_user_permissions
|
|
281
|
+ return
|
|
282
|
+ fi
|
|
283
|
+ rm -rf $temp_restore_dir
|
|
284
|
+ chown -Rc debian-sks: /var/lib/sks
|
|
285
|
+
|
|
286
|
+ # remove the old database
|
|
287
|
+ rm -rf /var/lib/sks/DB_prev
|
|
288
|
+
|
|
289
|
+ systemctl enable sks
|
|
290
|
+ systemctl start sks
|
|
291
|
+ nginx_ensite $KEYSERVER_DOMAIN_NAME
|
112
|
292
|
}
|
113
|
293
|
|
114
|
294
|
function remove_keyserver {
|
115
|
295
|
systemctl stop sks
|
116
|
|
- apt-get -qy remove sks
|
|
296
|
+ if [ -f /etc/cron.hourly/keyserver-watchdog ]; then
|
|
297
|
+ rm /etc/cron.hourly/keyserver-watchdog
|
|
298
|
+ fi
|
|
299
|
+ apt-get -qy remove sks dirmngr
|
117
|
300
|
|
118
|
301
|
read_config_param "KEYSERVER_DOMAIN_NAME"
|
119
|
302
|
nginx_dissite $KEYSERVER_DOMAIN_NAME
|
|
@@ -131,9 +314,15 @@ function remove_keyserver {
|
131
|
314
|
remove_config_param KEYSERVER_CODE
|
132
|
315
|
function_check remove_onion_service
|
133
|
316
|
remove_onion_service keyserver ${KEYSERVER_ONION_PORT}
|
|
317
|
+ remove_onion_service sks 11370 11371 11372
|
134
|
318
|
remove_completion_param "install_keyserver"
|
135
|
319
|
|
|
320
|
+ firewall_remove 11370 tcp
|
|
321
|
+ firewall_remove 11371 tcp
|
|
322
|
+ firewall_remove 11372 tcp
|
|
323
|
+
|
136
|
324
|
sed -i '/keyserver/d' $COMPLETION_FILE
|
|
325
|
+ sed -i '/sks onion/d' $COMPLETION_FILE
|
137
|
326
|
if [ -d /var/lib/sks ]; then
|
138
|
327
|
rm -rf /var/lib/sks
|
139
|
328
|
fi
|
|
@@ -154,7 +343,29 @@ function install_interactive_keyserver {
|
154
|
343
|
APP_INSTALLED=1
|
155
|
344
|
}
|
156
|
345
|
|
|
346
|
+function keyserver_create_mailsync {
|
|
347
|
+ echo $"# List of email addresses which submitted keys will be forwarded to" > /etc/sks/mailsync
|
|
348
|
+ echo '' >> /etc/sks/mailsync
|
|
349
|
+ chown -Rc debian-sks: /etc/sks/mailsync
|
|
350
|
+}
|
|
351
|
+
|
|
352
|
+function keyserver_create_membership {
|
|
353
|
+ if [ -f /etc/sks/membership ]; then
|
|
354
|
+ return
|
|
355
|
+ fi
|
|
356
|
+ systemctl stop sks
|
|
357
|
+ echo $"# List of other $PROJECT_NAME SKS Keyservers to sync with." > /etc/sks/membership
|
|
358
|
+ echo '#' >> /etc/sks/membership
|
|
359
|
+ echo $"# Don't add major keyservers here, because it will take an" >> /etc/sks/membership
|
|
360
|
+ echo $'# Infeasible amount of time to sync and backups will become' >> /etc/sks/membership
|
|
361
|
+ echo $'# absurdly long and probably break your system. You have been warned.' >> /etc/sks/membership
|
|
362
|
+ echo '' >> /etc/sks/membership
|
|
363
|
+ chown -Rc debian-sks: /etc/sks/membership
|
|
364
|
+ systemctl start sks
|
|
365
|
+}
|
|
366
|
+
|
157
|
367
|
function keyserver_import_keys {
|
|
368
|
+ # NOTE: this function isn't used, but kept for reference
|
158
|
369
|
dialog --title $"Import public keys database" \
|
159
|
370
|
--backtitle $"Freedombone Control Panel" \
|
160
|
371
|
--defaultno \
|
|
@@ -176,7 +387,109 @@ function keyserver_import_keys {
|
176
|
387
|
|
177
|
388
|
cd /var/lib/sks
|
178
|
389
|
echo $'Building the keyserver database from the downloaded dump'
|
179
|
|
- sks build
|
|
390
|
+ keyserver_reset_database
|
|
391
|
+}
|
|
392
|
+
|
|
393
|
+function keyserver_sync {
|
|
394
|
+ data=$(tempfile 2>/dev/null)
|
|
395
|
+ trap "rm -f $data" 0 1 2 5 15
|
|
396
|
+ dialog --backtitle $"Freedombone Control Panel" \
|
|
397
|
+ --title $"Sync with other keyserver" \
|
|
398
|
+ --form $"\nEnter details for the other server. Please be aware that it's not a good idea to sync with major keyservers which have exceptionally large databases. This is intended to sync with other $PROJECT_NAME systems each having a small database for a particular community." 16 60 3 \
|
|
399
|
+ $"Domain:" 1 1 "" 1 25 32 64 \
|
|
400
|
+ $"Port:" 2 1 "11370" 2 25 6 6 \
|
|
401
|
+ $"Sync Email (optional):" 3 1 "pgp-public-keys@" 3 25 32 64 \
|
|
402
|
+ 2> $data
|
|
403
|
+ sel=$?
|
|
404
|
+ case $sel in
|
|
405
|
+ 1) return;;
|
|
406
|
+ 255) return;;
|
|
407
|
+ esac
|
|
408
|
+ other_keyserver_domain=$(cat $data | sed -n 1p)
|
|
409
|
+ other_keyserver_port=$(cat $data | sed -n 2p)
|
|
410
|
+ other_keyserver_email=$(cat $data | sed -n 3p)
|
|
411
|
+ if [[ "$other_keyserver_domain" != *'.'* ]]; then
|
|
412
|
+ return
|
|
413
|
+ fi
|
|
414
|
+ if [[ "$other_keyserver_domain" == *' '* ]]; then
|
|
415
|
+ return
|
|
416
|
+ fi
|
|
417
|
+ if [[ "$other_keyserver_port" == *'.'* ]]; then
|
|
418
|
+ return
|
|
419
|
+ fi
|
|
420
|
+ if [[ "$other_keyserver_port" == *' '* ]]; then
|
|
421
|
+ return
|
|
422
|
+ fi
|
|
423
|
+ if [ ${#other_keyserver_domain} -lt 4 ]; then
|
|
424
|
+ return
|
|
425
|
+ fi
|
|
426
|
+ if [ ${#other_keyserver_port} -lt 4 ]; then
|
|
427
|
+ return
|
|
428
|
+ fi
|
|
429
|
+
|
|
430
|
+ # Warn if trying to sync
|
|
431
|
+ if [[ "$other_keyserver_domain" == *"sks-keyservers.net" || "$other_keyserver_domain" == *"gnupg.net" || "$other_keyserver_domain" == *"pgp.com" || "$other_keyserver_domain" == *"pgp.mit.edu" || "$other_keyserver_domain" == *"the.earth.li" || "$other_keyserver_domain" == *"mayfirst.org" || "$other_keyserver_domain" == *"ubuntu.com" ]]; then
|
|
432
|
+ dialog --title $"Sync with other keyserver" \
|
|
433
|
+ --msgbox $"\nDon't try to sync with the major keyservers. Your system will be overloaded with an infeasible database size." 8 60
|
|
434
|
+ return
|
|
435
|
+ fi
|
|
436
|
+
|
|
437
|
+ if [[ "$other_keyserver_email" != "pgp-public-keys@" ]]; then
|
|
438
|
+ if [[ "$other_keyserver_email" == *"@"* ]]; then
|
|
439
|
+ if [[ "$other_keyserver_email" == *"."* ]]; then
|
|
440
|
+ keyserver_create_mailsync
|
|
441
|
+ if ! grep -q "$other_keyserver_email" /etc/sks/mailsync; then
|
|
442
|
+ echo "$other_keyserver_email" >> /etc/sks/mailsync
|
|
443
|
+ chown -Rc debian-sks: /etc/sks/mailsync
|
|
444
|
+ fi
|
|
445
|
+ else
|
|
446
|
+ dialog --title $"Sync with other keyserver" \
|
|
447
|
+ --msgbox $"Email doesn't look right: $other_keyserver_email" 6 60
|
|
448
|
+ return
|
|
449
|
+ fi
|
|
450
|
+ fi
|
|
451
|
+ fi
|
|
452
|
+ keyserver_create_membership
|
|
453
|
+ if grep -q "$other_keyserver_domain $other_keyserver_port" /etc/sks/membership; then
|
|
454
|
+ return
|
|
455
|
+ fi
|
|
456
|
+ if grep -q "$other_keyserver_domain " /etc/sks/membership; then
|
|
457
|
+ sed -i "s|$other_keyserver_domain .*|$other_keyserver_domain $other_keyserver_port|g" /etc/sks/membership
|
|
458
|
+ else
|
|
459
|
+ echo "$other_keyserver_domain $other_keyserver_port" >> /etc/sks/membership
|
|
460
|
+ fi
|
|
461
|
+ chown -Rc debian-sks: /etc/sks/membership
|
|
462
|
+ systemctl restart sks
|
|
463
|
+ dialog --title $"Sync with other keyserver" \
|
|
464
|
+ --msgbox $"Keyserver added" 6 40
|
|
465
|
+}
|
|
466
|
+
|
|
467
|
+function keyserver_edit {
|
|
468
|
+ if [ ! -f /etc/sks/membership ]; then
|
|
469
|
+ return
|
|
470
|
+ fi
|
|
471
|
+ editor /etc/sks/membership
|
|
472
|
+ chown -Rc debian-sks: /etc/sks/membership
|
|
473
|
+ systemctl restart sks
|
|
474
|
+}
|
|
475
|
+
|
|
476
|
+function keyserver_remove_key {
|
|
477
|
+ data=$(tempfile 2>/dev/null)
|
|
478
|
+ trap "rm -f $data" 0 1 2 5 15
|
|
479
|
+ dialog --title $"Remove a key" \
|
|
480
|
+ --backtitle $"Freedombone Control Panel" \
|
|
481
|
+ --inputbox $"Enter the ID of the key which you wish to remove:" 12 60 2>$data
|
|
482
|
+ sel=$?
|
|
483
|
+ case $sel in
|
|
484
|
+ 0)
|
|
485
|
+ remove_key_id=$(<$data)
|
|
486
|
+ if [ ${#remove_key_id} -gt 8 ]; then
|
|
487
|
+ sks drop $remove_key_id
|
|
488
|
+ dialog --title $"Remove a key" \
|
|
489
|
+ --msgbox $"The key was removed" 6 40
|
|
490
|
+ fi
|
|
491
|
+ ;;
|
|
492
|
+ esac
|
180
|
493
|
}
|
181
|
494
|
|
182
|
495
|
function configure_interactive_keyserver {
|
|
@@ -186,26 +499,30 @@ function configure_interactive_keyserver {
|
186
|
499
|
trap "rm -f $data" 0 1 2 5 15
|
187
|
500
|
dialog --backtitle $"Freedombone Control Panel" \
|
188
|
501
|
--title $"SKS Keyserver" \
|
189
|
|
- --radiolist $"Choose an operation:" 10 70 2 \
|
190
|
|
- 1 $"Import public keys database" off \
|
191
|
|
- 2 $"Exit" on 2> $data
|
|
502
|
+ --radiolist $"Choose an operation:" 12 70 4 \
|
|
503
|
+ 1 $"Remove a key" off \
|
|
504
|
+ 2 $"Sync with other keyserver" off \
|
|
505
|
+ 3 $"Edit sync keyservers" off \
|
|
506
|
+ 4 $"Exit" on 2> $data
|
192
|
507
|
sel=$?
|
193
|
508
|
case $sel in
|
194
|
509
|
1) return;;
|
195
|
510
|
255) return;;
|
196
|
511
|
esac
|
197
|
512
|
case $(cat $data) in
|
198
|
|
- 1) keyserver_import_keys;;
|
199
|
|
- 2) break;;
|
|
513
|
+ 1) keyserver_remove_key;;
|
|
514
|
+ 2) keyserver_sync;;
|
|
515
|
+ 3) keyserver_edit;;
|
|
516
|
+ 4) break;;
|
200
|
517
|
esac
|
201
|
518
|
done
|
202
|
519
|
}
|
203
|
520
|
|
204
|
521
|
function install_keyserver {
|
205
|
522
|
apt-get -qy install build-essential gcc ocaml libdb-dev wget sks
|
206
|
|
- sks build
|
207
|
|
- chown -Rc debian-sks: /var/lib/sks/DB
|
|
523
|
+ keyserver_reset_database
|
208
|
524
|
sed -i 's|initstart=.*|initstart=yes|g' /etc/default/sks
|
|
525
|
+ apt-get -qy install dirmngr
|
209
|
526
|
systemctl restart sks
|
210
|
527
|
|
211
|
528
|
if [ ! -d /var/www/$KEYSERVER_DOMAIN_NAME ]; then
|
|
@@ -254,36 +571,125 @@ function install_keyserver {
|
254
|
571
|
sed -i "s|###ENTERNAMEHERE###|$USER_EMAIL_ADDRESS|g" /var/www/$KEYSERVER_DOMAIN_NAME/htdocs/404.html
|
255
|
572
|
sed -i "s|###ENTERNAMEHERE###|$USER_EMAIL_ADDRESS|g" /var/www/$KEYSERVER_DOMAIN_NAME/htdocs/index.html
|
256
|
573
|
|
257
|
|
- sksconf_file=/var/lib/sks/sksconf
|
258
|
|
- echo 'debuglevel: 3' > $sksconf_file
|
259
|
|
- echo '' >> $sksconf_file
|
260
|
|
- echo "hostname: $KEYSERVER_DOMAIN_NAME" >> $sksconf_file
|
261
|
|
- echo '' >> $sksconf_file
|
262
|
|
- echo 'hkp_address: 127.0.0.1' >> $sksconf_file
|
263
|
|
- echo "hkp_port: $KEYSERVER_PORT" >> $sksconf_file
|
264
|
|
- echo 'recon_port: 11370' >> $sksconf_file
|
265
|
|
- echo '' >> $sksconf_file
|
266
|
|
- echo "server_contact: $GPG_ID" >> $sksconf_file
|
267
|
|
- echo '' >> $sksconf_file
|
268
|
|
- echo 'initial_stat:' >> $sksconf_file
|
269
|
|
- echo 'disable_mailsync:' >> $sksconf_file
|
270
|
|
- echo 'membership_reload_interval: 1' >> $sksconf_file
|
271
|
|
- echo 'stat_hour: 12' >> $sksconf_file
|
272
|
|
- echo '' >> $sksconf_file
|
273
|
|
- echo 'max_matches: 500' >> $sksconf_file
|
|
574
|
+ sksconf_file=/etc/sks/sksconf
|
|
575
|
+ sed -i "s|#hostname:.*|hostname: $KEYSERVER_DOMAIN_NAME|g" $sksconf_file
|
|
576
|
+ sed -i "s|hostname:.*|hostname: $KEYSERVER_DOMAIN_NAME|g" $sksconf_file
|
|
577
|
+ sed -i "s|#hkp_port:.*|hkp_port: 11373|g" $sksconf_file
|
|
578
|
+ sed -i "s|hkp_port:.*|hkp_port: 11373|g" $sksconf_file
|
|
579
|
+ sed -i "s|#recon_port:.*|recon_port: 11370|g" $sksconf_file
|
|
580
|
+ sed -i "s|recon_port:.*|recon_port: 11370|g" $sksconf_file
|
|
581
|
+ sed -i "s|#recon_address:.*|recon_address: 0.0.0.0|g" $sksconf_file
|
|
582
|
+ sed -i "s|recon_address:.*|recon_address: 0.0.0.0|g" $sksconf_file
|
|
583
|
+ sed -i 's|#hkp_address:.*|hkp_address: 127.0.0.1|g' $sksconf_file
|
|
584
|
+ sed -i 's|hkp_address:.*|hkp_address: 127.0.0.1|g' $sksconf_file
|
|
585
|
+ sed -i "s|#from_addr:.*|from_addr: \"pgp-public-keys@$DEFAULT_DOMAIN_NAME\"|g" $sksconf_file
|
|
586
|
+ sed -i "s|from_addr:.*|from_addr: \"pgp-public-keys@$DEFAULT_DOMAIN_NAME\"|g" $sksconf_file
|
|
587
|
+ sed -i 's|#sendmail_cmd:|sendmail_cmd:|g' $sksconf_file
|
|
588
|
+
|
|
589
|
+ if ! grep -q "#disable_mailsync" $sksconf_file; then
|
|
590
|
+ echo '#disable_mailsync:' >> $sksconf_file
|
|
591
|
+ else
|
|
592
|
+ sed -i 's|disable_mailsync:|#disable_mailsync:|g' $sksconf_file
|
|
593
|
+ fi
|
|
594
|
+ if ! grep -q "membership_reload_interval:" $sksconf_file; then
|
|
595
|
+ echo 'membership_reload_interval: 1' >> $sksconf_file
|
|
596
|
+ else
|
|
597
|
+ sed -i 's|#membership_reload_interval:.*|membership_reload_interval: 1|g' $sksconf_file
|
|
598
|
+ sed -i 's|membership_reload_interval:.*|membership_reload_interval: 1|g' $sksconf_file
|
|
599
|
+ fi
|
|
600
|
+ if ! grep -q "max_matches:" $sksconf_file; then
|
|
601
|
+ echo 'max_matches: 50' >> $sksconf_file
|
|
602
|
+ else
|
|
603
|
+ sed -i 's|#max_matches:.*|max_matches: 50|g' $sksconf_file
|
|
604
|
+ sed -i 's|max_matches:.*|max_matches: 50|g' $sksconf_file
|
|
605
|
+ fi
|
|
606
|
+ if ! grep -q "stat_hour:" $sksconf_file; then
|
|
607
|
+ echo "stat_hour: $((1 + RANDOM % 8))" >> $sksconf_file
|
|
608
|
+ else
|
|
609
|
+ sed -i "s|#stat_hour:.*|stat_hour: $((1 + RANDOM % 8))|g" $sksconf_file
|
|
610
|
+ sed -i "s|stat_hour:.*|stat_hour: $((1 + RANDOM % 8))|g" $sksconf_file
|
|
611
|
+ fi
|
|
612
|
+ if ! grep -q "disable_log_diffs:" $sksconf_file; then
|
|
613
|
+ echo "disable_log_diffs:" >> $sksconf_file
|
|
614
|
+ else
|
|
615
|
+ sed -i "s|#disable_log_diffs:.*|disable_log_diffs:|g" $sksconf_file
|
|
616
|
+ sed -i "s|disable_log_diffs:.*|disable_log_diffs:|g" $sksconf_file
|
|
617
|
+ fi
|
|
618
|
+ if ! grep -q "debuglevel:" $sksconf_file; then
|
|
619
|
+ echo "debuglevel: 0" >> $sksconf_file
|
|
620
|
+ else
|
|
621
|
+ sed -i "s|#debuglevel:.*|debuglevel: 0|g" $sksconf_file
|
|
622
|
+ sed -i "s|debuglevel:.*|debuglevel: 0|g" $sksconf_file
|
|
623
|
+ fi
|
|
624
|
+
|
274
|
625
|
chown debian-sks: $sksconf_file
|
275
|
626
|
|
|
627
|
+ if ! grep -q "hidden_service_sks" /etc/tor/torrc; then
|
|
628
|
+ echo 'HiddenServiceDir /var/lib/tor/hidden_service_sks/' >> /etc/tor/torrc
|
|
629
|
+ echo "HiddenServicePort 11370 127.0.0.1:11370" >> /etc/tor/torrc
|
|
630
|
+ echo "HiddenServicePort 11373 127.0.0.1:11371" >> /etc/tor/torrc
|
|
631
|
+ echo "HiddenServicePort 11372 127.0.0.1:11372" >> /etc/tor/torrc
|
|
632
|
+ echo $'Added onion site for sks'
|
|
633
|
+ fi
|
|
634
|
+
|
|
635
|
+ onion_update
|
|
636
|
+ wait_for_onion_service 'sks'
|
|
637
|
+
|
|
638
|
+ if [ ! -f /var/lib/tor/hidden_service_sks/hostname ]; then
|
|
639
|
+ echo $'sks onion site hostname not found'
|
|
640
|
+ exit 8352982
|
|
641
|
+ fi
|
|
642
|
+ SKS_ONION_HOSTNAME=$(cat /var/lib/tor/hidden_service_sks/hostname)
|
|
643
|
+
|
276
|
644
|
KEYSERVER_ONION_HOSTNAME=$(add_onion_service keyserver 80 ${KEYSERVER_ONION_PORT})
|
277
|
645
|
|
278
|
646
|
keyserver_nginx_site=/etc/nginx/sites-available/$KEYSERVER_DOMAIN_NAME
|
279
|
647
|
if [[ $ONION_ONLY == "no" ]]; then
|
280
|
|
- function_check nginx_http_redirect
|
281
|
|
- nginx_http_redirect $KEYSERVER_DOMAIN_NAME
|
|
648
|
+ # NOTE: without http active on port 80 the keyserver doesn't work
|
|
649
|
+ # from the commandline
|
|
650
|
+ echo 'server {' > $keyserver_nginx_site
|
|
651
|
+ echo ' listen 80;' >> $keyserver_nginx_site
|
|
652
|
+ echo ' listen 0.0.0.0:11371;' >> $keyserver_nginx_site
|
|
653
|
+ echo ' listen [::]:80;' >> $keyserver_nginx_site
|
|
654
|
+ echo " server_name $KEYSERVER_DOMAIN_NAME;" >> $keyserver_nginx_site
|
|
655
|
+ echo '' >> $keyserver_nginx_site
|
|
656
|
+ echo ' # Logs' >> $keyserver_nginx_site
|
|
657
|
+ echo ' access_log /dev/null;' >> $keyserver_nginx_site
|
|
658
|
+ echo ' error_log /dev/null;' >> $keyserver_nginx_site
|
|
659
|
+ echo '' >> $keyserver_nginx_site
|
|
660
|
+ echo ' # Root' >> $keyserver_nginx_site
|
|
661
|
+ echo " root /var/www/$KEYSERVER_DOMAIN_NAME/htdocs;" >> $keyserver_nginx_site
|
|
662
|
+ echo '' >> $keyserver_nginx_site
|
|
663
|
+ echo ' rewrite ^/stats /pks/lookup?op=stats;' >> $keyserver_nginx_site
|
|
664
|
+ echo ' rewrite ^/s/(.*) /pks/lookup?search=$1;' >> $keyserver_nginx_site
|
|
665
|
+ echo ' rewrite ^/search/(.*) /pks/lookup?search=$1;' >> $keyserver_nginx_site
|
|
666
|
+ echo ' rewrite ^/g/(.*) /pks/lookup?op=get&search=$1;' >> $keyserver_nginx_site
|
|
667
|
+ echo ' rewrite ^/get/(.*) /pks/lookup?op=get&search=$1;' >> $keyserver_nginx_site
|
|
668
|
+ echo ' rewrite ^/d/(.*) /pks/lookup?op=get&options=mr&search=$1;' >> $keyserver_nginx_site
|
|
669
|
+ echo ' rewrite ^/download/(.*) /pks/lookup?op=get&options=mr&search=$1;' >> $keyserver_nginx_site
|
|
670
|
+ echo '' >> $keyserver_nginx_site
|
|
671
|
+ echo ' location /pks {' >> $keyserver_nginx_site
|
|
672
|
+ echo ' proxy_pass http://127.0.0.1:11373;' >> $keyserver_nginx_site
|
|
673
|
+ echo ' proxy_pass_header Server;' >> $keyserver_nginx_site
|
|
674
|
+ echo " add_header Via \"1.1 $KEYSERVER_DOMAIN_NAME:11371 (nginx)\";" >> $keyserver_nginx_site
|
|
675
|
+ echo ' proxy_ignore_client_abort on;' >> $keyserver_nginx_site
|
|
676
|
+ echo ' client_max_body_size 8m;' >> $keyserver_nginx_site
|
|
677
|
+ echo ' }' >> $keyserver_nginx_site
|
|
678
|
+ echo '}' >> $keyserver_nginx_site
|
|
679
|
+ echo '' >> $keyserver_nginx_site
|
282
|
680
|
echo 'server {' >> $keyserver_nginx_site
|
283
|
681
|
echo ' listen 443 ssl;' >> $keyserver_nginx_site
|
|
682
|
+ echo ' listen 0.0.0.0:11372 ssl;' >> $keyserver_nginx_site
|
284
|
683
|
echo ' listen [::]:443 ssl;' >> $keyserver_nginx_site
|
285
|
684
|
echo " server_name $KEYSERVER_DOMAIN_NAME;" >> $keyserver_nginx_site
|
286
|
685
|
echo '' >> $keyserver_nginx_site
|
|
686
|
+ echo ' error_page 404 /404.html;' >> $keyserver_nginx_site
|
|
687
|
+ echo '' >> $keyserver_nginx_site
|
|
688
|
+ echo ' location ~ (.git|LICENSE|readme.md) {' >> $keyserver_nginx_site
|
|
689
|
+ echo ' deny all;' >> $keyserver_nginx_site
|
|
690
|
+ echo ' return 404;' >> $keyserver_nginx_site
|
|
691
|
+ echo ' }' >> $keyserver_nginx_site
|
|
692
|
+ echo '' >> $keyserver_nginx_site
|
287
|
693
|
echo ' # Security' >> $keyserver_nginx_site
|
288
|
694
|
function_check nginx_ssl
|
289
|
695
|
nginx_ssl $KEYSERVER_DOMAIN_NAME
|
|
@@ -310,9 +716,9 @@ function install_keyserver {
|
310
|
716
|
echo ' rewrite ^/download/(.*) /pks/lookup?op=get&options=mr&search=$1;' >> $keyserver_nginx_site
|
311
|
717
|
echo '' >> $keyserver_nginx_site
|
312
|
718
|
echo ' location /pks {' >> $keyserver_nginx_site
|
313
|
|
- echo " proxy_pass http://127.0.0.1:$KEYSERVER_PORT;" >> $keyserver_nginx_site
|
|
719
|
+ echo " proxy_pass http://127.0.0.1:11373;" >> $keyserver_nginx_site
|
314
|
720
|
echo ' proxy_pass_header Server;' >> $keyserver_nginx_site
|
315
|
|
- echo " add_header Via \"1.1 $KEYSERVER_DOMAIN_NAME:$KEYSERVER_PORT (nginx)\";" >> $keyserver_nginx_site
|
|
721
|
+ echo " add_header Via \"1.1 $KEYSERVER_DOMAIN_NAME:11372 (nginx)\";" >> $keyserver_nginx_site
|
316
|
722
|
echo ' proxy_ignore_client_abort on;' >> $keyserver_nginx_site
|
317
|
723
|
echo ' client_max_body_size 8m;' >> $keyserver_nginx_site
|
318
|
724
|
echo ' }' >> $keyserver_nginx_site
|
|
@@ -322,8 +728,15 @@ function install_keyserver {
|
322
|
728
|
echo -n '' > $keyserver_nginx_site
|
323
|
729
|
fi
|
324
|
730
|
echo 'server {' >> $keyserver_nginx_site
|
325
|
|
- echo " listen 127.0.0.1:$KEYSERVER_ONION_PORT default_server;" >> $keyserver_nginx_site
|
326
|
|
- echo " server_name $KEYSERVER_ONION_HOSTNAME;" >> $keyserver_nginx_site
|
|
731
|
+ echo " listen 127.0.0.1:$KEYSERVER_ONION_PORT default_server;" >> $keyserver_nginx_site
|
|
732
|
+ echo " server_name $KEYSERVER_ONION_HOSTNAME;" >> $keyserver_nginx_site
|
|
733
|
+ echo '' >> $keyserver_nginx_site
|
|
734
|
+ echo ' error_page 404 /404.html;' >> $keyserver_nginx_site
|
|
735
|
+ echo '' >> $keyserver_nginx_site
|
|
736
|
+ echo ' location ~ (.git|LICENSE|readme.md) {' >> $keyserver_nginx_site
|
|
737
|
+ echo ' deny all;' >> $keyserver_nginx_site
|
|
738
|
+ echo ' return 404;' >> $keyserver_nginx_site
|
|
739
|
+ echo ' }' >> $keyserver_nginx_site
|
327
|
740
|
echo '' >> $keyserver_nginx_site
|
328
|
741
|
function_check nginx_disable_sniffing
|
329
|
742
|
nginx_disable_sniffing $KEYSERVER_DOMAIN_NAME
|
|
@@ -344,9 +757,9 @@ function install_keyserver {
|
344
|
757
|
echo ' rewrite ^/download/(.*) /pks/lookup?op=get&options=mr&search=$1;' >> $keyserver_nginx_site
|
345
|
758
|
echo '' >> $keyserver_nginx_site
|
346
|
759
|
echo ' location /pks {' >> $keyserver_nginx_site
|
347
|
|
- echo " proxy_pass http://127.0.0.1:$KEYSERVER_PORT;" >> $keyserver_nginx_site
|
|
760
|
+ echo " proxy_pass http://127.0.0.1:11373;" >> $keyserver_nginx_site
|
348
|
761
|
echo ' proxy_pass_header Server;' >> $keyserver_nginx_site
|
349
|
|
- echo " add_header Via \"1.1 $KEYSERVER_DOMAIN_NAME:$KEYSERVER_PORT (nginx)\";" >> $keyserver_nginx_site
|
|
762
|
+ echo " add_header Via \"1.1 $KEYSERVER_DOMAIN_NAME:$KEYSERVER_ONION_PORT (nginx)\";" >> $keyserver_nginx_site
|
350
|
763
|
echo ' proxy_ignore_client_abort on;' >> $keyserver_nginx_site
|
351
|
764
|
echo ' client_max_body_size 8m;' >> $keyserver_nginx_site
|
352
|
765
|
echo ' }' >> $keyserver_nginx_site
|
|
@@ -373,10 +786,27 @@ function install_keyserver {
|
373
|
786
|
function_check nginx_ensite
|
374
|
787
|
nginx_ensite $KEYSERVER_DOMAIN_NAME
|
375
|
788
|
|
|
789
|
+ configure_firewall_for_keyserver
|
|
790
|
+
|
|
791
|
+ # remove membership file - don't try to sync with other keyservers
|
|
792
|
+ if [ -f /etc/sks/membership ]; then
|
|
793
|
+ rm /etc/sks/membership
|
|
794
|
+ fi
|
|
795
|
+
|
|
796
|
+ if ! grep -q "pgp-public-keys" /etc/aliases; then
|
|
797
|
+ echo 'pgp-public-keys: "|/usr/lib/sks/sks_add_mail /etc/sks"' >> /etc/aliases
|
|
798
|
+ fi
|
|
799
|
+ chown -Rc debian-sks: /etc/sks/mailsync
|
|
800
|
+
|
|
801
|
+ systemctl enable sks
|
|
802
|
+ systemctl restart sks
|
376
|
803
|
systemctl restart nginx
|
377
|
804
|
|
378
|
805
|
set_completion_param "keyserver domain" "$KEYSERVER_DOMAIN_NAME"
|
379
|
806
|
set_completion_param "keyserver onion domain" "$KEYSERVER_ONION_HOSTNAME"
|
|
807
|
+ set_completion_param "sks onion domain" "$SKS_ONION_HOSTNAME"
|
|
808
|
+
|
|
809
|
+ keyserver_watchdog
|
380
|
810
|
|
381
|
811
|
APP_INSTALLED=1
|
382
|
812
|
}
|