To *_* Ka 2 centos file-permissions tor systemctl
我已经在新安装的 CentOS7(最小)上从 EPEL 安装了 tor。
配置隐藏服务后,我通过浏览hostname
Tor 浏览器中文件中生成的 URL 来检查并验证该服务是否已启动并正在运行。
此时服务配置为自动启动使用 systemctl enable tor
一切正常,直到我重新启动服务sudo systemctl restart tor
。之后,tor 服务不再启动,记录以下错误:
Directory /var/lib/tor/hidden_service_01/ cannot be read: Permission denied
hidden_service_01
文件夹是由 Tor 服务在第一次运行时自动创建的。
如果我删除hidden_service_01
文件夹并再次启动服务。它启动(生成一个新的 .onion url)。但是一旦它停止并再次启动,权限错误就会再次发生。
为什么我会收到权限错误以及如何使其工作?
PS我创建了一个用于我的配置的指南片段:https : //gist.github.com/Dzoge/f059d30da77a21df1a0f29a0b5c528a2
更新 1: 我检查了文件夹权限,它们是:
rwx------. 2 toranon toranon
rw-------. 1 toranon toranon
我设置chmod
为770
现在文件夹和文件都有rwxrwx---. 1 toranon toranon
我尝试启动 Tor 服务systemctl start tor
,但仍然收到相同的权限警告。
更新 2: 我尝试在 Ubuntu 服务器上做同样的事情,效果很好。我也更新了要点并添加了 ubuntu 指南。
CentOS 7 的问题仍然存在。
更新 3(变通方法): 看起来临时变通方法是将 SELinux 设置为许可模式。然后它按预期工作。
如果你看一下这个tor.service
单元,你会看到它有一个命令来尝试在启动服务之前验证 Tor 配置。
ExecStartPre=/usr/bin/tor --runasdaemon 0 --defaults-torrc /usr/share/tor/defaults-torrc -f /etc/tor/torrc --verify-config
Run Code Online (Sandbox Code Playgroud)
这就是事情出错的地方。当它运行时,由于前面提到的权限问题,配置无法验证。
Jan 06 16:18:42 dalaran systemd[1]: Starting Anonymizing overlay network for TCP...
Jan 06 16:18:42 dalaran tor[28731]: Jan 06 16:18:42.650 [notice] Tor 0.2.9.14 (git-3f9bd01bf5736ff6) running on Linux with Libevent 2.0.21-stable, OpenSSL 1.0.2k-fips and Zlib 1.2.7.
Jan 06 16:18:42 dalaran tor[28731]: Jan 06 16:18:42.650 [notice] Tor can't help you if you use it wrong! Learn how to be safe at https://www.torproject.org/download/download#warning
Jan 06 16:18:42 dalaran tor[28731]: Jan 06 16:18:42.650 [notice] Read configuration file "/usr/share/tor/defaults-torrc".
Jan 06 16:18:42 dalaran tor[28731]: Jan 06 16:18:42.650 [notice] Read configuration file "/etc/tor/torrc".
Jan 06 16:18:42 dalaran tor[28731]: Jan 06 16:18:42.653 [warn] Directory /var/lib/tor/hidden_service_01/ cannot be read: Permission denied
Jan 06 16:18:42 dalaran tor[28731]: Jan 06 16:18:42.653 [warn] Checking service directory /var/lib/tor/hidden_service_01/ failed.
Jan 06 16:18:42 dalaran tor[28731]: Jan 06 16:18:42.653 [warn] Failed to parse/validate config: Failed to configure rendezvous options. See logs for details.
Jan 06 16:18:42 dalaran tor[28731]: Jan 06 16:18:42.653 [err] Reading config failed--see warnings above.
Jan 06 16:18:42 dalaran systemd[1]: tor.service: control process exited, code=exited status=1
Jan 06 16:18:42 dalaran systemd[1]: Failed to start Anonymizing overlay network for TCP.
Jan 06 16:18:42 dalaran systemd[1]: Unit tor.service entered failed state.
Jan 06 16:18:42 dalaran systemd[1]: tor.service failed.
Run Code Online (Sandbox Code Playgroud)
最终,我将其追溯到 systemd 在这里所做的一些强化。如果您进一步阅读单元文件,您会看到 systemd 实际上在容器中运行 Tor,并且非常严格地锁定了权限。它还删除了一些功能,因此即使是 root 也无法执行 root 用户通常可以执行的某些操作,例如读取其他用户的文件(这称为 CAP_DAC_OVERRIDE)。
当我们尝试审计失败的启动时,我们发现:
type=PATH msg=audit(1515277122.651:3600): item=0 name="/var/lib/tor/hidden_service_01/" inode=1054341 dev=fd:01 mode=040700 ouid=988 ogid=983 rdev=00:00 obj=system_u:object_r:tor_var_lib_t:s0 objtype=NORMAL
type=CWD msg=audit(1515277122.651:3600): cwd="/"
type=SYSCALL msg=audit(1515277122.651:3600): arch=c000003e syscall=2 success=no exit=-13 a0=561b6881af10 a1=20000 a2=0 a3=1 items=1 ppid=1 pid=28731 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="tor" exe="/usr/bin/tor" subj=system_u:system_r:tor_t:s0 key=(null)
type=AVC msg=audit(1515277122.651:3600): avc: denied { dac_read_search } for pid=28731 comm="tor" capability=2 scontext=system_u:system_r:tor_t:s0 tcontext=system_u:system_r:tor_t:s0 tclass=capability
type=AVC msg=audit(1515277122.651:3600): avc: denied { dac_override } for pid=28731 comm="tor" capability=1 scontext=system_u:system_r:tor_t:s0 tcontext=system_u:system_r:tor_t:s0 tclass=capability
Run Code Online (Sandbox Code Playgroud)
我在这里发现的是,在读取配置之前,验证配置的命令实际上并未从 root 用户更改为 toranon 用户,因此对目录的访问被拒绝,因为 systemd 没有给进程 CAP_DAC_OVERRIDE。您可以看到用户 ID 被记录为uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0
.
所以为了在我的系统上解决这个问题,我决定让 systemd 作为 toranon 启动 Tor,而不是作为 root 启动,Tor 改变自己的 uid/gid。
User toranon
从/usr/share/tor/torrc-defaults
.我创建了一个覆盖文件,/etc/systemd/system/tor.service.d/override.conf
其中包含:
[Service]
User=toranon
Group=toranon
PermissionsStartOnly=no
Run Code Online (Sandbox Code Playgroud)必须使用PermissionsStartOnly=no
以确保ExecStartPre=
命令在 toranon 用户下运行。从文档:
PermissionsStartOnly=
接受一个布尔参数。如果是,则许可相关的执行选项,如被配置为与User=
和类似的选项(见systemd.exec(5)获得更多信息),只应用到开始与过程ExecStart=
,而不是在其他各种ExecStartPre=
,ExecStartPost=
,ExecReload=
,ExecStop=
,和ExecStopPost=
命令. 如果为 false,则该设置以相同的方式应用于所有配置的命令。默认为假。
经过一个systemctl daemon-reload
我就能够systemctl start tor
成功。
Jan 06 16:22:02 dalaran systemd[1]: Starting Anonymizing overlay network for TCP...
Jan 06 16:22:02 dalaran tor[32030]: Jan 06 16:22:02.541 [notice] Tor 0.2.9.14 (git-3f9bd01bf5736ff6) running on Linux with Libevent 2.0.21-stable, OpenSSL 1.0.2k-fips and Zlib 1.2.7.
Jan 06 16:22:02 dalaran tor[32030]: Jan 06 16:22:02.541 [notice] Tor can't help you if you use it wrong! Learn how to be safe at https://www.torproject.org/download/download#warning
Jan 06 16:22:02 dalaran tor[32030]: Jan 06 16:22:02.541 [notice] Read configuration file "/usr/share/tor/defaults-torrc".
Jan 06 16:22:02 dalaran tor[32030]: Jan 06 16:22:02.541 [notice] Read configuration file "/etc/tor/torrc".
Jan 06 16:22:02 dalaran tor[32030]: Configuration was valid
Jan 06 16:22:02 dalaran systemd[1]: Started Anonymizing overlay network for TCP.
Jan 06 16:22:02 dalaran tor[32035]: Jan 06 16:22:02.665 [notice] Tor 0.2.9.14 (git-3f9bd01bf5736ff6) running on Linux with Libevent 2.0.21-stable, OpenSSL 1.0.2k-fips and Zlib 1.2.7.
Jan 06 16:22:02 dalaran tor[32035]: Jan 06 16:22:02.665 [notice] Tor can't help you if you use it wrong! Learn how to be safe at https://www.torproject.org/download/download#warning
Jan 06 16:22:02 dalaran tor[32035]: Jan 06 16:22:02.665 [notice] Read configuration file "/usr/share/tor/defaults-torrc".
Jan 06 16:22:02 dalaran tor[32035]: Jan 06 16:22:02.665 [notice] Read configuration file "/etc/tor/torrc".
Jan 06 16:22:02 dalaran tor[32035]: Jan 06 16:22:02.668 [notice] Opening Socks listener on 127.0.0.1:9050
Jan 06 16:22:02 dalaran tor[32035]: Jan 06 16:22:02.668 [notice] Opening Control listener on /run/tor/control
Jan 06 16:22:02 dalaran Tor[32035]: OpenSSL version from headers does not match the version we're running with. If you get weird crashes, that might be why. (Compiled with 100020bf: OpenSSL 1.0.2k 26 Jan 2017; running wit
Jan 06 16:22:02 dalaran Tor[32035]: Tor 0.2.9.14 (git-3f9bd01bf5736ff6) running on Linux with Libevent 2.0.21-stable, OpenSSL 1.0.2k-fips and Zlib 1.2.7.
Jan 06 16:22:02 dalaran Tor[32035]: Tor can't help you if you use it wrong! Learn how to be safe at https://www.torproject.org/download/download#warning
Jan 06 16:22:02 dalaran Tor[32035]: Read configuration file "/usr/share/tor/defaults-torrc".
Jan 06 16:22:02 dalaran Tor[32035]: Read configuration file "/etc/tor/torrc".
Jan 06 16:22:02 dalaran Tor[32035]: Opening Socks listener on 127.0.0.1:9050
Jan 06 16:22:02 dalaran Tor[32035]: Opening Control listener on /run/tor/control
Jan 06 16:22:02 dalaran Tor[32035]: Parsing GEOIP IPv4 file /usr/share/tor/geoip.
Jan 06 16:22:02 dalaran Tor[32035]: Parsing GEOIP IPv6 file /usr/share/tor/geoip6.
Jan 06 16:22:02 dalaran Tor[32035]: Bootstrapped 0%: Starting
Jan 06 16:22:02 dalaran Tor[32035]: Bootstrapped 80%: Connecting to the Tor network
Jan 06 16:22:03 dalaran Tor[32035]: Bootstrapped 85%: Finishing handshake with first hop
Jan 06 16:22:04 dalaran Tor[32035]: Bootstrapped 90%: Establishing a Tor circuit
Jan 06 16:22:05 dalaran Tor[32035]: Tor has successfully opened a circuit. Looks like client functionality is working.
Jan 06 16:22:05 dalaran Tor[32035]: Bootstrapped 100%: Done
Run Code Online (Sandbox Code Playgroud)
最终,这(或类似的东西)需要合并到 Fedora/EPEL 提供的 Tor 默认配置和 systemd 单元中,这将为每个人解决问题。
归档时间: |
|
查看次数: |
3666 次 |
最近记录: |