새소식

운영체제/Linux

[Amazon Linux] Authbind 설치하여 Tomcat 80포트 사용하는 방법

  • -

Authbind는 특정 사용자가 특정 포트에서 실행되는 서비스를 실행할 때 일반적으로 필요한 루트 권한을 부여하지 않고도, 해당 포트에 접근하고 사용할 수 있게 해주는 유틸리티 도구입니다. 이번 포스팅에서는 Amazon Linux에서 Tomcat을 80 포트로 실행하는 방법에 대해 알아보겠습니다.

Tomcat 및 Java 설치 방법은 아래 포스팅을 참고해주세요.😊

[운영체제/Linux] - [Amazon Linux] Tomcat 및 Java 설치 방법


구성 환경

지난  포스팅에 이어서 진행하는 내용이다 보니 환경은 동일합니다.

  • AWS AMI : al2023-ami-2023.0.20230329.0-kernel-6.1-x86_64
  • Tomcat version 9.0.74
  • Java version 11.0.18

현재 Tomcat은 설치되어 8080포트로 Listen하고 있는 상태입니다.

$ netstat -ant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
...
tcp6       0      0 :::8080                 :::*                    LISTEN
...

 

Authbind 설치 및 구성

Authbind는 특정 사용자가 특정 포트에서 실행되는 서비스를 실행할 때, 일반적으로 필요한 루트 권한을 부여하지 않고도, 해당 포트에 접근하고 사용할 수 있도록 도와주는 도구입니다. 여기서 특정 사용자란 tomcat을 의미합니다.

먼저 Authbind를 다운로드 받아 압축을 풀겠습니다.

$ wget https://launchpad.net/ubuntu/+archive/primary/+files/authbind_2.1.1.tar.gz
--2023-04-24 00:28:30--  https://launchpad.net/ubuntu/+archive/primary/+files/authbind_2.1.1.tar.gz
Resolving launchpad.net (launchpad.net)... 185.125.189.223, 185.125.189.222, 2620:2d:4000:1001::8003, ...
Connecting to launchpad.net (launchpad.net)|185.125.189.223|:443... connected.
HTTP request sent, awaiting response... 303 See Other
Location: https://launchpadlibrarian.net/107315154/authbind_2.1.1.tar.gz [following]
--2023-04-24 00:28:31--  https://launchpadlibrarian.net/107315154/authbind_2.1.1.tar.gz
Resolving launchpadlibrarian.net (launchpadlibrarian.net)... 185.125.189.229, 185.125.189.228, 2620:2d:4000:1001::8007,                                         ...
Connecting to launchpadlibrarian.net (launchpadlibrarian.net)|185.125.189.229|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 14407 (14K) [application/gzipped-tar]
Saving to: ‘authbind_2.1.1.tar.gz’

authbind_2.1.1.tar.gz         100%[================================================>]  14.07K  --.-KB/s    in 0s

2023-04-24 00:28:33 (151 MB/s) - ‘authbind_2.1.1.tar.gz’ saved [14407/14407]

$ tar xvzf authbind_2.1.1.tar.gz
authbind-2.1.1/
authbind-2.1.1/authbind-helper.8
authbind-2.1.1/authbind.1
authbind-2.1.1/authbind.h
authbind-2.1.1/authbind.c
authbind-2.1.1/debian/
authbind-2.1.1/debian/rules
authbind-2.1.1/debian/postinst
authbind-2.1.1/debian/postrm
authbind-2.1.1/debian/control
authbind-2.1.1/debian/changelog
authbind-2.1.1/debian/prerm
authbind-2.1.1/debian/copyright
authbind-2.1.1/Makefile
authbind-2.1.1/libauthbind.c
authbind-2.1.1/helper.c

Authbind 컴파일에 필요한 gcc와 make 패키지를 설치하고, 압축을 푼 경로로 이동하여 make install을 수행합니다.

$ cd authbind-2.1.1

$ sudo yum install gcc make
$ sudo make install
cc -g -O2 -Wall -Wwrite-strings -Wpointer-arith -Wimplicit -Wnested-externs -Wmissing-prototypes -Wstrict-prototypes -D                                        MAJOR_VER='"1"' -DMINOR_VER='"0"' -DLIBAUTHBIND='"/usr/local/lib/authbind/libauthbind.so.1"' -DHELPER='"/usr/local/lib/                                        authbind/helper"' -DCONFIGDIR='"/etc/authbind"' -D_GNU_SOURCE  -c -o authbind.o authbind.c
cc -g  authbind.o   -o authbind
cc -g -O2 -Wall -Wwrite-strings -Wpointer-arith -Wimplicit -Wnested-externs -Wmissing-prototypes -Wstrict-prototypes -D                                        MAJOR_VER='"1"' -DMINOR_VER='"0"' -DLIBAUTHBIND='"/usr/local/lib/authbind/libauthbind.so.1"' -DHELPER='"/usr/local/lib/                                        authbind/helper"' -DCONFIGDIR='"/etc/authbind"' -D_GNU_SOURCE  -c -o helper.o helper.c
cc -g  helper.o   -o helper
cc -D_REENTRANT -g -O2 -Wall -Wwrite-strings -Wpointer-arith -Wimplicit -Wnested-externs -Wmissing-prototypes -Wstrict-                                        prototypes -DMAJOR_VER='"1"' -DMINOR_VER='"0"' -DLIBAUTHBIND='"/usr/local/lib/authbind/libauthbind.so.1"' -DHELPER='"/u                                        sr/local/lib/authbind/helper"' -DCONFIGDIR='"/etc/authbind"' -D_GNU_SOURCE -c -o libauthbind.o -fPIC libauthbind.c
ld -shared -soname libauthbind.so.1 -o libauthbind.so.1.0 libauthbind.o -ldl -lc
install -o root -g root -m 755 -d /usr/local/lib/authbind /usr/local/share/man/man1 /usr/local/share/man/man8
install -o root -g root -m 755 -s authbind /usr/local/bin/.
install -o root -g root -m 644  libauthbind.so.1.0 /usr/local/lib/authbind/.
strip --strip-unneeded /usr/local/lib/authbind/libauthbind.so.1.0
ln -sf libauthbind.so.1.0 /usr/local/lib/authbind/libauthbind.so.1
install -o root -g root -m 755 -s helper /usr/local/lib/authbind/.
chmod u+s /usr/local/lib/authbind/helper
install -o root -g root -m 755 -d /etc/authbind \
                /etc/authbind/byport /etc/authbind/byaddr /etc/authbind/byuid

다음으로, /etc/authbind/byport/ 경로에 80 이라는 파일을 만들어 tomcat 사용자가 접근할 수 있도록 권한 설정을 하겠습니다.

$ sudo touch /etc/authbind/byport/80
$ sudo chown root:tomcat /etc/authbind/byport/80
$ sudo chmod 550 /etc/authbind/byport/80

권한 설정을 하고나서 server.xml 설정 파일의 Connector 포트를 기존의 8080에서 80으로 수정하여 줍니다.

$ sudo vim /home/tomcat/apache-tomcat-9.0.74/conf/server.xml
	...
    	<Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               maxParameterCount="1000"
               />
	...

다음으로 startup.sh 파일에서 마지막 줄에 있는 exec "$PRGDIR"/"$EXECUTABLE" start "$@" 내용을 삭제하고 다음 내용을 추가하겠습니다.

$ sudo vim /home/tomcat/apache-tomcat-9.0.74/bin/startup.sh
exec authbind --deep "$PRGDIR"/"$EXECUTABLE" start "$@"

여기까지 설정하였다면 tomcat 사용자가 Authbind를 통해 80포트를 활성화시킬 수 있는 권한을 얻게 된 것 입니다.

이제 tomcat 서비스를 다시 시작하겠습니다.

$ sudo systemctl restart tomcat.service
$ sudo systemctl status tomcat.service
● tomcat.service - Apache Tomcat 9.0 Web Application Container
     Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; preset: disabled)
     Active: active (running) since Mon 2023-04-24 00:53:09 UTC; 3s ago
    Process: 6616 ExecStart=/home/tomcat/apache-tomcat-9.0.74/bin/startup.sh (code=exited, status=0/SUCCESS)
   Main PID: 6623 (java)
      Tasks: 16 (limit: 4657)
     Memory: 187.6M
        CPU: 7.458s
     CGroup: /system.slice/tomcat.service
             └─6623 /usr/lib/jvm/jre/bin/java -Djava.util.logging.config.file=/home/tomcat/apache-tomcat-9.0.74/conf/logging.properties -Djava.util.logging.ma>

Apr 24 00:53:09 ip-172-28-140-228.ap-northeast-2.compute.internal systemd[1]: tomcat.service: Consumed 32.970s CPU time.
Apr 24 00:53:09 ip-172-28-140-228.ap-northeast-2.compute.internal systemd[1]: Starting tomcat.service - Apache Tomcat 9.0 Web Application Container...
Apr 24 00:53:09 ip-172-28-140-228.ap-northeast-2.compute.internal startup.sh[6616]: Tomcat started.
Apr 24 00:53:09 ip-172-28-140-228.ap-northeast-2.compute.internal systemd[1]: Started tomcat.service - Apache Tomcat 9.0 Web Application Container.

정상적으로 tomcat 서비스가 다시 시작되어 active 상태가 되었다면 80포트를 Listen하고 있을 것입니다!

$ netstat -ant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
...
tcp6       0      0 :::80                   :::*                    LISTEN
...

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.