[TOMCAT] Tomcat을 다른 권한으로 실행하기

아파치 재단의 최상위 프로젝트중에 하나인 톰캣은 무료지만 정말 빠르고 뛰어난 WEB/WAS 어플리케이션입니다.

물론 웹서버의 지존은 Apache가 있겠지만요, Apache + Tomcat 조합의 구성은 무료로 Java/JSP를 호스팅 할 수 있는 최상의 조건이 되지 않을까 생각합니다.

Tomcat을 사용하다 보면 root로 실행하는 경우가 많이 있는데요, 그러다 보면 톰캣도 root로 돌아가게 된다는 문제점이 생깁니다.

WAS가 root로 실행된다면? 안봐도 끔찍한 보안 문제가 많이 발생할 소지가 있습니다.

그렇다면 역시 다른 제한된 권한으로 실행하는 것이 좋을텐데요, 그중에서도 로그인조차 제한되어있는 nobody로 실행하는 방법을 알아보겠습니다.

톰캣은 /usr/local/tomcat 에 설치되어있다고 가정해 보겠습니다.

/etc/rc.d/init.d/catalina 라는 파일을 만들어 다음의 내용을 적어주고 700등의 권한을 주도록 합시다.

[code]#!/bin/sh
case “$1” in
    start)
        /usr/bin/sudo -u nobody /usr/local/tomcat/bin/startup.sh
    ;;
    stop)
        /usr/bin/sudo -u nobody /usr/local/tomcat/bin/shutdown.sh
    ;;
    restart)
        /usr/bin/sudo -u nobody /usr/local/tomcat/bin/shutdown.sh
        sleep 1
        /usr/bin/sudo -u nobody /usr/local/tomcat/bin/startup.sh
    ;;
    *)
        echo “$0 (start|stop|restart)”
esac[/code]

다음과 같은 방법으로 실행을 할수 있습니다.
[code]# 톰캣 시작
[eye@theeye /] $ /etc/rc.d/init.d/catalina start
# 톰캣 종료
[eye@theeye /] $ /etc/rc.d/init.d/catalina stop
# 톰캣 재시작
[eye@theeye /] $ /etc/rc.d/init.d/catalina restart[/code]
톰캣을 딜레이 없이 껐다키면 에러가 발생하는 경우가 있어 1초의 sleep을 걸었습니다.

하지만 RHEL등에서는 위의 명령이 에러가 나며 실행이 되지 않습니다.

다음과 같이 시작종료 명령 부분을 바꾸어 실행하시면 됩니다.

[code]# 시작 명령
su – nobody -s /bin/sh -c /usr/local/tomcat/bin/startup.sh
# 종료 명령
su – nobody -s /bin/sh -c /usr/local/tomcat/bin/shutdown.sh[/code]