![nodejs 的权限设置](https://linux22.com/image/692208/nodejs%20%E7%9A%84%E6%9D%83%E9%99%90%E8%AE%BE%E7%BD%AE.png)
我的服务器上运行着几个应用程序;它们是用 meteo.js 构建的,所以它们是 nodejs 进程,我使用 forever npm 模块运行它们;
我目前使用同一个用户(该用户所属的组拥有所有网站目录)为所有网站启动永久启动;现在这将成为生产服务器,我想更好地了解这可能导致的安全问题;启动 nodejs 进程时是否有一些通用的安全规则需要遵循?我目前的方法是否可能危险?
答案1
假设您的应用程序不需要对应用程序数据的写访问权限(实际上它不需要),我们执行以下操作:
我们将用户分为两类 -node-<app>-runtime
和node-<app>-data
。<app>
是应用程序名称。它们都是组的一部分node-<app>
。这些不是我们用来称呼那些爱管闲事的人的实际名称。
我们采取以下措施:
1)为了构建应用程序,我们总是在一台单独的机器上构建,然后有一个 npmdist
脚本,它只放置文件需要将应用程序运行到/dist
目录中,并将此目录的 tar 副本发送到我们的部署服务器。这样做的好处是双重的 - 我们确切地知道部署的内容,并且可以确保目录中的任何 dev-depsnode_modules
和.git
其他数据不会添加到生产机器中。这也意味着当 GitHub/Npm/etc. 出现故障时,它不会破坏自动缩放等 - 我们的部署服务器只会提供预先构建的 tarball。
2) 我们使用配置管理系统在标准位置创建一个日志目录,可以使用权限 640 写入该目录。node-<app>-runtime
该路径由标准环境变量提供给应用程序。我们的日志处理守护程序会自动拾取这些日志并将其发送到远程服务器。
3)我们的部署系统将应用程序文件放在特定位置,并将其设置为具有node-<app>-data
权限 640 的所有者。该路径由标准环境变量提供给应用程序。
我唯一的其他建议是始终确保你设置了NODE_ENV=production
。许多节点模块使用此约定来关闭调试符号,或提高性能(express
想到了)。