我已经设置了shadowsocks-libev并使用以下 systemctl 服务运行它:
[Unit]
Description=Shadowsocks-Libev Manager Service
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=nobody
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
ExecStart=/usr/bin/ss-manager -c /etc/shadowsocks/%i.json
[Install]
WantedBy=multi-user.target
我最近注意到我的 shadowsocks 配置文件 ( /etc/shadowsocks/manager.json
) 具有全局读取权限,因此我将其更改为 600 并确保所有者是nobody
. 由于某种原因,这会导致进程在启动时无法读取配置文件。
systemctl start [email protected]
ss-manager[1357]: 2018-01-05 11:41:00 ERROR: Invalid config path.
这与我撤销该文件的所有读取权限时看到的错误相同。
但是,如果我使用命令行中完全相同的命令启动 shadowsocks,它工作正常:
sudo -u nobody /usr/bin/ss-manager -c /etc/shadowsocks/manager.json
nobody
同样,我在使用cat
or读取文件时也没有问题less
。
当我检查由systemctl
in启动的进程时,ps
它显示它正在运行nobody
,并且当进程输出文件时,所有者设置为nobody
. 为什么它不能访问这个文件?为什么通过 systemctl 运行它和从终端运行它有区别?
我的问题似乎与这个问题相似,但我的 ExecStart 中没有任何引号,因此该解决方案不适用于我的情况。