Как разрешить tomcat 8.5 работать на порту 80 в AWS Linux 2

#amazon-web-services #tomcat #amazon-ec2

Вопрос:

Я запускал Tomcat 7 на порту 80 в AWS Linux. Я запускаю его от имени root, и он отлично работает. Никаких проблем.

Теперь я создал новый экземпляр AWS EC2 (t2.micro) с использованием Linux 2 и установил на него java 11 и tomcat 8.5. Но я не могу заставить tomcat привязаться к порту 80. Он отлично работает на 8080, но не на 80. Ошибка в том, что

 Caused by: java.net.SocketException: Permission denied
Mar 18 08:30:54 ----.compute.internal server[3467]: at java.base/sun.nio.ch.Net.bind0(Native Method)
 

То, что я уже сделал:

  1. Я обновил кота server.xml для использования порта 80 (изменен с 8080 на 80)
  2. Попытался запустить службу от имени root: запуск sudo tomcat
  3. Сделал «судо су», а затем запустил «запуск кота».
  4. В файле tomcat.conf не было переменной TOMCAT_USER, поэтому я добавил ее TOMCAT_USER=»root».
  5. Попробовал запустить: iptables -A ВХОД -p tcp-dport 80 -j ПРИНЯТЬ

Может кто-нибудь, пожалуйста, сказать мне, что мне нужно сделать, чтобы это исправить? Мне просто нужно, чтобы tomcat был моим веб-сервером, прослушивающим 80 и 443. Мне не нужны httpd, ngnix или переадресация портов.

Вот вывод файла /etc/os-release:

  cat /etc/system-release
Amazon Linux release 2 (Karoo)
[root@ip-172-31-32-37 ec2-user]# cat /etc/os-release
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"
 

Комментарии:

1. Требуется привязка к порту 80 root . Вы запускаете свое приложение от имени root?

2. Да, как я уже упоминал выше, после входа в систему я сделал sudo su — а затем запустил сервер tomcat. Это корень, верно?

3. ДА. Так, может быть, у вас уже есть что-то еще, прослушивающее этот порт?

4. Это не тот случай. Я проверил это следующим образом: 1. Я написал socketserver на java, который прослушивает порт 80. Я запустил его как $sudo java DumbSocketServer, который он смог привязать к порту, и когда я подключился к нему из своего браузера, он выпалил полученный запрос. Поэтому я знаю, что он смог связать. 2. Но когда я запустил запуск $sudo tomcat, он выдал исключение при привязке к 80.

5. Хорошо, вот что я сделал сейчас: я использовал wget для загрузки последней версии tomcat и извлек ее в свой каталог пользователей /home/ec2-user/tomcat . Изменил порт в server.xml до 80 и запустил его, используя $sudo ./startup.sh Это сработало!!!! Итак, это определенно как-то связано с тем, как Amazon Linux устанавливает tomcat. У группы должна быть какая-то проблема с разрешениями или что-то в этом роде.