浏览代码

Migrate hidden service definitions from torrc to their own file

This should reduce problems during tor package upgrades
Bob Mottram 7 年前
父节点
当前提交
98c0b563f9
共有 2 个文件被更改,包括 46 次插入13 次删除
  1. 1
    0
      src/freedombone-upgrade
  2. 45
    13
      src/freedombone-utils-onion

+ 1
- 0
src/freedombone-upgrade 查看文件

@@ -95,6 +95,7 @@ if [ -d "$PROJECT_DIR" ]; then
95 95
         fi
96 96
 
97 97
         #rebuild_exim_with_socks
98
+        torrc_migrate
98 99
         nodejs_upgrade
99 100
         apt-get -yq -t stretch-backports install certbot
100 101
         email_install_tls

+ 45
- 13
src/freedombone-utils-onion 查看文件

@@ -31,6 +31,30 @@ TOR_MAX_TRAFFIC_PER_MONTH_GB=10
31 31
 
32 32
 USE_V2_ONION_ADDRESS=
33 33
 HIDDEN_SERVICE_PATH='/var/lib/tor/hidden_service_'
34
+ONION_SERVICES_FILE=/etc/torrc.d/freedombone
35
+
36
+function torrc_migrate {
37
+    if [ -f $ONION_SERVICES_FILE ]; then
38
+        return
39
+    fi
40
+    systemctl stop tor
41
+
42
+    mkdir /etc/torrc.d
43
+
44
+    grep "HiddenServiceDir\|HiddenServiceVersion\|HiddenServicePort" /etc/tor/torrc | grep -v "#HiddenServiceDir" >> $ONION_SERVICES_FILE
45
+
46
+    if ! grep "HiddenServiceVersion" $ONION_SERVICES_FILE; then
47
+        return
48
+    fi
49
+
50
+    if grep -q "#%include /etc/torrc.d" /etc/tor/torrc; then
51
+        sed -i 's|#%include /etc/torrc.d|%include /etc/torrc.d|g' /etc/tor/torrc
52
+    else
53
+        echo "%include /etc/torrc.d" >> /etc/tor/torrc
54
+    fi
55
+
56
+    systemctl restart tor
57
+}
34 58
 
35 59
 function add_email_hostname {
36 60
     extra_email_hostname="$1"
@@ -80,17 +104,17 @@ function remove_onion_service {
80 104
     nick="$3"
81 105
 
82 106
     if [ ${#nick} -gt 0 ]; then
83
-        sed -i "/stealth ${nick}/d" /etc/tor/torrc
107
+        sed -i "/stealth ${nick}/d" $ONION_SERVICES_FILE
84 108
     fi
85
-    sed -i "/hidden_service_${onion_service_name}/,+1 d" /etc/tor/torrc
86
-    sed -i "/hidden_service_${onion_service_name}_mobile/,+1 d" /etc/tor/torrc
87
-    sed -i "/127.0.0.1:${onion_service_port_to}/d" /etc/tor/torrc
109
+    sed -i "/hidden_service_${onion_service_name}/,+1 d" $ONION_SERVICES_FILE
110
+    sed -i "/hidden_service_${onion_service_name}_mobile/,+1 d" $ONION_SERVICES_FILE
111
+    sed -i "/127.0.0.1:${onion_service_port_to}/d" $ONION_SERVICES_FILE
88 112
     if [ "$3" ]; then
89
-        sed -i "/127.0.0.1:${3}/d" /etc/tor/torrc
113
+        sed -i "/127.0.0.1:${3}/d" $ONION_SERVICES_FILE
90 114
         if [ "$4" ]; then
91
-            sed -i "/127.0.0.1:${4}/d" /etc/tor/torrc
115
+            sed -i "/127.0.0.1:${4}/d" $ONION_SERVICES_FILE
92 116
             if [ "$5" ]; then
93
-                sed -i "/127.0.0.1:${5}/d" /etc/tor/torrc
117
+                sed -i "/127.0.0.1:${5}/d" $ONION_SERVICES_FILE
94 118
             fi
95 119
         fi
96 120
     fi
@@ -123,16 +147,16 @@ function add_onion_service {
123 147
         USE_V2_ONION_ADDRESS=
124 148
         exit 877367
125 149
     fi
126
-    if ! grep -q "hidden_service_${onion_service_name}" /etc/tor/torrc; then
127
-        echo "HiddenServiceDir ${HIDDEN_SERVICE_PATH}${onion_service_name}/" >> /etc/tor/torrc
150
+    if ! grep -q "hidden_service_${onion_service_name}" $ONION_SERVICES_FILE; then
151
+        echo "HiddenServiceDir ${HIDDEN_SERVICE_PATH}${onion_service_name}/" >> $ONION_SERVICES_FILE
128 152
         if [ ! $USE_V2_ONION_ADDRESS ]; then
129
-            echo 'HiddenServiceVersion 3' >> /etc/tor/torrc
153
+            echo 'HiddenServiceVersion 3' >> $ONION_SERVICES_FILE
130 154
         else
131
-            echo 'HiddenServiceVersion 2' >> /etc/tor/torrc
155
+            echo 'HiddenServiceVersion 2' >> $ONION_SERVICES_FILE
132 156
         fi
133
-        echo "HiddenServicePort ${onion_service_port_from} 127.0.0.1:${onion_service_port_to}" >> /etc/tor/torrc
157
+        echo "HiddenServicePort ${onion_service_port_from} 127.0.0.1:${onion_service_port_to}" >> $ONION_SERVICES_FILE
134 158
         if [ ${#onion_stealth_name} -gt 0 ]; then
135
-            echo "HiddenServiceAuthorizeClient stealth ${onion_stealth_name}" >> /etc/tor/torrc
159
+            echo "HiddenServiceAuthorizeClient stealth ${onion_stealth_name}" >> $ONION_SERVICES_FILE
136 160
         fi
137 161
     fi
138 162
 
@@ -295,6 +319,14 @@ function install_tor {
295 319
     sed -i "s|#AccountingMax.*|AccountingMax $TOR_MAX_TRAFFIC_PER_MONTH_GB GBytes|g" /etc/tor/torrc
296 320
     sed -i "s|AccountingMax.*|AccountingMax $TOR_MAX_TRAFFIC_PER_MONTH_GB GBytes|g" /etc/tor/torrc
297 321
 
322
+    if [ ! -d /etc/torrc.d ]; then
323
+        mkdir /etc/torrc.d
324
+    fi
325
+    sed -i 's|#%include /etc/torrc.d|%include /etc/torrc.d|g' /etc/tor/torrc
326
+    if ! grep -q '%include /etc/torrc.d' /etc/tor/torrc; then
327
+        echo '%include /etc/torrc.d' >> /etc/tor/torrc
328
+    fi
329
+
298 330
     mark_completed "${FUNCNAME[0]}"
299 331
 }
300 332