1. 系統賬戶與權限管理
for temp in $(cut -d ":" -f 1 /etc/passwd | grep -v "root"); do passwd -l $temp; done
。nodeapp
)及同組,避免以root身份運行(降低權限濫用風險)。命令:sudo groupadd nodeapp; sudo useradd -g nodeapp nodeapp -s /bin/false
。/etc/pam.d/login
)限制TTY終端登錄嘗試次數(如auth required pam_tally2.so deny=5 unlock_time=300
),防止暴力破解。2. 系統級安全加固
ufw
(Uncomplicated Firewall)限制訪問,僅開放必要端口(如HTTP 80、HTTPS 443)。命令:sudo ufw allow 22/tcp; sudo ufw allow 80/tcp; sudo ufw allow 443/tcp; sudo ufw enable
。/var/www
目錄)。命令:setenforce 1
(臨時啟用);修改/etc/selinux/config
(永久生效)。3. Node.js應用安全配置
--uid
和--gid
參數指定專用用戶(如PM2啟動時:pm2 start app.js --uid nodeapp --gid nodeapp
),或使用nvm
在用戶級別安裝Node.js。X-Frame-Options
(防點擊劫持)、X-XSS-Protection
(防XSS)等頭,提升應用安全性。示例:const helmet = require('helmet'); app.use(helmet());
。validator
庫或正則表達式過濾特殊字符,防止SQL注入、XSS攻擊。eval()
、new Function()
等可執行字符串代碼的函數,防止遠程代碼執行(RCE)。4. 依賴與版本管理
curl -sL https://deb.nodesource.com/setup_20.x | sudo -E bash -; sudo apt-get install -y nodejs
。nvm
(Node Version Manager)安裝和管理多版本Node.js,便于切換和升級(避免系統級權限問題)。命令:sudo npm install -g n; sudo n latest
。npm audit
檢查依賴項安全漏洞,npm update
更新到最新版本;或使用Snyk
等工具自動化漏洞掃描。5. HTTPS與加密配置
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
```。
dotenv
庫加載.env
文件中的敏感信息(如數據庫密碼、API密鑰),避免硬編碼在代碼中。命令:require('dotenv').config(); const dbPassword = process.env.DB_PASSWORD;
。6. 日志與監控
/var/log/my-node-app
),設置用戶/組權限(chown nodeapp:nodeapp /var/log/my-node-app; chmod 750 /var/log/my-node-app
);使用Winston
或Bunyan
等日志庫控制日志級別(如info
、error
)。/etc/logrotate.d/my-node-app
配置文件,設置日志輪轉(每天輪轉、保留14天、壓縮舊日志)。示例配置:/var/log/my-node-app/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 640 nodeapp nodeapp
sharedscripts
postrotate
[ ! -f /var/run/my-node-app.pid ] || kill -USR1 `cat /var/run/my-node-app.pid`
endscript
}
```。
pm2
的監控功能(pm2 monit
)或Prometheus
+Grafana
監控應用性能(CPU、內存、請求量),設置異常告警(如郵件、短信)。7. 其他安全措施
express-rate-limit
中間件限制請求頻率(如每分鐘最多60次),防止DDoS攻擊。示例:const rateLimit = require('express-rate-limit'); app.use(rateLimit({ windowMs: 60 * 1000, max: 60 }));
。cors
中間件限制允許的域名(如origin: 'https://yourdomain.com'
)、方法(如GET,POST
),防止惡意跨域訪問。defaultSrc: ["'self'"]
),減少XSS攻擊風險。