使用普通用户运行

使用普通用户来部署服务是比较安全的做法

[root@tomcat application]# useradd -u  tomcat
[root@tomcat application]# passwd tomcat
Changing password for user tomcat.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
切换到tomcat来执行
[root@tomcat application]# chown -R tomcat:tomcat /application/jdk
[root@tomcat application]# chown -R tomcat:tomcat /application/tomcat/
[root@tomcat application]# su - tomcat
[tomcat@linux-node1 ~]$ cd /application/tomcat/bin/
[tomcat@linux-node1 bin]$ sh startup.sh #启动脚本
Using CATALINA_BASE: /application/tomcat
Using CATALINA_HOME: /application/tomcat
Using CATALINA_TMPDIR: /application/tomcat/temp
Using JRE_HOME: /application/jdk
Using CLASSPATH: /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar
Tomcat started.
[tomcat@linux-node1 tomcat]$ pwd
/application/tomcat
[tomcat@linux-node1 tomcat]$ ls -l
total
drwxr-xr-x tomcat tomcat Apr : bin
drwxr-xr-x tomcat tomcat Apr : conf
drwxr-xr-x tomcat tomcat Apr : lib
-rw-r--r-- tomcat tomcat Sep LICENSE
drwxr-xr-x tomcat tomcat Apr : logs
-rw-r--r-- tomcat tomcat Sep NOTICE
-rw-r--r-- tomcat tomcat Sep RELEASE-NOTES
-rw-r--r-- tomcat tomcat Sep RUNNING.txt
drwxr-xr-x tomcat tomcat Apr : temp
drwxr-xr-x tomcat tomcat Apr : webapps
drwxr-xr-x tomcat tomcat Apr : work

启动的时候会把临时文件和工作文件放在temp和work,在生产用的时候、建议每次启动将这两个目录清空

tomcat使用自带的脚本有时候未必能关掉 、自己写一个脚本、

[tomcat@linux-node1 ~]$ cat  tomcat.sh
#!/bin/sh
JAVA_HOME=/application/jdk
CATALINA_HOME=/application/tomcat usage(){
echo "$0 {start|stop|restart}"
exit
}
[ $# -ne ]&& usage start_tomcat(){
$CATALINA_HOME/bin/startup.sh
}
stop_tomcat(){
TPID=$(ps -aux|grep java|grep tomcat|grep -v 'grep'|awk '{print $2}')
kill - $TPID
sleep ;
TSTAT=$(ps -aux|grep java|grep tomcat|grep -v 'grep'|awk '{print $2}')
if [ -z $TSTAT ];then
echo "tomcat stop"
else
kill - $TSTAT fi cd $CATALINA_HOME
rm temp/* -rf
rm work/* -rf
} case $1 in
start)
start_tomcat
;;
stop)
stop_tomcat
;;
restart)
stop_tomcat
sleep 5
start_tomcat
;;
*)
usage
;;
esac
[tomcat@linux-node1 ~]$ sh tomcat.sh
tomcat.sh {start|stop|restart}
[tomcat@linux-node1 ~]$ sh tomcat.sh start
Using CATALINA_BASE: /application/tomcat
Using CATALINA_HOME: /application/tomcat
Using CATALINA_TMPDIR: /application/tomcat/temp
Using JRE_HOME: /application/jdk
Using CLASSPATH: /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar
Tomcat started.

默认监听的是8080端口

[tomcat@linux-node1 ~]$ netstat -ntpl|grep java
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp6 ::: :::* LISTEN /java
tcp6 ::: :::* LISTEN /java
tcp6 127.0.0.1: :::* LISTEN /java

状态Server Status查看JVM等详情、比较快的反应jvm的使用情况、可以保留,Manger App删除、在这个里面可以调用WAR包部署、所以入侵很容易

[tomcat@linux-node1 webapps]$ pwd
/application/tomcat/webapps
[tomcat@linux-node1 webapps]$ mv host-manager/ /tmp/
[tomcat@linux-node1 webapps]$ mv docs/ /tmp/
[tomcat@linux-node1 webapps]$ mv examples/ /tmp/
[tomcat@linux-node1 webapps]$ ls
 manager ROOT

Manger App也在manager里面、如果开启Server Status、前端Nginx可以做个访问控制、只允许内网访问这个后缀

telnet管理端口

注,在说telnet管理Tomcat之前,我们得先看一下默认的配置文件,这里面定义了默认的管理端口,

[root@tomcat /]# vim /application/tomcat/conf/server.xml
<Server port="" shutdown="SHUTDOWN">
说明,定义了一个管理端口为8005,我们可以用telnet直接登录进本机的8005端口,来执行SHUTDOWN命令,来关闭Tomcat实例。下面我们来具体演示一下
先安装telnet客户端:
[root@tomcat ~]# yum install -y telnet
下面我们一测试并查看, [root@tomcat ~]# telnet localhost
Trying ::...
telnet: connect to address ::: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
SHUTDOWN #输入SHOWDOWN就可以直接关闭Tomcat服务。
Connection closed by foreign host.
[tomcat@linux-node1 conf]$ netstat -ntpl
(No info could be read for "-p": geteuid()= but you should be root.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0.0.0.0: 0.0.0.0:* LISTEN -
tcp 127.0.0.1: 0.0.0.0:* LISTEN -
tcp6 ::: :::* LISTEN -
tcp6 ::: :::* LISTEN -
[tomcat@linux-node1 conf]$ #大家可以看到tomcat被关了

telnet管理端口保护(强制)

有两种办法

1.修改默认的8005管理端口为不易猜测的端口(大于1024)

2. 将默认的SHUTDOWN改掉<Server port="8005" shutdown="dangerous">

AJP连接端口保护

1.修改默认的ajp8009端口为不易冲突的大于1024的端口

2.通过iptables规则限制ajp端口访问的权限仅为线上的机器

版本信息隐藏

1.修改conf/web.xml,重定向403、404以及500等错误到指定的错误页面;

2.也可以通过修改应用程序目录下的WEB-INF/web.xml下的配置进行错误页面的重定向

主要是在配置中对一些常见错误进行重定向,避免当出现错误时tomcat默认显示的错误页面暴露服务器和版本信息;

必须确保程序根目录下的错误页面已经存在。

<error-page>
<error-code></error-code>
<location>/forbidden.jsp</location>
</error-page>
<error-page>
<error-code></error-code>
<location>/notfound.jsp</location>
</error-page>
<error-page>
<error-code></error-code>
<location>/systembusy.jsp</location>
</error-page>

文件列表访问控制

conf/web.xml文件中default部分listings的配置必须为false;

false为不列出目录文件,true为允许列出,默认为false;

<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>

Server header重写

在HTTP Connector 配置中加入server的配置

server="zsq"

[tomcat@linux-node1 tomcat]$ curl --head http://192.168.230.130:8080/
HTTP/1.1 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-
Transfer-Encoding: chunked
Date: Sat, Apr :: GMT

[tomcat@linux-node1 tomcat]$ cd /application/tomcat/conf/
[tomcat@linux-node1 conf]$ vim server.xml

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" server="zsq"/>  #修改这一行

[tomcat@linux-node1 ~]$ sh tomcat.sh restart
tomcat stop
Using CATALINA_BASE: /application/tomcat
Using CATALINA_HOME: /application/tomcat
Using CATALINA_TMPDIR: /application/tomcat/temp
Using JRE_HOME: /application/jdk
Using CLASSPATH: /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar
Tomcat started.

[tomcat@linux-node1 ~]$ curl --head http://192.168.230.130:8080/
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Sat, 15 Apr 2017 13:25:23 GMT
Server: zsq

访问控制

通过配置,限定访问的ip来源、也可以使用Nginx来代替

通过配置信任ip的白名单,拒绝非白名单ip的访问,此配置主要是针对高保密级别的系统,一般产品线不需要

<Context path="" docBase="/home/work/tomcat" debug="" reloadable="false" crossContext="true">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="61.128.18.38,61.13.65.*" deny="*.*.*.*"/>
</Context>

屏蔽DNS查询

当web应用程序要记录客户端信息的时候、对客户端的IP地址进行查询、这样会产生不必要的消耗

enableLookups="false"

  <Connector port="" protocol="HTTP/1.1"
connectionTimeout="" enableLookups="false"
redirectPort="" server="zsq"/>

最新文章

  1. 在Visual Studio 2012中使用VMSDK开发领域特定语言(二)
  2. 嵌入式Linux驱动学习之路(十七)驱动程序分层分离概念-平台设备驱动
  3. button
  4. Zabbix3.0+CentOS7.0+MariaDB5.5监视服务器安装
  5. `cocos2dx非完整`开篇
  6. POJ2492 A Bug&#39;s Life
  7. c++ 获取本地ip地址
  8. GDB反向调试 + 指令记录+函数历史记录
  9. DHTMLX系列组件的学习笔记
  10. Ubuntu16.04 IDE: 用Vim逐步打造一个IDE
  11. 使用 Node.js 搭建 Web 服务器
  12. Js中处理日期加减天数
  13. android Notification总结
  14. BZOJ.3992.[SDOI2015]序列统计(DP NTT 原根)
  15. Linux 下wifi 驱动开发(四)—— USB接口WiFi驱动浅析
  16. 根据获取的窗口句柄遍历窗口Edit控件
  17. magento如何改变首页的布局
  18. windows 设置CapsLock键开启大写后使用shift键取消大写
  19. 现代 JavaScript 框架存在的主要原因
  20. PHP 错误日志/安全配置

热门文章

  1. Mysql 截取字符串总结
  2. CDN加速小水管动态应用技巧
  3. 【故障公告】部署在 k8s 上的博客后台昨天与今天在访问高峰多次出现 502
  4. 接口测试彻底弄懂Session、Cookie、Token的区别及联系hold住面试官--hold住了开3万,hold不住开3K!
  5. python爬虫之requests的基础使用
  6. Oracle 12C安装教程
  7. 三通道低功耗ASK低频唤醒接收器PAN3501完全替代AS3933/GC3933
  8. Python+Tornado开发微信公众号
  9. TP的where方法的使用
  10. 曹工说Redis源码(5)-- redis server 启动过程解析,以及EventLoop每次处理事件前的前置工作解析(下)