我有一个 Web 应用程序,旨在为每个客户部署到专用主机上。为了以安全的方式管理密钥、客户特定凭证等,我使用了环境变量。
在生产中我应该在哪里定义环境变量?
我知道有几种可能性:启动终端会话时,会加载/etc/profile
、~/.bashrc
和类似文件;我没有选择这些,因为我不知道这样做是否被视为最佳实践。我曾尝试将它们存储在systemd
应用程序的配置中,但这只会使它们可用于主进程,因此在部署代码更改时迁移数据库效果不佳。我知道有几种工具似乎可以“神奇地”为您处理环境变量,但让我们假设我没有使用其中一种;我想在自己的安装和部署脚本中手动处理它们。我也对保密感兴趣,因此环境变量存储位置的安全性对我来说也是一个问题。
答案1
我建议将环境变量放在 /etc/profile.d/*.sh 下的一个或多个文件中。例如,/etc/profile.d/app.sh。当您控制整个文件时,更容易推出,并且由 Debian 和 Red Hat 上的登录 shell 自动提供。
归 root 所有,组 www-data,其他人无法读取将限制对文件的读取权限。请注意,在 Linux 上,环境变量通过 /proc//environ 可见,但只有进程所有者和 root 可见。
您可能希望进一步限制其他配置文件,用于密码或其他敏感数据。也许将其称为 /etc/profile.d/appsecret.sh。