이전 글CentOS7에 tomcat 9 설치 이후에, tomcat 기본 포트인 8080포트를 80번으로 아래와 같이 변경하였다.
server.xml 설정
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
하지만, tomcat이 80번 포트로 접속되지 않았고, ss 결과 아래처럼 80 포트 listen이 보이지 않는다.
# ss -ant State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* ESTAB 0 208 165.132.237.76:22 165.132.237.121:10653 LISTEN 0 100 :::8009 :::* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* LISTEN 0 1 ::ffff:127.0.0.1:8005 :::*
이런저런 확인을 해 본 결과, CentOS 7에서 well known port(1-1024)는 root 권한으로만 binding이 가능하게 되었다는 것을 알게 되었다. tomcat을 80 port로 사용하려면, iptables로 포트포워딩을 해서 사용하거나, 데몬을 well known port로 바인딩 가능하도록 authbind를 사용하여야 한다.
아래는 authbind를 이용하여 tomcat을 80 port로 서비스 가능하도록 설정하는 방법이다.
1. authbind 다운로드 및 설치
# curl -O -k https://s3.amazonaws.com/aaronsilber/public/authbind-2.1.1-0.1.x86_64.rpm % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 17844 100 17844 0 0 15506 0 0:00:01 0:00:01 --:--:-- 15516 # yum install authbind-2.1.1-0.1.x86_64.rpm Loaded plugins: fastestmirror Examining authbind-2.1.1-0.1.x86_64.rpm: authbind-2.1.1-0.1.x86_64 Marking authbind-2.1.1-0.1.x86_64.rpm to be installed Resolving Dependencies --> Running transaction check ---> Package authbind.x86_64 0:2.1.1-0.1 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: authbind x86_64 2.1.1-0.1 /authbind-2.1.1-0.1.x86_64 36 k Transaction Summary ================================================================================ Install 1 Package Total size: 36 k Installed size: 36 k Is this ok [y/d/N]: y Downloading packages: Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : authbind-2.1.1-0.1.x86_64 1/1 Verifying : authbind-2.1.1-0.1.x86_64 1/1 Installed: authbind.x86_64 0:2.1.1-0.1 Complete!
2. authbind 80 번 포트 설정.
80번 포트를 사용할 수 있도록 /etc/authbind 아래 포트번호로 화일을 생성하고, 소유권과 퍼미션을 변경해준다.
# cd /etc/authbind # ls byaddr byport byuid # cd byport # ls # touch 80 # chmod 500 80 # ls -l total 0 -r-x------. 1 tomcat root 0 Nov 20 16:29 80
3. tomcat 설정.
이제, tomcat이 설치된 디렉토리의 bin 디렉토리(여기서는 /opt/tomcat/bin)로 이동하여, serene.sh 화일을 아래 내용으로 생성한다.
탐캣 디렉토리에 setenv.sh 화일을 생성한다.
# cd /opt/tomcat/bin # cat setenv.sh CATALINA_OPTS="-Djava.net.preferIPv4Stack=true"
startup.sh 화일에서 아래 내용을 바꿔준다. 맨 아래 줄의 내용을 주석처리하고, authbind를 이용하도록 설정한다.
# vi startup.sh #exec "$PRGDIR"/"$EXECUTABLE" start "$@" exec authbind --deep "$PRGDIR"/"$EXECUTABLE" start "$@"
4. tomcat 재실행하고 listen 포트를 확인한다.
# systemctl restart tomcat # ss -ant State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 100 *:8009 *:* LISTEN 0 100 *:80 *:* LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 1 127.0.0.1:8005 *:* TIME-WAIT 0 0 165.132.237.76:43953 165.132.237.76:80 ESTAB 0 208 165.132.237.76:22 165.132.237.121:10653 TIME-WAIT 0 0 165.132.237.76:49720 165.132.237.76:8009 LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::*
이제, tomcat이 80번 포트로 실행되고 있음을 볼 수 있다.
* 참고문서
https://blog.webhosting.net/how-to-get-tomcat-running-on-centos-7-2-using-privileged-ports-1024/
https://serverfault.com/questions/889122/how-to-get-tomcat-9-to-work-with-authbind-to-bind-to-port-80