特定虚拟主机的 Tomcat 8 管理器用户

Posted

技术标签:

【中文标题】特定虚拟主机的 Tomcat 8 管理器用户【英文标题】:Tomcat 8 manager user for specific Virtual host 【发布时间】:2016-03-03 15:37:11 【问题描述】:

我有两个虚拟主机,每个主机都部署了管理器应用程序。 在 Tomcat 8.0\conf\tomcat-users.xml 中还添加了一个具有 manager-gui 角色的用户 此用户能够访问两个主机的管理器应用程序。有什么方法可以将管理员用户限制为特定主机?

【问题讨论】:

不确定是否可以,因为我相信您无法更改经理角色。然而,在设置新的 Tomcat 虚拟主机时,我总是做的第一件事是为每个管理器应用远程地址过滤阀。这允许仅从为该经理列出的 IP 地址访问每个经理,这是一个巨大的安全改进。 @acdhirr 我已经启用了基于 IP 的访问。此外,我不是试图创建/更改角色,只是确保特定用户可以访问特定的虚拟主机。 【参考方案1】:

您可以为[tomcat_home]/conf/Catalina/[hostname]/manager.xml 中的每个上下文定义一个Realm

<Context docBase="$catalina.home/webapps/manager">

    <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
           resourceName="userDatabase_2"/>

<Context>

然后在server.xml 中为每个上下文添加一个额外的资源,指向另一个tomcat-users.xml 文件:

<Resource name="userDatabase_2" auth="Container"
          type="org.apache.catalina.UserDatabase"
          description="another user database"
          factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
          pathname="/conf/tomcat-users-2.xml" />

我必须承认我没有彻底测试过这个。即使它可能有效,也不建议在生产系统上使用 UserDatabaseRealm。

例如,如果您更喜欢使用DataSourceRealm 的基于表单的身份验证,您可以将[tomcat_home]/webapps/host-manager/WEB-INF/web.xml 中的login-config 更改为使用基于表单的身份验证,并在Context 元素中包含数据源Resource。 https://tomcat.apache.org/tomcat-8.0-doc/realm-howto.html

【讨论】:

【参考方案2】:

首先,在[tomcat_home]/conf 中创建一个新的用户xml 数据库文件,我们称之为tomcat-users-2.xml

将以下条目添加到tomcat-users-2.xml 文件中:

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <user username="[$yourUsername]" password="[$yourPassword]" roles="tomcat,manager-gui"/>
</tomcat-users>

请注意,您可以在&lt;tomcat-users&gt; 中添加多个用户标签

然后在您的[tomcat_home]/conf/server.xml 文件中,找到&lt;GlobalNamingResources&gt; 标签并添加(在其中):

<Resource name="UserDatabase2" auth="Container"
          type="org.apache.catalina.UserDatabase"
          description="User database that can be updated and saved"
          factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
          pathname="conf/tomcat-users-2.xml" />

将以下代码放在您要限制用户使用的应用的&lt;Host ...&gt;&lt;/Host&gt; 标记中:

<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase2"/>

最后,您必须重新启动 Tomcat 才能使更改生效。

【讨论】:

以上是关于特定虚拟主机的 Tomcat 8 管理器用户的主要内容,如果未能解决你的问题,请参考以下文章

在IIS管理器中什么是虚拟目录?

部署tomcat及负载均衡

部署tomcat及负载均衡

部署tomcat及负载均衡

Hyper-V 2016 系列教程8 虚拟SAN管理器

Tomcat:配置虚拟目录或主目录