×
- 코드 및 콘솔 화면은 [ code ] 내용 [ /code ] 태그 처리하여 주세요.
- 강조하고자 하는 내용은 [ b ] 내용 [ /b ] 태그 처리하여 주세요.
- 강조하고자 하는 내용은 [ b ] 내용 [ /b ] 태그 처리하여 주세요.
톰캣 띄울 때 non-root user 로 80 포트 띄우는 법?
-
dolphin
(돌고래) - 이 글의 작성자
- Offline
- ★★ Staff ★★
덜보기
더보기
- Posts: 82
- Thank you received: 26
17 Jun 2016 21:56 #797
작성자: dolphin
dolphin 님의 글: 톰캣 띄울 때 non-root user 로 80 포트 띄우는 법?
톰캣을 띄우려는데 root가 아닌 일반 유저로 띄우니까
80 / 443 과 같은 낮은 수의 포트를 띄울 수가 없더라구요.
현재 웹이 http로 들어와도 https로 전환되게끔 설정을 해놨는데요,
iptables 를 이용해서 80으로 들어오면 8080으로 redirect 하게 하는 방법을 썼더니
redirect는 되는데 http -> https 전환이 안되고...
방법이 없을까요???
80 / 443 과 같은 낮은 수의 포트를 띄울 수가 없더라구요.
현재 웹이 http로 들어와도 https로 전환되게끔 설정을 해놨는데요,
iptables 를 이용해서 80으로 들어오면 8080으로 redirect 하게 하는 방법을 썼더니
redirect는 되는데 http -> https 전환이 안되고...
방법이 없을까요???
-
jeeg
(강철지그) - Offline
- Junior
덜보기
더보기
- Posts: 332
- Thank you received: 78
18 Jun 2016 22:36 - 19 Jun 2016 01:30 #805
작성자: jeeg
jeeg 님의 답글: 톰캣 띄울 때 non-root user 로 80 포트 띄우는 법?
non-root user로 80 포트를 띄우면 java.net.SocketException: Permission denied 같은 에러가 날겁니다.
그렇다면, iptables를 배제한다면 setcap을 써야 하는데, 이게 아파치 웹 서버의 httpd 파일 처럼 단일 바이너리를 setcap 처리하는 것은 수월하지만 궁극적으로 java 파일을 통해 기동되는 톰캣은 이야기가 다소 복잡한 사항이 야기됩니다.
일단 다음과 같이 처리는 가능합니다.
하지만 이후 톰캣 기동 시 다음과 같은 라이브러리 문제가 발생할 수 있습니다
그렇다면, 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
-
fragile
(베쯔니) - Offline
- Newbie
덜보기
더보기
- Posts: 26
- Thank you received: 10
18 Jun 2016 23:14 - 19 Jun 2016 12:34 #806
작성자: fragile
fragile 님의 답글: 톰캣 띄울 때 non-root user 로 80 포트 띄우는 법?
위에분 말씀대로 CAP_NET_BIND_SERVICE 를 통해서 조치할 수도 있지만 RHEL 4, 5 의 경우 CAP_NET_BIND_SERVICE capacity 를 지원하지 않습니다.
따라서 port forwarding 설정을 통해 프리라우팅을 설정하는 방법이 나을 것 같습니다.
통캣은 기존대로 1024 보다 높은 숫자의 번호로 기동하고 iptables 를 통해 프리라우팅 설정을 해줍니다.
먼저 /etc/sysctl.conf 에 net.ipv4.ip_forward 값을 1 로 변경합니다 (default 0)
# vi /etc/sysctl.conf
# Controls IP packet forwarding
net.ipv4.ip_forward = 1
# sysctl -p (변경한 설정 값 적용)
그리고 iptables 에 적용
# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
# iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8443
# service iptables restart
iptables 룰은 순서대로 적용되니 꼭 80 을 443 룰 위에 적용해 주세요.
따라서 port forwarding 설정을 통해 프리라우팅을 설정하는 방법이 나을 것 같습니다.
통캣은 기존대로 1024 보다 높은 숫자의 번호로 기동하고 iptables 를 통해 프리라우팅 설정을 해줍니다.
먼저 /etc/sysctl.conf 에 net.ipv4.ip_forward 값을 1 로 변경합니다 (default 0)
# vi /etc/sysctl.conf
# Controls IP packet forwarding
net.ipv4.ip_forward = 1
# sysctl -p (변경한 설정 값 적용)
그리고 iptables 에 적용
# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
# iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8443
# service iptables restart
iptables 룰은 순서대로 적용되니 꼭 80 을 443 룰 위에 적용해 주세요.
좋아요를 누른 살쾡이: nastyboy, c4016675
-
nastyboy
(nastyboy) - Offline
- Newbie
덜보기
더보기
- Posts: 30
- Thank you received: 5
19 Jun 2016 01:36 - 19 Jun 2016 01:38 #807
작성자: nastyboy
nastyboy 님의 답글: 톰캣 띄울 때 non-root user 로 80 포트 띄우는 법?
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
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
좋아요를 누른 살쾡이: scenic, c4016675
Time to create page: 0.065 seconds
- 현재 위치:
- 홈
- Forum
- 메인 게시판
- Question and Answer
- 톰캣 띄울 때 non-root user 로 80 포트 띄우는 법?