![Ubuntu + Jetty:使用 1024 以上端口的服务需要权限吗?](https://linux22.com/image/1542204/Ubuntu%20%2B%20Jetty%EF%BC%9A%E4%BD%BF%E7%94%A8%201024%20%E4%BB%A5%E4%B8%8A%E7%AB%AF%E5%8F%A3%E7%9A%84%E6%9C%8D%E5%8A%A1%E9%9C%80%E8%A6%81%E6%9D%83%E9%99%90%E5%90%97%EF%BC%9F.png)
我试图在 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 以下的端口上运行。