与网络服务器和安全相关的环境变量

与网络服务器和安全相关的环境变量

我想在我的 Linux 机器上设置一些可由 Node.js 服务器访问的环境变量。这些变量将包含数据库密码和 API 密钥等敏感信息。

我当前的设置是,几乎没有权限的用户(甚至不能 sudo)运行 Node.js 服务器。因为我想限制该用户只能运行服务器(误导?),所以我不想将环境变量放在用户的 ~/.bash_profile 中。

所以我的想法是把服务器需要的环境变量放到/etc/profile中;这样,运行服务器的低权限用户的配置中就不会包含变量,但仍然可以使用它们。然而,/etc/profile 上的权限使得每个人都具有读取访问权限,这在逻辑上是有意义的,但让我回到了开始的地方。

Linux 系统上 Web 服务器环境变量的最佳实践是什么?如果它们始终可以被任何用户读取,那么环境变量是比仅将包含位于项目根目录的键和值的文本文件导入到 Web 服务器更好的实践(如 dotenv)?环境变量是否不是安全问题,而只是维护的最佳实践,这就是为什么我无法在这里将这些点联系起来?

答案1

您不应以纯文本形式保存任何敏感数据。它应该被加密,这样就没有人可以解密它。

在 JSON 文件中添加所有配置 使用一些密码加密 JSON 文件并保存在服务器上 运行应用程序时解密文件并使用变量

参考这个模块: https://github.com/nareshv/secure-conf

注意:为了保护此类代码,您可以使用以下命令在生产环境中将 javascript 设为不可读的格式:https://javascriptobfuscator.com/

使用这种技术可以节省您的代码。

答案2

您可以将它们添加到不同组拥有的文件中。然后配置/etc/sudoers为允许该用户作为其他组运行服务器。

这不会授予用户任何其他 sudo 权限(例如 root)。然后,您可以使用 shell 包装器来帮助用户。

Sudo 是非常可配置的。

相关内容