You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

切换Tomcat运行用户后第二套INT环境出现500及404错误求助

问题描述

我们在多套Linux环境中以root用户运行Tomcat 9.0.22部署应用,为了安全,将运行用户切换为低权限用户etemptation:

  1. 在tomcat.service中添加配置:
    User=etemptation
    Group=etemptation
    
  2. 执行目录权限修改命令:
    chown -R etemptation:etemptation /appli/tomcat
    

该操作在生产环境及第一套INT环境正常生效,但第二套INT环境出现异常:

  • 访问/webquartz/返回500错误
  • 后续静态资源(如/js/dream.js、/css/auth.css等)请求返回404
  • 访问/favicon.ico正常返回200
  • catalina.out及应用日志(webquartz)均无报错信息
  • 对比两套INT环境未发现明显配置差异
可能原因分析
  1. 目录权限遗漏:虽执行了chown -R,但Tomcat依赖的外部目录(如临时目录、第三方存储目录、应用上传目录)未授权给etemptation,导致初始化失败触发500,但未写入应用日志。
  2. SELinux/AppArmor限制:第二套INT环境开启了安全模块,即使文件权限正确,仍阻止etemptation访问Tomcat资源,这类限制通常记录在系统日志而非Tomcat日志中。
  3. 服务配置未生效:修改tomcat.service后未重新加载systemd配置或重启服务,用户切换未实际生效;或存在tomcat.service.d下的override文件覆盖配置。
  4. 缓存文件权限冲突:切换用户前生成的Tomcat缓存(如work目录编译文件)属于root,切换后etemptation无法读写,导致应用初始化失败。
  5. 日志级别过高:Tomcat或应用的日志级别设置为INFO及以上,未捕获DEBUG级别的异常细节,导致看似无报错。
解决方案

1. 补全目录权限

  • 检查并修改Tomcat临时目录权限:
    # 查找Tomcat临时目录
    find /tmp -name "tomcat*" -type d
    # 授予etemptation权限
    chown -R etemptation:etemptation /tmp/tomcat_xxx
    
  • 检查应用依赖的外部目录(如上传、配置目录),确保etemptation有读写权限:
    # 示例:检查应用上传目录
    ls -ld /data/upload
    chown etemptation:etemptation /data/upload
    

2. 排查安全模块限制

  • 检查SELinux状态并临时测试:
    getenforce
    # 临时关闭SELinux
    setenforce 0
    
    若问题解决,添加SELinux规则:
    semanage fcontext -a -t tomcat_var_run_t "/appli/tomcat(/.*)?"
    restorecon -Rv /appli/tomcat
    
  • 检查AppArmor状态并临时测试:
    aa-status
    # 临时关闭AppArmor
    systemctl stop apparmor
    
    若问题解决,修改AppArmor配置文件添加etemptation的访问权限。

3. 确保服务配置生效

  • 重新加载systemd配置并重启Tomcat:
    systemctl daemon-reload
    systemctl restart tomcat
    
  • 验证运行用户:
    ps aux | grep tomcat | grep -v grep
    
    确认输出用户为etemptation。

4. 清理缓存文件

  • 清理Tomcat的work、temp目录:
    cd /appli/tomcat
    rm -rf work/* temp/*
    chown -R etemptation:etemptation work temp
    
  • 重启Tomcat让应用重新生成缓存。

5. 调整日志级别排查

  • 修改Tomcatconf/logging.properties开启DEBUG日志:
    org.apache.catalina.level = FINEST
    org.apache.catalina.handlers = 1catalina.org.apache.juli.FileHandler
    
  • 修改应用日志配置(如logback.xml、log4j.properties)开启DEBUG级别,重启后重新访问查看详细报错。

内容的提问来源于stack exchange,提问作者nihilist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:05:19