为什么需要设置日志权限?
在生产环境中,日志文件可能包含敏感信息(如用户行为、错误堆栈、请求参数等)。 若日志文件权限过于宽松(例如全局可读),可能造成信息泄露。 使用 Logback 时,可通过配置控制生成的日志文件权限,提升系统安全性。
使用 filePermissions 配置日志文件权限
从 Logback 1.3.0 开始(需配合 SLF4J 2.x),支持通过 filePermissions 属性直接设置日志文件的 POSIX 权限(仅适用于 Unix/Linux/macOS 系统)。
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>logs/app.log</file>
<filePermissions>rw-r-----</filePermissions> <!-- 640 权限 -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="FILE" />
</root>
</configuration>
上述配置将日志文件权限设为 640(即所有者可读写,所属组可读,其他用户无权限)。
注意事项
filePermissions仅在支持 POSIX 文件权限的操作系统上生效(Windows 不支持)。- 若未指定,Logback 默认创建的文件权限通常为
644(全局可读),存在安全隐患。 - 建议将日志目录权限也一并收紧,例如:只允许应用用户和运维组访问。
- 对于旧版 Logback(<1.3.0),需通过外部脚本或 Java 代码手动设置文件权限。
替代方案(兼容旧版本)
如果无法升级 Logback,可在应用启动后使用 Java NIO 设置权限:
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.PosixFilePermission;
import java.nio.file.attribute.PosixFilePermissions;
import java.util.Set;
// 创建日志文件后设置权限
Path logPath = Path.of("logs/app.log");
Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rw-r-----");
Files.setPosixFilePermissions(logPath, perms);