1. 调整日志级别,减少敏感信息记录
通过降低Tomcat日志的详细程度,避免记录用户隐私数据(如密码、银行卡号、个人身份信息等)。修改$CATALINA_HOME/conf/logging.properties文件,将全局日志级别设置为WARN或更高级别(如ERROR),仅记录错误和警告信息;对于第三方组件(如数据库驱动、框架),可单独调整其日志级别(如将org.hibernate.SQL设置为ERROR,避免记录SQL语句中的参数)。
2. 过滤敏感内容,避免直接记录
在日志记录前对敏感信息进行脱敏处理,防止隐私数据直接写入日志。可通过自定义Filter或Logger实现:例如,在Java代码中使用正则表达式替换敏感字段(如String filteredPhone = phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2")),或在log4j2.xml/logback.xml中配置PatternLayout,通过%replace函数过滤敏感内容(如%replace(%msg){'password=[^&]*', 'password=****'})。
3. 强化日志文件访问控制,限制授权用户
通过文件系统权限确保只有Tomcat进程及授权人员能访问日志文件。默认情况下,Tomcat日志目录为/var/log/tomcat9(Debian),执行以下命令:
tomcat用户及组:sudo chown -R tomcat:tomcat /var/log/tomcat9;750(所有者可读、写、执行,其他用户无权限):sudo chmod -R 750 /var/log/tomcat9;tomcat组:sudo usermod -a -G tomcat your_username,注销后生效。4. 使用日志轮转工具,管理日志生命周期
通过logrotate工具自动分割、压缩旧日志,避免单个日志文件过大导致隐私数据长期暴露。创建/etc/logrotate.d/tomcat9配置文件,内容如下:
/var/log/tomcat9/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 640 tomcat tomcat
sharedscripts
postrotate
systemctl restart tomcat9 > /dev/null
endscript
}
此配置表示:每日轮转日志,保留最近7天的压缩日志(compress),创建新日志时权限为640(所有者可读写,组可读),重启Tomcat以释放文件句柄。
5. 加密敏感日志,防止未授权访问
对包含敏感信息的日志文件进行加密存储,即使日志被窃取也无法直接读取内容。可使用Java加密工具(如JCE)或第三方库(如Bouncy Castle)实现:
KeyGenerator keyGen = KeyGenerator.getInstance("AES"); keyGen.init(128); SecretKey secretKey = keyGen.generateKey();;Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.ENCRYPT_MODE, secretKey); byte[] encryptedBytes = cipher.doFinal(logContent.getBytes());;6. 配置安全传输,防止日志传输泄露
若日志通过网络传输(如发送到远程日志服务器),需使用SSL/TLS加密传输通道。对于Tomcat访问日志,可在server.xml中配置AccessLogValve的protocol属性为org.apache.coyote.http11.Http11NioProtocol,并启用SSL;对于第三方日志收集系统(如ELK),需使用logstash-input-tcp插件配置SSL证书,确保日志传输过程中的隐私安全。
7. 启用安全管理器,监控敏感操作
通过Tomcat安全管理器(SecurityManager)限制对日志文件的非法访问。编辑$CATALINA_HOME/conf/catalina.policy文件,添加以下策略:
grant codeBase "file:${catalina.home}/bin/tomcat-juli.jar" {
permission java.util.PropertyPermission "java.util.logging.config.file", "read";
permission java.io.FilePermission "${catalina.base}/logs/-", "read,write";
};
此策略允许Tomcat进程读写日志目录,同时限制其他代码的访问权限。启用安全管理器:export CATALINA_OPTS="-Djava.security.manager -Djava.security.policy==$CATALINA_HOME/conf/catalina.policy",重启Tomcat生效。
8. 隐藏版本信息,减少针对性攻击
修改Tomcat响应头中的Server字段,避免暴露Tomcat版本号(攻击者可能利用版本漏洞获取日志信息)。编辑$CATALINA_HOME/conf/server.xml,在<Connector>标签中添加server="Custom"属性:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
server="Custom" />
此外,可修改$CATALINA_HOME/conf/server.properties中的server.info属性(如server.info=Debian Tomcat/Custom),进一步隐藏版本信息。