我有一个机密文件,我希望 systemd 服务能够读取该文件。我正在使用DynamicUser=True
此服务,ConfigurationDirectory=foo
并且我已将机密文件放入其中,/etc/foo/
但是如果该文件由 root 用户拥有,则该服务无法访问它。只有授予该文件 0644 权限,我才能正常工作。这看起来有点垃圾,实际上我只希望该服务加上 root 才能访问该文件。有没有办法做到这一点?
答案1
我打赌你可以使用:
ExecStartPre=+/usr/bin/install --owner=%u --mode=600 -T /etc/foo/secrets %T/secrets
前缀+
infont/usr/bin/install
确保它以 root 权限运行(因此它对源文件具有读取权限)。然后我们将其复制到%T
一个私有安装的临时目录,并将所有者设置为%u
动态用户名。如果您有多个使用同一文件的服务实例,该副本还可以解决一些并发问题。
答案2
作为约书亚·r·史密斯指出,你可以使用加载凭证。它将把文件从您的配置复制到/run/credentials/example.service/
,设置权限 500 和用户example:root
。
一个例子是:
[Service]
...
LoadCredential=config.json:/usr/local/etc/example/config.json
ExecStart=/usr/local/bin/example --config ${CREDENTIALS_DIRECTORY}/config.json
LoadCredentialEncrypted
如果您希望对凭证文件进行加密,也可以使用。