我正在使用名为dnscrypt-代理。我在 Ubuntu 18.04 上使用 PPA 安装。以下是安装好的服务文件:
[Unit]
Description=DNSCrypt-proxy client
Documentation=https://github.com/jedisct1/dnscrypt-proxy/wiki
Requires=dnscrypt-proxy.socket
After=network.target
Before=nss-lookup.target
Wants=nss-lookup.target
[Service]
NonBlocking=true
ExecStart=/usr/bin/dnscrypt-proxy --config /etc/dnscrypt-proxy/dnscrypt-proxy.toml
ProtectHome=yes
ProtectControlGroups=yes
ProtectKernelModules=yes
# Run dnscrypt-proxy as unprivileged user with
# temporary assigned UID/GID. See man:systemd.exec
# for more info. Requires systemd 232+.
DynamicUser=yes
CacheDirectory=dnscrypt-proxy
LogsDirectory=dnscrypt-proxy
RuntimeDirectory=dnscrypt-proxy
[Install]
Also=dnscrypt-proxy.socket
WantedBy=multi-user.target
并且我/etc/dnscrypt-proxy/blacklist.txt
在该dnscrypt-proxy.toml
文件中给出了一个文件路径作为黑名单,这是一个指向我的主目录的符号链接/home/user/.dnscrypt-proxy-config/blacklist.txt
。
我这样做的原因是它blacklist.txt
来自互联网,所以我只想把它放在我的个人目录中以保证安全。
但问题是,这个服务失败了,因为Open blacklist.txt failed: Permission denied.
虽然我不明白哪个部分导致了这个问题。
我可以确认该文件及其符号链接都至少具有 xx4 权限。如果我直接将该文件放入/etc/dnscrypt-proxy
目录中,它就可以正常工作。
那么谁能告诉我根本原因是什么?如果我想遵循符号链接形式,我该怎么办?
答案1
您已ProtectHome=yes
启用。
如果为 true,则目录 /home、/root 和 /run/user 将无法访问,并且对于此单元调用的进程为空。如果设置为“只读”,则这三个目录将变为只读。
要在打包的单元文件中更改此设置,
- 您可以将整个单元文件复制到
/etc/systemd/system/<name>.service
并在那里进行编辑(/etc 优先级高于 /usr/lib); - 您可以创建一个“附加”文件
/etc/systemd/system/<name>.service.d/whatever.conf
,只更新您需要的设置:[服务]
ProtectHome=只读 - 您可以使用
systemctl edit [--full] <name>
快捷方式自动执行上述任一操作; - 作为一个最后一招,您可以使用您的包管理器的配置(例如NoUpgrade或dpkg-divert)来排除/usr/lib中文件的升级。