Java 在非root用户下启动tomcat 9

Java 在非root用户下启动tomcat 9,java,linux,tomcat,ubuntu-16.04,tomcat9,Java,Linux,Tomcat,Ubuntu 16.04,Tomcat9,很抱歉问了一个愚蠢的问题,但我对Tomcat(以及Linux)的使用经验很少。 我已经发布了新的AWS Ubuntu 16.04,安装了Java8(用于我们的应用程序兼容性要求)和Tomcat9(在/opt/Tomcat9文件夹中)。我已经创建了一个tomcat9用户,我打算在该用户下运行Tomcat。我已将ssl证书复制到/etc/ssl密钥库,并在server.xml中设置了ssl连接器 <Connector SSLEnabled="true" keystoreFile="/etc/s

很抱歉问了一个愚蠢的问题,但我对Tomcat(以及Linux)的使用经验很少。 我已经发布了新的AWS Ubuntu 16.04,安装了Java8(用于我们的应用程序兼容性要求)和Tomcat9(在/opt/Tomcat9文件夹中)。我已经创建了一个tomcat9用户,我打算在该用户下运行Tomcat。我已将ssl证书复制到/etc/ssl密钥库,并在server.xml中设置了ssl连接器

<Connector SSLEnabled="true" keystoreFile="/etc/ssl-keystore/mycert.pfx"
keystorePass="mypassword" port="443" scheme="https" secure="true"
sslProtocol="TLS" maxPostSize="104857600" maxHttpHeaderSize="204800" />
如果我开始使用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网站)并阅读了多个教程,但我找不到相关/有用的答案。非常感谢。

默认情况下,非root用户不能绑定到低权限端口。前1024个端口受到限制,您正试图绑定到443

如果您坚持这样做,而不是在端口8080上运行,请尝试以下答案。他们建议
setcap
解决此问题:


可能吧。顺便说一句,sudo-u tomcat9无法工作,您希望-u root尝试权限。由于您在aws上,我建议让ELB处理SSL终止。然后,您可以在ELB后面的普通端口(如8080)上运行多个tomcat实例,并使用普通用户。即使没有ELB,tomcat前面也应该有nginx、apache2之类的东西。
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