1、删除默认登录后台
如果不需要通过web来部署应用,删除默认管理后台
1.1、问题确认
1 2 3 4 5 6 |
Tomcat的默认后台地址为:http://域名:端口/manager/html.进入之后弹出登陆对话框,Tomcat默认的用户名admin,密码为空。 Tomcat的一些弱口令: tomcat tomcat admin 空 admin admin admin 123456 |
1.2、优化操作:
(1)删除webapps目录下所有文件
1 2 3 4 5 6 7 8 9 10 11 12 |
[[email protected] local]# cd tomcat7/webapps/ [[email protected] webapps]# ll 总用量 20 drwxr-xr-x 13 root root 4096 5月 23 16:32 docs drwxr-xr-x 6 root root 4096 5月 23 16:32 examples drwxr-xr-x 5 root root 4096 5月 23 16:32 host-manager drwxr-xr-x 5 root root 4096 5月 23 16:32 manager drwxr-xr-x 3 root root 4096 5月 23 16:32 ROOT [[email protected] webapps]# rm -rf * [[email protected] webapps]# ll 总用量 0 [[email protected] webapps]# |
(2)删除或注释登录用户信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
vim conf/tomcat-users.xml <tomcat-users> <!-- NOTE: By default, no user is included in the "manager-gui" role required to operate the "/manager/html" web application. If you wish to use this app, you must define such a user - the username and password are arbitrary. --> <!-- NOTE: The sample user and role entries below are wrapped in a comment and thus are ignored when reading this file. Do not forget to remove <!.. ..> that surrounds them. --> <!-- <role rolename="tomcat"/> <role rolename="role1"/> <user username="tomcat" password="tomcat" roles="tomcat"/> <user username="both" password="tomcat" roles="tomcat,role1"/> <user username="role1" password="tomcat" roles="role1"/> --> </tomcat-users> |
2、隐藏Tomcat版本信息
2.1、问题确认
2.2、优化操作
下载lib/catalina.jar 到本地,使用压缩软件打开,依次路径找到\org\apache\catalina\util\ServerInfo.properties ,找到版本信息,修改伪装
将
1 2 3 |
server.info=Apache Tomcat/7.0.42 server.number=7.0.42.0 server.built=Jul 2 2013 08:57:41 |
改为
随意写
1 2 3 |
server.info=TEXT1.1 server.number=1.1 server.built=Jul 2 2013 08:57:41 |
修改完毕。重启tomcat
2.3、修复验证
1 2 3 4 5 6 7 8 |
[[email protected] ~]# curl -I 192.168.0.1:5050 HTTP/1.1 200 OK Content-Type: text/html;charset=ISO-8859-1 Transfer-Encoding: chunked Date: Wed, 25 May 2016 16:41:22 GMT Server: TEXT1.1 [[email protected] ~]# |
3、关闭自动部署
<Host>元素的autoDeploy属性。默认为true,表示如果有新的WEB应用放入appBase并且Tomcat在运行的情况下,自动载入应用。建议关闭,改为false
1 2 |
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="false"> |
4、自定义错误页面
默认的40X/50X错误页面会暴露版本等敏感信息
5、AJP端口管理
AJP是为 Tomcat 与 HTTP 服务器之间通信而定制的协议,能提供较高的通信速度和效率。如果tomcat前端放的是apache的时候,会使用到AJP这个连接器。前端如果是由nginx做的反向代理的话可以不使用此连接器,因此需要注销掉该连接器。
1 |
<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> --> |
6、服务权限控制
tomcat以普通用户权限启动。
创建普通用户javauser,主目录/home/javauser,可以用来存放web应用,允许登录。(默认情况下,不修改密码,javause用户的密码是锁定的,外部无法登录,仅本机可以su - javauser)
tomcat实例安装目录、应用部署目录的属主和属组都修改为javauser,防止出现权限问题
1 2 3 4 5 6 7 8 9 |
[[email protected] ~]# useradd javauser [[email protected] ~]# chown javauser:javauser /usr/local/tomcat7-5050 -R [[email protected] ~]# su -c /usr/local/tomcat7-5050/bin/startup.sh javauser Using CATALINA_BASE: /usr/local/tomcat7-5050 Using CATALINA_HOME: /usr/local/tomcat7-5050 Using CATALINA_TMPDIR: /usr/local/tomcat7-5050/temp Using JRE_HOME: /usr/java/jdk1.7.0_40/jre Using CLASSPATH: /usr/local/tomcat7-5050/bin/bootstrap.jar:/usr/local/tomcat7-5050/bin/tomcat-juli.jar [[email protected] ~]# |
7、shutdown端口保护
对于一个已经开启的tomcat服务器,可以在cmd下使用telnet XXXX 8005命令进行连接,然后输入“SHUTDOWN” 命令就可以关闭服务器
默认情况下,shutdown端口仅监听127.0.0.1。不是的话,需要使用iptables限制源IP对这个端口的访问
8、启用cookie的HttpOnly属性
在<Contextu>元素设置属性seHttpOnly="true"
此问题的原因在于防范xss攻击,当设置为true时,表示创建的 Cookie 会被以安全的形式向服务器传输,也就是只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证,如果是 HTTP 连接则不会传递该信息,所以不会被窃取到Cookie 的具体内容。
HttpOnly属性:
如果在Cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这样能有效的防止XSS攻击。
1 |
<Context useHttpOnly="true"> |