(注:皆为参考操作配置)

这次是tomcat的Linux加固,分为身份鉴别、访问控制、安全审计、资源控制和入侵防范5个方面
大部分加固基于xml配置文件进行修改,也应根据实际需求制定方案。
寻找配置文件目录,Linux可以用find /-name *tomcat* 即可。

0x00    身份鉴别
1. 删除多余账号:
修改tomcat配置文件**/conf/tomcat-users.xml配置文件,删除与工作无关的帐号。
例如tomcat1与运行、维护等工作无关,删除帐号,注释如下行即可:
<userusername=”tomcat1” password=”tomcat” roles=”admin”>.

2. 口令复杂度:
口令要求:长度至少8位,并包括数字、小写字母、大写字母和特殊符号4类中至少3类。
修改tomcat配置文件***/conf/tomcat-users.xml配置文件
<userusername=”usr1” password=”12345qwe” roles=”admin”>
要求usr1密码必须满足复杂度要求。

3. 不同用户不同账号:
应为两个或两个以上即为合理
修改tomcat配置文件***/conf/tomcat-users.xml配置文件,修改或添加帐号:
<userusername=”tomcat” password=” Tomcat!234” roles=”admin”>

4. 非root启动服务:
ps -ef | grep tomcat|grep -v "grep"
tomcat进程的启动用户应不为root
使用普通用户启动tomcat服务。

0x01    访问控制(留作自查)
最小特权:
编辑tomcat配置文件/conf/tomcat-user.xml配置文件,在配置文件<tomcat-users>节点下,修改用户角色权限,授权tomcat具有远程管理权限:

0x02   安全审计
编辑tomcat配置文件server.xml配置文件,在<HOST>标签中增加记录日志功能,将以下内容的注释标记<! -- -- >取消:
<valveclassname=”org.apache.catalina.valves.AccessLogValve”
Directory=”logs”prefix=”localhost_access_log.” Suffix=”.txt”
Pattern=”common”resloveHosts=”false”/>

classname: This MUSTbe set to org.apache.catalina.valves.AccessLogValve to use thedefault access log valve

翻译:这必须设置为org.apache.catalina.valves.AccessLogValve以使用默认访问日志阀
Directory:日志文件放置的目录,在tomcat下面有个logs文件夹,那里面是专门放置日志文件的,也可以修改为其他路径;
Prefix:这个是日志文件的名称前缀,日志名称为localhost_access_log.2008-10-22.txt,前面的前缀就是这个localhost_access_log。
Suffix: 文件后缀名。
Pattern:common方式时,将记录访问源IP、本地服务器IP、记录日志服务器IP、访问方式、发送字节数、本地接收端口、访问URL地址等相关信息在日志文件中。
resolveHosts:值为true时,tomcat会将这个服务器IP地址通过DNS转换为主机名,如果是false,就直接写服务器IP地址。

0x03   入侵防范
1. HTTP加密协议
cat /tomcat/pat/to/path/conf/server.xml|sed '//d'|sed '/^$/d'|sed'//d'|sed '/^\s*$/d'|grep "keystoreFile"

(1)使用JDK自带的keytool工具生成一个证书:
$JAVA_HOME/bin/keytool -genkey –alias tomcat –keyalg RSA -keystore/path/to/my/keystore
其中目录:/path/to/my需要用户自行创建。

(2)修改tomcat安装目录下/conf/server.xml配置文件,更改为使用HTTPS方式,增加如下行:
<Connectorclassname="org.apache.catalina.http.HttpConnector"
port="8443" protocol="HTTP/1.1" minProcessors="5"
SSLEnabled="true"
maxprocessors="100"
enableLookups="true" acceptCount="10" debug="0"
scheme="https"
Factory_classname="org.apache.catalina.SSLServerSocketFactory"
secure="true"
clientAuth="false"
keystoreFile="/path/to/my/keystore"
keystorePass="123qwe"
sslProtocol="TLS"/>
其中keystorePass的值为生成keystore时输入的密码。

(3)重新启动tomcat服务

2. 禁用非法HTTP请求方法

编辑web.xml文件
查看org.apache.catalina.servlets.DefaultServlet是否存在如下配置:
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
将false修改为true。readonly参数默认是true,即不允许delete和put操作。

0x04   资源控制
1. 超时登出
单位是毫秒
/conf/server.xml配置文件,将connectionTimeout修改为30秒:
<Connectorport="8080" maxHttpHeaderSize="8192" maxThreads="150"minSpareThreads="25"maxSpareThreads="75"、enableLookups="false"redirectPort="8443" acceptCount="100"connectionTimeout="30000" disableUploadTimeout="true"/>

2. 错误页面重定向

(1) 编辑tomcat配置文件/conf/web.xml文件:
在最后</web-app>一行之前加入以下内容:
<error-page>
<error-code>404</error-code>
<location>/noFile.htm</location>
</error-page>
<error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/error.jsp</location>
</error-page>
第一个<error-page></error-page>之间的配置实现了将404未找到jsp网页的错误导向noFile.htm页面,也可以用类似方法添加其多的错误代码导向页面,如403,500等。

第二个<error-page></error-page>之间的配置实现了当jsp网页出现java.lang.NullPointerException导常时,转向error.jsp错误页面,还需要在第个jsp网页中加入以下内容:
<%@ pageerrorPage="/error.jsp" %>
典型的error.jsp错误页面的程序写法如下:
<%@ pagecontentType="text/html;charset=GB2312"%>
<%@ pageisErrorPage="true"%>
<html>
<head><title>错误页面</title></head>
<body>出错了:</p>错误信息:<%= exception.getMessage() %><br>
Stack Trace is :<pre><font color="red"><%
java.io.CharArrayWritercw = new java.io.CharArrayWriter();
java.io.PrintWriterpw = new java.io.PrintWriter(cw,true);
exception.printStackTrace(pw);
out.println(cw.toString());
%></font></pre>
</body>
</html>
当出现NullPointerException异常时tomcat会把网页导入到error.jsp,且会打印出出错信息。

重新启动tomcat服务

3. 修改默认端口
修改tomcat配置文件server.xml配置文件,更改默认管理端口到非8080:
<Connector
port="8080" maxHttpHeaderSize="8192" maxThreads="150"
minSpareThreads="25"maxSpareThreads="75"、
enableLookups="false"redirectPort="8443" acceptCount="100"
connectionTimeout="300"disableUploadTimeout="true" />

重新启动tomcat服务

4. 禁止目录列出
编辑tomcat配置文件web.xml配置文件:
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
把true改成false。

重新启动tomcat服务

5. 防止恶意关闭服务
编辑tomcat配置文件conf/server.xml配置文件,
shutdown的值为复杂的字符串:
<Serverport="8005" shutdown="复杂的字符串">

6. 连接数设置
编辑tomcat配置文件server.xml文件:
maxThreads="150" 表示最多同时处理150个连接。
minSpareThreads="25" 表示即使没有人使用也开这么多空线程等待。
maxSpareThreads="75" 表示如果最多可以空75个线程。
acceptCount="100" 当同时连接的人数达到maxThreads时,还可以接收排队的连接,超过这个连接的则直接返回拒绝连接。

7. 修改banner
修改/lib/catalina.jar中Serverinfo.properties问津中的以下参数(修改以掩饰真实版本信息):
server.info=X
server.build=BuildDate
server.number=X

Linux安全加固之中间件Tomcat的更多相关文章

  1. RedHat Linux 5.5安装JDK+Tomcat并部署Java项目

    与大家分享下RedHat Linux 5.5安装JDK+Tomcat并部署Java项目的步骤,希望对大家有用. 1.下载并安装jdk 虚拟机中安装RedHat Linux 5.5 64位企业版, 这里 ...

  2. linux下实现自动部署tomcat的脚本

    linux下实现自动部署tomcat的脚本 由于经常部署war到tomccat上,经常有一些重复的工作要做:停服务.备份war包.上传新的war包.启动服务.索性就写了一个自动部署的脚本. 脚本如下a ...

  3. linux安全加固浅谈

    难易程度:★★★阅读点:linux;python;web安全;文章作者:xiaoye文章来源:i春秋关键字:网络渗透技术 前言linux被越来越多的企业使用,因此掌握一些基本的linux安全加固是有必 ...

  4. Linux下部署多个Tomcat(完整)

    Linux下部署多个Tomcat 1.环境:1.1.Centos 5.01.2.apache-tomcat-6.0.18 2.需要解决一下几个问题2.1.不同的tomcat启动和关闭监听不同的端口2. ...

  5. Linux上部署多个tomcat端口设置

    在Linux上部署多个tomcat主要是防止端口冲突的问题, tomcat服务器需配置三个端口才能启动,安装时默认启用了这三个端口,当要运行多个tomcat服务时需要修改这三个端口,不能相同.端口一: ...

  6. Linux下配置多个tomcat多个域名

    Linux下配置多个tomcat多个域名复制tomcat:mkdir /home/server/testcp -rf /home/server/shichuan/* /home/server/test ...

  7. 在linux下安装并操作tomcat

    1.安装tomcat1).下载tomcat从官网http://tomcat.apache.org/下载tomcat,保存在/home目录下.root@ubuntu:/home/ubuntu/Downl ...

  8. Linux 下启动两个tomcat

    Linux 下启动两个tomcat 闲来无事学习nginx,想要配置个load balance.可是先决条件是:得有两个web容器.两个电脑是不用想了.只能想办法在一个机器上启动两个tomcat.原以 ...

  9. Linux系统下,启动Tomcat有时报Address already in use

    一.Linux系统下,启动Tomcat有时报Address already in use<null>... 1.那是因为你的tomcat已经启动了tomcat自带的关闭脚本,有时候关闭看上 ...

随机推荐

  1. 一、CentOS 7安装部署GitLab服务器

    一.CentOS 7安装部署GitLab服务器 1.安装依赖软件 yum -y install policycoreutils policycoreutils-python openssh-serve ...

  2. JSON parse error: syntax error, expect {, actual error, pos 0, fastjson-version 1.2.58; nested exception is com.alibaba.fastjson.JSONExcetion: syntax error, except {, actual error, pos ...

    这个报错信息告诉你,你提交的参数需要是json类型.所以,POST请求携带的数据需要序列化一下json.dumps(data).

  3. (转)I2C 上拉大小

    中断,GPIO,I2C等一般都是OC或者OD门,芯片内部无上拉电阻时,则外部必须加上拉电阻才能输出高电平.一般I/O端的驱动能力在2-4mA量级,OC或者OD门的导通电压为0.4V左右,手机中加在上拉 ...

  4. runnerw.exe: CreateProcess failed with error 216 (no message available)

    看描述,创建进程失败,应该是main这个入口文件的问题. 检查包名.发现问题,IDE自动将包名导成了当前的目录名(模块) 上图两者不一致导致 解决: 修改包名为main 注:一个model下只能有一个 ...

  5. Java WEB框架——SSM迈向M之登录

    1.pom.xml 关于pom.xml,<version>等标签先暂时不谈,<dependency> 的作用主要是添加相应的支持包,比如spring,servlet,jdbc等 ...

  6. Oracle 查询对应表所有字段名称,可排除不想要的字段

    由于Oracle varchar类型长度限制为4000 ,以下方法仅支持查询字段拼接后长度小于等于4000 第一种方法 select wm_concat(column_name) from user_ ...

  7. 2019CCPC秦皇岛(重现赛)-D

    链接: http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1004&cid=872 题意: 给定一个正整数 n,要求判断 1 ...

  8. docker使用 Flannel(etcd+flannel)网络

    一.Flannel网络简介 Flannel是一种基于overlay网络的跨主机容器网络解决方案,也就是将TCP数据包封装在另一种网络包里面进行路由转发和通信,Flannel是CoreOS开发,专门用于 ...

  9. 【Python之路】异步IO

    线程:CPU基本执行单元,可以与同属一个进程的其他线程共享资源,线程是属于进程的. 进程:资源单元,进程一般由程序.数据集.进程控制块三部分组成.一个进程默认有一个主线程, GIL:用于在进程中对所有 ...

  10. java多线程批量下载文件

    多线程下载文件 平时开发中有时会用到文件下载,为了提高文件的下载速率,采用多线程下载能够达到事半功倍的效果: package test; /** * 文件下载类 * @author luweichen ...