gpt4 book ai didi

node.js - Nodejs、PM2 和 nginx 部署安全性?

转载 作者:太空宇宙 更新时间:2023-11-03 22:35:08 25 4
gpt4 key购买 nike

网上有一些指南展示了如何让 Nodejs 在服务器上运行,但它们往往会跳过一些有关安全性的细节。这是一个有点沉重的问题,我不知道从哪里开始。我想知道是否有人可以澄清以下细节。

首先,我的设置:

  • 我已使用非 sudo 用户在本地安装了 Node ,因为使用管理员运行 Node 是一个坏主意:

    /home/appuser
    |--- nodejs/ # node install
    |--- bin/
    |--- include/
    |--- lib/
    |--- share/

    |--- app/
    |--- node_modules/
    |--- public/ # holds html templates, static files , uploaded files
    |--- core/ # holds main app js files
    |--- app.js # Main Nodejs program
    |--- config.js # Configuration that holds authentication details, other config stuff
    |--- package.json

    我可以通过执行 pm2 start app.js 使用 PM2 运行应用程序。

    我的nginx配置:

    server {
    listen 80;

    server_name mydomainname.com;

    location / {
    proxy_pass http://localhost:8080;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
    }
    }

我担心的是:

(1) 应用程序 - 主app/ 是否应该位于/home/appuser 内?

  • 将我的应用程序文件存放在我的非 sudo 用户主目录中有什么危险吗?如果是这样,我的应用程序文件应该存放在哪里?

  • 我想知道 public/ 是否应该位于不同的位置,而不是与应用程序文件位于同一文件夹中。我不希望应用程序源文件泄露,尤其是我的 config.js,它包含一些敏感信息,例如我的数据库身份验证详细信息和电子邮件身份验证详细信息。

    如果应该移动,/public 相对于 app/ 的位置如何?

  • 目前 app/ 的权限为 chown -R appuser:appuser app/,因此用户拥有所有文件。我还应该对我的应用程序文件夹设置其他权限吗?

(2) PM2 - 由于我在本地安装了 Nodejs 及其模块,因此如何在服务器重新启动后安全地让 pm2 重新启动我的 NodeJS 应用程序?

  • 我的理解是 pm2-init.sh 将位于 /etc/init.d/ 中,如果我安装了 ,这种情况会自动发生>pm2 使用 sudo 进行全局操作。

    我应该如何让 pm2 使用非 sudo 用户安全地重新启动我的应用?

(3)NGINX

  • 如果像这样提供服务,我如何通过 nginx 安全地提供 public/ 服务:

    http://mydomainname.com/public
  • 我的应用处理路由,如果未找到路由,则应抛出 404。但是是否有人可以解决这个问题并恶意地让我的应用程序或 nginx 浏览其他目录?

    即,在应用程序目录之外

    http://mydomainname.com/../../etc/path/to/secrets

    或者,就在我的应用程序本地

    http://mydomainname.com/public/../../config.js

    如果可能的话,是否可以在 nginx 或 Nodejs 中设置额外的安全预防措施来防止这种情况?

最佳答案

  1. 我采用的方式是让所有文件都是node:node-developer。然后您在 node 用户下启动您的应用程序。其中,node-developer 是一个开发人员小组。并将所有文件权限设置为 770

  2. 编写一个简单的 shell 脚本,登录到 node 用户并作为 init scirpts 启动 pm2

  3. 通过使用正确的权限设置来解决。 Nginx 在 nginx 用户下运行。如果文件是公共(public)的,请将其设为 nginx:nginx。即使用户也可以执行public/../../something。 Nginx 将无权访问它。

关于node.js - Nodejs、PM2 和 nginx 部署安全性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30561603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com