
我正在使用名為的 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 中的檔案進行升級。