Uzyskaj dostęp do aplikacji Tomcat Manager z innego hosta

96

Zainstalowałem tomcat 9 na zdalnym serwerze i po uruchomieniu go uruchomiłem dobrze, mam dostęp do http: // nazwa_hosta: port_num i zobacz stronę hello tomcat. Ale kiedy próbuję otworzyć aplikację menedżera, aby zobaczyć moje wdrożone aplikacje, otrzymuję odmowę dostępu 403, już dodaję role w tomcat użytkownika xml w następujący sposób:

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

Komunikaty o błędach, które widziałem, to:

Domyślnie Menedżer hosta jest dostępny tylko z przeglądarki uruchomionej na tym samym komputerze, co Tomcat. Jeśli chcesz zmienić to ograniczenie, musisz edytować plik context.xml menedżera hosta.

Jak zmienić plik context.xml i uzyskać dostęp do aplikacji menedżera?

feichangh
źródło

Odpowiedzi:

144

Każda wdrożona aplikacja internetowa ma context.xmlplik, który znajduje się w

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

(conf/Catalina/localhost by default)

i ma taką samą nazwę jak aplikacja internetowa ( manager.xmlw tym przypadku). Jeśli nie ma pliku, używane są wartości domyślne.

Musisz więc utworzyć plik conf/Catalina/localhost/manager.xmli określić regułę, dla której chcesz zezwolić na dostęp zdalny. Na przykład następująca zawartość strony manager.xmlumożliwi dostęp ze wszystkich komputerów:

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

Zauważ, że atrybut allow Valveelementu jest wyrażeniem regularnym, które pasuje do adresu IP łączącego się hosta. Inne Valveklasy uwzględniają inne zasady (np. RemoteHostValveDopasowywanie nazw hostów).

Po wprowadzeniu powyższych zmian podczas uzyskiwania dostępu do adresu URL menedżera powinno zostać wyświetlone okno dialogowe uwierzytelniania. Jeśli wprowadzisz dane, które tomcat-users.xmlpodałeś, powinieneś mieć dostęp do Managera.

Matt Innes
źródło
co należy zrobić, aby załadować te zmiany konfiguracji bez zamykania i uruchamiania tomcat?
Kuldeep Yadav
403 Odmowa dostępu
Damir Olejar
3
W tomcat 8 nie musisz nic robić, te zmiany konfiguracji wchodzą w życie natychmiast.
Ayushya,
3
W końcu zadziałał po kilku próbach. Próbowałem wprowadzić zmiany w pliku context.xml, podczas gdy zmiany miały być wprowadzone w ścieżce pliku „conf / Catalina / localhost” manager.xml. Jeśli nie istnieje, wystarczy je utworzyć.
Umar Maniar
W przypadku tomcat 8.5.37 musiałem również uwzględnić: <Valve className = "org.apache.catalina.valves.RemoteIpValve" />
Md.
154

W przypadku Tomcat w wersji 8.5.4 i nowszych plik <tomcat>/webapps/manager/META-INF/context.xmlzostał dostosowany:

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

Zmień ten plik, aby skomentować 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>

Następnie odśwież przeglądarkę (nie musisz ponownie uruchamiać Tomcata), zobaczysz stronę menedżera.

jqgsninimo
źródło
Działa w wersji 8.5.0, ale wymagane było ponowne uruchomienie. Dzięki!
JRichardsz
1
Musiałem czekać około 10-15 sekund, ale ponowne uruchomienie nie było potrzebne w 8.5.11. Dzięki!
Karl Henselin
1
Pracował w 8.5.9 bez restartu. Jednak zastosowanie na komputerze z systemem Windows 7 zajęło około 15 sekund. Dzięki!
cbmeeks
403 Odmowa dostępu
Damir Olejar
1
Dla początkujących użytkowników Tomcat istotnym faktem wpływającym na tę kwestię jest to, że Tomcat zużywa wiele context.xmlplików. Instrukcje na domyślnej stronie błędu Tomcata dotyczące edytowania pliku context.xml Menedżera mogą być wyraźniej określone jako edycja pliku context.xml w katalogu aplikacji Manager.
CODE-REaD
12

Aby uzyskać dostęp do menedżera tomcat z innej maszyny, musisz wykonać poniższe czynności:

1. Zaktualizuj plik conf / tomcat-users.xml o użytkownika i niektóre role :

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

Tutaj administrator przypisuje role = "menedżer-gui, skrypt-menedżera, menedżer-jmx, status-menedżera" .

Tutaj użytkownik i hasło tomcat to: admin

2. Zaktualizuj plik webapps / manager / META-INF / context.xml (zezwalanie na adres IP) :

Konfiguracja domyślna :

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

Tutaj w Valve zezwala tylko na adres IP maszyn lokalnych zaczynający się od 127. \ d +. \ D +. \ D + .

2.a: Zezwalaj na określony adres IP :

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

Tutaj wystarczy zamienić | TWÓJ.ADRES.IP.TUTAJ na swój adres IP

2.b: Zezwalaj na wszystkie adresy IP :

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

Tutaj, używając allow = ". *" Zezwalasz na wszystkie adresy IP.

Dzięki :)

Md. Sajedul Karim
źródło
Dodaj konkretny powód odrzucenia głosu. Jeśli ta odpowiedź wydaje się błędna, proszę wyjaśnij. Po wyjaśnieniu mogę poszerzyć swoją wiedzę. Dzięki
Md. Sajedul Karim
zamiast zezwalać na dostęp do pojedynczego adresu IP, możesz dodać dostęp do wszystkich adresów IP z sieci, używając tej samej składni, co domyślny plik: <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 + "/> umożliwia dostęp ze wszystkich hosty w sieci lokalnej 192.168.250.0/24
Thomas LIMIN
3
Ta odpowiedź jest tylko jedna określająca YOUR.IP.ADDRESS.HERE- a więc naprawdę odpowiada na pytanie, aby uzyskać dostęp do aplikacji z menedżera z innego hosta, nie tylko z dowolnego miejsca w Internecie. IMHO powinna to być raczej akceptowana odpowiedź. Propozycja ulepszeń: przesuń 2.a na górę, opcjonalnie dodaj sugestię @ 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
źródło
Ta odpowiedź nie pasuje do tego pytania
袁文涛