Tomcat商业部署调优(待完成)
调试下(临时开启)tomcat manager-gui (注1)(注2)
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="admin-script"/>
<role rolename="admin-gui"/>
<role rolename="manager-jmx"/>
<role rolename="manager-script"/>
<role rolename="manager-status"/>
<user username="tests" password="123456" roles="manager,manager-gui,admin-script,admin-gui,manager-jmx,manager-script,manager-status"/>
访问:ip:8080/manager (如果无法正常显示的情况下)
需要注释/usr/local/tomcat/webapps/manager/META-INF/context.xml中的 注3
<!--<Valve className="org.apache.catalina.valves.RemoteAddrValve"allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />-->
注1:什么是tomcat manager-gui?
1. manager-gui角色核心功能
可视化操作界面:提供Web图形化界面(通过
/manager
路径访问),支持部署/卸载WAR包、启动/停止应用、查看实时日志等操作。典型应用场景:开发调试时快速部署应用,无需重启Tomcat;生产环境需谨慎配置权限。
安全风险:默认密码(如示例中的123456)需修改,避免未授权访问。
2. 其他关键角色对比
角色 | 功能描述 |
---|---|
manager | 基础管理角色,支持脚本化操作(如通过HTTP请求部署应用) |
admin-gui | 高级管理界面,可修改全局配置(如server.xml) |
manager-jmx | 通过JMX协议远程管理Tomcat服务器(需启用JMX服务) |
manager-status | 仅允许查看服务器状态(如线程池、内存使用情况) |
3. 用户配置分析
示例中用户tomcat被赋予7种角色,实际需按需分配:
开发环境:可开放manager-gui和admin-gui便于调试。
生产环境:建议仅分配manager-status或manager-jmx,避免误操作。
4. 安全实践建议
密码策略:强制使用强密码,定期更换。
权限隔离:不同角色分配给不同用户(如运维人员用admin-gui,开发者用manager-gui)。
网络防护:限制管理界面IP访问(配置
<Valve>
规则)。
注2:示例代码中的含义是什么?
一、角色定义(Role Definitions)
<role rolename="manager"/>
- 基础管理角色:允许访问Tomcat Manager的基础功能(如查看应用列表),但单独使用时不具备具体操作权限,需配合其他细化角色。
<role rolename="manager-gui"/>
- 图形界面管理:授权用户通过Web浏览器访问
/manager/html
界面,支持可视化操作(部署/卸载WAR包、启动/停止应用等)。
- 图形界面管理:授权用户通过Web浏览器访问
<role rolename="admin-gui"/>
- 全局配置管理:允许访问Host Manager界面(
/host-manager/html
),可动态添加/删除虚拟主机(修改server.xml
需重启生效)。
- 全局配置管理:允许访问Host Manager界面(
<role rolename="manager-script"/>
- 脚本化操作:通过HTTP API(
/manager/text/*
)执行部署/卸载等命令,适用于CI/CD工具链集成,如curl
调用。
- 脚本化操作:通过HTTP API(
<role rolename="manager-jmx"/>
- JMX远程管理:允许通过JMX协议(如JConsole)监控和修改Tomcat运行时参数(需启用JMX端口)。
<role rolename="manager-status"/>
- 只读状态查看:仅允许查看服务器状态页面(
/manager/status
),显示线程池、内存使用等监控数据,无操作权限。
- 只读状态查看:仅允许查看服务器状态页面(
<role rolename="admin-script"/>
- 主机管理API:类似
manager-script
,但针对Host Manager的HTTP API(如动态增删虚拟主机)。
- 主机管理API:类似
二、用户配置(User Assignment)
<user username="tests" password="123456" roles="manager,manager-gui,admin-script,admin-gui,manager-jmx,manager-script,manager-status"/>
- 用户名/密码:用户
tomcat
通过密码123456
认证(生产环境必须修改为强密码)。 - 权限分配:该用户拥有所有管理权限,包括:
- 图形界面(
manager-gui
+admin-gui
) - 脚本化操作(
manager-script
+admin-script
) - JMX远程控制(
manager-jmx
) - 状态监控(
manager-status
)
- 图形界面(
三、安全建议
最小权限原则:按需分配角色,例如:
- 开发者:
manager-gui
+manager-script
- 运维:
admin-gui
+manager-jmx
- 监控员:仅
manager-status
- 开发者:
密码策略:避免使用默认密码,定期更换并启用HTTPS加密通信。
访问限制:通过
conf/context.xml
限制管理端口的IP访问:4.
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.*"/>
4.生产环境禁用:若非必需,建议关闭Manager和Host Manager应用。
注3:为什么要注释 <Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />?
因为默认只能本机访问,注释掉以后别的机器也可以访问了