запуск tomcat 9 под пользователем без полномочий root - PullRequest
0 голосов
/ 05 июня 2018

Извиняюсь за возможно глупый вопрос, но у меня мало опыта работы с Tomcat (и Linux в целом).Я запустил новую AWS Ubuntu 16.04, установил Java 8 (для наших требований совместимости приложений) и Tomcat9 (в папке / opt / tomcat9).Я создал пользователя tomcat9, под которым я собираюсь запустить Tomcat.Я скопировал ssl-сертификат в / etc / ssl-keystore и настроил ssl-соединитель в server.xml

<Connector SSLEnabled="true" keystoreFile="/etc/ssl-keystore/mycert.pfx"
keystorePass="mypassword" port="443" scheme="https" secure="true"
sslProtocol="TLS" maxPostSize="104857600" maxHttpHeaderSize="204800" />

Я изменил владельца папки / opt / tomcat9 на tomcat9 пользователь:

chown -hR tomcat9: /opt/tomcat9

Если я запускаю tomcat, используя

sudo -u tomcat9 /opt/tomcat9/bin/startup.sh

Я получаю эту ошибку в catalina.out :

05-Jun-2018 12:42:39.112 SEVERE [main] org.apache.catalina.util.LifecycleBase.handleSubClassException Failed to initialize component [Connector[HTTP/1.1-443]]
 org.apache.catalina.LifecycleException: Protocol handler initialization failed
        at org.apache.catalina.connector.Connector.initInternal(Connector.java:935)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
        at org.apache.catalina.core.StandardService.initInternal(StandardService.java:530)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
        at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:852)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:622)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:645)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:311)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:494)
Caused by: java.net.SocketException: Permission denied
        at sun.nio.ch.Net.bind0(Native Method)
        at sun.nio.ch.Net.bind(Net.java:433)
        at sun.nio.ch.Net.bind(Net.java:425)
        at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
        at org.apache.tomcat.util.net.NioEndpoint.initServerSocket(NioEndpoint.java:227)
        at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:202)
        at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:939)
        at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:575)
        at org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:70)
        at org.apache.catalina.connector.Connector.initInternal(Connector.java:932)
        ... 13 more

Подскажите, пожалуйста, что мне не хватает или какое разрешение нужно добавить?Я уже потратил много времени на изучение этого (в том числе на сайте stackoverflow) и прочитал несколько учебных пособий, но не могу найти подходящий / полезный ответ.Большое спасибо.

1 Ответ

0 голосов
/ 05 июня 2018

По умолчанию пользователи без полномочий root не могут связываться с привилегированными низкими портами.Первые 1024 порта ограничены, и вы пытаетесь связать с 443.

Если вы настаиваете на том, чтобы делать это вместо того, чтобы работать на порте 8080 с TLS-терминальным прокси , попробуйте следующие ответы.Они предлагают setcap решить эту проблему:

...