Greifen Sie von einem anderen Host aus auf die Tomcat Manager-App zu

90

Ich habe Tomcat 9 auf einem Remote-Server installiert und nach dem Start wurde es in Ordnung gebracht. Ich kann auf http: // Hostname: Portnummer zugreifen und die Tomcat-Hallo-Seite sehen. Wenn ich jedoch versuche, die Manager-App zu öffnen, um meine bereitgestellten Apps anzuzeigen, wird mir der Zugriff verweigert. Ich füge bereits Rollen in der Tomcat-Benutzer-XML wie folgt hinzu:

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

Die Fehlermeldungen, die ich gesehen habe, sind:

Standardmäßig kann auf den Host-Manager nur über einen Browser zugegriffen werden, der auf demselben Computer wie Tomcat ausgeführt wird. Wenn Sie diese Einschränkung ändern möchten, müssen Sie die Datei context.xml des Host-Managers bearbeiten.

Wie soll ich die Datei context.xml ändern und Zugriff auf die Manager-App erhalten?

Feichangh
quelle

Antworten:

140

Jede bereitgestellte Webanwendung verfügt über eine context.xmlDatei, in der sie sich befindet

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

(conf/Catalina/localhost by default)

und hat den gleichen Namen wie die Webanwendung ( manager.xmlin diesem Fall). Wenn keine Datei vorhanden ist, werden Standardwerte verwendet.

Sie müssen also eine Datei erstellen conf/Catalina/localhost/manager.xmlund die Regel angeben, die den Remotezugriff zulassen soll. Der folgende Inhalt von manager.xmlermöglicht beispielsweise den Zugriff von allen Computern aus:

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

Beachten Sie, dass das allow-Attribut des ValveElements ein regulärer Ausdruck ist, der mit der IP-Adresse des Verbindungshosts übereinstimmt. Andere ValveKlassen berücksichtigen andere Regeln (z. B. RemoteHostValvefür übereinstimmende Hostnamen).

Sobald die oben genannten Änderungen vorgenommen wurden, sollte Ihnen beim Zugriff auf die Manager-URL ein Authentifizierungsdialog angezeigt werden. Wenn Sie die von Ihnen angegebenen Daten eingeben tomcat-users.xml, sollten Sie Zugriff auf den Manager haben.

Matt Innes
quelle
Was ist zu tun, um diese Konfigurationsänderungen zu laden, ohne Tomcat herunterzufahren und zu starten?
Kuldeep Yadav
403 Zugang verweigert
Damir Olejar
3
In Tomcat 8 müssen Sie nichts tun, diese Konfigurationsänderungen werden sofort wirksam.
Ayushya
3
Endlich nach ein paar Versuchen für mich gearbeitet. Ich habe versucht, Änderungen in der Datei context.xml vorzunehmen, während die Änderungen in der Datei manager.xml des Pfads "conf / Catalina / localhost" vorgenommen werden sollten. Wenn es nicht existiert, müssen Sie nur eine erstellen.
Jellboi
Für Tomcat 8.5.37 musste ich außerdem Folgendes angeben: <Valve className = "org.apache.catalina.valves.RemoteIpValve" />
Md.
149

Für Tomcat v8.5.4 und höher wurde die Datei <tomcat>/webapps/manager/META-INF/context.xmlangepasst:

<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>

Ändern Sie diese Datei, um Folgendes zu kommentieren 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>

Aktualisieren Sie anschließend Ihren Browser (Tomcat muss nicht neu gestartet werden). Die Managerseite wird angezeigt.

jqgsninimo
quelle
Funktioniert in 8.5.0, aber ein Neustart war erforderlich. Vielen Dank!
JRichardsz
1
Ich musste ungefähr 10-15 Sekunden warten, aber in 8.5.11 war kein Neustart erforderlich. Vielen Dank!
Karl Henselin
1
Arbeitete in 8.5.9 ohne Neustart. Die Anwendung auf einem Windows 7-Computer dauerte jedoch etwa 15 Sekunden. Vielen Dank!
cbmeeks
403 Zugang verweigert
Damir Olejar
1
Für Tomcat-Anfänger ist eine wichtige Tatsache, die diese Frage betrifft,context.xml dass Tomcat mehrere Dateien verwendet. Anweisungen auf der Standardfehlerseite von Tomcat zum Bearbeiten der Datei context.xml des Managers können deutlicher als Bearbeiten der Datei context.xml im Verzeichnis für die Manager-Anwendung angegeben werden.
CODE-REaD
9

Um von einem anderen Computer aus auf den Tomcat-Manager zuzugreifen, müssen Sie die folgenden Schritte ausführen:

1. Aktualisieren Sie die Datei conf / tomcat-users.xml mit dem Benutzer und einigen Rollen :

<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"/>

Hier weist der Administrator Benutzer Rollen zu = "Manager-GUI, Manager-Skript, Manager-JMX, Manager-Status" .

2. Aktualisieren Sie die Datei webapps / manager / META-INF / context.xml (Zulassen der IP-Adresse) :

Standardkonfiguration :

<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>

Hier in Valve darf nur die IP des lokalen Computers beginnen 127 \ D +. \ D +. \ D + .

2.a: Specefic IP zulassen :

<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" />

Hier ersetzen Sie einfach | YOUR.IP.ADDRESS.HERE durch Ihre IP-Adresse

2.b: Alle IP zulassen :

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

Hier erlauben Sie mit allow = ". *" Alle IPs.

Vielen Dank :)

Md. Sajedul Karim
quelle
Bitte geben Sie einen bestimmten Grund für die Ablehnung an. Wenn diese Antwort falsch erscheint, erklären Sie dies bitte. Nach Ihrer Erklärung kann ich mein Wissen verbessern. Danke
Md. Sajedul Karim
Anstatt den Zugriff auf eine einzelne IP-Adresse zuzulassen, können Sie den Zugriff auf alle IP-Adressen aus einem Netzwerk mit derselben Syntax wie in der Standarddatei hinzufügen: <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 + "/> Dies ermöglicht den Zugriff von allen Hosts im lokalen Netzwerk 192.168.250.0/24
Thomas LIMIN
2
Diese Antwort ist die einzige, die spezifiziert YOUR.IP.ADDRESS.HERE- und beantwortet somit wirklich die Frage, von einem anderen Host auf die Manager-App zuzugreifen , nicht nur von irgendwo im Internet. IMHO sollte dies eher die akzeptierte Antwort sein. Verbesserungsvorschlag: Verschieben Sie 2.a nach oben und fügen Sie optional den Vorschlag von @ ThomasLIMIN hinzu.
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
quelle
Diese Antwort stimmt nicht mit dieser Frage
überein