CentOS 与 Node.js 的安全性实践指南
一 系统层安全基线
- 账户与权限
- 仅保留必要的超级用户,定期检查并清理多余或共享账号;将非必要账号的 shell 改为 /sbin/nologin 或锁定。
- 强化口令策略:长度不少于10位,包含大小写字母、数字与特殊字符;必要时通过 /etc/login.defs 统一策略。
- 保护关键文件:对 /etc/passwd、/etc/shadow、/etc/group、/etc/gshadow 设置不可更改属性(如 chattr +i),防止未授权篡改。
- 会话安全:为 root 设置 TMOUT 自动注销;通过 /etc/pam.d/su 限制仅特定组可使用 su;必要时禁用 Ctrl+Alt+Del 重启组合键。
- 网络与边界
- 启用并配置 firewalld/iptables,仅开放必要端口(如 80/443),对管理口限制来源网段。
- 最小化暴露面:关闭不必要的服务与端口,移除未使用的软件包与内核模块。
- 运行与资源
- 设置 ulimit(文件描述符、进程数、内存)与内核参数,缓解资源耗尽与 DoS 风险。
- 对 NFS 等共享存储实施最严格的访问控制(如 /etc/exports 精细化配置)。
二 Node.js 运行时与应用安全
- 运行时与依赖
- 使用 NodeSource 或 NVM 管理版本,保持 Node.js 与 npm 为最新稳定版;优先使用 LTS 版本线。
- 依赖管理:固定版本(如 package-lock.json),使用 npm ci 部署;定期执行 npm audit,必要时结合 Snyk 做供应链风险监测。
- 传输与边界
- 全站启用 HTTPS(如 Let’s Encrypt/Certbot),对外仅暴露 443;使用 Nginx 反向代理与静态资源卸载,隐藏后端实现细节。
- 设置安全响应头:使用 Helmet 启用 X-Frame-Options、X-XSS-Protection、X-Content-Type-Options、Strict-Transport-Security 等。
- 严格 CORS:仅允许受信源、方法与头;限制请求体大小(如 50MB 上限视业务而定)以缓解滥用。
- 应用逻辑与常见漏洞
- 输入校验与输出编码,防范 XSS/SQL 注入;使用 参数化查询/ORM 杜绝拼接。
- 身份认证与口令存储:使用 bcrypt/scrypt/PBKDF2 等强哈希;为敏感比较使用 crypto.timingSafeEqual 防时序攻击。
- 限流与防滥用:对登录、注册、短信/邮件发送等接口使用 express-rate-limit 等中间件。
- 错误处理:生产环境不暴露堆栈与敏感信息,统一错误码与日志审计。
- 进程与内存:使用 PM2 守护与集群模式;在内存敏感场景评估 –secure-heap 以降低敏感信息泄露风险。
三 已知风险与修复要点
- HTTP/2 资源耗尽导致拒绝服务(CVE-2021-22883)
- 影响范围:当时所有 10.x/12.x/14.x/15.x 早期版本;修复版本为 10.24.0、12.21.0、14.16.0、15.10.0。
- 处置:升级至修复版本;结合 ulimit 与连接数限制降低爆炸半径。
- HTTP 请求走私(CVE-2020-8287)
- 影响范围:早期 10.x/12.x/14.x/15.x;修复版本为 10.23.1、12.20.1、14.15.4、15.5.1。
- 处置:升级;在反向代理/网关统一规范化请求头,避免前端与后端对 Transfer-Encoding/Content-Length 解析差异。
- TLS 内存破坏(CVE-2020-8265)
- 影响范围:早期 10.x/12.x/14.x/15.x;修复版本同上(分别为 10.23.1、12.20.1、14.15.4、15.5.1)。
- 处置:升级;启用 TLS 1.2+,禁用已知弱套件与压缩,减少攻击面。
四 运维与监控实践
- 进程与部署
- 使用 PM2 管理进程生命周期、日志轮转与集群;通过 Nginx 终止 TLS、压缩与缓存,降低后端压力与暴露面。
- 配置与密钥
- 使用 环境变量 管理数据库密码、API 密钥与第三方令牌;禁止硬编码与提交至代码仓库。
- 日志与审计
- 记录访问与错误日志(如 morgan),集中到受控的日志系统;对登录、权限变更与异常流量设置告警。
- 持续更新与演练
- 建立 周/月度 安全巡检:系统补丁、Node.js 与依赖升级、漏洞扫描与基线核查;定期开展应急与回滚演练。
五 最小可行安全清单
| 领域 |
关键动作 |
工具/配置 |
| 系统账户 |
清理多余账号、锁定不必要 root 登录、强口令 |
/etc/passwd、/etc/shadow、/etc/login.defs、chattr +i |
| 会话与登录 |
root 自动注销、限制 su、禁用 Ctrl+Alt+Del |
TMOUT、/etc/pam.d/su |
| 防火墙 |
仅开放 80/443,管理口白名单 |
firewalld/iptables |
| Node 版本 |
使用 NVM/NodeSource,保持 LTS 最新 |
nvm、NodeSource 仓库 |
| 传输加密 |
全站 HTTPS,HSTS |
Certbot、Nginx、Helmet |
| 依赖安全 |
锁定版本、npm ci、npm audit/Snyk |
package-lock.json、npm audit |
| 请求安全 |
严格 CORS、限流、请求体大小限制 |
cors、express-rate-limit |
| 进程守护 |
进程托管、日志轮转、集群 |
PM2 |
| 日志与监控 |
访问/错误日志、集中化与告警 |
morgan、日志平台 |
以上清单可作为上线前自检与日常巡检的基线,配合变更管理与回滚预案执行,可显著降低被攻破概率并提升响应效率。