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.