1. 选择成熟日志库并保持更新
使用zap、logrus等成熟日志库(避免依赖标准库log的基础功能),这些库提供日志级别控制、格式化、结构化日志等高级功能,且能及时修复安全漏洞。同时,定期检查并升级日志库至最新版本,确保获取最新的安全修复和功能增强。
2. 防止日志注入攻击
利用日志库的格式化功能(如zap的Infof、logrus的WithFields)对日志内容进行转义,避免恶意用户通过插入特殊字符(如%s、\n)破坏日志结构或执行未授权命令。例如,使用fmt.Sprintf对用户输入进行转义后再记录。
3. 严格控制日志级别与内容
配置日志记录器仅记录必要级别(如INFO、WARN、ERROR)的日志,避免记录敏感信息(如密码、银行卡号、个人身份信息)。若需记录敏感数据,应进行脱敏处理(如用***替换密码中间字符、哈希化用户身份证号)。
4. 规范日志输出位置与权限
将日志输出至安全路径(如/var/log/app/),避免使用相对路径(防止路径遍历攻击)。通过os.Chmod设置日志文件权限为640(所有者可读写,组用户可读,其他用户无权限),并通过chown将文件所有者设置为非root用户(如appuser),避免以root身份记录日志。
5. 实施日志轮转与清理
使用logrotate工具配置日志轮转策略(如按大小maxsize 100M或时间daily分割日志),设置保留期限(如keep 7 days),避免单个日志文件过大导致磁盘空间耗尽或日志包含过多历史敏感信息。可通过cron定时任务定期备份并删除旧日志。
6. 加密日志数据
对敏感日志(如包含用户隐私信息的日志)进行加密处理:
https);crypto/aes包对日志文件进行AES-256加密,或使用gpg工具加密日志文件。7. 启用日志审计与实时监控
配置auditd服务记录日志文件的访问行为(如ausearch -f /var/log/app/app.log),追踪未授权的日志修改或访问。使用Logwatch、Fail2ban等工具自动监控日志,识别异常活动(如频繁的登录失败日志),并及时发送告警。
8. 配置系统级安全防护
ufw或iptables限制对日志文件所在目录的访问,仅允许必要用户(如appuser)和服务(如日志收集服务器)访问;