我希望 dnscrypt-proxy 作为动态用户而不是作为 root。但我还想在 nftables 中使用防火墙规则,在其中指定 user dnscrypt-proxy
,以允许它连接到上游 dns 提供商。
现在的问题是nftables
想要在网络启动之前运行,这很好并且需要,但它抱怨用户dnscrypt-proxy
不存在。
该dnscrypt-proxy
服务仅在网络启动后运行,因此用户仅在网络启动后创建。处理它的标准/最佳方法是什么?
我是否应该尝试指定固定用户而不是
dnscrypt-proxy
动态用户并设置提到的其他安全选项这里手动?我应该通过 nftables 中的用户名以外的其他方式检测服务吗?
我是否可以
dnscrypt-proxy
在我的系统上手动创建用户,然后 systemd 只使用它而不删除它,因为它已经存在?我是否应该创建一个在每次启动时在 nftables 之前运行并创建该用户的服务,然后在 dnscrypt 服务停止时由 systemd 删除该用户?
如果防火墙已在运行且 dnscrypt 服务已停止,会发生什么情况?防火墙是否会因为规则集中提到的用户 ID 不再存在而崩溃或陷入某种麻烦?
答案1
我想我在 中找到了答案man 5 systemd.exec
。该DynamicUser=
设置很乐意与系统上预先存在的静态用户一起运行:
如果配置名称的静态分配的用户或组已存在,则使用它并且不分配动态用户/组。
这似乎允许DynamicUser
一次性设置所有隐含的安全设置,并让用户持久存在。因为我想在 nftables 中引用这个用户,所以这似乎是有道理的。
所以我做了什么:
# systemctl stop dnscrypt-proxy.socket
# systemctl stop dnscrypt-proxy.service
# useradd --user-group --system dnscrypt-proxy
# systemctl edit dnscrypt-proxy.service
并添加:
[Service]
DynamicUser = yes
User = dnscrypt-proxy
Group = dnscrypt-proxy
保存配置文件并重新启动服务和套接字。
# systemctl daemon-reload
# systemctl start dnscrypt-proxy.service