apernet / hysteria

Hysteria is a powerful, lightning fast and censorship resistant proxy.
https://v2.hysteria.network/
MIT License
15.18k stars 1.69k forks source link

open ./.hysteria-geoloader.dlpart.xxxxxx: permission denied #1260

Closed NP-Prob closed 3 days ago

NP-Prob commented 3 days ago

描述问题 启动hysteria2发生错误: {"error": "open ./.hysteria-geoloader.dlpart.1644212360: permission denied"}

如何复现 安装流程如下:

  1. 安装 cd ~ && bash <(curl -fsSL https://get.hy2.sh/)

  2. 修改权限: chmod a+w /etc/hysteria

  3. 修改配置:/etc/hysteria/config.yaml 配置如下(已做脱敏处理):

    
    listen: :xxxx

tls: cert: /etc/hysteria/cert/fullchain.pem key: /etc/hysteria/cert/privkey.pem

auth: type: password password: xxxxxxxxx

resolver: type: https https: addr: 8.8.8.8:443 timeout: 10s sni: dns.google insecure: false

acl: inline:

outbounds:

bandwidth: up: 100 mbps down: 100 mbps

speedTest: true

masquerade: type: proxy proxy: url: https://example.com/ rewriteHost: true


4. 将`hysteria-server.service`中的运行组和用户改为root

5. 重启hysteria2

**预期行为**
正常运行hysteria2

**日志**

systemd[1]: Started hysteria-server.service - Hysteria Server Service (config.yaml). hysteria[256060]: 2024-11-26T10:29:56-05:00 INFO server mode hysteria[256060]: 2024-11-26T10:29:56-05:00 INFO downloading database {"filename": "geoip.dat", "url": "https://cdn.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geoip.dat"} hysteria[256060]: 2024-11-26T10:29:56-05:00 ERROR failed to download database {"error": "open ./.hysteria-geoloader.dlpart.1644212360: permission denied"} hysteria[256060]: 2024-11-26T10:29:56-05:00 FATAL failed to load server config {"error": "invalid config: acl.inline: error at line 1: open ./.hysteria-geoloader.dlpart.1644212360: permission denied"} systemd[1]: hysteria-server.service: Main process exited, code=exited, status=1/FAILURE systemd[1]: hysteria-server.service: Failed with result 'exit-code'.



**设备和操作系统**
Debian GNU/Linux 12

**额外信息**
不确定是否是bug,网上查了一圈貌似没见到类似的情况,提交issue的时候只看到report bug选项合适。
NP-Prob commented 3 days ago

已解决,只做了这个改动: 将/etc/systemd/system/hysteria-server.service文件中的 WorkingDirectory=~ 改为: WorkingDirectory=/etc/hysteria 即可。 不知道为什么,我其他机器上保持WorkingDirectory=~不变是可以的。

haruue commented 3 days ago

发一下会出问题的这台机器上完整的 /etc/systemd/system/hysteria-server.service 看看?

以及下面这个命令的输出

echo ~root
NP-Prob commented 2 days ago

发一下会出问题的这台机器上完整的 /etc/systemd/system/hysteria-server.service 看看?

以及下面这个命令的输出

echo ~root

echo ~root命令的输出是:

/root

省流: 只将官方脚本设置的:

WorkingDirectory=~
User=hysteria
Group=hysteria

改为了:

WorkingDirectory=/etc/hysteria
User=root
Group=root

以前的机器上我只改了User和Group的部分如下:

WorkingDirectory=~
User=root
Group=root

完整文件如下: 官方脚本安装完后的/etc/systemd/system/hysteria-server.service文件:

[Unit]
Description=Hysteria Server Service (config.yaml)
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/hysteria server --config /etc/hysteria/config.yaml
WorkingDirectory=~
User=hysteria
Group=hysteria
Environment=HYSTERIA_LOG_LEVEL=info
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

这次出问题的机器改为了:

[Unit]
Description=Hysteria Server Service (config.yaml)
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/hysteria server --config /etc/hysteria/config.yaml
WorkingDirectory=/etc/hysteria
User=root
Group=root
Environment=HYSTERIA_LOG_LEVEL=info
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

之前改为以下内容即可:

[Unit]
Description=Hysteria Server Service (config.yaml)
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/hysteria server --config /etc/hysteria/config.yaml
WorkingDirectory=~
User=root
Group=root
Environment=HYSTERIA_LOG_LEVEL=info
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

另外,我如果把WorkingDirectory=/etc/hysteria改回WorkingDirectory=~,问题复现。

haruue commented 2 days ago

如果用 WorkingDirectory=/root 的话是不是也会 permission denied, 能看下 ls -ld /root 的输出吗?

NP-Prob commented 2 days ago

如果用 WorkingDirectory=/root 的话是不是也会 permission denied, 能看下 ls -ld /root 的输出吗?

改成WorkingDirectory=/root试了下,也 permission denied 了。

ls -ld /root 的输出如下: dr-xr-x--- 5 root root 4096 Nov 28 00:59 /root

改回WorkingDirectory=/etc/hysteria后恢复正常。

haruue commented 1 day ago
dr-xr-x--- 5 root root 4096 Nov 28 00:59 /root

你的 /root 目录没有写权限(没错, Linux 上的 root 用户并不能无视这种权限限制), 即使是 touch /root/testfile 也是会 permission denied 的。 chmod u+w /root 就好了。

NP-Prob commented 1 day ago
dr-xr-x--- 5 root root 4096 Nov 28 00:59 /root

你的 /root 目录没有写权限(没错, Linux 上的 root 用户并不能无视这种权限限制), 即使是 touch /root/testfile 也是会 permission denied 的。 chmod u+w /root 就好了。

感谢解答!学到了! 其实当我看到dr-xr-x--- 5 root root 4096 Nov 28 00:59 /root的时候,心里就大致知道是怎么回事了。之前没遇到过这种情况,也完全没往这方面想。😂