Caused by: java.net.SocketException: Permission denied Error
Server 구동 환경운영체제가 Linux를 사용하고 계신다면, 종종 Caused by: java.net.SocketException: Permission denied
를 볼 수 있습니다. 저는 Spring Boot에서 Server를 개발한 뒤 Linux에 배포하여 실행하는 도중 위와 같은 에러가 나타났습니다. 원인이 무엇일까요?
로그 메시지에서 조금만 아래로 내려보면 Port가 이미 사용 중이라는 에러가 나타납니다. 하지만 netstat -nlp
를 이용해 확인을 해보아도 우리가 서버에 설정한 Port를 사용중인 프로세스는 보이지 않는 경우가 있는데요, 이는 Port가 사용중이어서 나타나는 에러가 아닌 확률이 높습니다.
원인
위 그림의 SocketException:
뒷 부분을 자세히 보시면 Permission denied
라는 문구가 보입니다. 눈치가 빠르신 분들은 이를 통해 어느정도 유추를 하실 수 있을겁니다. (저의 경우에는 1을 알려주면 10을 알지는 못했나봅니다..)
네, Linux
는 일반 사용자에게 WellKnown Port(<= 1024) 사용권한을 주지 않습니다. 바로 이 때문에 위와 같은 에러가 발생했던 것이죠.
해결방법
사실 해결방법은 간단합니다. 일반 사용자가 아닌 상태로 Server를 구동하면 됩니다.
1. sudo
첫번째 해결방법은 sudo + server 실행 명령어
를 통해 root권한으로 서버를 구동시키는 것입니다.
2. root 계정에서 실행
두번째 방법은 root 계정으로 linux에 접속하여 Server를 실행하는 방법입니다.
'Linux > Linux' 카테고리의 다른 글
Linux - No Java executable found in current PATH: 해결방법 (/usr/bin 링크를 지웠을 때) (0) | 2019.08.03 |
---|---|
Linux - 컴파일 설치 이유와 방법 - 수정중 (0) | 2019.02.05 |
Linux - cGroups 란? (0) | 2019.02.01 |
Linux - Namespace 란? (0) | 2019.02.01 |