Доступ до програми Tomcat Manager з іншого хоста


95

Я встановив tomcat 9 на віддаленому сервері, і після його запуску він виховувався нормально, я можу отримати доступ до http: // host_name: port_num і побачити привітну сторінку tomcat. Але коли я намагаюся відкрити програму менеджера, щоб побачити мої розгорнуті програми, мені забороняється доступ 403, я вже додаю ролі в tomcat user xml наступним чином:

<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 диспетчера хостів.

Як мені змінити файл context.xml і отримати доступ до програми менеджера?

Відповіді:


143

Кожен розгорнутий веб-додаток має context.xmlфайл, який живе

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

(conf/Catalina/localhost by default)

і має те саме ім’я, що і веб-додаток ( 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?
Кулдіп Ядав,

403 Відмовлено в доступі
Дамір Олеяр

3
У tomcat 8 вам не потрібно нічого робити, ці зміни конфігурації вступають в силу негайно.
Ayushya

3
Нарешті, працював у мене після кількох спроб. Я намагався внести зміни у файл context.xml, тоді як зміни мали бути внесені у шлях "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 не потрібно перезапускати. Дякую!
Карл Хенселін

1
Працював у версії 8.5.9 без перезапуску. Однак на подання заявки на машині з Windows 7 знадобилося близько 15 секунд. Дякую!
cbmeeks


1
Для початківців Tomcat важливим фактом, що стосується цього питання, є те, що Tomcat споживає кілька context.xmlфайлів. Інструкції на сторінці помилок Tomcat за замовчуванням щодо редагування файлу context.xml менеджера можуть бути чіткіше зазначені як редагування файлу context.xml у каталозі програми Manager.
CODE-REaD

11

Щоб отримати доступ до диспетчера tomcat з іншої машини, потрібно виконати наведені нижче дії:

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

Тут користувач адміністратора призначає ролі = "manager-gui, manager-script, manager-jmx, manager-status" .

Тут користувач і пароль 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>

Тут у Valve це дозволяє лише IP локальної машини запускати з 127. \ d +. \ D +. \ D + .

2.a: Дозволити конкретні 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.HERE на вашу 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- і , таким чином , дійсно відповідає на питання , щоб отримати доступ до менеджера програми з в іншому хості, а не тільки з будь-якого місця в Інтернеті. ІМХО це, швидше, повинна бути прийнятою відповіддю. Пропозиція щодо вдосконалення: Перемістіть 2.a вгору, за бажанням додайте пропозицію @ ThomasLIMIN.
Олаф Кок,

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

Ця відповідь не відповідає цьому питанню
袁文涛
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.