java - 在非root用户下启动tomcat 9

标签 java linux tomcat ubuntu-16.04 tomcat9

很抱歉问了一个愚蠢的问题,但我对 Tomcat(和一般的 Linux)只有很少的经验。 我已经启动了一个全新的 AWS Ubuntu 16.04,安装了 Java 8(满足我们的应用程序兼容性要求)和 Tomcat9(在/opt/tomcat9 文件夹中)。我创建了一个 tomcat9 用户,我打算在该用户下运行 Tomcat。我已将 ssl 证书复制到/etc/ssl-keystore 并在 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" />

我已将/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 网站)并阅读了多个教程,但我找不到相关/有用的答案。非常感谢。

最佳答案

默认情况下,非 root 用户无法绑定(bind)到特权低端口。前 1024 个端口被限制,您正在尝试绑定(bind)到 443。

如果你坚持这样做而不是在端口 8080 上运行 TLS termination proxy尝试以下答案。他们建议 setcap 来解决它:

关于java - 在非root用户下启动tomcat 9,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50702291/

相关文章:

java - readObject 挂起应用程序

java - 从 Java 调用 Scala 方法 - Set<Object> 还是 Set<Long>?

java - Adler32 快速重复

linux - 在windows上查看laSTLog文件

linux - 自动挂载在 Linux/etc/fstab 中不起作用

tomcat - solr 3.6 可以与 tomcat 6 一起正常工作吗

eclipse - 在 Eclipse 中运行 JPA 项目

java - Hamcrest Matchers.contains 匹配器不工作(?)

linux TCP/IP : Is there any chance that packet is acknowledged but dropped for any reason?

java - 我可以使用 IntelliJ IDEA 将多个 WAR 存档文件部署到本地 Tomcat 吗?