
Estoy usando un servicio DNS llamadoproxy-dnscrypt. Y uso el PPA para instalarlo en Ubuntu 18.04. Aquí está el archivo de servicio instalado:
[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
Y doy una ruta de archivo /etc/dnscrypt-proxy/blacklist.txt
en ese dnscrypt-proxy.toml
archivo como una lista negra que es un enlace simbólico que apunta a mi directorio de inicio /home/user/.dnscrypt-proxy-config/blacklist.txt
.
La razón por la que hice esto es que blacklist.txt
proviene de Internet, por lo que sólo quiero ponerlo en mi directorio personal para mantener la seguridad.
Pero el problema es que este servicio falla debido a Open blacklist.txt failed: Permission denied.
que no entiendo qué parte causa este problema.
Puedo confirmar que este archivo y su enlace simbólico tienen al menos el permiso xx4. Y si coloco ese archivo directamente en /etc/dnscrypt-proxy
el directorio, funciona.
Entonces, ¿alguien podría decirme cuál es la causa raíz? Y si quiero seguir el formulario de enlace simbólico, ¿qué debo hacer?
Respuesta1
Lo has ProtectHome=yes
habilitado.
Si es verdadero, los directorios /home, /root y /run/user se vuelven inaccesibles y vacíos para los procesos invocados por esta unidad. Si se establece en "solo lectura", los tres directorios pasan a ser de solo lectura.
Para cambiar esta configuración en un archivo de unidad empaquetado,
- puede copiar todo el archivo de la unidad
/etc/systemd/system/<name>.service
y editarlo allí (/etc tiene prioridad sobre /usr/lib); - puede crear un archivo "complementario"
/etc/systemd/system/<name>.service.d/whatever.conf
que simplemente actualice la configuración que necesita:[Servicio]
ProtectHome=solo lectura - puedes usarlo
systemctl edit [--full] <name>
como atajo para hacer cualquiera de las cosas anteriores automáticamente; - como unúltimo recurso, puede usar la configuración de su administrador de paquetes (por ejemplo, NoUpgrade o dpkg-divert) para excluir la actualización del archivo en /usr/lib.