Доступ к приложению 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 диспетчера хоста.

Как мне изменить файл context.xml и получить доступ к приложению менеджера?

Feichangh
источник

Ответы:

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?
Kuldeep Yadav
403 Доступ запрещен
Дамир Олехар 06
3
В tomcat 8 вам не нужно ничего делать, эти изменения конфигурации вступают в силу немедленно.
Ayushya
3
Наконец, после нескольких попыток у меня сработало. Я пытался внести изменения в файл context.xml, в то время как изменения должны были быть внесены в путь к файлу manager.xml "conf / Catalina / localhost". Если его не существует, просто создайте его.
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 не нужно), вы увидите страницу менеджера.

jqgsninimo
источник
Работает в 8.5.0, но требуется перезагрузка. Благодарность!
JRichardsz
1
Мне пришлось ждать около 10-15 секунд, но в 8.5.11 перезагрузка не потребовалась. Благодарность!
Карл Хенселин 09
1
Работал в 8.5.9 без перезагрузки. Однако на машине с Windows 7 для применения потребовалось около 15 секунд. Благодарность!
cbmeeks
403 Доступ запрещен
Дамир Олехар 06
1
Для новичков в Tomcat важным фактом, связанным с этим вопросом, является то, что Tomcat использует несколько context.xmlфайлов. Инструкции по редактированию файла context.xml менеджера на странице ошибок Tomcat по умолчанию можно было бы более четко сформулировать как отредактировать файл 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"/>

Здесь пользователь admin назначает роли = "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
источник
Пожалуйста, укажите конкретную причину голосования против. Если этот ответ кажется неправильным, объясните, пожалуйста. После вашего объяснения я могу улучшить свои знания. Спасибо
Md. Sajedul Karim 01
вместо разрешения доступа к одному 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 05
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"/>
Раджив Кумар
источник
Этот ответ не соответствует этому вопросу
文涛