[Amazon Linux 2] Tomcat 서비스 계정 변경

Jisun-Rea·2021년 4월 23일
0

🧐 갑자기 든 의문점

tomcat의 jvm heap 메모리 사이즈를 조정하려고
실행중인 tomcat의 PID를 확인하곤 불현듯 깨달은 것이 있다.

$ ps -aux | grep tomcat
root      2946  0.2 12.0 2321400 121440 ?      Sl   01:33   0:21 /usr/bin/java -Djava.util.logging.config.file=/data/was/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /data/was/tomcat/bin/bootstrap.jar:/data/was/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/data/was/tomcat -Dcatalina.home=/data/was/tomcat -Djava.io.tmpdir=/data/was/tomcat/temp org.apache.catalina.startup.Bootstrap start
ec2-user  4000  0.0  0.2 123584  2260 pts/0    S+   04:19   0:00 grep --color=auto tomcat

서비스를 실행하는 계정이 root인 것을 발견했기 때문이다.

그 이유는 내가 tomcat을 컴파일 설치한 후 직접 서비스 파일을 만들어서 실행시켰기 때문이다. -> [Amazon Linux 2] Tomcat 8.5.64 컴파일 설치 & 서비스 등록

따라서, 따로 tomcat을 위한 서비스 계정과 그룹을 만들어서 등록시키는 과정을 기록하게 되었다.

Tomcat 서비스 계정 변경

서비스 계정과 그룹 생성

sudo groupadd was
sudo useradd tomcat -G was
  • was 그룹을 생성하고,
  • tomcat 계정을 생성함과 동시에 was 그룹에 소속시킴

서비스 파일 수정

서비스 파일에서 User와 Group을 수정해주자

/usr/lib/systemd/system/tomcat.service

[Unit]
Description=tomcat8.5.64
After=network.target syslog.target

[Service]
Type=forking

Environment=CATALINA_HOME=/usr/local/tomcat8/apache-tomcat-8.5.64
User=tomcat
Group=was

ExecStart=/usr/local/tomcat8/apache-tomcat-8.5.64/bin/startup.sh
ExecStop=/usr/local/tomcat8/apache-tomcat-8.5.64/bin/shutdown.sh

UMask=0007
RestartSec=10
Restart=always

SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

😂 Failed to start tomcat 에러

서비스 파일만 수정하고 데몬을 리로드했더니 Failed to start tomcat8.5.65. 에러가 났었다.

$ sudo systemctl daemon-reload
$ sudo systemctl status tomcat

● tomcat.service - tomcat8.5.65
   Loaded: loaded (/usr/lib/systemd/system/tomcat.service; enabled; vendor preset: disabled)
   Active: activating (auto-restart) (Result: exit-code) since 금 2021-04-23 04:25:58 UTC; 3s ago
  Process: 4145 ExecStop=/data/was/tomcat/bin/shutdown.sh (code=exited, status=203/EXEC)
  Process: 4153 ExecStart=/data/was/tomcat/bin/startup.sh (code=exited, status=203/EXEC)
 Main PID: 2946 (code=exited, status=143)

 423 04:25:58 ip-10-100-3-226.ap-northeast-2.compute.internal systemd[1]: tomcat.service: control process exited, code=exited status=203
 423 04:25:58 ip-10-100-3-226.ap-northeast-2.compute.internal systemd[1]: Failed to start tomcat8.5.65.
 423 04:25:58 ip-10-100-3-226.ap-northeast-2.compute.internal systemd[1]: Unit tomcat.service entered failed state.
 423 04:25:58 ip-10-100-3-226.ap-northeast-2.compute.internal systemd[1]: tomcat.service failed.

이것저것 검색해보고 고민해보다가 tomcat이 설치된 경로의 소유자와 소유 그룹을 설정하지 않았다는 것을 알았다.

tomcat 설치 경로 소유자:소유그룹 변경

sudo chown -R tomcat:was /data
  • /data/was : Tomcat 설치 경로
  • /data/was-app : Tomcat Root Directory 경로
$ ls -ld /data
drwxr-xr-x 5 tomcat was 124  421 08:23 /data

$ ls -l /data
drwxr-xr-x 3 tomcat was     55  421 08:23 was
drwxr-xr-x 2 tomcat was    110  421 08:23 was-app

daemon-reload

마지막으로, 변경한 서비스 설정을 반영하기 위해 데몬을 리로드 시켜주자

sudo systemctl daemon-reload

😎 최종 확인

$ sudo systemctl status tomcat
● tomcat.service - tomcat8.5.65
   Loaded: loaded (/usr/lib/systemd/system/tomcat.service; enabled; vendor preset: disabled)
   Active: active (running) since 금 2021-04-23 04:31:16 UTC; 25s ago
 Main PID: 4302 (java)
   CGroup: /system.slice/tomcat.service
           └─4302 /usr/bin/java -Djava.util.logging.config.file=/data/was/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djd...

 423 04:31:16 ip-10-100-3-226.ap-northeast-2.compute.internal systemd[1]: tomcat.service holdoff time over, scheduling restart.
 423 04:31:16 ip-10-100-3-226.ap-northeast-2.compute.internal systemd[1]: Starting tomcat8.5.65...
 423 04:31:16 ip-10-100-3-226.ap-northeast-2.compute.internal systemd[1]: Started tomcat8.5.65.

$ ps -aux | grep tomcat
tomcat    4302 20.3 12.3 2319352 124264 ?      Sl   04:31   0:06 /usr/bin/java -Djava.util.logging.config.file=/data/was/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /data/was/tomcat/bin/bootstrap.jar:/data/was/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/data/was/tomcat -Dcatalina.home=/data/was/tomcat -Djava.io.tmpdir=/data/was/tomcat/temp org.apache.catalina.startup.Bootstrap start
ec2-user  4364  0.0  0.2 123584  2288 pts/0    S+   04:31   0:00 grep --color=auto tomcat

끝~~!!~!~!!!

profile
호기심 많고 걱정도 많은 사람👻 @DevOps @Cloud

0개의 댓글