개발 - WEB, WAS, DB

리눅스에서 일반계정으로 80포트 사용하기

개미v 2021. 5. 12. 09:54

리눅스에서 일반계정은 well known port 1024 이하는 사용이 불가능 합니다.

하지만 할 수 있는 방법이 있습니다.

1. setcap 명령어

가장 추천하는 방법으로, 가장 간편하고 직관적입니다.

실행 명령어에 setuid 권한 주듯이 1024 미만 포트의 사용권한을 주는 명령어 입니다.

예를 들어 톰캣은 자바로 실행되기에 자바 파일에 권한을 부여하면 됩니다.

설정

setcap 'cap_net_bind_service=+ep' /usr/lib/jvm/java-1.8.0-openjdk/bin/java

해제

setcap -r /usr/lib/jvm/java-1.8.0-openjdk/bin/java

확인

getcap /usr/lib/jvm/java-1.8.0-openjdk/bin/java

libjli.so 에러 해결

java에 권한 부여하고 실행시 에러가 날텐데 libjli.so 파일의 경로를 라이브러리 경로 설정 하면 됩니다.

/etc/ld.so.conf.d/java.conf 파일에(없으면 생성) 아래 한줄 추가

/usr/lib/jvm/java-1.8.0-openjdk/lib/amd64/jli

그리고 ldconfig 실행

2. 포트 포워딩

80포트로 접속하면 다른포트(ex: 7000)로 포트 포워딩 시키는 방법입니다.

OS마다 차이가 있고 iptables 또는 firewall-cmd로 하면 됩니다.

CentOS 7은 firewall-cmd 명령어로 해야하고 이 명령어 기준으로 설명 합니다.

서비스 시작

systemctl start firewalld

서비스 중지

systemctl stop firewalld

포트 포워딩 설정

firewall-cmd --permanent --zone=public --add-forward-port=port=80:proto=tcp:toport=7000:toaddr=192.168.1.100

포트 포워딩 해제

firewall-cmd --permanent --zone=public --remove-forward-port=port=80:proto=tcp:toport=7000:toaddr=192.168.1.100

설정 변경 후 재기동

firewall-cmd --reload

확인

firewall-cmd --list-all

저는 firewall-cmd로 설정을 해봤는데 이유는 모르겠지만 포트 포워딩이 되지 않아서 포기했습니다.

3. 기타 - setuid 설정, sudoers 설정, authbind 설치

setuid나 sudoers는 보안상 모순 됩니다.

java에 root권한을 설정하면 일반계정에 root 권한을 준것과 다름 없습니다.

그럴바에 그냥 root로 실행하는 것이 더 안전합니다.

authbind는 구글 찾아보니 정리된 문서들이 있으니 생략 하겠습니다.