1.介绍
在许多生产环境里,这种能力很重要,那就是在不需要关闭和重新启动整个容器的情况下能够部署一个新的web程序,或者反部署一个现有的程序。另外, 你能要求一个现有应用程序再装载它自己,既使你还没有在Tomcat 服务器配置文件里声明它是可以被重新装载的。
为了支持这种能力,Tomcat 包含了一个web程序(默认安装在./webapps /manager上),它支持以下这些功能:
1.从上载的(uploaded)WAR文件内,把新的web程序部署到指定的./webapps/上去。
2.在指定的上下文路径上部署新的网络应用程序,从服务器文件系统。
3.列出当前部署的web程序,以及这些web程序的活跃着的sessions。
4.重新装载现有的web程序,以反映出/WEB-INF/classes 或 /WEB-INF/lib 里内容的更改。
5.列出OS和Java虚拟器(JVM)属性值(property values)。
6.列出可使用的全球性JNDI资源, 供给正在准备ResourceLink套嵌在Context 的元素;部署描述的开发工具使用。
7.列出用户数据库里定义的可用安全性功能。
8.启动运行一个被停止了的程序(让它可再被使用)。
9.停止一个现有的程序(这样它就变成不可被使用),但是不反部署它。
2.账号密码配置原因
如果Tomcat里的默认设置允许互联网上的任何人在你的服务器上执行管理员程序(the Manager application),那就相当不安全了。因此,管理员程序要求每一个使用它的人通过使用带有管理员(manager)角色的用户名称和密码证实它们自己的身份。更进一步,在默认的用户文件中($CATALINA_HOME/conf/tomcat-users.xml)没有用户名称被指派这个角色。因此,以默认的形式是完全不可能访问管理员程序的。
为了能进入管理员程序进行存取,你必须产生一个新的用户名称/密码组合,并把它们与管理员(manager)角色联系在一起,或者把管理员(manager)角色添加给现有的用户名称/密码组合。
3.权限分析
下面的描述使用变量名$catalina_base指根目录的相对路径来解决。如果你没有配置Tomcat的多个实例,通过设置一个catalina_base目录,然后$catalina_base将被设置为$catalina_home\目录到你安装Tomcat。
这将是非常不安全的默认设置,允许任何人在互联网服务器上执行管理应用Tomcat。因此,管理应用是运行的要求,任何人谁试图使用它必须验证自己,使用一个用户名和密码,管理性别角色与他们(角色名称取决于对什么是功能性需要)。此外,没有用户名在默认用户文件(($CATALINA_BASE/conf/tomcat-users.xml),分配给这些角色。因此,默认情况下,访问管理程序的应用程序是完全禁用的。
你可以找到这些角色的名字在$CATALINA_BASE/webapps/manager/WEB-INF/web.xml
web.xml中可找到如下内容:
<!-- Security roles referenced by this web application --> <security-role> <description> The role that is required to access the HTML Manager pages </description> <role-name>manager-gui</role-name> </security-role> <security-role> <description> The role that is required to access the text Manager pages </description> <role-name>manager-script</role-name> </security-role> <security-role> <description> The role that is required to access the HTML JMX Proxy </description> <role-name>manager-jmx</role-name> </security-role> <security-role> <description> The role that is required to access to the Manager Status pages </description> <role-name>manager-status</role-name> </security-role>
tomcat这个HTML管理界面可以免受CSRF(跨站请求伪造)的攻击,但文字和JMX接口不能被保护。这意味着,那些被允许进入文本和JMX接口用户谨慎访问通过Web浏览器管理应用程序时保持CSRF保护。
如果您使用Web浏览器访问应用程序管理器使用的用户脚本管理或管理(例如纯文本或JMX接口测试)JMX的角色,你必须关闭所有窗口的浏览器之后终止会话。如果你不关闭浏览器并访问其他网站,你可能成为一个CSRF攻击的受害者。
建议不要给manager-script 或manager-jmx用户分配 manager-gui 角色。
注意,JMX代理接口是有底层权限像Tomcat页面管理权限。如果他知道什么命令调用,他可以做很多事。所以你应该谨慎使manager-jmx角色。
4.配置管理应用程序权限
总结如下:
manager-gui — 访问的HTML界面。
manager-status — 只能访问“服务器状态”页。
manager-script — 在本文档中描述的友好的纯文本界面的访问,以及“服务器状态”页。
manager-jmx — 访问JMX代理接口和“服务器状态”页面。
在($CATALINA_HOME/conf/tomcat-users.xml 添加一个超级管理员,账号为admin密码为admin组合
tomcat-users.xml配置文件修改后内容如下:
<?xml version='1.0' encoding='utf-8'?> <tomcat-users> <role rolename="manager-gui,manager-script,manager-jmx,manager-status"/> <user username="admin" password="admin" roles="manager-gui,manager-script,manager-jmx,manager-status"/> </tomcat-users>
现在解释如下:
<role rolename="manager-gui,manager-script,manager-jmx,manager-status"/>这句话添加了四种角色
manager-gui — 访问的HTML界面。
manager-status — 只能访问“服务器状态”页。
manager-script — 在本文档中描述的友好的纯文本界面的访问,以及“服务器状态”页。
manager-jmx — 访问JMX代理接口和“服务器状态”页面。
<user username="admin" password="admin" roles="manager-gui,manager-script,manager-jmx,manager-status"/>这句话添加了账号admin,密码admin,角色为超级管理员即所有权限