将机密(密码、密钥)导出到 systemd 管理服务环境的最佳实践是什么?

将机密(密码、密钥)导出到 systemd 管理服务环境的最佳实践是什么?

管理帐户凭据和 SHA256 机密并将其提供给 systemd 管理服务的最佳实践是什么?

在旧的 init.d 方式中,我只需在 /etc/default 中安装一个脚本即可。从那里,我可以将我想要的任何内容导入环境变量,然后这些内容可供我的服务使用。

所以我的问题是,向 systemd 托管服务提供登录 ID/密码凭证和其他“机密”的“最佳实践”是什么?通过环境传递它被认为是“好的”还是有可接受的更好/更安全的方法?

(即,什么是放置服务(例如 mysql)密码、SHA256 机密等的最佳位置,以及如何最有效地将它们传达给需要它的长期运行的后台服务?有没有比在 systemd 启动进程之前在环境中设置它们更好的管理方法?)

答案1

我不知道有没有一种正确的方法来传递安全凭证systemdEnvironment=EnvironmentFile=指令肯定有助于传递环境变量,类似于旧的 init 系统。如果您正在寻找以前所做事情的直接翻译,那就这样吧。

您的应用也可能使用它自己的配置系统,例如节点配置对于 Node.js。配置包可能反过来提供管理机密的更多替代方案。例如,node-config 也可以从环境变量中加载值,但也可以工作git-crypt,使用 Git 中已加密存储的值。

有关环境变量的一些注意事项:即使您没有将设置的环境变量保存在文件中,如果在启动时将它们传递给进程,环境变量及其值可能会出现在文件名中(如/proc/27/environ在 Linux 上),以便用户有权读取该文件。即使进程稍后删除这些“启动环境”值,它们仍会保留在那里。

如果您确实将环境变量加载到应用程序配置系统中,请考虑让进程在环境变量进入配置系统后将其从进程中删除。这样至少可以少放一个敏感信息。

相关内容