เข้าถึงแอพ Tomcat Manager จากโฮสต์อื่น


95

ฉันได้ติดตั้ง tomcat 9 บนเซิร์ฟเวอร์ระยะไกลแล้วและหลังจากเริ่มต้นมันก็ใช้ได้ดีฉันสามารถเข้าถึงhttp: // host_name: port_numและดูหน้าสวัสดีของ tomcat แต่เมื่อฉันพยายามเปิดแอปตัวจัดการเพื่อดูแอปที่ปรับใช้แล้วฉันได้รับการเข้าถึง 403 ถูกปฏิเสธฉันได้เพิ่มบทบาทใน xml ผู้ใช้ tomcat แล้วดังต่อไปนี้:

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

ข้อความแสดงข้อผิดพลาดที่ฉันเห็นคือ:

โดยค่าเริ่มต้น Host Manager สามารถเข้าถึงได้จากเบราว์เซอร์ที่ทำงานบนเครื่องเดียวกับ Tomcat เท่านั้น หากคุณต้องการแก้ไขข้อ จำกัด นี้คุณจะต้องแก้ไขไฟล์ context.xml ของ Host Manager

ฉันจะเปลี่ยนไฟล์ context.xml และเข้าถึงแอพตัวจัดการได้อย่างไร

คำตอบ:


143

แต่ละเว็บแอปที่ปรับใช้จะมีcontext.xmlไฟล์อยู่

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

(conf/Catalina/localhost by default)

และมีชื่อเดียวกับ webapp ( manager.xmlในกรณีนี้) หากไม่มีไฟล์อยู่ระบบจะใช้ค่าเริ่มต้น

ดังนั้นคุณต้องสร้างไฟล์conf/Catalina/localhost/manager.xmlและระบุกฎที่คุณต้องการอนุญาตการเข้าถึงระยะไกล ตัวอย่างเช่นเนื้อหาต่อไปนี้manager.xmlจะอนุญาตให้เข้าถึงได้จากทุกเครื่อง:

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

โปรดทราบว่าแอตทริบิวต์ allow ของValveองค์ประกอบเป็นนิพจน์ทั่วไปที่ตรงกับที่อยู่ IP ของโฮสต์ที่เชื่อมต่อ Valveคลาสอื่น ๆรองรับกฎอื่น ๆ (เช่นRemoteHostValveชื่อโฮสต์ที่ตรงกัน)

เมื่อทำการเปลี่ยนแปลงข้างต้นแล้วคุณควรได้รับกล่องโต้ตอบการตรวจสอบสิทธิ์เมื่อเข้าถึง URL ผู้จัดการ หากคุณป้อนรายละเอียดที่ระบุไว้tomcat-users.xmlคุณควรมีสิทธิ์เข้าถึงผู้จัดการ


สิ่งที่ควรทำเพื่อโหลดการเปลี่ยนแปลงการกำหนดค่าเหล่านี้โดยไม่ต้องปิดเครื่องและเริ่มต้น tomcat
Kuldeep Yadav

403 การเข้าถึงถูกปฏิเสธ
Damir Olejar

3
ใน tomcat 8 คุณไม่จำเป็นต้องทำอะไรเลยการเปลี่ยนแปลงการกำหนดค่าเหล่านี้จะมีผลทันที
อยุธยา

3
ในที่สุดก็ทำงานให้ฉันหลังจากพยายามไม่กี่ครั้ง ฉันพยายามทำการเปลี่ยนแปลงในไฟล์ context.xml ในขณะที่ต้องทำการเปลี่ยนแปลงในไฟล์ path "conf / Catalina / localhost" manager.xml หากไม่มีอยู่เพียงแค่ต้องสร้างขึ้นมา
jellboi

สำหรับ tomcat 8.5.37 ฉันต้องใส่: <Valve className = "org.apache.catalina.valves.RemoteIpValve" />
Md

152

สำหรับ Tomcat v8.5.4 ขึ้นไปไฟล์<tomcat>/webapps/manager/META-INF/context.xmlได้รับการปรับแต่ง:

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

เปลี่ยนไฟล์นี้เพื่อแสดงความคิดเห็น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>

หลังจากนั้นรีเฟรชเบราว์เซอร์ของคุณ (ไม่จำเป็นต้องรีสตาร์ท Tomcat) คุณจะเห็นหน้าผู้จัดการ


ทำงานใน 8.5.0 แต่จำเป็นต้องรีสตาร์ท ขอบคุณ!
JRichardsz

1
ฉันต้องรอประมาณ 10-15 วินาที แต่ไม่จำเป็นต้องรีสตาร์ทใน 8.5.11 ขอบคุณ!
Karl Henselin

1
ทำงานใน 8.5.9 โดยไม่ต้องรีสตาร์ท อย่างไรก็ตามใช้เวลาประมาณ 15 วินาทีในการใช้กับเครื่อง Windows 7 ขอบคุณ!
cbmeeks

403 การเข้าถึงถูกปฏิเสธ
Damir Olejar

1
สำหรับผู้เริ่มต้น Tomcat ข้อเท็จจริงที่สำคัญเกี่ยวกับคำถามนี้คือTomcat ใช้context.xmlไฟล์หลายไฟล์ คำแนะนำในหน้าข้อผิดพลาดเริ่มต้นของ Tomcat ในการแก้ไขไฟล์ context.xml ของ Managerสามารถระบุได้ชัดเจนยิ่งขึ้นเมื่อแก้ไขไฟล์ context.xml ในไดเร็กทอรีสำหรับแอ็พพลิเคชัน Manager
CODE-REaD

11

ในการเข้าถึงตัวจัดการแมวตัวผู้จากเครื่องอื่นคุณต้องทำตามขั้นตอนต่อไปนี้:

1. อัปเดตไฟล์ conf / tomcat-users.xml กับผู้ใช้และบทบาทบางอย่าง :

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

ที่นี่ผู้ใช้ผู้ดูแลระบบคือการกำหนดบทบาท = "ผู้จัดการกุยผู้จัดการสคริปต์ผู้จัดการ JMX ผู้จัดการสถานะ"

ผู้ใช้และรหัสผ่าน tomcat ที่นี่คือ: admin

2. อัปเดต webapps / manager / ไฟล์ META-INF / context.xml (อนุญาตให้ใช้ที่อยู่ IP) :

การกำหนดค่าเริ่มต้น :

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

ที่นี่ในวาล์วมันจะช่วยให้เครื่องในประเทศ IP เริ่มต้นด้วย127 \ + d. \ + d. \ D +

2.a: อนุญาต Specefic 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" />

คุณเพียงแค่แทนที่| YOUR.IP.ADDRESS ที่นี่ด้วยที่อยู่ IP ของคุณ

2.b: อนุญาต IP ทั้งหมด :

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

ที่นี่โดยใช้allow = ". *"คุณกำลังอนุญาต IP ทั้งหมด

ขอบคุณ :)


โปรดระบุเหตุผลที่เจาะจงในการโหวตลง หากคำตอบนี้ดูเหมือนผิดโปรดอธิบาย หลังจากคำอธิบายของคุณฉันสามารถพัฒนาความรู้ของฉันได้ ขอบคุณ
Md. Sajedul Karim

แทนที่จะอนุญาตให้เข้าถึง ip เดียวคุณสามารถเพิ่มการเข้าถึง ip ทั้งหมดจากเครือข่ายโดยใช้ไวยากรณ์เดียวกันกับไฟล์เริ่มต้น: <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 + "/> ซึ่งช่วยให้สามารถเข้าถึงได้จากทั้งหมด โฮสต์ในเครือข่ายท้องถิ่น 192.168.250.0/24
Thomas LIMIN

2
คำตอบนี้เป็นเพียงคนเดียวที่ระบุYOUR.IP.ADDRESS.HERE- และทำให้อย่างแท้จริงตอบคำถามในการเข้าถึงแอพพลิเคผู้จัดการจากโฮสต์ที่แตกต่างกันไม่เพียง แต่จากที่ใดก็ได้บนอินเทอร์เน็ต IMHO นี่น่าจะเป็นคำตอบที่ยอมรับได้ ข้อเสนอแนะในการปรับปรุง: เลื่อน 2.a ไปด้านบนเพิ่มข้อเสนอแนะของ @ 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"/>

คำตอบนี้ไม่ตรงกับคำถามนี้
袁文涛
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.