Почему динамический пользователь не может читать личные файлы?

Почему динамический пользователь не может читать личные файлы?

Я использую 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 становятся недоступными и пустыми для процессов, вызываемых этим модулем. Если установлено значение "read-only", три каталога становятся доступными только для чтения.


Чтобы изменить эту настройку в упакованном файле модуля,

  • вы можете скопировать весь файл модуля /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 из обновления.

Связанный контент