Tag Archives: sudo

[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]

sudo: can’t open /etc/sudoers: Permission denied

sudo를 사용하다 보면 원래는 나와서는 안되는 에러 메시지이지만 가끔 보는 경우가 있다.

바로 시스템을 마음대로 커스터마이징 하다보면(권한 변경등..) 발생할수 있는 메시지 인데…

너무나도 간단한데 헤맨적이 있어 적어놓는다.

[code][root@Tomeii /]# sudo
sudo: can’t open /etc/sudoers: Permission denied[/code]

를 만날경우.

3가지를 점검해 보면 된다.

1. /etc/sudoer의 퍼미션이 440인지 확인
[code type=bash][root@Tomeii etc]# ls -al sudoers
-r–r—–    1 root     root          580  4월 26 17:43 sudoers[/code]

2. /usr/bin/sudo의 퍼미션이 4011인지 확인
[code type=bash][root@Tomeii bin]# ls -al sudo
—S–x–x    1 root     root        94044  7월  1  2005 sudo*[/code]

3. /(루트)의 퍼미션이 755인지 확인
[code type=bash][root@Tomeii /]# ls -al /
drwx–x–x   18 root     root         4096  4월 26 10:16 ./[/code]

PS : 711도 상관없다. group과 other에 실행 이상의 권한이 있으면 된다.