[Amazon Linux] Authbind 설치하여 Tomcat 80포트 사용하는 방법
- -
Authbind는 특정 사용자가 특정 포트에서 실행되는 서비스를 실행할 때 일반적으로 필요한 루트 권한을 부여하지 않고도, 해당 포트에 접근하고 사용할 수 있게 해주는 유틸리티 도구입니다. 이번 포스팅에서는 Amazon Linux에서 Tomcat을 80 포트로 실행하는 방법에 대해 알아보겠습니다.
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
...
'운영체제 > Linux' 카테고리의 다른 글
[Ubuntu] apt install 중 E: Sub-process /usr/bin/dpkg returned an error code (1) 에러 해결 사례 (1) | 2023.06.06 |
---|---|
[Amazon Linux] Tomcat 및 Java 설치 방법 (0) | 2023.04.25 |
[Ubuntu] Node.js 및 npm 간단한 설치 (0) | 2023.04.23 |
[Ubuntu] zsh 및 oh-my-zsh 플러그인 설치와 테마 적용 (0) | 2023.04.21 |
소중한 공감 감사합니다