说明

  • tomcat 部署的 java 程序,项目日志 默认 other 没有可读权限
1
2
3
4
5
6
7
$ ls -lh logs/
total 68K
-rw-r-----. 1 tomcat tomcat 6.5K Jun  8 09:44 catalina.2023-06-08.log
-rw-r-----. 1 tomcat tomcat  27K Jun  8 08:45 catalina.out
-rw-r-----. 1 tomcat tomcat    0 May 23 10:33 error.log
-rw-r-----. 1 tomcat tomcat  986 Jun  8 09:44 info.log
-rw-r-----. 1 tomcat tomcat    0 May 23 10:33 warn.log
  • 部分场景下,要求使用只读用户查看项目日志,且无操作系统 root 权限,无法将只读用户并入程序用户所在 group,只能通过增加日志文件 other 的 r 权限解决
  • 日志权限由 tomcat 控制,使用 chmod 增加 tomcat/logs 目录的权限,后续轮转生成的新日志,other 仍无 r 权限

定位

  • tomcat 实际控制权限部分在 ./bin/catalina.sh 脚本中,约 269 行位置
  • 无 UMASK 配置的情况下,使用 umask 0027 的权限
1
2
3
4
5
# Set UMASK unless it has been overridden
if [ -z "$UMASK" ]; then
    UMASK="0027"
fi
umask $UMASK

问题处理

  • bin/setenv.sh 内增加 UMASK 配置

参考配置

1
2
3
4
5
CATALINA_HOME=......
CATALINA_BASE=......
JAVA_OPTS="-server -Xms32M -Xmx512M"
CATALINA_PID=${CATALINA_BASE}/bin/PID.pid
UMASK="0022"

处理命令

  • 进入 tomcat 目录下
1
2
3
4
5
6
7
8
# 判断 setenv.sh 是否有对 UMASK 做配置,如果没有,则配置 0022,增加 other 的 r 权限
if [ `cat bin/setenv.sh  |grep -wc 'UMASK'` -eq 0 ];then echo 'UMASK="0022"' >> bin/setenv.sh; fi
# logs 目录增加 rx 权限
chmod o+rx logs
# 已有文件增加 other 的 r 权限
chmod o+r logs/*
# 重启 tomcat
./bin/shutdown.sh && ./bin/startup.sh