通过Linux系统命令严格限制日志文件的访问权限,确保只有授权用户或组能读取/写入日志。具体操作包括:
/var/log/myapp),并设置目录权限为750(所有者:root,所属组:myapp,其他用户无访问权限);os.OpenFile设置文件权限为640(所有者可读写,所属组可读,其他用户无权限);chcon -R -t var_log_t /var/log/myapp),确保日志服务(如rsyslog)能正常访问。避免在日志中直接记录密码、身份证号、手机号、银行卡号等敏感信息,通过以下方式实现脱敏:
regexp包匹配敏感信息模式(如手机号\d{3}\d{4}\d{4}、邮箱[\w.-]+@[\w.-]+\.\w+),替换为固定字符(如****);logrus或zap等结构化日志库,通过自定义Formatter或Hook实现自动脱敏(如zap的AddHook方法添加脱敏逻辑);避免直接将用户输入(如URL参数、表单数据、命令输出)拼接到日志中,防止恶意用户插入特殊字符(如换行符\n、引号')破坏日志结构或执行未授权命令。具体措施包括:
log.Printf、logrus.Info),将用户输入作为参数传递而非字符串拼接;strings.ReplaceAll将单引号'替换为\'),避免注入恶意命令。crypto/tls包)保护数据传输安全,防止中间人攻击;auditd服务,配置审计规则记录日志文件的访问、修改、删除操作(如auditctl -w /var/log/myapp/app.log -p wa -k myapp_log_audit),便于追踪异常行为;logwatch、goaccess等工具监控日志内容,设置报警规则(如日志量突增、出现“error”“exception”等关键字),及时通知管理员处理安全事件。选择安全特性丰富的第三方日志库(如zap、logrus),替代原生log包,提升日志安全性:
zap.JSONEncoder),便于后续日志分析(如ELK Stack)和敏感信息提取;DEBUG仅用于开发环境,INFO用于生产环境常规记录,ERROR用于异常情况),避免记录过多无用信息;viper等库读取外部配置文件(如config.yaml),动态调整日志级别、输出路径等参数,无需修改代码。配置日志轮转策略,避免单个日志文件过大占用磁盘空间,同时定期清理旧日志:
logrotate工具(如/etc/logrotate.d/myapp配置文件),设置每日轮转、保留7天日志、压缩旧日志(如daily rotate 7 compress missingok notifempty create 0640 myapp myapp);仅记录必要的日志信息,避免记录用户隐私数据(如银行卡号、身份证号)、业务敏感数据(如交易密码、支付金额)。例如,记录用户登录日志时,仅记录用户名而非密码;记录订单日志时,仅记录订单号而非订单详情。