Ubuntu + Jetty:使用 1024 以上端口的服务需要权限吗?

Ubuntu + Jetty:使用 1024 以上端口的服务需要权限吗?

我试图在 ubuntu 16.04 的端口 8010 上将 jetty 作为服务运行。它失败并出现 SocketException:权限被拒绝。

据我所知,1024 以上的端口可以免费使用,所以我想知道为什么会出现此错误以及如何修复它。我之前尝试过端口 8080,它给出了相同的错误和另一个错误:java.net.BindException:地址已在使用中:bind。这就是为什么我将其更改为未使用的端口 8010。

我知道 1024 以下的端口需要 root 访问权限,但据我所知,1024 以上的端口应该无需 root 访问权限即可使用。那么我该如何授予我的服务绑定端口的权限呢?

这是码头日志的摘录:

2017-09-28 06:24:57.287:INFO:oejs.AbstractConnector:main: Started ServerConnector@48b22fd4{HTTP/1.1,[http/1.1]}{0.0.0.0:8010}
java.lang.reflect.InvocationTargetException
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.eclipse.jetty.start.Main.invokeMain(Main.java:215)
at org.eclipse.jetty.start.Main.start(Main.java:458)
at org.eclipse.jetty.start.Main.main(Main.java:76)

Caused by: java.net.SocketException: Keine Berechtigung
  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)

答案1

事实证明,jetty 试图绑定到 2 个端口:8010 和 443,尽管在日志中只显示 8010 出现错误。

将 SSL 端口更改为 1024 以上的端口即可解决问题。

我曾尝试授予该服务完全的 root 访问权限,但仍然不允许该服务在 1024 以下的端口上运行。

相关内容