Ubuntu 环境下 JavaScript 日志的安全性保障
一 最小化敏感信息与日志级别
- 在记录前对日志进行脱敏:移除或掩码密码、令牌、身份证号、手机号、银行卡号等敏感字段;对IP、邮箱等可按需做部分遮蔽。
- 合理配置日志级别:生产环境使用info/warn/error,仅在排障时临时开启debug/trace;避免把调试细节长期落盘。
- 在 Node.js 中选择成熟的日志库(如Winston、Pino、Bunyan、Log4js),便于统一格式、级别与传输控制。
二 文件权限与进程隔离
- 以最小权限用户运行应用(如专用用户nodeuser),避免使用root。
- 将日志目录与文件的所有者设为运行用户,权限收紧:
- 目录:chown nodeuser:nodegroup /var/log/myapp && chmod 700 /var/log/myapp
- 文件:chmod 640 /var/log/myapp/*.log
- 如需写入系统日志,使用具备权限的日志代理或在系统日志中为该用户配置写入权限,避免放宽全局权限。
三 传输与静态加密
- 传输加密:日志在落盘前或发送到外部系统时,使用TLS/HTTPS进行加密,防止链路窃听与中间人攻击。
- 静态加密(按需):
- 使用GPG对归档日志加密:示例命令
- 对称加密:gpg --symmetric --cipher-algo AES256 /path/to/app.log
- 公钥加密:gpg --output app.log.gpg --encrypt --recipient your@email.com app.log
- 与logrotate联动自动加密归档(在轮转后执行 gpg 并删除明文)。
- 注意妥善管理密钥/口令与访问授权,避免密钥与日志同机存放。
四 轮转、保留与访问控制
- 使用logrotate进行按日/按大小轮转、压缩与清理,示例配置:
- /var/log/myapp/*.log { daily; rotate 7; compress; delaycompress; missingok; notifempty; create 640 root adm }
- 对集中式日志平台(如ELK/Graylog)启用TLS传输与基于角色的访问控制(RBAC),仅授权人员可检索与导出日志。
五 集中化、监控与审计
- 将日志统一发送到ELK Stack(Elasticsearch, Logstash, Kibana)或Graylog,便于检索、可视化与审计。
- 建立监控与告警(如Prometheus + Grafana)对错误率、登录失败、异常流量等进行实时告警。
- 定期审计:在 /var/log/ 及应用的日志目录中检索安全关键词(如error、failed、unauthorized、attack),并结合logwatch/ELK做自动化分析。