Thiết lập whonix với cổng và máy trạm trên hai máy chủ riêng biệt


8

Tôi đã thành công trong việc thiết lập và sử dụng cổng whonix và máy trạm trên một máy. Nhưng tôi muốn thiết lập chúng trên các máy chủ khác nhau, để phân tán các yêu cầu về bộ nhớ và CPU.

Tôi chưa tìm ra cách làm cho các VM nói chuyện với nhau khi chúng ở trên các máy chủ khác nhau. Cổng có vẻ hoạt động tốt, giống như khi chạy với máy trạm trên cùng một máy. Bây giờ máy trạm được khởi động trên một máy chủ khác, làm cách nào để tạo máy trạm (hoặc máy chủ đang chạy), nhận biết phải liên hệ với một cổng trên máy chủ khác?

Cả hai máy chủ đang chạy Linux Mint 17



Tôi sẽ cố gắng thay đổi cả cổng và máy trạm để sử dụng NAT + DHCP trên cổng hiện tại cho mỗi cổng. Tôi giả sử máy trạm sẽ tìm thấy cổng dựa trên tên của nó? Hay tôi cần cấu hình IP gateway ở đâu? Tôi có thể đặt IP DHCP cố định trên bộ định tuyến dựa trên cổng bộ điều hợp thứ 2 MAC. Thx cho Liên kết.
Torsten

Câu trả lời:


0

Đầu tiên một số lưu ý; Tôi đã đạt đến giới hạn XP của StackExchange vì vậy đây là một câu trả lời bị bỏ qua; sử dụng một cách khôn ngoan ;-)

  • cầu cây con Tor ~ = ~ gateway Whonix

  • khách hàng chuyển đổi Tor ~ = ~ máy trạm Whonix

Các thuật ngữ này được sử dụng thay thế cho nhau và có các thuật ngữ khác mà các loại thiết lập này được gọi, tôi sẽ cố gắng sử dụng các thuật ngữ Whonix cho hầu hết các điều khoản sau đây.

Những gì bạn có thể đang tìm kiếm được giới thiệu là cầu nối giữa hoặc cầu riêng cho thiết bị cổng và ứng dụng khách ( trans-proxy) của bạn, nhóm RaspberryPi tại Adafbean đang lưu trữ một hướng dẫn cụ thể khá rõ ràng về cách thiết lập cách ly vật lý với các cấu hình torrciptablesphép thuật tùy chỉnh . Các yêu cầu cho cổng của bạn sẽ là nó có hai giao diện mạng, điều này có thể eth0eth1hoặc usb0hoặc ppp0máy trạm (máy khách) của bạn chỉ nên có một giao diện mạng phyisical; tốt hơn eth0hoặc usb0cố gắng tránhwlan0vì nó hấp dẫn, bạn sẽ bỏ ngỏ cho các cuộc tấn công phi lý hơn và động cơ không đơn giản để giảm thiểu và dễ dàng tấn công. Các hướng dẫn này cũng có tên là "Điểm nóng Tor WiFi" vì vậy có thể mở rộng các câu hỏi tìm kiếm của bạn sang Linux nói chung và Tor một cách rõ ràng. Mặc dù tôi sẽ không khuyên bạn nên sử dụng WiFi các hướng dẫn mà bao gồm các chủ đề có thể dễ dàng được sửa đổi thông qua giao dịch wlan0cho eth1trên cửa ngõ của bạn và wlan0cho eth0vào máy trạm của bạn.

Tôi đã viết một gói kịch bản cho quãng đường này, ngày may mắn của bạn , bởi vì tôi vừa xuất bản bản thảo đầu tiên của gói kịch bản mà khi hoàn thành cũng sẽ cho phép kiểm tra bảo mật cấu hình của bạn. Xem qua mã nguồn trên GitHub và xem /functions/tor/torrc_writers/torrc_bridge_configs.shtệp cho các cấu hình verias có sẵn. Nếu có một tập lệnh / chức năng mà không có tài liệu rõ ràng ở phía dưới, hãy mở một vấn đề và tôi sẽ cố gắng có lần đẩy tiếp theo bao gồm thêm thông tin. Tôi sẽ thêm các tính năng và gỡ lỗi trong vài ngày tới nhưng đây là một ví dụ về tệp biến đơn giản để tải nếu bạn muốn thử nghiệm nó.

_application_list="tor"
_enable_ipv6="no"
#_external_ipv4=""
#_external_ipv6=""
_install_method="safe"
#_nat_ipv4=""
#_nat_ipv6=""
_temp_dir="/tmp"
_tor_user="debian-tor"
_tor_directory="/etc"
_bridge_types="private"
_tor_or_port="443"

Sau đó gọi tập lệnh với tệp biến ở trên với các mục sau

bash /home/${USER}/Downloads/Perinoid_Linux_Project/sandcastle.sh --var-file="/path/to/bridge_variables.sh"

và nếu nó hoạt động (hầu hết các phép thuật được tạo sẵn trong /functions/shared/arg_checker.shchức năng nếu bạn đang thắc mắc) thì nó sẽ cấu hình cổng như bạn muốn và với các tập lệnh khởi động / dừng riêng biệt của nó, để bắt đầu dịch vụ cầu nối trên thiết bị cổng sẽ dễ dàng như vậy như;

sudo /etc/init.d/tor-bridge restart

Đối với máy trạm, có thể sử dụng cầu nối của cổng trên thiết bị cổng. Tường lửa vẫn chưa được viết kịch bản nhưng tôi đã cung cấp một nơi bắt đầu để lọc và chuyển tiếp iptables trong /firewallthư mục mà bạn có thể muốn xem qua.

~~~

Mã sửa đổi để trả lời câu hỏi spiciffic đã hỏi

~~~

Đây là một phiên bản sửa đổi (chỉ cần lấy các bit liên tục từ mã được liên kết ở trên và sửa đổi nó để cho thấy mã này có thể được tái sử dụng dễ dàng như thế nào) có thể được sử dụng trên bất kỳ nhà tù chroot dựa trên debian hoặc nhà tù đạo đức. Nó sẽ chạy sudonội bộ để nhắc nhở mật khẩu sẽ xảy ra, điều đó là bình thường và phiên bản này hy vọng rằng Tor đã được cài đặt.

Sử dụng bashđể chạy phiên bản này tức là bash bridge_tor_script.shđể các biến và chức năng hoạt động đúng. Đoạn mã sau chỉ dành cho thiết bị cổng, bạn vẫn sẽ phải thiết lập mạng cầu nối và chuyển tiếp đến thiết bị máy trạm và khóa máy trạm sao cho nó chỉ sử dụng IP do cổng cung cấp.

Write_tor_bridge_configs(){
    ## Modify the stuff between quotes if non-standerd installation paths where used
    Activate_torrc_nonclient "debian-tor" "bridge"
    Write_tor_init_nonclient "/etc" "debian-tor" "bridge" "bridge" "/etc"
    Torrc_bridge_configs "/etc" "bridge" "debian-tor" "443" "192.168.1.3"
}
Torrc_bridge_configs(){
    _tor_dir="${1:-/etc}/tor"
    _tor_node_name="${2:-bridge}"
    _tor_user="${3:-debian-tor}"
    _tor_or_port="${4:-443}"
    _bridge_type="${5:-private}"
    _nat_ipv4="${6:?Error no local NAT IP passed to Torrc_bridge_configs function}"
    _external_ipv4="${7:?Error no external IP passed to Torrc_bridge_configs function}
    echo "## Attention [Torrc_bridge_configs] function writing general configuration lines to [${_tor_dir}/torrc-bridge] file"
    echo "User ${_tor_user}" | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
    echo 'RunAsDaemon 1' | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
    echo "DataDirectory /var/lib/tor_${_tor_node_name}" | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
    echo "PidFile /var/run/tor_${_tor_node_name}.pid" | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
    echo 'AvoidDiskWrites 1' | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
    echo 'BridgeRelay 1' | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
    echo "RelayBandwidthRate 100 Kbytes" | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
    echo "RelayBandwidthBurst 200 Kbytes" | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
    echo "BandwidthRate 300 Kbytes" | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
    echo "BandwidthBurst 350 Kbytes" | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
    echo 'AccountingStart month 1 00:00' | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
    echo "AccountingMax 80 GB" | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
    echo "ORPort ${_tor_or_port:-443}" | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
    echo 'ClientOnly 0' | sudo tee -a ${_torrc_dir}/torrc-${_tor_node_name}
    echo 'ExcludeSingleHopRelays 1' | sudo tee -a ${_torrc_dir}/torrc-${_tor_node_name}
    echo 'Exitpolicy reject *:*' | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
    echo "## Only uncomment next line if geoip support is confermed" | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
    echo "#GeoIPFile ${_tor_dir}/geoip" | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
    echo "## Notice [Torrc_bridge_configs] function writing spicific configuration lines to [${_tor_dir}/torrc-bridge] file"
    echo "# based on arguments passed via [-T] and [-B] and [-vf] arguments."
    for _node_type in ${_bridge_type//,/ }; do
        case $_node_type in
            private)
                echo 'PublishServerDescriptor 0' | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
                echo "Address ${_nat_ipv4}" | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
                echo "ORListenAddress ${_nat_ipv4}:${_tor_or_port:-443}" | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
                echo 'VirtualAddrNetwork 10.192.0.0/10' | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
                echo 'AutomapHostsOnResolve 1' | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
                echo 'TransPort 9040' | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
                echo 'DNSPort 9053' | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
                echo "TransListenAddress ${_nat_ipv4}" | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
                echo "DNSPort 9053" | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
                echo "DNSListenAddress ${_nat_ipv4}" | sudo tee -a ${_torrc_dir}/torrc-${_tor_node_name}
            ;;
            public)
                echo 'PublishServerDescriptor 1' | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
                echo "Address ${_external_ipv4}" | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
                echo "OutboundBindAddress ${_external_ipv4}" | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
                echo "ORListenAddress ${_external_ipv4}:${_tor_or_port:-443}" | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
                echo 'SocksPort 0' | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
            ;;
            authoritative)
                echo 'AuthoritativeDirectory 1' | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
                echo 'BridgeAuthoritativeDir 1' | sudo tee -a ${_tor_dir}/torrc-${_tor_node_name}
            ;;
        esac
    done
}
Write_tor_init_nonclient(){
    _tor_dir="${1:-/etc}"
    _tor_node_user="${2:-debian-tor}"
    _tor_node_nickname="${3:?}"
    _tor_node_type="${4:?}"
    _init_dir="${5:-/etc}/init.d"
    echo "## Attention [Write_tor_init] function now writing init script with assigned variables"
    echo "# to [${_init_dir}/tor_${_tor_node_type}] file for node [${_tor_node_nickname}] nickname..."
    echo '#!/bin/bash' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '### BEGIN INIT INFO' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo "# Provides:       tor ${_tor_node_nickname}" | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '# Required-Start:     $local_fs $remote_fs $network $named $time' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '# Required-Stop:      $local_fs $remote_fs $network $named $time' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '# Should-Start:       $syslog' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '# Should-Stop:        $syslog' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '# Default-Start:      2 3 4 5' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '# Default-Stop:       0 1 6' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '# Short-Description:  Starts The Onion Router daemon processes' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '# Description:        Starts The Onion Router, a TCP overlay' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '#             network client that provides anonymous' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '#             trasport. See following link for source' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '#             of this script' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '#             https://terminal28.com/anonymity-online-how-to-install-and-configure-squid3-tor-privoxy-debian-ubuntu-linux/' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '### END INIT INFO' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo 'set -e' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo 'PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    ## Note if installing from source some of these file path
    #   variables may need changed
    echo 'DAEMON=/usr/sbin/tor' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo "NAME=tor" | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo 'DESC="tor daemon"' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo "CONFDIR=${_tor_dir:-/etc}/tor" | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo "TORPIDDIR=/var/run/tor_${_tor_node_nickname}" | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo "TORPID=\$TORPIDDIR/tor_${_tor_node_nickname}" | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo "DEFAULTSFILE=${_tor_dir:-/etc}/defaults/\$NAME" | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo 'WAITFORDEAMON=60' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo "ARGS=\"--quiet -f\"\$CONFDIR/torrc-${_tor_node_nickname}\"" | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '# Set sane defaults' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo 'if [ -r /proc/sys/fs/file-max ]; then' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  system_max=`cat /proc/sys/fs/file-max`' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  if [ "$system_max" -gt "80000" ]; then' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      MAX_FILEDESCRIPTORS=32768' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  elif [ "$system_max" -gt "40000" ]; then' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      MAX_FILEDESCRIPTORS=16384' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  elif [ "$system_max" -gt "10000" ]; then' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      MAX_FILEDESCRIPTORS=8192' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  else' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      MAX_FILEDESCRIPTORS=1024' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      cat << EOF' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo 'Warning: Your system has very few filedescriptors available in total' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo "Maybe you should try rassing that by adding 'fs.file-max=10000' to your" | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '/etc/sysctl.conf file. Feel free to pick any number that you deem appropriate.' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo "Then run 'sysctl -p'. See /proc/sys/fs/file-max for the current value, and" | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo 'file-nr in the same directory for how many of those are sed at the moment' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo 'EOF' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  fi' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo 'else' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  MAX_FILEDESCRIPTORS=8192' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo 'fi' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo 'NICE=""' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo 'test -x $DEAMON || exit 0' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '# Include tor defaults if available' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo 'if [ -f $DEFAULTSFILE ]; then' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  . $DEFAULTSFILE' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo 'fi' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo 'wait_for_deaddaemon () {' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  pid=$1' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  sleep 1' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  if test -n "$pid"' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  then' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      if kill -0 $pid 2>/dev/null' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      then' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          echo -n "."' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          cnt=0' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          while kill -0 $pid 2>/dev/null' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          do' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '              cnt=`expr $cnt + 1`' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '              if [ $cnt -gt $WAITFORDAEMON  ]; then' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '                  echo "still running"' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '                  exit 1' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '              fi' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '              sleep 1' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '              echo -n "."' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          done' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      fi' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  fi' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  return 0' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '}' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo 'check_torpiddir () {' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  if test ! -d $TORPIDDIR' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  then' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      echo "There is no $TORPIDDIR directory. Creating one for you."' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      mkdir -m 02750 "$TORPIDDIR"' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo "      chown ${_tor_node_user:-debian-tor}:${_tor_node_user:-debian-tor} \"\$TORPIDDIR\"" | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  fi' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  if test ! -x $TORPIDDIR' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  then' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      echo "Cannot access $TORPIDDIR directory, are you root?" >&2' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      exit 1' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  fi' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '}' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo 'check_config () {' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  if ! $DAEMON --verify-config > /dev/null' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  then' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      echo "ABORTED: Tor configuration invalid" >&2' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      $DAEMON --verify-config >&2' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      exit 1' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  fi' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '}' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo 'check_torlogdir () {' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  if ! [ -d "$TORLOGDIR" ]; then' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      mkdir -m 02750 "$TORLOGDIR"' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo "      chown ${_tor_node_user:-debian-tor}:adm \"\$TORLOGDIR\"" | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      ! [ -x /sbin/restorecon ] || /sbin/restorecon \"$TORLOGDIR\"' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  fi' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '}' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo 'case "$1" in ' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  start)' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  if [ "$RUN_DAEMON" != "yes" ]; then' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      echo "Not starting $DESC (Dissabled in $DEFAULTSFILE)."' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      exit 0' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  fi' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  if [ -n "$MAX_FILEDESCRIPTORS" ]; then' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      echo -n "Raising maximum number of filedescriptors (ulimit -n) to $MAX_FILEDESCRIPTORS"' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      if ulimit -n "$MAX_FILEDESCRIPTORS"' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      then' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          echo "."' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      else' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          echo ": FAILED."' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      fi' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  fi' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  check_torpiddir' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  check_torlogdir' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  echo "Starting $DESC: $NAME..."' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  check_config' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  echo "Starting $DESC: $NAME..."' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    ## Notice 1 : This is where firejail should be added if used,
    #   otherwise try another "Sandbox" utility for keeping unknown
    #   vunerabilities from easily infecting the rest of your system
    ## Notice 2 : This is also one of the places to modify if installing
    #   app-amore from source, if you expect the next [if] statment
    #   to find the app-armor exicutables
    ## Notice 3 : Additionally this is where calls to chroot should
    #   be preformed if running in chroot jail.
    echo '  if start-stop-daemon --stop --signal 0 --quiet --pidfile $TORPID --exec $DAEMON; then' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      echo "$NAME already running"' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  else' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      if [ "$USE_AA_EXEC" = "yes" ] && [ -x /usr/sbin/aa-status ] && [ -x /usr/sbin/aa-exec ] && [ -e /etc/apparmor.d/system_tor ] && /usr/sbin/aa-status --enabled ; then' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          AA_EXEC="--startas /usr/sbin/aa-exec"' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          AA_EXEC_ARGS="--profile=system_tor -- $DAEMON"' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      else' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          AA_EXEC=""' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          AA_EXEC_ARGS=""' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      fi' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      if start-stop-daemon --start --quiet --pidfile $TORPID $NICE $AA_EXEC --exec $DAEMON -- $AA_EXEC_ARGS $DEFAULT_ARGS $ARGS; then' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          echo "$NAME done"' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      else' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          echo "Error starting $NAME"' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          return 1' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      fi' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  fi' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  ;;' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  stop)' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      echo -n "Stopping $DESC: "' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      pid=$(cat $TORPID 2>/dev/null) || true' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      if ! test -f $TORPID -o -z "$pid"; then' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          echo "not running"' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          return 0' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      fi' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      if start-stop-daemon --stop --signal INT --quite --pidfile $TORPID --exec $DAEMON; then' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          wait_for_deaddaemon $pid' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      elif kill -0 $pid 2>/dev/null; then' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          echo "Is $pid not $NAME? Is $DAEMON a different binary now?"' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          return 1' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      else' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          echo "$DAEMON died: process $pid not running; or permission denied"' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          return 1' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      fi' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  ;;' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    ## End of nessisary edits section
    echo '  reload|force-reload)' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      check_config' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      echo "Reloading $DESC configuration"' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      pid=$(cat $TORPID 2>/dev/null) || true' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      if test ! -f $TORPID -o -z "$pid"; then' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          echo "not running - there is no $TORPID"' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          return 1' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      fi' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      if start-stop-daemon --stop --signal 1 --quiet --pidfile $TORPID --exec $DAEMON' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      then' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          echo "done"' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      elif kill -0 $pid 2>/dev/null; then' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          echo "Is $pid not $NAME? Is $DAEMON a different binary now?"' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          return 1' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      else' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          echo "$DAEMON died: process $pid not running; or permission denied"' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          return 1' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      fi' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  ;;' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  restart)' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      check_config' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      $0 stop' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      sleep 1' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      $0 start' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  ;;' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  status)' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      if test ! -r $(dirname $TORPID); then' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          echo "cannot read PID file $TORPID"' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          return 4' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      fi' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      pid=$(cat $TORPID 2>/dev/null) || true' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      if test ! -f $TORPID -o -z "$pid"; then' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          echo "$NAME is not running"' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          return 3' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      fi' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      if ps "$pid" >/dev/null 2>&1; then' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          echo "$NAME is running"' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          return 0' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      else' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          echo "$NAME is not running"' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '          return 1' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      fi' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  ;;' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  *)' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      echo "Usage: $0 (start|stop|restart|reload|force-reload|status)"' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '      return 1' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo '  ;;' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo 'esac' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo 'exit 0' | sudo tee -a ${_init_dir}/tor_${_tor_node_type}
    echo "## Attention [Write_tor_init] function finished writing init file for [${_tor_node_type}]]"
    echo "# now providing [${_init_dir}/tor_${_tor_node_type}] exicutable permissions"
    sudo chmod +x ${_init_dir}/tor_${_tor_node_type}
}
Activate_torrc_nonclient(){
    _tor_node_user="${1:-debian-tor}"
    _tor_node_name="${2:?}"
    echo "## Activating configs for [torrc-${_tor_node_name}] now."
    echo "# With lib file path under [/var/lib/tor_${_tor_node_name}]"
    sudo install -o ${_tor_user:-debian-tor} -g ${_tor_user:-debian-tor} -m 700 /var/lib/tor_${_tor_node_name:-service} || Arg_checker --help='Activate_torrc_nonclient' --exit='# [sudo install -o ${_tor_user:-debian-tor} -g ${_tor_user:-debian-tor} -m 700 /var/lib/tor_${_tor_node_name}] # Failed'
}
Write_tor_bridge_configs

~~~

Kết thúc ví dụ kịch bản

~~~

Những điều trên sẽ giúp bạn tiến gần hơn đến mục tiêu của mình, như đã nêu trước đây tôi sẽ gỡ lỗi gói tập lệnh chính và thêm các tính năng để thoải mái thực hiện các yêu cầu thông qua hệ thống theo dõi của GitHub, vào cuối tháng (cung cấp sức khỏe và thời gian) Tôi sẽ thêm các trình cài đặt cho Whonix nhưng sẽ giúp kiểm tra vì tất cả các hệ thống của tôi dường như chiến đấu với cài đặt KVMVMWarecác yêu cầu trước của tôi .


1
Bạn có thể muốn xem xét HEREDOC .
terdon

Cảm ơn bạn @terdon Tôi đã sử dụng cat <<EOF ## some commands ## EOF > /some/file.sufixđể phát hiện lại trước đó và có một số tập lệnh bị hỏng trong một repo github cũ hơn để sửa chữa vì tôi không biết đủ về bashso với ./giải thích và mở rộng biến. Kể từ đó, tôi đã sử dụng echo 'litaral' | tee -a /some/file.sufixecho "${variable}" | tee -a /some/file.sufixbởi vì việc gỡ lỗi dễ dàng hơn rất nhiều và xem những gì sẽ và sẽ không được thoát ra với `\` '. Trên đây là một sự hy sinh trong khả năng sẵn sàng trong sự sẵn sàng của verbose'ness. Nhưng đề nghị của bạn là một cách hợp lệ để thực hiện các nhiệm vụ tương tự.
S0AndS0
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.