포트 8010의 우분투 16.04에서 jetty를 서비스로 실행하려고 합니다. SocketException: Permission Denied와 함께 실패합니다.
제가 아는 한 1024 이상의 포트는 무료로 사용할 수 있는데, 이 오류가 발생하는 이유와 해결 방법이 궁금합니다. 이전에 포트 8080을 시도했는데 동일한 오류와 또 다른 오류가 발생했습니다. java.net.BindException: 이미 사용 중인 주소: 바인드. 그래서 사용하지 않는 포트 8010으로 변경했습니다.
<1024 포트에는 루트 액세스가 필요하다는 것을 알고 있지만, 내가 아는 한 1024 이상의 포트는 루트 액세스 없이도 사용할 수 있어야 합니다. 그렇다면 내 서비스에 포트 바인딩 권한을 부여하려면 어떻게 해야 할까요?
이것은 부두 로그에서 발췌한 것입니다:
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 이상의 포트로 변경하면 문제가 해결되었습니다.
서비스에 전체 루트 액세스 권한을 부여하려고 했지만 여전히 1024 미만의 포트에서 서비스가 실행되는 것을 허용하지 않았습니다.