Ubuntu 22.04下Tor服务通过systemd启动后Unix Socket异常
问题原因与解决方案
核心原因:AppArmor安全规则限制
通过systemd启动Tor时,会加载默认的system_tor AppArmor规则,该规则严格限制了Tor进程可访问的文件路径。你自定义的Unix Socket路径/var/run/tor/mm-onion.sock不在默认允许列表内,导致Tor无法正常读写该Socket。
而直接在终端运行Tor命令时,AppArmor规则通常不会对交互式会话中的进程生效,因此Tor能不受限制地访问该Socket,进而正常协作。
解决方案
方案1:修改AppArmor规则,允许Tor访问自定义Socket
- 打开Tor的AppArmor配置文件:
sudo nano /etc/apparmor.d/system_tor - 在文件中找到
/run/tor/相关规则区域,添加一行允许访问目标Socket的配置:/var/run/tor/mm-onion.sock rw, - 重新加载AppArmor规则使修改生效:
sudo apparmor_parser -r /etc/apparmor.d/system_tor - 重启Tor服务:
sudo service tor restart
方案2:将Socket移至Tor默认有权限的目录
Tor对HiddenServiceDir(即/var/lib/tor/mm-onion/)拥有完全读写权限,将Socket路径调整到该目录下可直接规避AppArmor限制:
- 修改
/etc/tor/torrc中的配置:HiddenServicePort 80 unix:/var/lib/tor/mm-onion/mm-onion.sock - 修改Nginx配置中的监听路径,与上述修改对应:
listen unix:/var/lib/tor/mm-onion/mm-onion.sock; - 重启Tor和Nginx服务:
sudo service tor restart sudo service nginx restart
验证步骤
可通过查看Tor服务日志确认权限问题是否解决:
sudo journalctl -u tor@default.service -f
若日志中存在Permission denied类错误,即可确认是权限限制导致的问题。
内容的提问来源于stack exchange,提问作者Nikita Iakubenko
相关产品推荐
相关产品推荐

