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 ========================================================= |
'IT > Web' 카테고리의 다른 글
jsp 다양한 형태 변환 (0) | 2013.12.21 |
---|---|
Apache 서버를 Tomcat 앞에 두어야 하는가? (0) | 2013.12.21 |
특정 영역 excel export (0) | 2013.12.21 |
log4j.properties 정리 (0) | 2013.12.21 |
Tomcat 메모리 늘리기 (Java heap space 부족 오류 발생 시) (0) | 2013.12.21 |