web-dev-qa-db-ja.com

CentOS / Fedoraでtor.serviceを開始できないTor隠しサービス設定

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ユーザー)
  • パーミッションはディレクトリに適切に設定されています(私は700、770、600、660を試しました)。
  • SELinuxコンテキストはディレクトリに適切に設定されており、restoreconを使用してこれを確認しました。

他の情報:

  • ディレクトリの所有権をrootに変更すると、以前と同じ「間違ったユーザー」メッセージが表示されますが、ユーザー名が逆になります。
  • SELinuxを完全に無効にしようとしましたが、torサービスがまだ開始されないことを確認しました。
  • 非表示のサービスディレクトリには、秘密鍵ファイルとホスト名ファイルがすでに入力されており、これらはこのシステムのtorデーモンによって作成されています。この構成は以前は完全に機能していました。
  • 設定から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を起動しようとしています。

何か案は?助けていただければ幸いです。

2
Alex Haydock

この質問への回答として投稿された修正のいくつかは機能しますが、成功率はさまざまです。

私が遭遇した、一貫して機能する修正の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

1
Alex Haydock

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番目のセットを維持する必要はありません。

3
Alan Eliasen

私の場合、systemdサービスのCapabilityBoundingSetCAP_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の変更は必要ありませんでした)

  • / etc/centos-release:CentOS Linuxリリース7.2.1511(コア)
  • systemctl --version:systemd 219
  • tor --version:Torバージョン0.2.8.7。
  • selinux:無効

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 に従って修正してください。

上記は、隠しサービスを使用する場合にのみ必要と思われます。

0
Niki Waibel

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

0
mrtexaz