Acceda a la aplicación Tomcat Manager desde un host diferente

95

Instalé tomcat 9 en un servidor remoto y después de iniciarlo, se mencionó bien, puedo acceder a http: // host_name: port_num y ver la página de saludo de Tomcat . Pero cuando intento abrir la aplicación de administrador para ver mis aplicaciones implementadas, obtengo el acceso 403 denegado, ya agregué roles en el xml de usuario de tomcat de la siguiente manera:

<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="admin"/>
<user username="user" password="password" roles="admin,manager,manager-gui"/>

Los mensajes de error que vi es:

De forma predeterminada, solo se puede acceder a Host Manager desde un navegador que se ejecute en la misma máquina que Tomcat. Si desea modificar esta restricción, deberá editar el archivo context.xml de Host Manager.

¿Cómo debo cambiar el archivo context.xml y obtener acceso a la aplicación de administrador?

feichangh
fuente

Respuestas:

143

Cada aplicación web implementada tiene un context.xmlarchivo que vive en

$CATALINA_BASE/conf/[enginename]/[hostname]

(conf/Catalina/localhost by default)

y tiene el mismo nombre que la aplicación web ( manager.xmlen este caso). Si no hay ningún archivo, se utilizan los valores predeterminados.

Por lo tanto, debe crear un archivo conf/Catalina/localhost/manager.xmly especificar la regla que desea permitir el acceso remoto. Por ejemplo, el siguiente contenido de manager.xmlpermitirá el acceso desde todas las máquinas:

<Context privileged="true" antiResourceLocking="false" 
         docBase="${catalina.home}/webapps/manager">
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
</Context>

Tenga en cuenta que el atributo allow del Valveelemento es una expresión regular que coincide con la dirección IP del host que se conecta. Otras Valveclases se adaptan a otras reglas (por ejemplo, RemoteHostValvepara hacer coincidir los nombres de host).

Una vez que se hayan realizado los cambios anteriores, debería aparecer un cuadro de diálogo de autenticación al acceder a la URL del administrador. Si ingresa los detalles que ha proporcionado tomcat-users.xml, debería tener acceso al Administrador.

Matt Innes
fuente
¿Qué se debe hacer para cargar estos cambios de configuración sin apagar e iniciar tomcat?
Kuldeep Yadav
403 Acceso denegado
Damir Olejar
3
En tomcat 8, no necesita hacer nada, estos cambios de configuración entran en vigor de inmediato.
Ayushya
3
Finalmente funcionó para mí después de algunos intentos. Estaba intentando hacer cambios en el archivo context.xml mientras que los cambios debían realizarse en la ruta del archivo manager.xml "conf / Catalina / localhost". Si no existe, basta con crear uno.
jellboi
Para tomcat 8.5.37, también tuve que incluir: <Valve className = "org.apache.catalina.valves.RemoteIpValve" />
Md.
152

Para Tomcat v8.5.4 y superior, el archivo <tomcat>/webapps/manager/META-INF/context.xmlse ha ajustado:

<Context antiResourceLocking="false" privileged="true" >
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
</Context>

Cambie este archivo para comentar Valve:

<Context antiResourceLocking="false" privileged="true" >
    <!--
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
    -->
</Context>

Después de eso, actualice su navegador (no es necesario reiniciar Tomcat), puede ver la página del administrador.

jqgsninimo
fuente
Funciona en 8.5.0 pero fue necesario reiniciar. ¡Gracias!
JRichardsz
1
Tuve que esperar unos 10-15 segundos, pero no fue necesario reiniciar en 8.5.11. ¡Gracias!
Karl Henselin
1
Trabajó en 8.5.9 sin reiniciar. Sin embargo, tardó unos 15 segundos en aplicarse en una máquina con Windows 7. ¡Gracias!
cbmeeks
403 Acceso denegado
Damir Olejar
1
Para los principiantes de Tomcat, un hecho significativo relacionado con esta pregunta es que Tomcat consume varios context.xmlarchivos. Las instrucciones en la página de error predeterminada de Tomcat para editar el archivo context.xml de Manager podrían indicarse más claramente como editar el archivo context.xml en el directorio de la aplicación Manager.
LECTURA DE CÓDIGO
11

Para acceder al administrador de tomcat desde una máquina diferente, debe seguir los siguientes pasos:

1. Actualice el archivo conf / tomcat-users.xml con el usuario y algunos roles :

<role rolename="manager-gui"/>
 <role rolename="manager-script"/>
 <role rolename="manager-jmx"/>
 <role rolename="manager-status"/>
 <user username="admin" password="admin" roles="manager-gui,manager-script,manager-jmx,manager-status"/>

Aquí el usuario administrador está asignando roles = "manager-gui, manager-script, manager-jmx, manager-status" .

Aquí el usuario y la contraseña de Tomcat son: admin

2. Actualice el archivo webapps / manager / META-INF / context.xml (Permitiendo la dirección IP) :

Configuración predeterminada :

<Context antiResourceLocking="false" privileged="true" >
  
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
  
  <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>

Aquí, en Valve, solo permite que la IP de la máquina local comience con 127. \ d +. \ D +. \ D + .

2.a: Permitir IP específica :

<Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|YOUR.IP.ADDRESS.HERE" />

Aquí simplemente reemplace | YOUR.IP.ADDRESS.HERE con su dirección IP

2.b: Permitir todas las IP :

<Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow=".*" />

Aquí usando allow = ". *" Estás permitiendo todas las IP.

Gracias :)

Md. Sajedul Karim
fuente
Agregue una razón específica para el voto negativo. Si esta respuesta parece incorrecta, explique. Después de su explicación, puedo mejorar mis conocimientos. Gracias
Md. Sajedul Karim
en lugar de permitir el acceso a una sola ip, puede agregar acceso a todas las ip desde una red, usando la misma sintaxis que el archivo predeterminado: <Valve className = "org.apache.catalina.valves.RemoteAddrValve" allow = "127 \. \ d + \. \ d + \. \ d + | :: 1 | 0: 0: 0: 0: 0: 0: 0: 1 | 192 \ .168 \ .250 \. \ d + "/> esto permite el acceso desde todos hosts en la red local 192.168.250.0/24
Thomas LIMIN
2
Esta respuesta es la única que especifica YOUR.IP.ADDRESS.HEREy, por lo tanto, realmente responde a la pregunta para acceder a la aplicación del administrador desde un host diferente, no solo desde cualquier lugar de Internet. En mi humilde opinión, esta debería ser la respuesta aceptada. Sugerencia de mejora: Mueva 2.a a la parte superior, opcionalmente agregue la sugerencia de @ ThomasLIMIN.
Olaf Kock
3
Following two configuration is working for me.

1 .tomcat-users.xml details
--------------------------------
  <role rolename="manager-gui"/>
  <role rolename="manager-script"/>
  <role rolename="manager-jmx"/>
  <role rolename="manager-status"/>
  <role rolename="admin-gui"/>
  <role rolename="admin-script"/>
  <role rolename="tomcat"/>


  <user  username="tomcat"  password="tomcat" roles="tomcat"/>

  <user  username="admin"  password="admin" roles="admin-gui"/>

  <user  username="adminscript"  password="adminscrip" roles="admin-script"/>

  <user  username="tomcat"  password="s3cret" roles="manager-gui"/>
  <user  username="status"  password="status" roles="manager-status"/>

  <user  username="both"    password="both"   roles="manager-gui,manager-status"/>

  <user  username="script"  password="script" roles="manager-script"/>
  <user  username="jmx"     password="jmx"    roles="manager-jmx"/>

2. context.xml  of <tomcat>/webapps/manager/META-INF/context.xml and 
<tomcat>/webapps/host-manager/META-INF/context.xml
------------------------------------------------------------------------
<Context antiResourceLocking="false" privileged="true" >

  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow=".*" />
  <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
Rajeev kumar
fuente
Esta respuesta no coincide con esta pregunta
袁文涛