网上有一些指南展示了如何让 nodejs 在服务器上运行,但它们往往会跳过一些关于安全性的细节。这是一个有点牵强的问题,我不知道从哪里开始。我想知道是否有人可以澄清以下细节。
首先,我的设置:
我已经使用非 sudo 用户在本地安装了节点,因为使用管理员运行节点是一个坏主意:
/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
我可以通过做来运行应用程序pm2 start app.js
。我的
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
如果他们是这样送达的
public/
,我怎样才能安全地送达:nginx
http://mydomainname.com/public
404
我的应用程序处理路线,如果找不到路线,应该抛出。但是是否有人可以解决这个问题并恶意制作我的应用程序或nginx
浏览其他目录?即,在应用程序目录之外
http://mydomainname.com/../../etc/path/to/secrets
或者,就在我的应用程序本地
http://mydomainname.com/public/../../config.js
如果可能的话,是否可以在 nodejs 或 nodejs 中设置额外的安全预防措施
nginx
来防止这种情况发生?