在 Debian 上运行 Node.js 时,“安全设置”通常可以从 系统层、Node 运行层、应用层、依赖与运维 几个方面来做。下面给你一套实用、可落地的建议(适用于 Debian 10/11/12)。
避免使用来路不明的源:
# 使用 NodeSource(推荐)
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo bash -
sudo apt install -y nodejs
或直接使用 Debian 自带版本(版本可能偏旧):
sudo apt install nodejs npm
不要使用 root 运行 Node 服务
sudo useradd -r -s /usr/sbin/nologin nodeapp
运行应用:
sudo -u nodeapp node app.js
只开放必要端口:
sudo ufw allow 22
sudo ufw allow 443
sudo ufw enable
--unhandled-rejections=strict防止隐藏错误导致不稳定:
node --unhandled-rejections=strict app.js
如非必要,不要开启调试端口:
# 危险示例(不要这样做)
node --inspect=0.0.0.0:9229 app.js
PM2(常用)
sudo npm i -g pm2
pm2 start app.js --user nodeapp
pm2 save
pm2 startup
好处:
通过 Nginx + Let’s Encrypt:
sudo apt install nginx certbot python3-certbot-nginx
sudo certbot --nginx -d example.com
Node 不直接暴露 80/443,由 Nginx 反向代理。
如使用 Express:
app.disable('x-powered-by');
app.use((req, res, next) => {
res.setHeader('X-Content-Type-Options', 'nosniff');
res.setHeader('X-Frame-Options', 'DENY');
res.setHeader('Content-Security-Policy', "default-src 'self'");
next();
});
npm audit
npm audit fix
生产环境建议:
npm ci --omit=dev
提交:
package-lock.jsonpnpm / yarnchown -R nodeapp:nodeapp /var/www/app
chmod -R 750 /var/www/app
不要硬编码密钥:
# .env(权限 600)
DB_PASSWORD=xxx
代码读取:
require('dotenv').config();
chmod 640 app.log
sudo apt install fail2ban
sudo systemctl enable fail2ban
防止 SSH 暴力破解。
Debian 默认使用 AppArmor,可限制 Node:
sudo aa-status
为 Node 编写 AppArmor profile(进阶,可单独讲)。
Internet
↓
Nginx (HTTPS)
↓
PM2 + Node.js (非 root)
↓
PostgreSQL / Redis
如果你能告诉我:
我可以给你 更针对性的安全配置清单。