EPELリポジトリのtor
パッケージを使用して、CentOS 7(systemdを使用)でTor隠しサービスをセットアップしようとしています。
以前は、これは数日前に機能しなくなるまで正常に機能していました。この時点では、システム上の何も再起動されていませんが、自動更新はyum-cronを介して有効になっているため、何かが更新された可能性があります。
ただし、その価値については、Fedoraサーバーのほとんど在庫のあるインストールとFedoraワークステーションでもこの問題が発生しています。
/etc/tor/torrc
ファイルに隠されたサービスラインを使用してtorサービスを開始しようとすると、開始に失敗します。
journalctl -xn
を使用してエラーメッセージを確認してきましたが、一貫性がありません。ただし、主なエラーは次のようです。
Nov 09 22:05:18 hostname tor[7561]: Nov 09 22:05:18.245 [warn] Directory /var/lib/tor/sshservice/ cannot be read: Permission denied
そして時折:
Nov 09 22:12:33.119 [warn] /var/lib/tor/sshservice/ is not owned by this user (root, 0) but by toranon (997). Perhaps you are running Tor as the wrong user
/var/lib/tor
パス全体について次のことを確認しましたが、成功しませんでした。
toranon
(EPELパッケージのデフォルトのtorユーザー)restorecon
を使用してこれを確認しました。他の情報:
HiddenServiceDir
行とHiddenServicePort
行を完全に削除すると、torは期待どおりに起動します。/etc/tor/torrc
からの潜在的に役立つ出力:
# Do not run as client
SocksPort 0 #Run Tor only as a relay and do not create a local SOCKS proxy
SocksPolicy reject *
# Define hidden service for SSH
HiddenServiceDir /var/lib/tor/sshservice/
HiddenServicePort 44674 127.0.0.1:22 #Redirect local SSH port to a nonstandard public port
ls -Z
of /var/lib/tor
:
[root@sagan tor]# ls -Z
-rw-------. toranon toranon system_u:object_r:tor_var_lib_t:s0 cached-certs
-rw-------. toranon toranon system_u:object_r:tor_var_lib_t:s0 cached-microdesc-consensus
-rw-------. toranon toranon unconfined_u:object_r:tor_var_lib_t:s0 cached-microdescs
-rw-------. toranon toranon unconfined_u:object_r:tor_var_lib_t:s0 cached-microdescs.new
-rw-------. toranon toranon unconfined_u:object_r:tor_var_lib_t:s0 lock
drwx------. toranon toranon system_u:object_r:tor_var_lib_t:s0 sshservice
-rw-------. toranon toranon unconfined_u:object_r:tor_var_lib_t:s0 state
この問題の原因はわかりませんが、systemdの正確な構成に関係していると思われます。デフォルトのsystemdtor.service
ファイルの一部の行にコメントを付けて削除することを試みましたが、成功しませんでした。
現在、CentOSに付属のデフォルトのsystemd systemctl start tor
ファイルを使用してtor.service
を使用してtorを起動しようとしています。
何か案は?助けていただければ幸いです。
この質問への回答として投稿された修正のいくつかは機能しますが、成功率はさまざまです。
私が遭遇した、一貫して機能する修正の1つは、いくつかの例外をSELinuxにロードすることです。
ステップ1
次の内容のtor-selinux-workaround.cil
ファイルを作成します。
(typeattributeset cil_gen_require tor_t) (allow tor_t self (capability (dac_override dac_read_search)))
ステップ2
次のコマンドを使用して、そのファイルをSELinuxにインポートします。
Sudo semodule -i tor-selinux-workaround.cil
これは、最新のFedoraおよびCentOSシステムで問題なく機能するはずです。
詳細情報
より完全な説明については、ここで私の投稿を参照してください: https://alexhaydock.co.uk/tech/fix-tor-onion-services-on-centos-Fedora
Systemdのデバッグ機能の恐ろしい欠如のおかげではなく、私はこの問題を自分で戸惑いました。
私の場合、systemdが干渉していたことがわかりました。起動時にtoranon
ユーザーが/var/lib/tor/
を読み取ることは許可されていましたが、サブディレクトリ/var/lib/tor/hidden_service
は許可されていませんでした。したがって、同じコマンドを使用してrootとしてtorを起動した場合は機能しますが、systemdで起動すると、不可解に失敗しました。ディレクトリの権限は正しく、それはさらに厄介でした。
私が問題を修正した方法は、torrc
ファイルを変更して、隠されたサービスファイルをsystemdがプロセスに書き込むことを許可したディレクトリに書き込むことでした。つまり、次の場所から行を変更できる場合があります。
HiddenServiceDir /var/lib/tor/sshservice/
に
HiddenServiceDir /var/lib/tor/
そして、すべてが最終的に機能する可能性があります。
もう1つのオプションは、おそらく次のようにtor.service
のsystemd構成ファイルを変更して、プロセスがサブディレクトリを読み取れるようにsystemdに指示することです。
/usr/lib/systemd/system/tor.service
そして、ReadWriteDirectories
オプションを変更して、作成しているサブディレクトリを含めます。おそらく、次の行を追加します。
ReadWriteDirectories=/var/lib/tor/sshservice/
または、そのパスをスペースで区切られたリストとして、そのファイル内の既存のエントリの1つに追加します。 (すでに2つの異なるReadWriteDirectories
行がありますが、ログが書き込まれていないため、2番目の行が機能するかどうかはわかりません。)systemdのドキュメントによると、エントリはスペースで区切られた絶対リストである必要があります。次のようなパス:
ReadWriteDirectories=/var/lib/tor /var/lib/tor/sshservice /var/log/tor
私はこれをもっとあいまいな変更にしようとはしていませんが、systemdが火事で死ぬことを黙って望んでいるので、ファイルとアクセス許可の3番目のセットを維持する必要はありません。
私の場合、systemdサービスのCapabilityBoundingSet
にCAP_DAC_READ_SEARCHを追加する必要がありました。
/ etc/systemd/system/multi-user.target.wants/tor @ xxx.service
@@ -30,7 +30,7 @@
ReadWriteDirectories=/run/tor
ReadWriteDirectories=/var/lib/tor
ReadWriteDirectories=/var/log/tor
-CapabilityBoundingSet=CAP_SETUID CAP_SETGID CAP_NET_BIND_SERVICE
+CapabilityBoundingSet=CAP_SETUID CAP_SETGID CAP_NET_BIND_SERVICE CAP_DAC_READ_SEARCH
PermissionsStartOnly=yes
[Install]
(ReadWriteDirectories
の変更は必要ありませんでした)
Selinuxが有効になっている場合でも、torはnot動作します! / var/log/audit/audit.log:
type=AVC msg=audit(1475960766.994:123): avc: denied { dac_override } for pid=2317 comm="tor" capability=1 scontext=system_u:system_r:tor_t:s0 tcontext=system_u:system_r:tor_t:s0 tclass=capability
type=AVC msg=audit(1475960766.994:123): avc: denied { dac_read_search } for pid=2317 comm="tor" capability=2 scontext=system_u:system_r:tor_t:s0 tcontext=system_u:system_r:tor_t:s0 tclass=capability
https://bugzilla.redhat.com/show_bug.cgi?id=1292626 に従って修正してください。
上記は、隠しサービスを使用する場合にのみ必要と思われます。
debian Jessieでは、これは私のために機能しました(私はtor隠しサービス情報を/ opt/torに保存します)
適切なHiddenServiceDirおよびHiddenServicePortディレクティブを追加して、/ etc/tor/torrcを編集します。
HiddenServiceDir/opt/tor /
HiddenServicePort 80 127.0.0.1:8080
/lib/systemd/system/[email protected]を編集し、ファイルの最後に次の行を追加します。
ReadWriteDirectories =/opt/tor
ディレクトリを作成し、所有権と権限を設定します。
mkdir/opt/tor
debian-torをchownします。/opt/tor
chmod go-rwx/opt/tor
サービス構成のリロード:
systemctlデーモン-リロード
そしてサービスを開始します:
systemctl start tor