[TmaxSoft] Jeus Webtob 도커 이미지 보안 개선
이전에 포스팅한 글은 솔루션의 기본 세팅에서 내가 바로 적용할 수 있는 부분까지 확인해보았다.
더 나아가서 프로세스 실행 유저와 프로세스 기동 위치 등을 수정하려 Dockerfile을 손보았다.
그럼 함께 확인해보자.
Webtob Dockerfile
FROM tmaxsoftofficial/webtob:5.0.0.2.217.41.3.2
##########################################################
# test package
# RUN yum update
# RUN yum install -y vim net-tools curl
##########################################################
# User add
RUN groupadd -r -g 2000 tmax && useradd -r -d /home/webtob -u 1000 -g tmax webtob
#RUN mv /home/start.sh /home/webtob/start.sh
#RUN setcap 'cap_net_bind_service=+ep' /home/webtob/bin/htl
# resouces ADD
RUN mkdir /home/webtob/docs/styles
COPY ./health.html /home/webtob/docs
# configuration
COPY ./http.m /home/webtob/config/http.m
RUN chown -R webtob. /home/webtob
RUN chown webtob. /home/start.sh
USER webtob
WORKDIR /home/webtob
CMD ["/home/start.sh"]
유저그룹 tmax / 유저명 webtob 로 생성해주었고, 웹투비 실행폴더는 default /home/webtob 이기 때문에 권한만 변경해주었다. 그리고 유저를 지정한 뒤 작업 디렉토리를 정해준 뒤 실행 스크립트를 커맨드에 명시해주었다.
또, setcap 부분이 있는데 이는 일반 유저가 1024 이하의 포트를 점유하기 위해 권한(privileged)을 풀어주는 명령어이다. 필자는 그냥 http.m 에서 listner 포트를 8000으로 변경하고 마무리 하였다.
이제 이 베이스이미지로 pipeline을 태우면 되는데,
/home/webtob/docs 안에 정적리소스를 넣어주면 완성된다.
Jeus Dockerfile
FROM tmaxsoftofficial/jeus:8.1.105067.1-jdk8-openjdk-ubuntu
###########################################################################
# test package
# RUN apt update
# RUN apt install -y vim net-tools curl
###########################################################################
# User add
RUN groupadd -r -g 2000 tmax && useradd -r -d /home/jeus -u 1000 -g tmax jeus
RUN mkdir /home/jeus
# Applications Deploy Location - pipeline
# COPY ./web-0.0.1-SNAPSHOT.war /root/app
# Configurations
COPY ./domain.xml /root/jeus8/domains/domain1/config/domain.xml
# scripts
COPY ./start.sh /root/script/
COPY ./env-run.sh /root/script/
RUN mv /root/* /home/jeus
RUN chown -R jeus. /home/jeus
USER jeus
WORKDIR /home/jeus
CMD ["script/start.sh"]
마찬 가지로 유저그룹 tmax / 유저명 jeus 로 생성해주었고, 제우스 실행 경로는 default /root 였기 때문에 /home/jeus 디렉토리를 생성하고 마지막에 폴더를 이동시켜주었다. 지난 포스팅과 비교해 script가 추가되었는데, domain.xml에서 추가로 값을 치환하는 작업이 필요해져서 별도의 env-run.sh 파일을 만들었고, 이를 기동시키기 위해 기존에 있던 start.sh에 1line을 추가해주었다. 마지막으로 컨테이너 실행 유저와 작업디렉토리를 정해준 뒤 실행스크립트를 커맨드에 넣었다.
이제 이 베이스이미지로 pipeline을 태우면 되는데,
app base 경로는 /home/jeus/app 이 되었으니 이 폴더에 실제 애플리케이션.war를 넣어주면 완성된다.
마치며
컨테이너 보안이라고 하기에 너무많은 부분이 있을 텐데, 많은 부분에 대해 모르는게 많다.
그냥 Redhat OCP 를 사용할 때의 기억을 참고하여 일반계정 및 작업디렉토리 등의 설정을 해보았다.
이제 enviroment 를 정의해서 컨테이너를 기동하면 된다.