Ubuntu下保障JavaScript(Node.js)日志安全的核心措施
仅记录与安全、业务相关的必要信息(如错误堆栈、访问权限变更、关键业务流程),避免记录敏感数据(密码、信用卡号、个人身份信息PII)。通过日志级别(如error、warn)控制详细程度,debug、trace等级别仅在测试环境使用,生产环境关闭。
若必须记录可能包含敏感信息的字段(如用户输入、请求体),需在写入日志前进行脱敏。例如,使用正则表达式替换手机号、银行卡号的中间位数(如138****1234),或通过中间件拦截并过滤敏感参数。
gpg(GnuPG)或openssl对日志文件加密。例如,通过gpg --encrypt --recipient your-email@example.com app.log生成加密文件app.log.gpg,解密时需输入私钥密码;也可配置logrotate在轮转时自动加密旧日志(在/etc/logrotate.d/your-app中添加postrotate脚本调用gpg)。crypto模块(如AES-256-CTR算法)在写入日志时实时加密,读取时解密。需妥善保管密钥(如通过环境变量注入,而非硬编码在代码中)。通过chmod(如chmod 600 /var/log/your-app.log)设置日志文件仅所有者可读写,chown将文件归属为特定用户(如root:adm),避免其他用户或进程访问。对于集中式日志存储目录,设置更严格的权限(如750),仅允许授权用户组访问。
使用logrotate工具自动管理日志文件,配置每日轮转(daily)、保留7天日志(rotate 7)、压缩旧日志(compress)、删除空日志(notifempty)。轮转后自动删除或加密旧日志,防止日志文件过大导致磁盘空间耗尽或敏感信息长期暴露。
将日志发送至集中式日志管理系统(如ELK Stack、Graylog、Fluentd),统一存储和分析,便于快速定位安全事件。配置实时监控(如Prometheus+Grafana),设置异常警报(如频繁的error日志、未授权访问尝试),及时通知管理员响应。
auditd工具跟踪对日志文件的访问(如ausearch -f /var/log/your-app.log),记录修改、删除等操作,便于事后追溯。apt更新Ubuntu系统、Node.js及日志相关依赖(如winston、bunyan),修复已知安全漏洞,降低被攻击风险。ext4或XFS等安全文件系统,启用权限检查(fs.protected_hardlinks=1)和日志功能(data=journal),防止未经授权的文件修改。