AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 43765
Accepted
Peter Sankauskas
Peter Sankauskas
Asked: 2009-07-22 12:41:22 +0800 CST2009-07-22 12:41:22 +0800 CST 2009-07-22 12:41:22 +0800 CST

我应该采取哪些步骤来保护 Tomcat 6.x?

  • 772

我正在设置新的 Tomcat 部署,并希望它尽可能安全。

我创建了一个“jakarta”用户并让 jsvc 作为守护进程运行 Tomcat。关于目录权限等限制对Tomcat文件的访问的任何提示?

我知道我需要删除默认的 webapps - 文档、示例等......我应该在这里使用任何最佳实践吗?那么所有的配置 XML 文件呢?那里有什么提示吗?

是否值得启用安全管理器以便 web 应用程序在沙箱中运行?有没有人有设置这个的经验?

我见过有人在 Apache 后面运行两个 Tomcat 实例的例子。看来这可以使用 mod_jk 或 mod_proxy 来完成……两者都有什么优点/缺点?值得麻烦吗?

如果重要的话,操作系统是 Debian lenny。我没有使用 apt-get 因为 lenny 只提供 tomcat 5.5 而我们需要 6.x。

谢谢!

tomcat linux debian security
  • 5 5 个回答
  • 10902 Views

5 个回答

  • Voted
  1. Best Answer
    Gene Gotimer
    2009-07-27T08:45:03+08:002009-07-27T08:45:03+08:00

    您可以安装 Tomcat 6 以在jsvc用户tomcat下运行(而不是root)。这是我上次设置时所做的:

    我在( )下安装了 Tomcat 应用程序,在/usr/java/tomcat( CATALINA_HOME) 下安装了一个实例:/var/lib/tomcatCATALINA_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 $?
    
    • 6
  2. Jim Hunziker
    2009-08-19T05:17:39+08:002009-08-19T05:17:39+08:00

    美国国防部有一个很好的指南,它将 Tomcat 安全指南合并到了一个整体的 Web 服务器安全指南 (SRG) 中。您可以在此处找到更多安全指南:

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

    • 3
  3. Kaitsu
    2010-12-29T23:43:23+08:002010-12-29T23:43:23+08:00

    Open Web Application Security Project ( OWASP ) 提供了一个关于保护 Tomcat 的 wiki 页面,您可能会发现它很有用。在撰写本文时,它似乎更专注于 Tomcat 5.x,但希望随着时间的推移会得到更新。

    • 2
  4. David Pashley
    2009-07-22T13:07:26+08:002009-07-22T13:07:26+08:00

    我会认真考虑从测试中向后移植 tomcat6 包。您可以订阅该软件包以获取有关上传到存档的新版本的通知。(由于我从事 debian 打包工作,所以我略有偏见)。

    我没有尝试在安全管理器下运行 webapps,因为没有应用程序附带策略,坦率地说,自己创建一个非常耗时的操作。如果你是偏执狂,你当然可以这样做。它主要涉及运行tomcat,等待某些事情发生,然后将异常添加到策略并再次重新启动tomcat。冲洗、重复等。

    显然,不要以 root 身份运行 tomcat。tomcat 用户不应该能够写入日志目录或工作目录之外的任何内容。你应该确保你的 webapps 目录只包含你想要运行的 webapps。

    我总是在apache后面运行tomcat。这部分是因为我想更多的人使用 apache,所以会更快地发现错误。这几乎是一厢情愿的想法,您不应该依赖这是一项安全改进。Apache 给你带来的是可配置性。有很多模块是 tomcat 没有的,或者不能高效地完成。mod_cache、mod_ssl、mod_security 都浮现在脑海中。您可以选择 mod_jk、mod_proxy(以及 mod_proxy_http 或 mod_proxy_ajp)。mod_jk(和 mod_proxy_ajp)使用二进制 AJP 协议而不是效率较低的 http 协议。我建议使用 mod_jk。

    • 1
  5. Ali Mezgani
    2009-08-03T10:19:41+08:002009-08-03T10:19:41+08:00

    不要忘记在tomcat-users.xml中修改admin角色的默认密码,这很重要,否则恶意的人可以在没有限制权限的情况下将应用程序部署到tomcat服务器的后门,并尝试做很多坏事。

    • 0

相关问题

  • 在 SOHO 环境中实施的最佳 VPN 技术是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve