티스토리 뷰
non-root user로 80 포트를 띄우면 java.net.SocketException: Permission denied 같은 에러가 날겁니다.
그렇다면, iptables를 배제한다면 setcap을 써야 하는데, 이게 아파치 웹 서버의 httpd 파일 처럼 단일 바이너리를 setcap 처리하는 것은 수월하지만 궁극적으로 java 파일을 통해 기동되는 톰캣은 이야기가 다소 복잡한 사항이 야기됩니다.
일단 다음과 같이 처리는 가능합니다.
setcap 'cap_net_bind_service=+ep' /u01/jdk1.8.0_60/bin/java
하지만 이후 톰캣 기동 시 다음과 같은 라이브러리 문제가 발생할 수 있습니다
/u01/jdk1.8.0_60/bin/java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory
---------------------------오류 해결법--------------------------------------------------------------------------------------------------------------
setcap(set file capabilities)으로 처리 가능합니다. 다만 소켓에 특권을 부여하는 CAP_NET_BIND_SERVICE의 경우 최신 커널부터 사용 가능합니다. (2.6.xx)
jeeg님의 libjli.so 오류는 다음과 같이 조치 가능합니다.
1. etc/ld.so.conf.d/java.conf 파일에 libjli.so 파일의 절대 경로를 입력 (단 파일이 위치하고 있는 상위 디렉토리까지만, 예를 들어 /u01/jdk1.8.0_60/lib/amd64/jli)
2. /sbin/ldconfig 실행
하지만 iptables 사용이 가능하다면 fragile님의 답변과 같이 iptables를 통해 처리하는 것이 더 좋겠습니다.
< 참고자료 >
Is there a way for non-root processes to bind to “privileged” ports (<1024) on Linux?
stackoverflow.com/questions/413807/is-th...rts-1024-on-l#414258
How to get Oracle java 7 to work with setcap cap_net_bind_service+ep
unix.stackexchange.com/questions/87978/h...p-net-bind-serviceep
JDK-7076745 : JRE doesn't work with Linux capabilities
bugs.java.com/view_bug.do?bug_id=7076745
'os' 카테고리의 다른 글
맥북 터미널에서 brew 이용해서 node, npm 설치하기 (0) | 2019.06.14 |
---|---|
리눅스 파일 권한 유저 소유자 일괄변경 (0) | 2018.10.11 |
리눅스에서 톰캣 일반 계정으로 실행 하기 (1) | 2018.10.10 |
리눅스. 노트북 덮개를 닫으면 대기모드로 갈 때 (대기모드 끄기) (0) | 2018.09.07 |
Java 시스템 운영 중 알아두면 쓸모 있는 지식들 (0) | 2018.08.21 |