是什麼導致動態使用者無法讀取個人檔案?

是什麼導致動態使用者無法讀取個人檔案?

我正在使用名為的 DNS 服務dnscrypt 代理。我使用 PPA 在 Ubuntu 18.04 上安裝它。這是安裝的服務文件:

[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 中的檔案進行升級。

相關內容