设为首页 收藏本站
查看: 1103|回复: 0

[经验分享] Tomcat安全管理

[复制链接]

尚未签到

发表于 2018-12-3 08:37:43 | 显示全部楼层 |阅读模式
  Tomcat是 Apache软件基金会下的一个免费、开源的WEB应用服务器,它可以运行在 Linux 和 Windows 等多个平台上,由于其性能稳定、扩展性好、免费等特点深受广大用户喜爱。目前,很多互联网应用和企业应用都部署在 Tomcat 服务器上,比如我们公司,哈。
  之前我们 tomcat 都采用的是默认的配置,因此在安全方面还是有所隐患的。上周对测试环境的所有服务器的tomcat都做了安全优化,其间也粗略做了一些性能优化,这里就简单记录分享下!
  一、版本安全
  升级当前的tomcat版本为最新稳定版本。故名思议,最新稳定版本就要兼顾最新和稳定这两个概念。一个稳定的版本,是需要时间沉淀的,而最新又是相对于稳定版而言的最新。因此我们一般会选择当前大版本中,最新版本往前推几个版本或者往前推几个月出的版本。
  目前,企业常用的tomcat大版本为6.0和7.0版本,8.0版本虽然已经出了很久了,但是仍然不建议使用。
  在升级版本中,需要注意的事情有两点:
  1、尽量避免跨大版本的升级
  2、将当前老版本 tomcat 的server.xml、catalina.sh、web.xml和tomcat-users.xml文件进行备份,然后部署完新版本的 tomcat 之后,将这些配置文件覆盖过去即可,然后停掉旧版本,启动新版本即可完成升级操作。
  二、隐藏版本信息
  为了避免***针对某些版本进行***,因此我们需要隐藏或者伪装 Tomcat 的版本信息。
  默认 Tomcat 的版本信息如下:

  针对该信息的显示是由一个jar包控制的,该jar包存放在 Tomcat 安装目录下的lib目录下,名称为 catalina.jar。
  我们可以通过 jar xf 命令解压这个 jar 包会得到两个目录 META-INF 和 org ,通过修改 org/apache/catalina/util/ServerInfo.properties 文件中的 serverinfo 字段来实现来更改我们tomcat的版本信息。
  文件信息如下:
12345678910[root@localhost ~]#  cat org/apache/catalina/util/ServerInfo.properties |grep -v '^$|#'server.info=Apache Tomcat/7.0.53server.number=7.0.53.0server.built=Mar 25 2014 06:20:16当然,还有另外一种方法来实现隐藏或伪装Tomcat的版本信息,不过本质和上面一样,操作如下:[root@localhost ~]# cd /usr/local/apache-tomcat-7.0.53/lib[root@localhost lib]# mkdir -p org/apache/catalina/util[root@localhost lib]# cd org/apache/catalina/util[root@localhost util]# vim ServerInfo.propertiesserver.info=nolinux        # 如果想修改成其它版本号,把这个地方的值改成其它值就行了  修改完毕之后,重启 Tomcat即可看到效果!
  效果如下:

  三、优化 web.xml
  servlet与其它适用于整个Web应用程序设置的配置文件,必须符合servlet规范的标准格式。通过它可以配置你web应用的相关选项,tomcat在启动的时候会读取这个文件,完成你开发的系统的一些初始化操作。
  它可以做如下事情:
  1、提供基于 servlet 的相关配置
  2、增加监听器,监控session或在tomcat启动时,加载一些你希望加载的资源。比如创建数据库连接池等等
  3、设置session过期时间,tomcat默认是30分钟
  4、更改应用的默认网页,常用为index.html/index.jsp等
  5、增加过滤器,做一些你希望的过滤操作,比如敏感词汇的过滤
  6、增加一些 jstl(标准标签库)的定义,方便在jsp中直接includ进来,直接使用这些标签
  7、struts,spring或hibernate的一些配置等等
  下面摘录下O'REILLY 的《Tomcat 权威指南》中的一段话:
  web.xml 的文件格式定义在 Servlet 规范中,因此所有符合 Servlet 规范的 Java Servlet Container 都会用到它。当 Tomcat 部署应用程序时(在激活过程中,或加载应用程序后),它都会读取通用的conf/web.xml,然后再读取web应用程序中的WEB-INF/web.xml。其实根据他们的位置,我们就可以知道,conf/web.xml文件中的设定会应用于所有的web应用程序,而某些web应用程序的WEB-INF/web.xml中的设定只应用于该应用程序本身。
  如果没有WEB-INF/web.xml文件,tomcat会输出找不到的消息,但仍然会部署并使用web应用程序,servlet规范的作者想要实现一种能迅速并简易设定新范围的方法,以用作测试,因此,这个web.xml并不是必要的,不过通常最好还是让每一个上线的web应用程序都有一个自己的WEB-INF/web.xml,即使它只用做识别,但我想这是一个好的习惯。
  由于Servlet规范主要是对于web程序员,而非系统管理员使用的。因此,对于运维来讲,我们可能更关心的是站点的默认网页、自定义错误页面、禁止列目录等功能。
  由于,正常生产环境中,肯定不会直接由tomcat对公网提供服务,前端肯定放的有apache或者nginx。因此,针对站点的默认主页和自定义错误页面,我们均在前端的apache或者nginx中做。另外,公司也可能交由程序猿在项目内的WEB-INF/web.xml中去做定义。
  在tomcat新版本中,自动默认已经禁止列目录功能。
  下面,我列出几种常见功能,在web.xml中的表现形式:
  站点默认主页:

  自定义错误页面:

  定义会话超时时间:

  禁止列目录:

  四、优化 tomcat-user.xml
  该文件含有用户名、角色以及密码的清单文件。负责提供webapps下manager项目的登录认证管理。
  在生产环境中,我们需要将该文件全部注释。
  注释效果如下:

  五、优化 server.xml
  Tomcat的主配置文件,该文件中包含很多主要元素,比如Service、Connector、Host等,这些元素都会创建软件"对象"、排序及进程管道中设置的这些元素嵌套方,使我们可以执行过滤、分组等工作。
  如果要对改文件做优化,我们需要先了解该文件的结构!
  server.xml的结构图:

  该文件描述了如何启动Tomcat Server
12345678910111213141516              5、更改关闭 Tomcat 实例的指令
  server.xml中定义了可以直接关闭 Tomcat 实例的管理端口。我们通过 telnet 连接上该端口之后,输入 SHUTDOWN (此为默认关闭指令)即可关闭 Tomcat 实例(注意,此时虽然实例关闭了,但是进程还是存在的)。由于默认关闭 Tomcat 的端口和指令都很简单。默认端口为8005,指令为SHUTDOWN 。因此我们需要将关闭指令修改复杂一点。
  当然,在新版的 Tomcat 中该端口仅监听在127.0.0.1上,因此大家也不必担心。除非***登陆到tomcat本机去执行关闭操作。
  修改实例:
  
  6、更改 Tomcat 的服务监听端口
  一般公司的 Tomcat 都是放在内网的,因此我们针对 Tomcat 服务的监听地址都是内网地址。
  修改实例:
1  7、关闭war自动部署
  默认 Tomcat 是开启了对war包的热部署的。为了防止被植入***等恶意程序,因此我们要关闭自动部署。
  修改实例:
12        六、禁用 Tomcat 管理页面
  我们线上是不使用 Tomcat 默认提供的管理页面的,因此都会在初始化的时候就把这些页面删掉。这些页面是存放在 Tomcat 安装目录下的webapps目录下的。
  我们只需要删除该目录下的所有文件即可。
  当然,还有涉及管理页面的2个配置文件 host-manager.xml 和 manager.xml 也需要一并删掉。这两个文件存放在 Tomcat 安装目录下的conf/Catalina/localhost目录下。
  七、用普通用户启动 Tomcat
  为了进一步安全,我们不建议使用 root 来启动 Tomcat。这边建议使用专用用户 tomcat 或者 nobody 用户来启动 Tomcat。
  在启动之前,需要对我们的tomcat 安装目录下所有文件的属主和属组都设置为指定用户。
  八、分离 Tomcat 和项目的用户
  为了防止 Tomcat 被植入 web shell 程序后,可以修改项目文件。因此我们要将 Tomcat 和项目的属主做分离,这样子,即便被搞,他也无法创建和编辑项目文件。
  本文出自 “Not Only Linux” 博客,请务必保留此出处http://nolinux.blog.运维网.com/4824967/1608940


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-642602-1-1.html 上篇帖子: linux 安装java , tomcat-FIREFOX 下篇帖子: tomcat结构分析
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表