본문 바로가기
IT/Web

리눅스에서 톰캣 일반 계정으로 실행 하기

by 최고영회 2013. 12. 21.
728x90
반응형
SMALL

Tomcat을 root 로 실행할 때의 문제점

 

root 권한으로 실행을 한다는 건 root 콘솔에서 startup.sh을 통해 톰캣을 실행시킨 것이다.

 

이때 문제점은 현재 데몬이 root 권한으로 떠있는 것이며, 이상태에서 사용자가 해당 사이트에 접속하면 그 사용자의 접근권한도 root 가 된다...

 

아파치는 root 로 실행이 가능하고 접속자의 권한은 nobody로 주지만 톰캣은 그렇지 않다.

 

톰캣은 무조건 데몬을 실행시킨 권한을 접속자에게 동일하게 준다.

 

문제점 1)

업로드시 폴더에 퍼미션을 걸어놓아도 퍼미션에 영향을 받지 않고 프로그래밍만 되어 있으면 업로드가 된다. 접근 권한이 root 권한이기 때문에...

 

문제점 2)

업로드 폴더 퍼미션에 실행권한을 빼도 파일업로드시 악의적인 코드를 심어두어 실행 하게 되면.. 실행이 가능하다. (ex. rm -rf /)

 

문제점 3)

로컬유저가 콘솔에서 jsp 파일 작성후 인터넷으로 접속하여 실행할 수 있다. root 권한이기 때문에..

 

----------------------------------------------------------------------------------------

 

대안책

톰캣을 실행시키는 권한을 root 가 아닌 따로 정의한 계정으로 한다.

 

1. 일반계정 추가

 # useradd yhkim

 # password yhkim

 # password : xxxxxx

 

2. sudoers에 일반 사용자 등록

 - /etc/sudoers 파일의 퍼미션은 440 이다.

- 먼저 퍼미션을 변경한다.

# chmod 777 /etc/sudoers

# vi /etc/sudoers

- 맨 밑에 아래와 같이 추가

 yhkim ALL=(ALL) NOPASSWD: ALL

- 저장

- 다시 퍼미션 변경

# chmod 440 /etc/sudoers

 

3. 일반계정으로 톰캣을 실행할 수 있도록 쉘스크립트 작성

# cd /etc/rc.d/init.d/

# vi catalina.sh

#!/bin/sh

case "$1" in

 start)

     echo '========================================================='

     STAT=`netstat -na | grep 443 | awk '{print $6}'`

     if [ "$STAT" = "LISTEN" ]; then

       echo 'web server is running already.'

     elif [ "$STAT" = "" ]; then

       echo 'Please wait for Startup of web server...'

       /usr/bin/sudo -i /usr/local/apache-tomcat-6.0.26/bin/startup.sh

       echo 'Complete to startup of web server'

     fi

     echo '========================================================='

 ;;

 stop)

     echo '========================================================='

     STAT=`netstat -na | grep 443 | awk '{print $6}'`

     if [ "$STAT" = "" ]; then

       echo 'web server is not running.'

     elif [ "$STAT" = "LISTEN" ]; then

       echo 'Please wait for shutdown of web server...'

       /usr/bin/sudo -i /usr/local/apache-tomcat-6.0.26/bin/shutdown.sh

       echo 'Complete to shutdown of web server'

     fi

     echo '========================================================='

 ;;

 restart)

     echo '========================================================='

     STAT=`netstat -na | grep 443 | awk '{print $6}'`

     if [ "$STAT" = "LISTEN" ]; then

       echo 'Please wait for shutdown of web server...'

       /usr/bin/sudo -i /usr/local/apache-tomcat-6.0.26/bin/shutdown.sh

     fi

     sleep 10

     echo 'Startup of web server...'

     /usr/bin/sudo -i /usr/local/apache-tomcat-6.0.26/bin/startup.sh

     echo 'Complete to startup of web server'

     echo '========================================================='

 ;;

 status)

     echo '========================================================='

     STAT=`netstat -na | grep 443 | awk '{print $6}'`

     if [ "$STAT" = "LISTEN" ]; then

        echo "web server is running"

     elif [ "$STAT" = "" ]; then

        echo "web server is not running"

     fi

     echo '========================================================='

 ;;

 *)

echo "$0 (start|stop|restart|status)"

esac


 

4. 쉘 스크립트 실행 권한 부여

 # chmod +x /etc/rc.d/init.d/catalina.sh

 

5. 테스트

 - yhkim 으로 로그인

 # /etc/rc.d/init.d/catalina.sh start

=========================================================

Please wait for Startup of web server...

Using CATALINA_BASE:   /usr/local/apache-tomcat-6.0.26

Using CATALINA_HOME:   /usr/local/apache-tomcat-6.0.26

Using CATALINA_TMPDIR: /usr/local/apache-tomcat-6.0.26/temp

Using JRE_HOME:        /usr/java/jre1.6.0_24

Using CLASSPATH:       /usr/local/apache-tomcat-6.0.26/bin/bootstrap.jar

Complete to startup of web server

 

=========================================================

#

# /etc/rc.d/init.d/catalina.sh status

=========================================================

web server is running

=========================================================

#

# /etc/rc.d/init.d/catalina.sh stop

=========================================================

Please wait for shutdown of pnpweb server...

Using CATALINA_BASE:   /usr/local/apache-tomcat-6.0.26

Using CATALINA_HOME:   /usr/local/apache-tomcat-6.0.26

Using CATALINA_TMPDIR: /usr/local/apache-tomcat-6.0.26/temp

Using JRE_HOME:        /usr/java/jre1.6.0_24

Using CLASSPATH:       /usr/local/apache-tomcat-6.0.26/bin/bootstrap.jar

Complete to shutdown of pnpweb server

=========================================================

#

# /etc/rc.d/init.d/catalina.sh status

=========================================================

pnpweb server is not running

=========================================================

 

 

 

728x90
반응형
LIST