是什么导致动态用户无法读取个人文件?

是什么导致动态用户无法读取个人文件?

我正在使用名为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中文件的升级。

相关内容