Tomcat 6.x를 보호하려면 어떤 단계를 수행해야합니까?


10

새로운 Tomcat 배포를 설정하는 과정에서 가능한 한 안전하기를 원합니다.

나는 'jakarta'사용자를 만들고 jsvc가 Tomcat을 데몬으로 실행하도록했습니다. Tomcat의 파일에 대한 액세스를 제한하는 디렉토리 권한에 대한 팁이 있습니까?

기본 웹 응용 프로그램 (문서, 예제 등)을 제거해야한다는 것을 알고 있습니다. 여기에 사용해야하는 모범 사례가 있습니까? 모든 구성 XML 파일은 어떻습니까? 팁이 있습니까?

웹 관리자가 샌드 박스에서 실행되도록 보안 관리자를 활성화 할 가치가 있습니까? 누구든지 이것을 설정 한 경험이 있습니까?

Apache 뒤에 Tomcat의 두 인스턴스를 실행하는 사람들의 예를 보았습니다. 이것은 mod_jk 또는 mod_proxy를 사용하여 수행 할 수있는 것 같습니다 ... 그만한 가치가 있습니까?

중요한 경우 OS는 데비안 레니입니다. lenny가 tomcat 5.5 만 제공하고 6.x가 필요하기 때문에 apt-get을 사용하지 않습니다.

감사!

답변:


6

Tomcat 6을 설치 하여 root가 아닌 jsvc사용자 tomcat 로 실행할 수 있습니다 . 마지막으로 설정 한 내용은 다음과 같습니다.

나는 아래의 Tomcat 응용 프로그램 설치 /usr/java/tomcat( CATALINA_HOME)와 인스턴스에서을 /var/lib/tomcat( CATALINA_BASE) :

cd /usr/java
sudo tar xzvf ~/downloads/apache-tomcat-6.0.18.tar.gz
sudo ln -s apache-tomcat-6.0.18 tomcat
sudo /usr/sbin/useradd -d /var/lib/tomcat -c "Apache Tomcat" -m -s /sbin/nologin tomcat
cd /var/lib/tomcat
sudo mkdir logs work temp
sudo chown tomcat:tomcat logs temp work
(cd /usr/java/tomcat && sudo tar cvf - conf webapps) | sudo tar xvf -
sudo chmod -R g+rw webapps conf
sudo chown -R tomcat:tomcat webapps conf
cd webapps/
sudo rm -rf docs examples manager host-manager
cd ../conf
sudo chmod g+r *

그런 다음 jsvc래퍼를 만들었습니다 .

cd
tar xzvf downloads/apache-tomcat-6.0.18.tar.gz
tar xzvf apache-tomcat-6.0.18/bin/jsvc.tar.gz
cd jsvc-src
chmod +x configure
./configure --with-java=$JAVA_HOME
make
./jsvc --help
sudo cp jsvc /usr/local/sbin/ 

마지막으로 인스턴스 디렉토리에 대한 권한을 강화했습니다.

cd /var/lib/tomcat
sudo chmod -R 0700 conf
sudo chmod -R 0750 logs
sudo chmod -R 0700 temp
sudo chmod -R 0700 work
sudo chmod -R 0770 webapps/
sudo chown -R tomcat:tomcat conf
sudo chown -R tomcat:tomcat logs

지금 Tomcat을 실행할 때는을 사용하여 시작해야 하므로이 jsvc스크립트를 다음 /etc/init.d/tomcat과 같이 추가 하고 적절하게 심볼릭 링크하십시오.

#!/bin/sh
#
# tomcat       Startup script for the Apache Tomcat Server running under jsvc
#
# chkconfig: 345 85 15
# description: Apache Tomcat
# pidfile: /var/run/jsvc.pid

JAVA_HOME=/usr/java/jdk1.6.0_13
CATALINA_HOME=/usr/java/apache-tomcat-6.0.18
CATALINA_BASE=/var/lib/tomcat
JAVA_OPTS="-Djava.awt.headless=true"
JMX_OPTS="-Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"

DAEMON_APP=/usr/local/sbin/jsvc
TOMCAT_USER=tomcat

# Everything below should be okay
PID_FILE=/var/run/jsvc.pid
LOCK_FILE=/var/lock/tomcat

PATH=/sbin:/bin:/usr/bin
. /lib/init/vars.sh

. /lib/lsb/init-functions

[ -x $JAVA_HOME/bin/java ] || exit 0
[ -x $DAEMON_APP ] || exit 0
[ -d $CATALINA_HOME/bin ] || exit 0
[ -d $CATALINA_BASE ] || exit 0

RETVAL=0
prog="jsvc"

CLASSPATH=\
$JAVA_HOME/lib/tools.jar:\
$CATALINA_HOME/bin/commons-daemon.jar:\
$CATALINA_HOME/bin/bootstrap.jar

start() {
  # Start Tomcat
  log_daemon_msg "Starting Apache Tomcat"
  $DAEMON_APP \
    -user $TOMCAT_USER \
    -home $JAVA_HOME \
    -wait 10 \
    -pidfile $PID_FILE \
    -outfile $CATALINA_BASE/logs/catalina.out \
    -errfile $CATALINA_BASE/logs/catalina.out \
    $JAVA_OPTS $JMX_OPTS \
    -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager \
    -Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties \
    -Dcatalina.home=$CATALINA_HOME \
    -Dcatalina.base=$CATALINA_BASE \
    -Djava.io.tmpdir=$CATALINA_BASE/temp \
    -cp $CLASSPATH \
    org.apache.catalina.startup.Bootstrap start 2>/dev/null 1>&2
  RETVAL=$?
  if [ 0 -eq $RETVAL ]; then
    touch $LOCK_FILE
    log_end_msg 0
  else
    log_end_msg 1
  fi
}

stop() {
  # Stop tomcat
  log_daemon_msg "Stopping Apache Tomcat"
  $DAEMON_APP \
    -stop \
    -pidfile $PID_FILE \
    org.apache.catalina.startup.Bootstrap 2>/dev/null 1>&2
  RETVAL=$?
  if [ 0 -eq $RETVAL ]; then
    rm -rf $LOCK_FILE
    log_end_msg 0
  else
    log_end_msg 1
  fi
}

restart() {
  stop
  sleep 5
  start
}

# See how we were called.
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    restart
    ;;
  status)
    status $prog
    ;;
  condrestart)
    [ -f $LOCK_FILE ] && restart || :
    ;;
  *)
    log_action_msg "Usage: $0 {start|stop|restart|status|condrestart}"
    exit 1
esac

exit $?

나는 일반적으로 chmod와 chown을 시작 (init) 스크립트에 루트로 실행하기 때문에 추가합니다. Tomcat을 루트로 시작하여 "도움을"주어 파일과 디렉토리가 루트에 속하고 Tomcat 사용자가 올바르게 다시 시작하면 쓸 수 없게되어 여러 번 물 렸습니다. 목록에서 "sudo chown tomcat : tomcat temp work"를 놓치셨습니까? 아니면 내가 놓친 것이 있습니까?
Olaf

이들은 Tomcat에 의해 작성되므로 tomcat : tomcat 소유자 / 그룹으로 작성됩니다.
CoverosGene

사전 패키지 된 jsvc 패키지를 사용하지 않는 이유는 무엇입니까? 필자는 Apache 서버에서 Tomcat을 다운로드하더라도 패키지를 설치합니다.
tronda

3

미국 국방부가 좋은이 가이드 전체 웹 서버 보안 가이드에 톰캣 보안 지침을 결합했다 (SRG). 자세한 보안 안내서는 여기에서 찾을 수 있습니다.

http://iase.disa.mil/stigs/srgs/Pages/index.aspx


감사합니다, 그들은 매우 친절 형식 아니지만
피터 Sankauskas

링크가 끊어졌습니다. 또한 더 이상 Tomcat 특정 검사 목록을 제공하지 않는 것으로 보입니다.
Bob

링크를 수정하기 위해 업데이트되었습니다. Application Services 안내서에는 여전히 Tomcat 관련 내용이 있습니다.
Jim Hunziker

그러나 그것은 훌륭한 페이지이지만 2006 년부터 시작되었으므로 일부 권장 사항은 최신 바람둥이에 대한 최신 정보가 아닐 수 있습니다. 디렉토리 권한에 대한 관련 단락은 다음과 같습니다. B.2 설치 및 시작 Tomcat은 단일 사용자 응용 프로그램 또는 공유 시스템 서비스 또는 프로세스로 실행되도록 구성 할 수 있습니다. Tomcat 서비스 또는 프로세스에는 호스트 플랫폼 관리자 나 루트 권한이 필요하지 않습니다. Tomcat 서버의 악용 위험을 제한하기 위해 Tomcat 서비스 또는 프로세스 실행 전용의 사용자 지정 호스트 계정이 생성되고 최소 호스트 시스템 권한이 할당됩니다.
amos

2

OWASP (Open Web Application Security Project )는 Tomcat 보안에 관한 위키 페이지를 제공하며 , 유용 할 수 있습니다. 글을 쓰는 시점에서 Tomcat 5.x에 더 집중된 것처럼 보이지만 시간이 지남에 따라 업데이트되기를 바랍니다.


1

테스트에서 tomcat6 패키지를 백 포트하는 것을 진지하게 고려하고 있습니다. 패키지에 가입하면 새 버전이 아카이브에 업로드되고 있다는 알림을받을 수 있습니다. (데비안 패키징 작업을 할 때 약간 편견이 있습니다).

정책에 응용 프로그램이 제공되지 않으며 직접 작성하는 데 시간이 많이 걸리므로 보안 관리자에서 웹 응용 프로그램을 실행하려고 시도하지 않았습니다. 편집증이라면 확실히 그렇게 할 수 있습니다. 그것은 주로 바람둥이를 실행하고, 나쁜 것을 기다린 다음 정책에 예외를 추가하고 바람둥이를 다시 시작하는 것을 포함합니다. 헹굼, 반복 등

분명히 톰캣을 루트로 실행하지 마십시오. tomcat 사용자는 로그 디렉토리 또는 작업 디렉토리 외부에 아무것도 쓸 수 없어야합니다. webapps 디렉토리에 실행하려는 webapps 만 포함되어 있는지 확인해야합니다.

나는 항상 아파치 뒤에 바람둥이를 달린다. 더 많은 사람들이 아파치를 사용한다고 생각하기 때문에 부분적으로 버그가 더 빨리 발견됩니다. 이것은 매우 희망적 인 생각이며 보안 개선에 의존해서는 안됩니다. Apache가 제공하는 것은 구성 가능성입니다. 바람둥이가 가지고 있지 않거나 효율적으로 할 수없는 많은 모듈이 있습니다. mod_cache, mod_ssl, mod_security는 모든 것을 염두에두고 있습니다. mod_jk, mod_proxy (및 mod_proxy_http 또는 mod_proxy_ajp)를 선택할 수 있습니다. mod_jk (및 mod_proxy_ajp)는 비효율적 인 http 프로토콜 대신 이진 AJP 프로토콜을 사용합니다. mod_jk를 사용하는 것이 좋습니다.


0

tomcat-users.xml에서 관리자 역할의 기본 암호를 변경하는 것을 잊지 마십시오. 매우 중요합니다. 그렇지 않으면 악의적 인 사람이 tomcat 서버에 대한 백도어와 같은 제한된 권한없이 응용 프로그램을 배포하고 많은 나쁜 일을 시도 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.