溫馨提示×

Node.js 在 Linux 上如何實現安全配置

小樊
39
2025-09-23 02:54:38
欄目: 編程語言

1. 系統賬戶與權限管理

  • 禁用不必要的用戶登錄:除root賬戶外,批量鎖定其他用戶賬戶(防止未授權登錄)。命令:for temp in $(cut -d ":" -f 1 /etc/passwd | grep -v "root"); do passwd -l $temp; done。
  • 使用專用用戶運行Node.js:創建專用用戶(如nodeapp)及同組,避免以root身份運行(降低權限濫用風險)。命令:sudo groupadd nodeapp; sudo useradd -g nodeapp nodeapp -s /bin/false。
  • 限制登錄嘗試次數:通過PAM配置(/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。
  • SELinux配置:啟用SELinux(強制訪問控制),根據需求設置策略(如限制Node.js進程只能訪問/var/www目錄)。命令:setenforce 1(臨時啟用);修改/etc/selinux/config(永久生效)。

3. Node.js應用安全配置

  • 避免root運行:通過--uid--gid參數指定專用用戶(如PM2啟動時:pm2 start app.js --uid nodeapp --gid nodeapp),或使用nvm在用戶級別安裝Node.js。
  • 使用Helmet設置安全HTTP頭:通過Helmet中間件添加X-Frame-Options(防點擊劫持)、X-XSS-Protection(防XSS)等頭,提升應用安全性。示例:const helmet = require('helmet'); app.use(helmet());。
  • 輸入驗證與清理:嚴格驗證所有用戶輸入(如表單、URL參數),使用validator庫或正則表達式過濾特殊字符,防止SQL注入、XSS攻擊。
  • 避免危險函數:禁用eval()、new Function()等可執行字符串代碼的函數,防止遠程代碼執行(RCE)。

4. 依賴與版本管理

  • 使用NodeSource倉庫安裝:通過NodeSource PPA安裝最新穩定版Node.js(避免舊版本漏洞)。命令:curl -sL https://deb.nodesource.com/setup_20.x | sudo -E bash -; sudo apt-get install -y nodejs。
  • 用nvm管理版本:使用nvm(Node Version Manager)安裝和管理多版本Node.js,便于切換和升級(避免系統級權限問題)。命令:sudo npm install -g n; sudo n latest。
  • 定期更新依賴:使用npm audit檢查依賴項安全漏洞,npm update更新到最新版本;或使用Snyk等工具自動化漏洞掃描。

5. HTTPS與加密配置

  • 啟用HTTPS:使用Let’s Encrypt生成免費SSL證書,配置Nginx反向代理(將HTTP升級為HTTPS)。示例Nginx配置:
    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);使用WinstonBunyan等日志庫控制日志級別(如info、error)。
  • 使用logrotate管理日志:創建/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配置:若需跨域請求,使用cors中間件限制允許的域名(如origin: 'https://yourdomain.com')、方法(如GET,POST),防止惡意跨域訪問。
  • 內容安全策略(CSP):通過Helmet設置CSP,限制頁面可加載的資源(如defaultSrc: ["'self'"]),減少XSS攻擊風險。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女