Tomcat 是 Java Servlet,JSP,Java 表达式语言和 Java webSocket 技术的开源实现, 被广泛使用在 Java 语言开发的大型网站系统中. 我们可以从以下几个方面来保障 Tomcat 的安全.
保持版本更新
建议在部署时采用最新稳定版的 Tomcat, 并在运维过程中追踪官方版本发布的情况, 选择升级到最新稳定版.
删除默认应用
从官网下载了 Tomcat 安装文件后, 在其 webapps 目录下默认有如下的应用: docs,examples,host-manager,manager,ROOT. 删除这些默认应用, 可以减少安全风险.
服务降权
在实践中, Tomcat 服务器一般部署在负载均衡设备或者 Nginx 之后, 服务的监听端口应设置为 1024 以上 (例如常见的 8080). 在这种情况下, 笔者建议为 Tomcat 设置专用的启动用户, 而并不是使用 root 这一超级权限用户, 以限制在发生 Tomcat 入侵后黑客可以获得的权限避免更大的危害. 而这也是最小权限原则的实践. 例如, 通过以下命令建立普通用户 tomcat:
- # groupadd -g 2000 tomcat
- # useradd -g 2000 -u 2000 tomcat
管理端口保护
Tomcat 提供了通过 Socket 连接 8005 端口来执行关闭服务的能力, 这在生产环境中是极为危险的. 通过修改 server.xml 配置文件来禁用该管理端口:
<Server port="8005" shutdown="SHUTDOWN">
修改为
<Server port="-1" shutdown="SHUTDOWN">
AJP 连接端口保护
Tomcat 服务器通过 Connector 连接器组件与客户程序建立连接, Connector 组件负责接收客户的请求以及把 Tomcat 服务器的响应结果发送给客户. 默认情况下, Tomcat 在 server.xml 中配置了两种连接器, 一种使用 AJP, 要和 apache 结合使用, 一种使用 http. 当使用 http 时, 建议禁止 AJP 端口访问. 禁用的方式是在 server.xml 中注释以下行:
<!--<Connector port="8329" protocol="AJP/1.3" redirectPort="8443" />-->
关闭 WAR 包自动部署
默认 Tomcat 开启了对 WAR 包的热部署的. 笔者建议关闭自动部署, 以防止 WAR 被恶意替换后导致的网站挂马. 关闭 WAR 包自动部署的方式在修改 server.xml 中的
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
改成
<Host name="localhost" appBase="webapps" unpackWARs="false" autoDeploy="false">
自定义错误页面
通过自定义错误页面, 可以防止在发生未处理的异常时导致的信息泄露. 自定义错误页面的方式是, 编辑 Web.xml, 在标签上添加以下内容:
- <error-page>
- <error-code>
- 404
- </error-code>
- <location>
- /404.html
- </location>
- </error-page>
- <error-page>
- <error-code>
- 500
- </error-code>
- <location>
- /500.HTML
- </location>
- </error-page>
本文内容来自作者图书作品《Linux 系统安全: 纵深防御, 安全扫描与入侵检测》, 点击购买 https://item.jd.com/12552441.html .
来源: http://www.tuicool.com/articles/ryEnAni