Node + PM2 - 如何使用非 root 用户安全地读取 SSL 私钥?

Node + PM2 - 如何使用非 root 用户安全地读取 SSL 私钥?

我正在寻找一种通过 PM2 运行节点的方法,同时读取放置在安全目录中的 SSL 私钥。

详细信息:带有 Node 的 Bitnami LEMP 堆栈

/etc/ssl/private 的权限:

drwx------ 2 root root  4096 private

密钥文件的权限:

-rw-r----- 1 root root 1704 my_key_file.key

有了上述权限,nginx 和 php 都可以正常运行,没有任何问题(我猜这是因为 nginx 的掌握进程是否以 root 身份运行?),以及以 sudo 身份运行节点是否也是如此。

但是我想以非 root 用户身份运行此节点代码,因为这可以降低节点服务器受到威胁时的安全风险。

我在这里有什么选择?我的理解是这样的:

  • 放宽私钥文件夹/文件的权限(不好,涉及对 /etc/ssl/private 的更改!)
  • 复制 private_key 并使其仅由运行 pm2 的安全用户可读(有点混乱,涉及跟踪复制的文件以进行更新等)
  • 运行PM2掌握以 root 身份运行,然后以非 root 用户身份生成一个进程/实例(非常类似于 nginx 的工作方式,不确定这是否可能)
  • 以 root 身份运行 PM2,更改代码以在以 root 身份执行某些操作后降低其自身的特权级别(如下所述这里- 看起来有点混乱,也可能存在安全风险)

非常感谢任何形式的帮助!谢谢

答案1

您可以创建一个名为的组ssl-cert并将添加pm2user到该组。

sudo groupadd ssl-cert
sudo usermod -a -G ssl-cert pm2user

然后将目录及其内容的组更改/etc/ssl/privatessl-cert。您还需要为private目录添加组执行权限。

sudo chown -R root:ssl-cert /etc/ssl/private/
sudo chmod 650 /etc/ssl/private/
sudo chmod 640 /etc/ssl/private/my_key_file.key

这将允许 PM2 读取文件。它更安全还是更不安全?这可能取决于谁有权访问服务器以及该ssl-cert组的共享范围。将组的使用保持在绝对最低限度:仅限非登录帐户。您可能需要重新启动 Nginx 和 PM2 服务,以便它们使用新权限重新连接。

相关内容