我正在寻找一种通过 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/private
为ssl-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 服务,以便它们使用新权限重新连接。