From a63785a9ca6bf06b43ad87933a369880fcdebf26 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Fri, 4 May 2018 10:52:53 +0100 Subject: [PATCH 01/45] Pleroma option to disable routing through tor --- src/freedombone-app-pleroma | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/freedombone-app-pleroma b/src/freedombone-app-pleroma index b8b7c94c..aed1712c 100755 --- a/src/freedombone-app-pleroma +++ b/src/freedombone-app-pleroma @@ -733,15 +733,21 @@ function configure_interactive_pleroma { enablechatstr=$'Disable chat system' fi + pleromatorstr=$'Enable routing through Tor for onion addresses' + if grep -q '9050' $pleroma_secret; then + pleromatorstr=$'Disable routing through Tor' + fi + W=(1 $"Set a background image" 2 $"Set the title" 3 $"Disable new account registrations" 4 $"Add a custom emoji" 5 $"Set post expiry period (currently $PLEROMA_EXPIRE_MONTHS months)" - 6 "$enablechatstr") + 6 "$enablechatstr" + 7 "$pleromatorstr") # shellcheck disable=SC2068 - selection=$(dialog --backtitle $"Freedombone Administrator Control Panel" --title $"Pleroma" --menu $"Choose an operation, or ESC to exit:" 13 60 6 "${W[@]}" 3>&2 2>&1 1>&3) + selection=$(dialog --backtitle $"Freedombone Administrator Control Panel" --title $"Pleroma" --menu $"Choose an operation, or ESC to exit:" 14 60 7 "${W[@]}" 3>&2 2>&1 1>&3) if [ ! "$selection" ]; then break @@ -759,11 +765,24 @@ function configure_interactive_pleroma { pleroma_enable_chat true fi ;; + 7) if grep -q '9050' $pleroma_secret; then + pleroma_disable_tor + else + pleroma_enable_tor + fi + ;; esac done } -function pleroma_upgrade_tor { +function pleroma_disable_tor { + if grep -q '9050' $pleroma_secret; then + sed -i '/9050/d' $pleroma_secret + pleroma_recompile + fi +} + +function pleroma_enable_tor { pleroma_tor_update= if ! grep -q '{:socks5, :localhost, 9050}' $pleroma_secret; then @@ -806,7 +825,7 @@ function upgrade_pleroma { create_pleroma_blocklist fi - pleroma_upgrade_tor + #pleroma_enable_tor CURR_PLEROMA_COMMIT=$(get_completion_param "pleroma commit") if [[ "$CURR_PLEROMA_COMMIT" == "$PLEROMA_COMMIT" ]]; then From f2be32cb127710f713d000b829ea1c168187b6dd Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Fri, 4 May 2018 11:36:19 +0100 Subject: [PATCH 02/45] Re-establish proxy setting when tor is disabled --- src/freedombone-app-pleroma | 1 + 1 file changed, 1 insertion(+) diff --git a/src/freedombone-app-pleroma b/src/freedombone-app-pleroma index aed1712c..b6fc122c 100755 --- a/src/freedombone-app-pleroma +++ b/src/freedombone-app-pleroma @@ -778,6 +778,7 @@ function configure_interactive_pleroma { function pleroma_disable_tor { if grep -q '9050' $pleroma_secret; then sed -i '/9050/d' $pleroma_secret + sed -i 's|# config :pleroma, :http, proxy_url:|config :pleroma, :http, proxy_url:|g' $PLEROMA_DIR/config/config.exs pleroma_recompile fi } From cecd4d876cbf0c72dbb652f77fb70c3f7cd372f4 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Fri, 4 May 2018 12:46:00 +0100 Subject: [PATCH 03/45] Retain logging for tor so that we can monitor its health --- src/freedombone-logging | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/freedombone-logging b/src/freedombone-logging index 178496c0..bb32adce 100755 --- a/src/freedombone-logging +++ b/src/freedombone-logging @@ -179,9 +179,8 @@ if [[ "$1" == "on" || "$1" == "On" || "$1" == "ON" ]]; then else turn_logging_off - if [ -d /etc/tor ]; then - echo 'Log notice file /dev/null' > /etc/torrc.d/logging - rm /var/log/tor/* + if [ -d /etc/torrc.d ]; then + echo 'Log notice file /var/log/tor/notices.log' > /etc/torrc.d/logging fi if [ -d /var/log/radicale ]; then $REMOVE_FILES_COMMAND /var/log/radicale/* From 9f4a2ac224361392cbc741e979fad0d3fc7bbaa8 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Fri, 4 May 2018 12:47:51 +0100 Subject: [PATCH 04/45] Retain logging for tor so that we can monitor its health --- src/freedombone-image-customise | 4 ++-- src/freedombone-utils-onion | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/freedombone-image-customise b/src/freedombone-image-customise index 3aaed257..3cc75fc7 100755 --- a/src/freedombone-image-customise +++ b/src/freedombone-image-customise @@ -1762,8 +1762,8 @@ image_setup_utils() { chroot "$rootdir" apt-get -yq -t stretch-backports install tor chroot "$rootdir" apt-get -yq install connect-proxy chroot "$rootdir" connect-proxy - sed -i 's|#Log notice file.*|Log notice file /dev/null|g' "$rootdir/etc/tor/torrc" - sed -i 's|Log notice file.*|Log notice file /dev/null|g' "$rootdir/etc/tor/torrc" + sed -i 's|#Log notice file.*|Log notice file /var/log/tor/notices.log|g' "$rootdir/etc/tor/torrc" + sed -i 's|Log notice file.*|Log notice file /var/log/tor/notices.log|g' "$rootdir/etc/tor/torrc" sed -i "s|#AccountingMax.*|AccountingMax $TOR_MAX_TRAFFIC_PER_MONTH_GB GBytes|g" "$rootdir/etc/tor/torrc" sed -i "s|AccountingMax.*|AccountingMax $TOR_MAX_TRAFFIC_PER_MONTH_GB GBytes|g" "$rootdir/etc/tor/torrc" if ! grep -q 'Host *.onion' "$rootdir/root/.ssh/config"; then diff --git a/src/freedombone-utils-onion b/src/freedombone-utils-onion index e193e5cc..b0cf04f8 100755 --- a/src/freedombone-utils-onion +++ b/src/freedombone-utils-onion @@ -336,7 +336,7 @@ function install_tor { echo '%include /etc/torrc.d' >> /etc/tor/torrc fi - echo 'Log notice file /dev/null' > /etc/torrc.d/logging + echo 'Log notice file /var/log/tor/notices.log' > /etc/torrc.d/logging echo "AccountingMax $TOR_MAX_TRAFFIC_PER_MONTH_GB GBytes" > /etc/torrc.d/maxtraffic mark_completed "${FUNCNAME[0]}" From 96540317a71d5ebdb0932df403b2c3287fe09936 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Fri, 4 May 2018 13:51:00 +0100 Subject: [PATCH 05/45] Command to show Tor health status --- src/freedombone-tor-health | 62 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100755 src/freedombone-tor-health diff --git a/src/freedombone-tor-health b/src/freedombone-tor-health new file mode 100755 index 00000000..e7dc427e --- /dev/null +++ b/src/freedombone-tor-health @@ -0,0 +1,62 @@ +#!/bin/bash +# _____ _ _ +# | __|___ ___ ___ _| |___ _____| |_ ___ ___ ___ +# | __| _| -_| -_| . | . | | . | . | | -_| +# |__| |_| |___|___|___|___|_|_|_|___|___|_|_|___| +# +# Freedom in the Cloud +# +# Returns a health status for Tor +# +# License +# ======= +# +# Copyright (C) 2018 Bob Mottram +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +PROJECT_NAME='freedombone' + +export TEXTDOMAIN=${PROJECT_NAME}-tor-health +export TEXTDOMAINDIR="/usr/share/locale" + +d1=$(date --date="-10 min" "+%b %d %H:%M"):00 +d2=$(date "+%b %d %H:%M"):00 +ctr=0 +echo -n '' > /var/log/tor/notices_new.log +while read -r line; do + datestr=$(echo "$line" | awk -F '.' '{print $1}') + if [[ "$datestr" > "$d1" && "$datestr" < "$d2" || "$datestr" =~ $d2 ]]; then + if [[ "$line" == *'Retrying'* ]]; then + ctr=$((ctr+1)) + fi + echo "$line" >> /var/log/tor/notices_new.log + fi +done < /var/log/tor/notices.log + +mv /var/log/tor/notices_new.log /var/log/tor/notices.log +chown -R debian-tor:adm /var/log/tor + +if [ $ctr -gt 5 ]; then + echo $'Failed' + exit 0 +fi + +if [ $ctr -gt 0 ]; then + echo $'Poor' + exit 0 +fi + +echo $'Good' +exit 0 From d3869f53507a9f024a083b5cfce7ee22a30d4b3d Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Fri, 4 May 2018 14:49:15 +0100 Subject: [PATCH 06/45] cron entry to check tor health and report via email --- src/freedombone-utils-onion | 15 +++++++++++++++ src/freedombone-utils-setup | 3 +++ 2 files changed, 18 insertions(+) diff --git a/src/freedombone-utils-onion b/src/freedombone-utils-onion index b0cf04f8..793289c6 100755 --- a/src/freedombone-utils-onion +++ b/src/freedombone-utils-onion @@ -311,6 +311,21 @@ function configure_ssh_onion { mark_completed "${FUNCNAME[0]}" } +function check_tor_health { + { echo '#!/bin/bash'; + echo "status=\$(${PROJECT_NAME}-tor-health)"; + echo "if [[ \"\$status\" == 'G'* ]]; then"; + echo ' exit 0'; + echo 'fi'; + echo "ADMIN_USER=\$(grep \"MY_USERNAME=\" ~/${PROJECT_NAME}.cfg | awk -F '=' '{print \$2}')"; + echo "tail -n 3 /var/log/tor/notices.log | mail -s \"[${PROJECT_NAME}] Tor status is \$status\" \$ADMIN_USER@\$HOSTNAME"; } > /usr/bin/check_tor_health + chmod +x /usr/bin/check_tor_health + + if ! grep -q 'check_tor_health' /etc/crontab; then + cron_add_mins 10 "/usr/bin/check_tor_health" + fi +} + function install_tor { if [[ $SYSTEM_TYPE == "mesh*" ]]; then return diff --git a/src/freedombone-utils-setup b/src/freedombone-utils-setup index 8c40ed8a..88937781 100755 --- a/src/freedombone-utils-setup +++ b/src/freedombone-utils-setup @@ -971,6 +971,9 @@ function setup_utils { function_check install_tor install_tor + function_check check_tor_health + check_tor_health + function_check install_command_line_browser install_command_line_browser From 59af1821b94e7d883d44685cb04178c7fbf96c92 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Fri, 4 May 2018 15:06:35 +0100 Subject: [PATCH 07/45] Avoid repeated tor health warnings --- src/freedombone-utils-onion | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/freedombone-utils-onion b/src/freedombone-utils-onion index 793289c6..350533b2 100755 --- a/src/freedombone-utils-onion +++ b/src/freedombone-utils-onion @@ -314,11 +314,18 @@ function configure_ssh_onion { function check_tor_health { { echo '#!/bin/bash'; echo "status=\$(${PROJECT_NAME}-tor-health)"; + echo "ADMIN_USER=\$(grep \"MY_USERNAME=\" ~/${PROJECT_NAME}.cfg | awk -F '=' '{print \$2}')"; echo "if [[ \"\$status\" == 'G'* ]]; then"; + echo ' if [ -f /tmp/.torfailed ]; then'; + echo ' rm /tmp/.torfailed'; + echo " tail -n 3 /var/log/tor/notices.log | mail -s \"[${PROJECT_NAME}] Tor status is now \$status\" \$ADMIN_USER@\$HOSTNAME"; + echo ' fi'; echo ' exit 0'; echo 'fi'; - echo "ADMIN_USER=\$(grep \"MY_USERNAME=\" ~/${PROJECT_NAME}.cfg | awk -F '=' '{print \$2}')"; - echo "tail -n 3 /var/log/tor/notices.log | mail -s \"[${PROJECT_NAME}] Tor status is \$status\" \$ADMIN_USER@\$HOSTNAME"; } > /usr/bin/check_tor_health + echo "tail -n 3 /var/log/tor/notices.log | mail -s \"[${PROJECT_NAME}] Tor status is \$status\" \$ADMIN_USER@\$HOSTNAME"; + echo 'if [ ! -f /tmp/.torfailed ]; then'; + echo ' touch /tmp/.torfailed'; + echo 'fi'; } > /usr/bin/check_tor_health chmod +x /usr/bin/check_tor_health if ! grep -q 'check_tor_health' /etc/crontab; then From dc73d01410756cb68593ced414a321c76ef58cba Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Fri, 4 May 2018 15:12:43 +0100 Subject: [PATCH 08/45] Avoid repeated emails on tor failure --- src/freedombone-utils-onion | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/freedombone-utils-onion b/src/freedombone-utils-onion index 350533b2..9c510ad4 100755 --- a/src/freedombone-utils-onion +++ b/src/freedombone-utils-onion @@ -322,8 +322,8 @@ function check_tor_health { echo ' fi'; echo ' exit 0'; echo 'fi'; - echo "tail -n 3 /var/log/tor/notices.log | mail -s \"[${PROJECT_NAME}] Tor status is \$status\" \$ADMIN_USER@\$HOSTNAME"; echo 'if [ ! -f /tmp/.torfailed ]; then'; + echo " tail -n 3 /var/log/tor/notices.log | mail -s \"[${PROJECT_NAME}] Tor status is \$status\" \$ADMIN_USER@\$HOSTNAME"; echo ' touch /tmp/.torfailed'; echo 'fi'; } > /usr/bin/check_tor_health chmod +x /usr/bin/check_tor_health From 5e8046f637b9d0cc57c36c70fa718fbc3f664f24 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Fri, 4 May 2018 15:32:18 +0100 Subject: [PATCH 09/45] Handle different tor health statuses --- src/freedombone-utils-onion | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/freedombone-utils-onion b/src/freedombone-utils-onion index 9c510ad4..7d9b47e9 100755 --- a/src/freedombone-utils-onion +++ b/src/freedombone-utils-onion @@ -324,7 +324,13 @@ function check_tor_health { echo 'fi'; echo 'if [ ! -f /tmp/.torfailed ]; then'; echo " tail -n 3 /var/log/tor/notices.log | mail -s \"[${PROJECT_NAME}] Tor status is \$status\" \$ADMIN_USER@\$HOSTNAME"; - echo ' touch /tmp/.torfailed'; + echo " echo \"\$status\" > /tmp/.torfailed"; + echo 'else'; + echo " prev_status=\$(cat /tmp/.torfailed)"; + echo " if [[ \"\$prev_status\" != \"\$status\" ]]; then"; + echo " tail -n 3 /var/log/tor/notices.log | mail -s \"[${PROJECT_NAME}] Tor status is \$status\" \$ADMIN_USER@\$HOSTNAME"; + echo " echo \"\$status\" > /tmp/.torfailed"; + echo ' fi'; echo 'fi'; } > /usr/bin/check_tor_health chmod +x /usr/bin/check_tor_health From 0b015cf2ce11545c7ec0645b745721551437840e Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Fri, 4 May 2018 22:21:03 +0100 Subject: [PATCH 10/45] Bump pleroma commit --- src/freedombone-app-pleroma | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/freedombone-app-pleroma b/src/freedombone-app-pleroma index b6fc122c..ce51922d 100755 --- a/src/freedombone-app-pleroma +++ b/src/freedombone-app-pleroma @@ -36,7 +36,7 @@ PLEROMA_CODE= PLEROMA_PORT=4000 PLEROMA_ONION_PORT=8011 PLEROMA_REPO="https://git.pleroma.social/pleroma/pleroma.git" -PLEROMA_COMMIT='5b6d6d7f2d9363c494642bfda4d6e4d12daa53c7' +PLEROMA_COMMIT='762f6edc29a7a48e3a663e9bedec58e0036ff363' PLEROMA_ADMIN_PASSWORD= PLEROMA_DIR=/etc/pleroma PLEROMA_SECRET_KEY="" From 95453f82056cdf9eecd6967ff9a98ad28132538f Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 5 May 2018 15:48:12 +0100 Subject: [PATCH 11/45] Block firefox telemetry --- src/freedombone-utils-firewall | 16 ++++++++++++++++ src/freedombone-utils-setup | 3 +++ 2 files changed, 19 insertions(+) diff --git a/src/freedombone-utils-firewall b/src/freedombone-utils-firewall index 06d2f98e..ba302a35 100755 --- a/src/freedombone-utils-firewall +++ b/src/freedombone-utils-firewall @@ -47,6 +47,22 @@ function save_firewall_settings { fi } +function block_firefox_telemetry { + # This shouldn't be needed on a server, but we'll do it anyway + # to be on the safe side + # Within firefox source code see submit_telemetry_data.py + + FIREFOX_TELEMETRY_IP='52.88.27.118' + + if grep "$FIREFOX_TELEMETRY_IP" /etc/firewall.conf; then + return + fi + + iptables -A INPUT -s $FIREFOX_TELEMETRY_IP -j DROP + iptables -A OUTPUT -s $FIREFOX_TELEMETRY_IP -j DROP + save_firewall_settings +} + function firewall_block_bad_ip_ranges { if [ "$INSTALLING_MESH" ]; then return diff --git a/src/freedombone-utils-setup b/src/freedombone-utils-setup index 88937781..ba2a43ef 100755 --- a/src/freedombone-utils-setup +++ b/src/freedombone-utils-setup @@ -720,6 +720,9 @@ function setup_firewall { function_check configure_firewall configure_firewall + function_check block_firefox_telemetry + block_firefox_telemetry + function_check configure_firewall_ping configure_firewall_ping From 89e1f99244ef9ba71c5330863fa337f9ea08db91 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 5 May 2018 15:48:51 +0100 Subject: [PATCH 12/45] Make variable accessible --- src/freedombone-utils-firewall | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/freedombone-utils-firewall b/src/freedombone-utils-firewall index ba302a35..ff068a09 100755 --- a/src/freedombone-utils-firewall +++ b/src/freedombone-utils-firewall @@ -32,6 +32,7 @@ FIREWALL_CONFIG=$HOME/${PROJECT_NAME}-firewall.cfg FIREWALL_DOMAINS=$HOME/${PROJECT_NAME}-firewall-domains.cfg FIREWALL_EIFACE=eth0 EXTERNAL_IPV4_ADDRESS= +FIREFOX_TELEMETRY_IP='52.88.27.118' function save_firewall_settings { iptables-save > /etc/firewall.conf @@ -52,8 +53,6 @@ function block_firefox_telemetry { # to be on the safe side # Within firefox source code see submit_telemetry_data.py - FIREFOX_TELEMETRY_IP='52.88.27.118' - if grep "$FIREFOX_TELEMETRY_IP" /etc/firewall.conf; then return fi From 31dd378f6f72f21aa2d2c9c32544b85ed1515d90 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 5 May 2018 16:11:50 +0100 Subject: [PATCH 13/45] Block firefox telemetry on mesh --- src/freedombone-utils-firewall | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/freedombone-utils-firewall b/src/freedombone-utils-firewall index ff068a09..753e628d 100755 --- a/src/freedombone-utils-firewall +++ b/src/freedombone-utils-firewall @@ -402,7 +402,9 @@ function mesh_firewall { echo "iptables -A INPUT -p tcp --dport $TRACKER_PORT -j ACCEPT"; echo "ip6tables -A INPUT -p tcp --dport $TRACKER_PORT -j ACCEPT"; echo "iptables -A INPUT -p udp --dport 1900 -j ACCEPT"; - echo "ip6tables -A INPUT -p udp --dport 1900 -j ACCEPT"; } > "$MESH_FIREWALL_SCRIPT" + echo "ip6tables -A INPUT -p udp --dport 1900 -j ACCEPT"; + echo "iptables -A INPUT -s $FIREFOX_TELEMETRY_IP -j DROP"; + echo "iptables -A OUTPUT -s $FIREFOX_TELEMETRY_IP -j DROP"; } > "$MESH_FIREWALL_SCRIPT" chmod +x "$MESH_FIREWALL_SCRIPT" { echo '[Unit]'; From 64060a4a1044be60ce8a7a05d053ea1ab3987cc8 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 6 May 2018 10:20:53 +0100 Subject: [PATCH 14/45] Check that openssh client and server are installed --- src/freedombone-tests | 6 ++++++ tests/check-ssh.sh | 9 +++++++++ tests/output.sh | 9 +++++++++ 3 files changed, 24 insertions(+) diff --git a/src/freedombone-tests b/src/freedombone-tests index 417877c2..6fe801d7 100755 --- a/src/freedombone-tests +++ b/src/freedombone-tests @@ -759,6 +759,12 @@ function test_stig { output "V-38605" $? ${SETLANG} ################ + ##Check that openssh client and server are installed + bash scripts/check-ssh.sh installed >/dev/null 2>&1 & + stig_spinner $! + output "SV-86857r1_rule" $? ${SETLANG} + ################ + ##RHEL-06-000227 ##The SSH daemon must be configured to use only the SSHv2 protocol. diff --git a/tests/check-ssh.sh b/tests/check-ssh.sh index 38003d0a..6aa81413 100644 --- a/tests/check-ssh.sh +++ b/tests/check-ssh.sh @@ -44,6 +44,15 @@ case $1 in exit 1 fi ;; + installed) + OPENSSH_SERVER=`dpkg -s openssh-server | grep -i "Status:.*install.*ok.*installed" | wc -l` + OPENSSH_CLIENT=`dpkg -s openssh-client | grep -i "Status:.*install.*ok.*installed" | wc -l` + if [ ${OPENSSH_SERVER} -eq 1 -a ${OPENSSH_CLIENT} -eq 1 ];then + : + else + exit 1 + fi + ;; sshd_status) if systemctl status sshd | grep "Active:.*(running)";then : diff --git a/tests/output.sh b/tests/output.sh index 5843ec6b..638119ed 100644 --- a/tests/output.sh +++ b/tests/output.sh @@ -1399,6 +1399,15 @@ disabled. The "nis" service can be disabled with the following commands:\n\n#upd printf '\n######################\n\nSTIG-ID:RHEL-06-000224\n\nVulnerability Discussion: Due to its usage for maintenance and security-supporting tasks, enabling the cron daemon is essential.\n\nFix text: The "crond" service is used to execute commands at preconfigured times. It is required by almost all systems to perform necessary maintenance tasks, such as notifying root of system activity. The "crond" service can be enabled with the following commands:\n\n#update-rc.d cron defaults\nservice cron start\n\n######################\n\n' >> $LOG fi ;; + SV-86857r1_rule) if [ "$3" = "en" ]; then + log_msg $2 'OpenSSH server and client must be installed.' + else + log_msg $2 '必须安装OpenSSH服务器和客户端' + fi + if [ $2 -ne 0 ];then + printf '\n######################\n\nWithout protection of the transmitted information, confidentiality and integrity may be compromised because unprotected communications can be intercepted and either read or altered. \n\nThis requirement applies to both internal and external networks and all types of information system components from which information can be transmitted (e.g., servers, mobile devices, notebook computers, printers, copiers, scanners, and facsimile machines). Communication paths outside the physical protection of a controlled boundary are exposed to the possibility of interception and modification. \n\nProtecting the confidentiality and integrity of organizational information can be accomplished by physical means (e.g., employing physical distribution systems) or by logical means (e.g., employing cryptographic techniques). If physical means of protection are employed, logical means (cryptography) do not have to be employed, and vice versa.\n\n######################\n\n' >> $LOG + fi + ;; V-38607) if [ "$3" = "en" ]; then log_msg $2 'The SSH daemon must be configured to use only the SSHv2 protocol.' else From cde6df9dccc483da025e87e59b725e92dcba5087 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 6 May 2018 10:29:23 +0100 Subject: [PATCH 15/45] style --- tests/check-ssh.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/check-ssh.sh b/tests/check-ssh.sh index 6aa81413..011cf18e 100644 --- a/tests/check-ssh.sh +++ b/tests/check-ssh.sh @@ -45,9 +45,9 @@ case $1 in fi ;; installed) - OPENSSH_SERVER=`dpkg -s openssh-server | grep -i "Status:.*install.*ok.*installed" | wc -l` - OPENSSH_CLIENT=`dpkg -s openssh-client | grep -i "Status:.*install.*ok.*installed" | wc -l` - if [ ${OPENSSH_SERVER} -eq 1 -a ${OPENSSH_CLIENT} -eq 1 ];then + OPENSSH_SERVER=$(dpkg -s openssh-server | grep -i "Status:.*install.*ok.*installed" | wc -l) + OPENSSH_CLIENT=$(dpkg -s openssh-client | grep -i "Status:.*install.*ok.*installed" | wc -l) + if [ ${OPENSSH_SERVER} -eq 1 -a ${OPENSSH_CLIENT} -eq 1 ]; then : else exit 1 From 719b8131576d21f273fb4120d4003a0bf0e8c800 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 6 May 2018 10:33:53 +0100 Subject: [PATCH 16/45] Two separate conditions --- tests/check-ssh.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tests/check-ssh.sh b/tests/check-ssh.sh index 011cf18e..ef65c353 100644 --- a/tests/check-ssh.sh +++ b/tests/check-ssh.sh @@ -47,8 +47,12 @@ case $1 in installed) OPENSSH_SERVER=$(dpkg -s openssh-server | grep -i "Status:.*install.*ok.*installed" | wc -l) OPENSSH_CLIENT=$(dpkg -s openssh-client | grep -i "Status:.*install.*ok.*installed" | wc -l) - if [ ${OPENSSH_SERVER} -eq 1 -a ${OPENSSH_CLIENT} -eq 1 ]; then - : + if [ ${OPENSSH_SERVER} -eq 1 ]; then + if [ ${OPENSSH_CLIENT} -eq 1 ]; then + : + else + exit 1 + fi else exit 1 fi From 5c0c70b2967cd23704c401fcaa1a0d9a52c22a49 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 6 May 2018 10:41:34 +0100 Subject: [PATCH 17/45] hints --- tests/check-ssh.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/check-ssh.sh b/tests/check-ssh.sh index ef65c353..1feb38af 100644 --- a/tests/check-ssh.sh +++ b/tests/check-ssh.sh @@ -51,9 +51,11 @@ case $1 in if [ ${OPENSSH_CLIENT} -eq 1 ]; then : else + echo "OPENSSH_CLIENT ${OPENSSH_CLIENT} != 1" exit 1 fi else + echo "OPENSSH_SERVER ${OPENSSH_SERVER} != 1" exit 1 fi ;; From 9f91551bc6e794e8d31b1813a9aaea952f779589 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 6 May 2018 10:46:12 +0100 Subject: [PATCH 18/45] Tests directory --- src/freedombone-tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/freedombone-tests b/src/freedombone-tests index 6fe801d7..1f266dc4 100755 --- a/src/freedombone-tests +++ b/src/freedombone-tests @@ -760,7 +760,7 @@ function test_stig { ################ ##Check that openssh client and server are installed - bash scripts/check-ssh.sh installed >/dev/null 2>&1 & + bash $STIG_TESTS_DIR/check-ssh.sh installed >/dev/null 2>&1 & stig_spinner $! output "SV-86857r1_rule" $? ${SETLANG} ################ From fa3726b5f90fbec7281ca96883bd0d2a509d9e4c Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 6 May 2018 10:47:46 +0100 Subject: [PATCH 19/45] Tidying --- tests/check-ssh.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/check-ssh.sh b/tests/check-ssh.sh index 1feb38af..ef65c353 100644 --- a/tests/check-ssh.sh +++ b/tests/check-ssh.sh @@ -51,11 +51,9 @@ case $1 in if [ ${OPENSSH_CLIENT} -eq 1 ]; then : else - echo "OPENSSH_CLIENT ${OPENSSH_CLIENT} != 1" exit 1 fi else - echo "OPENSSH_SERVER ${OPENSSH_SERVER} != 1" exit 1 fi ;; From c8fe0145a13f02bfb8469b5ae41d0914fa0a6d8a Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 6 May 2018 12:46:47 +0100 Subject: [PATCH 20/45] Additional firefox telemetry blocking --- src/freedombone-utils-firewall | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/freedombone-utils-firewall b/src/freedombone-utils-firewall index 753e628d..3c5a94f9 100755 --- a/src/freedombone-utils-firewall +++ b/src/freedombone-utils-firewall @@ -53,6 +53,11 @@ function block_firefox_telemetry { # to be on the safe side # Within firefox source code see submit_telemetry_data.py + if ! grep 'telemetry.mozilla' /etc/hosts; then + echo '127.0.0.1 telemetry.mozilla.org' >> /etc/hosts + echo '127.0.0.1 incoming.telemetry.mozilla.org' >> /etc/hosts + fi + if grep "$FIREFOX_TELEMETRY_IP" /etc/firewall.conf; then return fi From 743cd8dd32089666281d7a23d9c12846cac7da0a Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 6 May 2018 12:47:50 +0100 Subject: [PATCH 21/45] quiet --- src/freedombone-utils-firewall | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/freedombone-utils-firewall b/src/freedombone-utils-firewall index 3c5a94f9..d661c008 100755 --- a/src/freedombone-utils-firewall +++ b/src/freedombone-utils-firewall @@ -53,12 +53,12 @@ function block_firefox_telemetry { # to be on the safe side # Within firefox source code see submit_telemetry_data.py - if ! grep 'telemetry.mozilla' /etc/hosts; then + if ! grep -q 'telemetry.mozilla' /etc/hosts; then echo '127.0.0.1 telemetry.mozilla.org' >> /etc/hosts echo '127.0.0.1 incoming.telemetry.mozilla.org' >> /etc/hosts fi - if grep "$FIREFOX_TELEMETRY_IP" /etc/firewall.conf; then + if grep -q "$FIREFOX_TELEMETRY_IP" /etc/firewall.conf; then return fi From 54a6af6963d52e7a0dbbfa0b2e55dc6178450a8f Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 6 May 2018 12:53:44 +0100 Subject: [PATCH 22/45] Add mozilla telemetry to recommended blocked domains --- doc/EN/mobile.org | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/EN/mobile.org b/doc/EN/mobile.org index e7bde0ed..830c7405 100644 --- a/doc/EN/mobile.org +++ b/doc/EN/mobile.org @@ -96,6 +96,8 @@ Now edit the hosts file which was pulled and append: 127.0.0.1 www.google-analytics.com 127.0.0.1 google-analytics.com 127.0.0.1 ssl.google-analytics.com +127.0.0.1 telemetry.mozilla.org +127.0.0.1 incoming.telemetry.mozilla.org #+end_src Then upload the hosts file back again with: From e6f04a7f60514a3c7cf96925848d91adf1bcc1cb Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 6 May 2018 13:01:48 +0100 Subject: [PATCH 23/45] Improve mesh firewall to block common bad guys --- src/freedombone-utils-firewall | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/freedombone-utils-firewall b/src/freedombone-utils-firewall index d661c008..7938d5d0 100755 --- a/src/freedombone-utils-firewall +++ b/src/freedombone-utils-firewall @@ -360,6 +360,32 @@ function mesh_firewall { FIREWALL_FILENAME="${rootdir}/etc/systemd/system/meshfirewall.service" MESH_FIREWALL_SCRIPT=${rootdir}/usr/bin/mesh-firewall + if ! grep -q 'telemetry.mozilla' ${rootdir}/etc/hosts; then + echo '127.0.0.1 telemetry.mozilla.org' >> ${rootdir}/etc/hosts + echo '127.0.0.1 incoming.telemetry.mozilla.org' >> ${rootdir}/etc/hosts + fi + + if ! grep -q 'facebook' ${rootdir}/etc/hosts; then + echo { echo '127.0.0.1 www.facebook.com'; + echo '127.0.0.1 facebook.com'; + echo '127.0.0.1 static.ak.fbcdn.net'; + echo '127.0.0.1 www.static.ak.fbcdn.net'; + echo '127.0.0.1 login.facebook.com'; + echo '127.0.0.1 www.login.facebook.com'; + echo '127.0.0.1 fbcdn.net'; + echo '127.0.0.1 www.fbcdn.net'; + echo '127.0.0.1 fbcdn.com'; + echo '127.0.0.1 www.fbcdn.com'; + echo '127.0.0.1 static.ak.connect.facebook.com'; + echo '127.0.0.1 www.static.ak.connect.facebook.com'; } >> ${rootdir}/etc/hosts + fi + + if ! grep -q 'google' ${rootdir}/etc/hosts; then + { echo '127.0.0.1 www.google-analytics.com'; + echo '127.0.0.1 google-analytics.com'; + echo '127.0.0.1 ssl.google-analytics.com'; } >> ${rootdir}/etc/hosts + fi + { echo '#!/bin/bash'; echo 'iptables -P INPUT ACCEPT'; echo 'ip6tables -P INPUT ACCEPT'; From 9d17c789baf3f92fae1c98bc7cf28e329d5bf96b Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 6 May 2018 18:50:11 +0100 Subject: [PATCH 24/45] No echo --- src/freedombone-utils-firewall | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/freedombone-utils-firewall b/src/freedombone-utils-firewall index 7938d5d0..a0a505ea 100755 --- a/src/freedombone-utils-firewall +++ b/src/freedombone-utils-firewall @@ -366,18 +366,18 @@ function mesh_firewall { fi if ! grep -q 'facebook' ${rootdir}/etc/hosts; then - echo { echo '127.0.0.1 www.facebook.com'; - echo '127.0.0.1 facebook.com'; - echo '127.0.0.1 static.ak.fbcdn.net'; - echo '127.0.0.1 www.static.ak.fbcdn.net'; - echo '127.0.0.1 login.facebook.com'; - echo '127.0.0.1 www.login.facebook.com'; - echo '127.0.0.1 fbcdn.net'; - echo '127.0.0.1 www.fbcdn.net'; - echo '127.0.0.1 fbcdn.com'; - echo '127.0.0.1 www.fbcdn.com'; - echo '127.0.0.1 static.ak.connect.facebook.com'; - echo '127.0.0.1 www.static.ak.connect.facebook.com'; } >> ${rootdir}/etc/hosts + { echo '127.0.0.1 www.facebook.com'; + echo '127.0.0.1 facebook.com'; + echo '127.0.0.1 static.ak.fbcdn.net'; + echo '127.0.0.1 www.static.ak.fbcdn.net'; + echo '127.0.0.1 login.facebook.com'; + echo '127.0.0.1 www.login.facebook.com'; + echo '127.0.0.1 fbcdn.net'; + echo '127.0.0.1 www.fbcdn.net'; + echo '127.0.0.1 fbcdn.com'; + echo '127.0.0.1 www.fbcdn.com'; + echo '127.0.0.1 static.ak.connect.facebook.com'; + echo '127.0.0.1 www.static.ak.connect.facebook.com'; } >> ${rootdir}/etc/hosts fi if ! grep -q 'google' ${rootdir}/etc/hosts; then From dfc1272cb3463f140eddd9aae870cdb0dea39468 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 7 May 2018 15:09:59 +0100 Subject: [PATCH 25/45] Continuous integration build option --- src/freedombone-image | 7 +++++++ src/freedombone-image-customise | 2 ++ src/freedombone-image-make | 2 ++ src/freedombone-image-makefile | 6 ++++-- 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/freedombone-image b/src/freedombone-image index 18dad4a2..cc42d3f8 100755 --- a/src/freedombone-image +++ b/src/freedombone-image @@ -74,6 +74,8 @@ IMAGE_NAME='full' USERNAME="$USER" PASSWORD= +CONTINUOUS_INTEGRATION= + # IP address of the router (gateway) ROUTER_IP_ADDRESS="192.168.1.254" @@ -378,6 +380,10 @@ do shift INTERACTIVE="$1" ;; + --ci) + shift + CONTINUOUS_INTEGRATION="$1" + ;; -g|--generic) shift GENERIC_IMAGE="$1" @@ -614,6 +620,7 @@ make "$IMAGE_TYPE" \ AMNESIC="$AMNESIC" \ SOCIALINSTANCE="$SOCIALINSTANCE" \ EXTERNAL_DRIVE="$EXTERNAL_DRIVE" \ + CONTINUOUS_INTEGRATION="$CONTINUOUS_INTEGRATION" \ LOCAL_NAME="$LOCAL_NAME" # shellcheck disable=SC2181 diff --git a/src/freedombone-image-customise b/src/freedombone-image-customise index 3cc75fc7..4e87358e 100755 --- a/src/freedombone-image-customise +++ b/src/freedombone-image-customise @@ -139,6 +139,8 @@ BMX6_COMMIT='39dd1f2d99ac5a3fa28e92f8173c15039132e181' BMX7_REPO="https://github.com/bmx-routing/bmx7" BMX7_COMMIT='0a82c7c10fef44b259b35e77ab33632aa132d219' +CONTINUOUS_INTEGRATION= + PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin # Whether to use a SATA drive and if so what its device/partition name is diff --git a/src/freedombone-image-make b/src/freedombone-image-make index 0890fe18..8edee308 100755 --- a/src/freedombone-image-make +++ b/src/freedombone-image-make @@ -78,6 +78,7 @@ export AMNESIC export SOCIALINSTANCE export LOCAL_NAME export EXTERNAL_DRIVE +export CONTINUOUS_INTEGRATION # Locate vmdebootstrap program fetched in Makefile basedir=`pwd` @@ -228,6 +229,7 @@ sed -i "s|SOCIALINSTANCE=.*|SOCIALINSTANCE=\"${SOCIALINSTANCE}\"|g" "$TEMP_CUSTO sed -i "s|LOCAL_NAME=.*|LOCAL_NAME=\"${LOCAL_NAME}\"|g" "$TEMP_CUSTOMISE3" sed -i "s|EXTERNAL_DRIVE=.*|EXTERNAL_DRIVE=\"${EXTERNAL_DRIVE}\"|g" "$TEMP_CUSTOMISE3" sed -i 's|#!/bin/bash||g' "$TEMP_CUSTOMISE3" +sed -i "s|CONTINUOUS_INTEGRATION=.*|CONTINUOUS_INTEGRATION=${CONTINUOUS_INTEGRATION}|g" "$TEMP_CUSTOMISE3" cat $TEMP_CUSTOMISE2 $TEMP_CUSTOMISE3 > $TEMP_CUSTOMISE4 if [ -f $TEMP_CUSTOMISE ]; then diff --git a/src/freedombone-image-makefile b/src/freedombone-image-makefile index 5b27f74b..89b2f466 100755 --- a/src/freedombone-image-makefile +++ b/src/freedombone-image-makefile @@ -41,8 +41,10 @@ IMAGE = $(NAME).img ARCHIVE = $(IMAGE).xz SIGNATURE = $(ARCHIVE).sig OWNER = 1000 -XZ = xz --no-warn --verbose --keep --threads=0 -3 -SIGN = -gpg --output $(SIGNATURE) --detach-sig $(ARCHIVE) +if [ ! "$CONTINUOUS_INTEGRATION" ]; + XZ = xz --no-warn --verbose --keep --threads=0 -3 + SIGN = -gpg --output $(SIGNATURE) --detach-sig $(ARCHIVE) +fi # settings for `make test` TEST_SSH_PORT = 2222 From e29bcb7e4a1d2a1cf88c35b9f3a62ddfd45a9cdc Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 7 May 2018 15:15:20 +0100 Subject: [PATCH 26/45] manpage update --- man/freedombone-image.1.gz | Bin 3968 -> 3973 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/man/freedombone-image.1.gz b/man/freedombone-image.1.gz index 64101dcab7b5e1a39fdc4f6c38c98fad9a3e1721..ad3ed5f5d22352b6c83b3ff3a80e1e9682678d7b 100644 GIT binary patch delta 3538 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 H2POajOO49? From 7b00e3f2d15134a115596dd19350510f982a2293 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 7 May 2018 15:25:41 +0100 Subject: [PATCH 27/45] Tidying --- src/freedombone-image | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/freedombone-image b/src/freedombone-image index cc42d3f8..779dc9b0 100755 --- a/src/freedombone-image +++ b/src/freedombone-image @@ -536,7 +536,7 @@ fi cp -r /etc/${PROJECT_NAME}/* $TEMPBUILD_DIR rm -rf $TEMPBUILD_DIR/vendor -chown -R "$CURR_USER":"$CURR_USER" $TEMPBUILD_DIR +chown -R "$CURR_USER": $TEMPBUILD_DIR cd $TEMPBUILD_DIR || exit 24729847 if [[ $MINIMAL_INSTALL == "yes" ]]; then From ad70f564ba11d5f9fe3bb36faea6927db7c3e35c Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 7 May 2018 15:31:43 +0100 Subject: [PATCH 28/45] then --- src/freedombone-image-makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/freedombone-image-makefile b/src/freedombone-image-makefile index 89b2f466..2fad7496 100755 --- a/src/freedombone-image-makefile +++ b/src/freedombone-image-makefile @@ -41,7 +41,7 @@ IMAGE = $(NAME).img ARCHIVE = $(IMAGE).xz SIGNATURE = $(ARCHIVE).sig OWNER = 1000 -if [ ! "$CONTINUOUS_INTEGRATION" ]; +if [ ! "$CONTINUOUS_INTEGRATION" ]; then XZ = xz --no-warn --verbose --keep --threads=0 -3 SIGN = -gpg --output $(SIGNATURE) --detach-sig $(ARCHIVE) fi From b7e2eb4b43308a63942f433f0021bae7e0f38830 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 7 May 2018 15:36:40 +0100 Subject: [PATCH 29/45] makefile condition --- src/freedombone-image-makefile | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/freedombone-image-makefile b/src/freedombone-image-makefile index 2fad7496..6316ac04 100755 --- a/src/freedombone-image-makefile +++ b/src/freedombone-image-makefile @@ -41,10 +41,13 @@ IMAGE = $(NAME).img ARCHIVE = $(IMAGE).xz SIGNATURE = $(ARCHIVE).sig OWNER = 1000 -if [ ! "$CONTINUOUS_INTEGRATION" ]; then +ifeq ("$CONTINUOUS_INTEGRATION", "") + XZ = + SIGN = +else XZ = xz --no-warn --verbose --keep --threads=0 -3 SIGN = -gpg --output $(SIGNATURE) --detach-sig $(ARCHIVE) -fi +endif # settings for `make test` TEST_SSH_PORT = 2222 From c9dbf860fcb2bf870b113cffa6efa08623e8a6f3 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 7 May 2018 15:40:12 +0100 Subject: [PATCH 30/45] fix chown --- src/freedombone-image | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/freedombone-image b/src/freedombone-image index 779dc9b0..3152fc0a 100755 --- a/src/freedombone-image +++ b/src/freedombone-image @@ -653,7 +653,7 @@ do # shellcheck disable=SC2086 mv build/${PROJECT_NAME}*.${im} ${CURR_DIR}/ # shellcheck disable=SC2086 - sudo chown "${CURR_USER}":"${CURR_USER}" ${CURR_DIR}/*.${im} + sudo chown "${CURR_USER}": ${CURR_DIR}/*.${im} fi done From 0c20a62fdd5788978514e6efe1c0d9c115074d29 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 7 May 2018 16:49:17 +0100 Subject: [PATCH 31/45] Combine xz command into a single line --- src/freedombone-image-makefile | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/freedombone-image-makefile b/src/freedombone-image-makefile index 6316ac04..132ccb81 100755 --- a/src/freedombone-image-makefile +++ b/src/freedombone-image-makefile @@ -45,7 +45,7 @@ ifeq ("$CONTINUOUS_INTEGRATION", "") XZ = SIGN = else - XZ = xz --no-warn --verbose --keep --threads=0 -3 + XZ = xz --no-warn --verbose --keep --threads=0 -3 $(IMAGE) SIGN = -gpg --output $(SIGNATURE) --detach-sig $(ARCHIVE) endif @@ -95,7 +95,7 @@ beaglebone: prep $(eval MACHINE = beaglebone) $(MAKE_IMAGE) @rm -f $(ARCHIVE) - $(XZ) $(IMAGE) + $(XZ) @echo "" $(SIGN) @echo "Build complete." @@ -106,7 +106,7 @@ cubieboard2: prep $(eval MACHINE = cubieboard2) $(MAKE_IMAGE) @rm -f $(ARCHIVE) - $(XZ) $(IMAGE) + $(XZ) @echo "" $(SIGN) @echo "Build complete." @@ -117,7 +117,7 @@ pcduino3: prep $(eval MACHINE = pcduino3) $(MAKE_IMAGE) @rm -f $(ARCHIVE) - $(XZ) $(IMAGE) + $(XZ) @echo "" $(SIGN) @echo "Build complete." @@ -128,7 +128,7 @@ cubietruck: prep $(eval MACHINE = cubietruck) $(MAKE_IMAGE) @rm -f $(ARCHIVE) - $(XZ) $(IMAGE) + $(XZ) @echo "" $(SIGN) @echo "Build complete." @@ -140,7 +140,7 @@ a20-olinuxino-lime: prep $(eval IMAGE = $(NAME).img) $(MAKE_IMAGE) rm -f $(ARCHIVE) - $(XZ) $(IMAGE) + $(XZ) @echo "" $(SIGN) @@ -150,7 +150,7 @@ a20-olinuxino-lime2: prep $(eval MACHINE = a20-olinuxino-lime2) $(MAKE_IMAGE) @rm -f $(ARCHIVE) - $(XZ) $(IMAGE) + $(XZ) @echo "" $(SIGN) @echo "Build complete." @@ -161,7 +161,7 @@ a20-olinuxino-micro: prep $(eval MACHINE = a20-olinuxino-micro) $(MAKE_IMAGE) @rm -f $(ARCHIVE) - $(XZ) $(IMAGE) + $(XZ) @echo "" $(SIGN) @echo "Build complete." @@ -172,7 +172,7 @@ i386: prep $(eval MACHINE = all) $(MAKE_IMAGE) @rm -f $(ARCHIVE) - $(XZ) $(IMAGE) + $(XZ) @echo "" $(SIGN) @echo "Build complete." @@ -183,7 +183,7 @@ i686: prep $(eval MACHINE = all) $(MAKE_IMAGE) @rm -f $(ARCHIVE) - $(XZ) $(IMAGE) + $(XZ) @echo "" $(SIGN) @echo "Build complete." @@ -194,7 +194,7 @@ amd64: prep $(eval MACHINE = all) $(MAKE_IMAGE) @rm -f $(ARCHIVE) - $(XZ) $(IMAGE) + $(XZ) @echo "" $(SIGN) @echo "Build complete." @@ -205,7 +205,7 @@ apu: prep $(eval MACHINE = all) $(MAKE_IMAGE) @rm -f $(ARCHIVE) - $(XZ) $(IMAGE) + $(XZ) @echo "" $(SIGN) @echo "Build complete." @@ -220,7 +220,7 @@ qemu-i386: prep # Convert image to qemu format qemu-img convert -O qcow2 $(NAME).img $(NAME).qcow2 @rm -f $(ARCHIVE) - $(XZ) $(IMAGE) + $(XZ) @echo "" $(SIGN) @echo "Build complete." @@ -232,7 +232,7 @@ qemu-x86_64: prep # Convert image to qemu format qemu-img convert -O qcow2 $(NAME).img $(NAME).qcow2 @rm -f $(ARCHIVE) - $(XZ) $(IMAGE) + $(XZ) @echo "" $(SIGN) @echo "Build complete." From df942c46ce8c194aab5e2746b76b1fab686b66e5 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 7 May 2018 17:34:54 +0100 Subject: [PATCH 32/45] Invert logic --- src/freedombone-image-makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/freedombone-image-makefile b/src/freedombone-image-makefile index 132ccb81..f034b842 100755 --- a/src/freedombone-image-makefile +++ b/src/freedombone-image-makefile @@ -42,11 +42,11 @@ ARCHIVE = $(IMAGE).xz SIGNATURE = $(ARCHIVE).sig OWNER = 1000 ifeq ("$CONTINUOUS_INTEGRATION", "") - XZ = - SIGN = -else XZ = xz --no-warn --verbose --keep --threads=0 -3 $(IMAGE) SIGN = -gpg --output $(SIGNATURE) --detach-sig $(ARCHIVE) +else + XZ = + SIGN = endif # settings for `make test` From bbc0bc991099de53bcb39164568d699403f10688 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 7 May 2018 18:29:24 +0100 Subject: [PATCH 33/45] Tidying --- src/freedombone-image | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/freedombone-image b/src/freedombone-image index 3152fc0a..2c468219 100755 --- a/src/freedombone-image +++ b/src/freedombone-image @@ -536,7 +536,7 @@ fi cp -r /etc/${PROJECT_NAME}/* $TEMPBUILD_DIR rm -rf $TEMPBUILD_DIR/vendor -chown -R "$CURR_USER": $TEMPBUILD_DIR +chown -R "$CURR_USER":"$CURR_USER" $TEMPBUILD_DIR cd $TEMPBUILD_DIR || exit 24729847 if [[ $MINIMAL_INSTALL == "yes" ]]; then @@ -648,12 +648,12 @@ fi for im in ${image_types[@]} do # shellcheck disable=SC2012,SC2086 - no_of_files=$(ls -afq build/${PROJECT_NAME}*.${im} | wc -l) - if (( no_of_files > 0 )); then + no_of_files=$(ls -l build/${PROJECT_NAME}*.${im} | wc -l) + if [ "$no_of_files" -gt 0 ]; then # shellcheck disable=SC2086 mv build/${PROJECT_NAME}*.${im} ${CURR_DIR}/ # shellcheck disable=SC2086 - sudo chown "${CURR_USER}": ${CURR_DIR}/*.${im} + sudo chown "${CURR_USER}":"${CURR_USER}" ${CURR_DIR}/*.${im} fi done From 2c1cb793238ce898cf5708bb01c9a95143339646 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 7 May 2018 18:46:31 +0100 Subject: [PATCH 34/45] Continuous integration documentation --- man/freedombone-image.1.gz | Bin 3973 -> 4474 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/man/freedombone-image.1.gz b/man/freedombone-image.1.gz index ad3ed5f5d22352b6c83b3ff3a80e1e9682678d7b..02604219cda8b741269b531f77179b797391314a 100644 GIT binary patch literal 4474 zcmV-=5rys_iwFSPknman1GQRVbK5wQ{mx&3(`}V!wk#>}>`cw&E?Xztilf?Ca#`|b zQ{Jg5kc1?xNrFR=l9kGjzt;_br0gU!*{Vy;Bq9j{=nC4+m@jUYv*qU&7}nyx zmeoepzldQY?i=i`kh#KDDeg;Y?cP)=u7(=dv3V3&sn&^@-3Xbcm9o}7tV~m@O5At% zg;`@`xLK%LxW_cKurI~^8(rC2T+WvQ>+SH~?8ZGi6ZcD%m?C}lFcJ5-zt)?k!Ujws z);gnYT5<0+qCe90aH9%UVTbnzWj_^$Zsoebn5=)x+AZWWRV|7pk9li5alexlR7|=U zR;n}@QJH_Kq!t?u8R$+^Wq6v4dvA?gR~0PaZkzrJZh$GWL;o&oWGxdV?)RB2UW`?p zxc%r<+(T8+_XFM7>$R>AC5l z>@)XS9KNrA`1vO{AWwh#i~ChJ{O@lnZ-(u2zIy!mr(ZG3$v>MfSCe<|CQh%Hs#Ha) zibO-N2~--Z;NU71dtGn6%%Ab*p;dKLdRs&hln+O_k(G>1CdJkKZv2jR{(JA2{tdss z)rXte#pIp1TTZSJrY40@k1_{*$i*1}WF)e!b2B&Deyfvh5TGeDBU9`jAgH&h3k(vj zUYc4JHNXj1F>x(*fr0Tsf)p7kjn{CpKfvl^PpGGOKbU@^H8wWhy} zN37cfy?@GEIG9G*t!V(Wly(ScLvvDOvaC%hpvY9&2l|=IWQz@o@AOEGL}6;4s<#7O zTa~T9ABjbg&=rDxVn|y+E3ZQ;Nlbabv*$hmdD&MmXPVNBIc<;r$E`wSW<$DjN<=sw zIjz_RyTjaP6^8|A7gM-RpG3I0DMJ~8LLQuqCosaydFd>Ku~}! zRif92E^w4Gd7w@BfJ(vE>e^HcgNCv3b?iTf0mbQUU6-%M<8@t*QZ;gGjZC!}2On7! zVp1jBaqA^;0l-zro!n|b2l|n9yKR{yl-fvVF3A#1U~w2G0rGw7>sy7iFx2A2e%d1P z+E=4L`yZUZtjN>C{@Ny}`C|2EaW}twUBMBn;unFZB0ta@6qY}2P6TC)ae>6F>ts8k zoY*Y}B|=+bxb)k{upuqr0%}+#WJssD)L<8c4zN-zK)!kmjHW2-nNy+hKE-ou!#=Mq(}Z-D3|l%D({HFL)M)Y>S%=NaCQ!xmV#)U^Bf~#M7`7$~I;MoasUkus4RbtSKV$ zd<6wn%CdN)u{E60P2l_sM#hw^{Q^Q;F=R{2ClF{XCu@XUn4gpg{>m{D$k%HYBIiI# zVSwkiqHN+!Cy)b3(;2@XYEU~4af%6PYyxe0U0pNdg!5uXq`6o!Jl*C z2BZi4_S(rR|Sme{l$-0?5AG==Se9AZS)X``;B z-fVe4ijdqIJ1hkaRK#l{fDQ1eWaF_-n?1{k0Zd=gEs@qs!mOeuaV5*wJ z(FurPaLaM8uOWx2c30*2g2tQS;&uu~J--r@xj0$O!L5gj`MVD%Vs_0mc2+oIn85bd z$GAglAli%!)`=A;9|dI!NaQzAsoF!EjE3-Pn?uQWDwB0t?WhR$xk7rg1+`H&u{>X? zs;w+7ZJ}_)+SkE=;+A%-S?M|<6eHPgb*yXWgKRz2M-pyYIDnCO9qs%AMlcapBV=KZ zo2^)x>eQ!cOpzexF~q{tl>!>vf0Dii_z z1QlG^xkM#&4 zxg6W@=*>~gc?$5XgbQiCSHzXdP`T)$p0`s7+N5Q-Q^zvHeb2>IVZo7l@FPuoO2(m3 zS5y`0;+S8ytTrg^h}Z^N-_6HH%c#}kB=(&kM`tJ~j2wrK^=3niwH25=5Qxw59-=bx z0X#EqIFNf4Y8%!eqpbBK6cY^AaT+m6DK=tR)mn@S5vagnD^@gTCO;l1NHhoy2pzdf zTfbtRc--iYZd(^rd+Zg9t)ApP1_EubC2Rr8rX#a0yD1$1b>;^@3xGY&x}K=AEY6Bf z>4k|+3L&s=MRy!^*dpXR*w%=$%F#aBz){HyBtQUK%cDPvo)-rHKg1B?lBffSK2+)1 zk3YWrFLCkmP4;m#8V#P15ca3P&u&+DlXv2Ja`ARHClavo`BQQe$f@gVd+xQ0LStja z9NXn5UHg}LoKr|UJQpvogl_|keoM?A#n6X-H39{YBXVDgyeFfkq*>EF-<|46#Sdpl zF&@t$T)dyXnYFy;p+FRK^@0OE>0wiX~d5lZMC?^)-cW zfr_JUL0JWE>+7Z5kurXxqo&Yr;A}qBgc#@*)$hM@`?c-7Qs!JPXP5s@>y@nny>*X6 zA<1ndO0Hm?pbTjsqNE+y=#fDN?{>Uy&ou_L@*wE^dWyeq7k9`;+$DX^`o4NDfWWWd zxSof&4V-s=aSjMPfWlNM7|9=YrX5e(fvZ<7yN<1sDdo1NM1&zK z)An4t!q6*9ro;*n-LeLOm`D#^KIYby>J>eO+6$dhsD^S$Cmcnb0ub}6gX?Di-LWyX z^=-Yr4Cc{20?jQ0oB942p1r*0d+;HneUlD*E&Pspu*omp&8G9!QjEpj@?2crf`^d( zC+@W*(-4sJ%%Ri?$7&{6^f35SNN5PK{o|;vv+NN<3xMP%4IKVl!b3Mvf)Y?Q6OQho{)~suSLcixUqY{S%QOq## zzTbkMaL<)Ph}0Yrp7KSfZPy>^ZR=~;rhphM;zmclCw~lHGCGm#)8i&jpnkq|a15VI zcc809A||ohrY5T7v=M3~!YkPY0|<3r1JLu0J_XQ%44hMCL6&zKq@WIkYf84-(<-hd z$<_>lZ;oIUxpX&P-Imyf(8cHET-6@!X3O#>`;=AA+L!7Au(LsCwcc{21 z9Es~5TrE#S^%=RRJxU!&8!A`OX^~)vt{V>_5HR0NlQ9?MPSyZ3MfDRgL8@qoZ+DvE zNE;j_gyK_TiJIMt4g34Gw(o}6Bk@=#UPj`>p~`Q0FaS?0svZe;?LF?)r8{k@>);Z$ zaA6TN3Am}WefVa4gw+B-l79QKJ<#h8Di{L2_?D(oIFw-RcE=b1MOS)I6k(xTy6|p6 zM@aMO>iy#OZ-NfIDS|zzUA)t9)R$$cKnmQc!?O-=6x`7Dd%f|vf~cs|O??f3#w2i2 zMhA72+gc{1iZ;$`+m?!Lj?UXdT zb5&?QeWtbS1tMztxg^t`3H57BeurPV&kuZl8+G2m_x<6PtB4q;!J=ND>JbHvbvcU- zc0O6oE?lz&dFOI^KAX%1bx;OTV13MOg5+&$(w*mUI$;ZW77&vCDY-T^KqxUd-LTb9 zecg7{Xhpu&zB$m(TCVwYe4ymwuG2?%_8yp6ZRp9N!{hm4!QG)Zw~K3P5l#OAQZ)xe zIlHzpp7fX+A1HeixxBWVtR`^H4B^q#-1E7%8Z;Sik1+Hn*J;lji(%M zA#CHTcrrxWlTTzBqAJ{*asufj1*zpWRFH*GRFSnq2F6cj)_=X-+ z?}LQ!woN5UvhJY8oqV*@29J%EgSP4Nw`;%hS29P+<0#Ts8z&J!gNt`82PM1@=Wfp; zem~Op&z^f>J~nii_8d_~d#?W(EZ=~syONDx@10(UcQLaUwj&&LKWyfiCE0=RmgK(g zXREhjA}$tlc=O%jZYii&cXi7jQ;6k<gcD5chn8d4txMu93hILTl@V=I8zU2n$$ui?z-^@GNGNv8SKP* zZ>pqU)}x}!VQo$@R31|kl{dN8q^ZY`?9x=La1$1L?j-Z&5tEI7qkBRh1~Ge>Jkbz2 zHt!V~lmj6ggO1DBP3EcwAD?x;iTo)S@$)UgL&kx=w<-woxPU-|0wpT5hi7-r(nBis|8#6H2* z_ioTy+>61V+OY#M+|=TQ_~pOZWq1tzsdD$WGo=1jdwLV35_>LMOMG1qd_3ut8orvN zZ!YYs@puE3H}MGbu$ro5+}jHV#}$&+md-L%oly1bOyRz8a8r(tZ6bzyF-9dj-tYJ0 zZJlRhU_w2P=%*vMOhNdiVegwT4trGYI~VEgf;ZgjCI?XPF=3+G-Z{ClYCm1@eMo!6 zRH@(7?Z)-Hl;&2>POClMW~N0)7nJDY%Iv9%H5H$TNU>LOpoxK_++Ber-zxsnAZ|7Y z3Jlagq~Ni(wrSf4le^X1#qA(EH?g=jHR4Jx{wFr^(YF&|(SMCbaTUE+@vC-~CnKW& M19m#KX80-q0PlaE@&Et; literal 3973 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 From 0537f73da0191be4788fa3a818b6bc67d6cda807 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 7 May 2018 18:59:19 +0100 Subject: [PATCH 35/45] Option to run the build script as root --- man/freedombone-image.1.gz | Bin 4474 -> 4526 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/man/freedombone-image.1.gz b/man/freedombone-image.1.gz index 02604219cda8b741269b531f77179b797391314a..6be802ac3303e93e2b90d00a0d426f657089a402 100644 GIT binary patch delta 4380 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 Date: Mon, 7 May 2018 19:01:45 +0100 Subject: [PATCH 36/45] password --- man/freedombone-image.1.gz | Bin 4526 -> 4527 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/man/freedombone-image.1.gz b/man/freedombone-image.1.gz index 6be802ac3303e93e2b90d00a0d426f657089a402..c70a24e35756239c6835c9f55b44f6ad50b92826 100644 GIT binary patch delta 603 zcmV-h0;K(}Bd;R{ABzY8f0VHXVh?}2c2eDvP~Um;cXXjY>UgM$chnZm4tx_>96^i1 zT>C?oaJe2XH>sCOBzEI(W+==MxBxW7|MjM5GA;dId@FRe4y6(Ch~vRT}T|2 zV#oHk!>y4#G~9)__^2vMHGDn7$=IzdzT+3Z7iYg8MPIyeA?4HNv997oN1Z)wQt7g0 zwn6g!%1=iqZTGDs5+B`i8xCaItLZ=gV;t*Z97~Mk`#N~*P<0<4`6Ksze2R3_NM2M? z9k1}U3dJ?|i=uq`Xj{{#3b}?JTRm)xh2+sl=I!)-+#N3}0M2Er;LJ(XTP=tMPaP8#M6<>#*LcWZXLo z2FDfB*_LiORGm;=>}=zH`{0%w9~(&w_hO71cf8;4$J;v3#sGlpKpaZK7*G<KxRt=le)VCmA_T|dx*H%AY!o>{UKwIwY5##?3moG-Y#wj(YcAm pwW$&Ga`8X0iI0Ba0j~eoXcSk`dlkQGcX=`*`akdkkrkdR002r*Hjn@S delta 602 zcmV-g0;T=0Bd#L`ABzY8aFekHVh?}4Nr-#;hMT{d3vE$HKTW)&ZfJJk3&7$CQ54-x_^>C+2EmY#J8-F1a+IgJ8POSH)O8RX*D!Lrj<^)6KF*Q;7kZVnvdi=;PO|=R) zVR7b8GG87s+4wiQC-lQ0W)G7m8Y0K$vm%3XAcSMkb@{rzvX{IzNi%Y zv%eH>ZQ~K)?!m=JRZ)iFTM^E|Ze{Tuzwj+M`~4{T;zbK7pEi$m6(>6C>}iuqmo<|N zlJ8f3IzmOeZ~c#G=$5;0;K*K0|M?%|SQq11VkBSF!AXaz`}oKox!vP4qnk$ZqIl}) zgfCGjoVgzo<(psm+v`7lmsx)?%*3BZcqTrHeS&Y_yFqJlF9v^V#}34BQ;Qekm;YuT z;xY86%H3>dS^cdB_BKf+&Rn#n`MP5GzS3zq{EUu%gkfKe#~aw7iAPw6^;RY0-dQj> zu8_sHbh)AGgvw!O8~2k3x8(TPNMg7bW0bbz{eC~*)_FDtNYvwqK01H4%bbKK4Uc4` zeBq?z5bW6!-S#P;_53A}<Z2T?2QFFO3pI4t1y^CD_y#U2z z>P0-8!OH8kx&vbQ4l_}0W1r%TYJXSZo22%LMpHAY(~N7zDa|77wAy1f(?Ggcp)4F% zW>2!1imz)Vv=Rpn8wg6&-4z)8t>T|S#LWf~i@oR%8GEd)ZQ35k Date: Tue, 8 May 2018 10:28:08 +0100 Subject: [PATCH 37/45] Show public key as a qrcode --- src/freedombone-controlpanel-user | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/freedombone-controlpanel-user b/src/freedombone-controlpanel-user index 1135ef35..f78ee5f2 100755 --- a/src/freedombone-controlpanel-user +++ b/src/freedombone-controlpanel-user @@ -434,6 +434,10 @@ function show_gpg_key { dialog --title $"My PGP/GPG Key" \ --backtitle $"Freedombone User Control Panel" \ --msgbox $"Email Address: $MY_EMAIL_ADDRESS\\n\\nKey ID: $GPG_ID\\n\\nFingerprint: $GPG_FINGERPRINT\\n\\nCreated: $GPG_DATE" 12 70 + clear + echo $"Your GPG/PGP public key:" + gpg --armor --export "$GPG_ID" | qrencode -t UTF8 + any_key } function show_full_gpg_key { From f2c9325b9bf6903df2f50d76a88ac8a5775099e1 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 8 May 2018 13:29:38 +0100 Subject: [PATCH 38/45] Show QR code for selected about screen entries on control panel --- src/freedombone-controlpanel | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/freedombone-controlpanel b/src/freedombone-controlpanel index 72b96d14..402a3a67 100755 --- a/src/freedombone-controlpanel +++ b/src/freedombone-controlpanel @@ -331,7 +331,20 @@ function show_domains { height=$(tput lines) # shellcheck disable=SC2068 - dialog --backtitle $"Freedombone Control Panel" --title $"Domains" --menu $"Use Shift+cursors to select and copy onion addresses" $((height-4)) $((width-4)) $((height-4)) "${W[@]}" 3>&2 2>&1 1>&3 + selected=$(dialog --backtitle $"Freedombone Control Panel" --title $"Domains" --menu $"Use Shift+cursors to select and copy onion addresses" $((height-4)) $((width-4)) $((height-4)) "${W[@]}" 3>&2 2>&1 1>&3) + if [[ "$selected" != *'.onion'* ]]; then + return + fi + intermediate=$(echo "$selected" | awk -F '.' '{print $2}') + if [[ "$intermediate" == *'/'* ]]; then + onion_addr=$(echo "$intermediate" | awk -F ' ' '{print $3}').onion + else + onion_addr="$selected".onion + fi + clear + echo "$onion_addr" + echo -n "$onion_addr" | qrencode -t UTF8 + any_key } function show_users { From 6d66aacf2ef0747ce00634c4def7e3b83c4bc416 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 8 May 2018 13:45:18 +0100 Subject: [PATCH 39/45] Extracting the onion address from about array --- src/freedombone-controlpanel | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/src/freedombone-controlpanel b/src/freedombone-controlpanel index 402a3a67..ce06b3bf 100755 --- a/src/freedombone-controlpanel +++ b/src/freedombone-controlpanel @@ -332,15 +332,39 @@ function show_domains { # shellcheck disable=SC2068 selected=$(dialog --backtitle $"Freedombone Control Panel" --title $"Domains" --menu $"Use Shift+cursors to select and copy onion addresses" $((height-4)) $((width-4)) $((height-4)) "${W[@]}" 3>&2 2>&1 1>&3) - if [[ "$selected" != *'.onion'* ]]; then + if [ ! "$selected" ]; then return fi - intermediate=$(echo "$selected" | awk -F '.' '{print $2}') + # obtain the addresses from the key by itterating through + # the array. This is quite crude and maybe there's a better way + key_found= + selected_addresses= + for key in "${W[@]}"; + do + if [ $key_found ]; then + selected_addresses="$key" + break + fi + if [[ "$key" == "$selected" ]]; then + key_found=1 + fi + done + # Was the key matched? + if [ ! "$selected_addresses" ]; then + return + fi + # addresses were found - is this an onion? + if [[ "$selected_addresses" != *".onion"* ]]; then + return + fi + # There are two forms of addresses: "x / y.onion" and "x.onion" + intermediate=$(echo "$selected_addresses" | awk -F '.' '{print $2}') if [[ "$intermediate" == *'/'* ]]; then onion_addr=$(echo "$intermediate" | awk -F ' ' '{print $3}').onion else - onion_addr="$selected".onion + onion_addr="$selected_addresses".onion fi + # show the onion address as a QR code clear echo "$onion_addr" echo -n "$onion_addr" | qrencode -t UTF8 From 1cce575ccd04ad694b3f6fde775d2db463eba100 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 8 May 2018 13:48:12 +0100 Subject: [PATCH 40/45] double --- src/freedombone-controlpanel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/freedombone-controlpanel b/src/freedombone-controlpanel index ce06b3bf..8c0e8582 100755 --- a/src/freedombone-controlpanel +++ b/src/freedombone-controlpanel @@ -359,7 +359,7 @@ function show_domains { fi # There are two forms of addresses: "x / y.onion" and "x.onion" intermediate=$(echo "$selected_addresses" | awk -F '.' '{print $2}') - if [[ "$intermediate" == *'/'* ]]; then + if [[ "$intermediate" == *'//'* ]]; then onion_addr=$(echo "$intermediate" | awk -F ' ' '{print $3}').onion else onion_addr="$selected_addresses".onion From 99cf8b441990e3439c9e1d740371bf64e1cef211 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 8 May 2018 13:56:52 +0100 Subject: [PATCH 41/45] Better detection of onion address --- src/freedombone-controlpanel | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/freedombone-controlpanel b/src/freedombone-controlpanel index 8c0e8582..a194349a 100755 --- a/src/freedombone-controlpanel +++ b/src/freedombone-controlpanel @@ -358,9 +358,8 @@ function show_domains { return fi # There are two forms of addresses: "x / y.onion" and "x.onion" - intermediate=$(echo "$selected_addresses" | awk -F '.' '{print $2}') - if [[ "$intermediate" == *'//'* ]]; then - onion_addr=$(echo "$intermediate" | awk -F ' ' '{print $3}').onion + if [[ "$selected_addresses" == *'/'* ]]; then + onion_addr=$(echo "$selected_addresses" | awk -F '/' '{print $2}' | awk -F ' ' '{print $2}').onion else onion_addr="$selected_addresses".onion fi From ddfd249c82fe2538860dfba93fa7466cc11a72e9 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 8 May 2018 13:58:11 +0100 Subject: [PATCH 42/45] Index --- src/freedombone-controlpanel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/freedombone-controlpanel b/src/freedombone-controlpanel index a194349a..e72df4f7 100755 --- a/src/freedombone-controlpanel +++ b/src/freedombone-controlpanel @@ -359,7 +359,7 @@ function show_domains { fi # There are two forms of addresses: "x / y.onion" and "x.onion" if [[ "$selected_addresses" == *'/'* ]]; then - onion_addr=$(echo "$selected_addresses" | awk -F '/' '{print $2}' | awk -F ' ' '{print $2}').onion + onion_addr=$(echo "$selected_addresses" | awk -F '/' '{print $2}' | awk -F ' ' '{print $1}').onion else onion_addr="$selected_addresses".onion fi From 73fe5d686b2a252980b10dd040d3006744173a96 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 8 May 2018 13:59:40 +0100 Subject: [PATCH 43/45] Too many onions --- src/freedombone-controlpanel | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/freedombone-controlpanel b/src/freedombone-controlpanel index e72df4f7..f0184032 100755 --- a/src/freedombone-controlpanel +++ b/src/freedombone-controlpanel @@ -359,9 +359,9 @@ function show_domains { fi # There are two forms of addresses: "x / y.onion" and "x.onion" if [[ "$selected_addresses" == *'/'* ]]; then - onion_addr=$(echo "$selected_addresses" | awk -F '/' '{print $2}' | awk -F ' ' '{print $1}').onion + onion_addr=$(echo "$selected_addresses" | awk -F '/' '{print $2}' | awk -F ' ' '{print $1}') else - onion_addr="$selected_addresses".onion + onion_addr="$selected_addresses" fi # show the onion address as a QR code clear From 863eca60fb2c8a09bb3fdf8356b872d3123774da Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 8 May 2018 14:02:43 +0100 Subject: [PATCH 44/45] Loop on the about screen --- src/freedombone-controlpanel | 247 ++++++++++++++++++----------------- 1 file changed, 125 insertions(+), 122 deletions(-) diff --git a/src/freedombone-controlpanel b/src/freedombone-controlpanel index f0184032..dcbe8277 100755 --- a/src/freedombone-controlpanel +++ b/src/freedombone-controlpanel @@ -224,150 +224,153 @@ function show_tor_bridges { function show_domains { read_config_param "DEFAULT_DOMAIN_NAME" - W=() - - W+=("IPv4" "$(get_ipv4_address) / $(get_external_ipv4_address)") - ipv6_address="$(get_ipv6_address)" - if [ ${#ipv6_address} -gt 0 ]; then - W+=("IPv6" "${ipv6_address}") - fi - - if [ -f /etc/ssh/ssh_host_rsa_key.pub ]; then - W+=("ssh rsa sha256" "$(awk '{print $2}' /etc/ssh/ssh_host_rsa_key.pub | base64 -d | sha256sum -b | awk '{print $1}' | xxd -r -p | base64 | sed 's|=||g')") - fi - if [ -f /etc/ssh/ssh_host_ed25519_key.pub ]; then - W+=("ssh ed25519 sha256" "$(awk '{print $2}' /etc/ssh/ssh_host_ed25519_key.pub | base64 -d | sha256sum -b | awk '{print $1}' | xxd -r -p | base64 | sed 's|=||g')") - fi - - if grep -q "ssh onion domain" "$COMPLETION_FILE"; then - domain_onion=$(grep 'ssh onion domain' "${COMPLETION_FILE}" | awk -F ':' '{print $2}') - W+=("ssh" "${DEFAULT_DOMAIN_NAME} / ${domain_onion}") - fi - if grep -q "email onion domain" "$COMPLETION_FILE"; then - domain_onion=$(grep 'email onion domain' "${COMPLETION_FILE}" | awk -F ':' '{print $2}') - W+=("Email" "${DEFAULT_DOMAIN_NAME} / ${domain_onion}") - fi - if grep -q "sks onion domain" "$COMPLETION_FILE"; then - read_config_param "KEYSERVER_DOMAIN_NAME" - domain_onion=$(grep 'sks onion domain' "${COMPLETION_FILE}" | awk -F ':' '{print $2}') - W+=("SKS" "${KEYSERVER_DOMAIN_NAME} / ${domain_onion}") - fi - - INTRODUCER_FILENAME=/home/tahoelafs/data/private/introducer.furl - if [ -f $INTRODUCER_FILENAME ]; then - W+=("Tahoe-LAFS" "$(cat $INTRODUCER_FILENAME)") - fi - - show_tor_bridges - - # shellcheck disable=SC2068 - for app_name in ${APPS_INSTALLED_NAMES[@]} + while true do - if ! grep -q "SHOW_ON_ABOUT=1" "/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-${app_name}"; then - continue + W=() + + W+=("IPv4" "$(get_ipv4_address) / $(get_external_ipv4_address)") + ipv6_address="$(get_ipv6_address)" + if [ ${#ipv6_address} -gt 0 ]; then + W+=("IPv6" "${ipv6_address}") fi - # handle the foibles of capitalisation - if ! grep -q "${app_name} domain" "$COMPLETION_FILE"; then - app_name_upper=$(echo "${app_name}" | awk '{print toupper($0)}') - if grep -q "${app_name_upper} domain" "$COMPLETION_FILE"; then - app_name=${app_name_upper} - else - app_name_first_upper="$(tr '[:lower:]' '[:upper:]' <<< "${app_name:0:1}")${app_name:1}" - if grep -q "${app_name_first_upper} domain" "$COMPLETION_FILE"; then - app_name=${app_name_first_upper} + if [ -f /etc/ssh/ssh_host_rsa_key.pub ]; then + W+=("ssh rsa sha256" "$(awk '{print $2}' /etc/ssh/ssh_host_rsa_key.pub | base64 -d | sha256sum -b | awk '{print $1}' | xxd -r -p | base64 | sed 's|=||g')") + fi + if [ -f /etc/ssh/ssh_host_ed25519_key.pub ]; then + W+=("ssh ed25519 sha256" "$(awk '{print $2}' /etc/ssh/ssh_host_ed25519_key.pub | base64 -d | sha256sum -b | awk '{print $1}' | xxd -r -p | base64 | sed 's|=||g')") + fi + + if grep -q "ssh onion domain" "$COMPLETION_FILE"; then + domain_onion=$(grep 'ssh onion domain' "${COMPLETION_FILE}" | awk -F ':' '{print $2}') + W+=("ssh" "${DEFAULT_DOMAIN_NAME} / ${domain_onion}") + fi + if grep -q "email onion domain" "$COMPLETION_FILE"; then + domain_onion=$(grep 'email onion domain' "${COMPLETION_FILE}" | awk -F ':' '{print $2}') + W+=("Email" "${DEFAULT_DOMAIN_NAME} / ${domain_onion}") + fi + if grep -q "sks onion domain" "$COMPLETION_FILE"; then + read_config_param "KEYSERVER_DOMAIN_NAME" + domain_onion=$(grep 'sks onion domain' "${COMPLETION_FILE}" | awk -F ':' '{print $2}') + W+=("SKS" "${KEYSERVER_DOMAIN_NAME} / ${domain_onion}") + fi + + INTRODUCER_FILENAME=/home/tahoelafs/data/private/introducer.furl + if [ -f $INTRODUCER_FILENAME ]; then + W+=("Tahoe-LAFS" "$(cat $INTRODUCER_FILENAME)") + fi + + show_tor_bridges + + # shellcheck disable=SC2068 + for app_name in ${APPS_INSTALLED_NAMES[@]} + do + if ! grep -q "SHOW_ON_ABOUT=1" "/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-${app_name}"; then + continue + fi + + # handle the foibles of capitalisation + if ! grep -q "${app_name} domain" "$COMPLETION_FILE"; then + app_name_upper=$(echo "${app_name}" | awk '{print toupper($0)}') + if grep -q "${app_name_upper} domain" "$COMPLETION_FILE"; then + app_name=${app_name_upper} + else + app_name_first_upper="$(tr '[:lower:]' '[:upper:]' <<< "${app_name:0:1}")${app_name:1}" + if grep -q "${app_name_first_upper} domain" "$COMPLETION_FILE"; then + app_name=${app_name_first_upper} + fi fi fi - fi - if [ ${#app_name} -gt 0 ]; then - icann_address=$(get_app_icann_address "$app_name") - if grep -q "SHOW_ICANN_ADDRESS_ON_ABOUT=0" "/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-${app_name}"; then - icann_address='-' - fi - if [[ "$ONION_ONLY" != 'no' ]]; then - if [[ "${icann_address}" != "${LOCAL_NAME}.local" ]]; then + if [ ${#app_name} -gt 0 ]; then + icann_address=$(get_app_icann_address "$app_name") + if grep -q "SHOW_ICANN_ADDRESS_ON_ABOUT=0" "/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-${app_name}"; then icann_address='-' fi - fi - onion_address=$(get_app_onion_address "$app_name") - if [ ${#onion_address} -eq 0 ]; then - onion_address="-" - fi - - if [[ "${icann_address}" != '-' ]]; then - if [[ "${onion_address}" != '-' ]]; then - W+=("${app_name}" "${icann_address} / ${onion_address}") - else - W+=("${app_name}" "${icann_address}") + if [[ "$ONION_ONLY" != 'no' ]]; then + if [[ "${icann_address}" != "${LOCAL_NAME}.local" ]]; then + icann_address='-' + fi + fi + onion_address=$(get_app_onion_address "$app_name") + if [ ${#onion_address} -eq 0 ]; then + onion_address="-" fi - else - W+=("${app_name}" "${onion_address}") - fi - if grep -q "mobile${app_name} onion domain" "$COMPLETION_FILE"; then - onion_address=$(get_app_onion_address "${app_name}" "mobile") if [[ "${icann_address}" != '-' ]]; then - W+=("${app_name} (mobile)" "${icann_address} / ${onion_address}") + if [[ "${onion_address}" != '-' ]]; then + W+=("${app_name}" "${icann_address} / ${onion_address}") + else + W+=("${app_name}" "${icann_address}") + fi else - W+=("${app_name} (mobile)" "${onion_address}") + W+=("${app_name}" "${onion_address}") + fi + + if grep -q "mobile${app_name} onion domain" "$COMPLETION_FILE"; then + onion_address=$(get_app_onion_address "${app_name}" "mobile") + if [[ "${icann_address}" != '-' ]]; then + W+=("${app_name} (mobile)" "${icann_address} / ${onion_address}") + else + W+=("${app_name} (mobile)" "${onion_address}") + fi fi fi - fi - done + done - if grep -q "rss reader domain" "$COMPLETION_FILE"; then - if [ -d /var/lib/tor/hidden_service_ttrss ]; then - domain_onion=$(cat /var/lib/tor/hidden_service_ttrss/hostname) - W+=("RSS Reader" "${domain_onion}") + if grep -q "rss reader domain" "$COMPLETION_FILE"; then + if [ -d /var/lib/tor/hidden_service_ttrss ]; then + domain_onion=$(cat /var/lib/tor/hidden_service_ttrss/hostname) + W+=("RSS Reader" "${domain_onion}") + fi + if [ -d /var/lib/tor/hidden_service_mobilerss ]; then + domain_onion=$(cat /var/lib/tor/hidden_service_mobilerss/hostname) + W+=("RSS mobile" "${domain_onion}") + fi fi - if [ -d /var/lib/tor/hidden_service_mobilerss ]; then - domain_onion=$(cat /var/lib/tor/hidden_service_mobilerss/hostname) - W+=("RSS mobile" "${domain_onion}") - fi - fi - width=$(tput cols) - height=$(tput lines) + width=$(tput cols) + height=$(tput lines) - # shellcheck disable=SC2068 - selected=$(dialog --backtitle $"Freedombone Control Panel" --title $"Domains" --menu $"Use Shift+cursors to select and copy onion addresses" $((height-4)) $((width-4)) $((height-4)) "${W[@]}" 3>&2 2>&1 1>&3) - if [ ! "$selected" ]; then - return - fi - # obtain the addresses from the key by itterating through - # the array. This is quite crude and maybe there's a better way - key_found= - selected_addresses= - for key in "${W[@]}"; - do - if [ $key_found ]; then - selected_addresses="$key" + # shellcheck disable=SC2068 + selected=$(dialog --backtitle $"Freedombone Control Panel" --title $"Domains" --menu $"Use Shift+cursors to select and copy onion addresses" $((height-4)) $((width-4)) $((height-4)) "${W[@]}" 3>&2 2>&1 1>&3) + if [ ! "$selected" ]; then break fi - if [[ "$key" == "$selected" ]]; then - key_found=1 + # obtain the addresses from the key by itterating through + # the array. This is quite crude and maybe there's a better way + key_found= + selected_addresses= + for key in "${W[@]}"; + do + if [ $key_found ]; then + selected_addresses="$key" + break + fi + if [[ "$key" == "$selected" ]]; then + key_found=1 + fi + done + # Was the key matched? + if [ ! "$selected_addresses" ]; then + break fi + # addresses were found - is this an onion? + if [[ "$selected_addresses" != *".onion"* ]]; then + continue + fi + # There are two forms of addresses: "x / y.onion" and "x.onion" + if [[ "$selected_addresses" == *'/'* ]]; then + onion_addr=$(echo "$selected_addresses" | awk -F '/' '{print $2}' | awk -F ' ' '{print $1}') + else + onion_addr="$selected_addresses" + fi + # show the onion address as a QR code + clear + echo "$onion_addr" + echo -n "$onion_addr" | qrencode -t UTF8 + any_key done - # Was the key matched? - if [ ! "$selected_addresses" ]; then - return - fi - # addresses were found - is this an onion? - if [[ "$selected_addresses" != *".onion"* ]]; then - return - fi - # There are two forms of addresses: "x / y.onion" and "x.onion" - if [[ "$selected_addresses" == *'/'* ]]; then - onion_addr=$(echo "$selected_addresses" | awk -F '/' '{print $2}' | awk -F ' ' '{print $1}') - else - onion_addr="$selected_addresses" - fi - # show the onion address as a QR code - clear - echo "$onion_addr" - echo -n "$onion_addr" | qrencode -t UTF8 - any_key } function show_users { From 4a5c9c8d55900a12c64a3ee5045a6f2c09ed74d9 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 8 May 2018 14:04:28 +0100 Subject: [PATCH 45/45] Also show the key --- src/freedombone-controlpanel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/freedombone-controlpanel b/src/freedombone-controlpanel index dcbe8277..6513573c 100755 --- a/src/freedombone-controlpanel +++ b/src/freedombone-controlpanel @@ -367,7 +367,7 @@ function show_domains { fi # show the onion address as a QR code clear - echo "$onion_addr" + echo "${selected}: ${onion_addr}" echo -n "$onion_addr" | qrencode -t UTF8 any_key done