Ubuntu Node.js 日志安全存储实操指南
一 安全原则与总体架构
- 采用最小权限与访问控制:日志目录与文件仅对运行应用的专用系统用户可读写,其他用户无权限。
- 使用结构化日志(如 JSON)并合理设置日志级别(error、warn、info、debug),避免记录敏感信息(密码、身份证、手机号、银行卡号等)。
- 实施日志轮转与压缩,控制保留周期与磁盘占用,便于审计与追溯。
- 建立异地备份/远程归档与集中化日志管理(如 ELK/Graylog),提升可用性与合规性。
二 本地安全存储与权限配置
- 创建专用日志目录并设定属主属组(假设应用以nodeuser:nodegroup运行):
- mkdir -p /var/log/myapp
- sudo chown nodeuser:nodegroup /var/log/myapp
- sudo chmod 700 /var/log/myapp(仅属主可读写执行)
- 日志文件权限建议:
- 运行期日志:sudo chmod 600 /var/log/myapp/*.log(仅属主可读写)
- 轮转后待归档/传输的日志:sudo chmod 640 /var/log/myapp/*.gz(属主读写,同组只读)
- 在 Node.js 中使用日志库写入该目录(示例 Winston):
- const winston = require(‘winston’);
- const logger = winston.createLogger({
level: ‘info’,
format: winston.format.json(),
transports: [new winston.transports.File({ filename: ‘/var/log/myapp/app.log’ })]
});
- 如系统启用 AppArmor,为 Node.js 进程添加对日志目录的读写规则,进一步收敛访问面。
三 日志轮转与压缩
- 使用系统自带的 logrotate 管理日志生命周期(通常已预装;如未安装:sudo apt-get install logrotate)。
- 创建应用专属配置:/etc/logrotate.d/nodejs-app
- /var/log/myapp/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 640 nodeuser nodegroup
postrotate
systemctl reload myapp >/dev/null 2>&1 || true
endscript
}
- 关键参数说明:
- daily/rotate 7/compress:按天轮转并保留7天,旧日志压缩节省空间。
- delaycompress:避免刚轮转的日志立即压缩,便于短期排查。
- missingok/notifempty:文件缺失或为空时不报错/不轮转。
- create 640:新日志文件权限与属主属组,确保最小权限。
- postrotate:通知应用重新打开日志文件(避免句柄占用)。
- 测试与验证:
- 手动触发:sudo logrotate -f /etc/logrotate.conf
- 查看轮转状态:tail -f /var/log/logrotate.log
- 可选按大小触发:在配置中加入 size 10M 等条件。
四 加密与备份
- 传输加密归档(推荐):在 logrotate 的 postrotate 中调用 GnuPG 对轮转后的日志进行非对称加密,再安全删除明文。
- 生成密钥:gpg --full-generate-key
- 配置示例(注意权限与密钥托管):
- /var/log/myapp/*.log {
daily
rotate 7
compress
missingok
notifempty
create 600 nodeuser nodegroup
postrotate
gpg --batch --yes --output /var/log/myapp/app.log.$(date +%Y%m%d).gpg
–encrypt --recipient your@email.com /var/log/myapp/app.log
rm -f /var/log/myapp/app.log
endscript
}
- 远程备份(可选):使用 rsync 将加密归档同步至受控的备份服务器(配合 SSH 密钥与最小权限账户)。
- 0 2 * * * rsync -avz --delete /var/log/myapp/*.gpg backup@backup.example.com:/backup/nodejs-logs/
- 密钥与机密管理:私钥离线保存,使用密钥密码与**硬件安全模块(HSM)/密钥管理服务(KMS)**降低泄露风险。
五 集中化与审计
- 集中式日志管理:将日志发送至 ELK Stack(Elasticsearch、Logstash、Kibana) 或 Graylog,便于检索、分析与可视化;在传输链路上启用 TLS 加密。
- 审计与合规:
- 定期审计日志目录与文件的属主、属组、权限与完整性(如 AIDE)。
- 启用系统日志(如 rsyslog)对关键操作与权限变更进行审计记录。
- 对集中平台实施访问控制、留存策略与告警。