JAVA企业级应用TOMCAT实战(二)
使用普通用户运行
使用普通用户来部署服务是比较安全的做法
[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"/>
JAVA企业级应用TOMCAT实战(二)的更多相关文章
- linux中级-JAVA企业级应用TOMCAT实战
1. Tomcat简介 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun和其他一些公司及个人共 ...
- JAVA企业级应用TOMCAT实战
1. Tomcat简介 原文链接:https://blog.oldboyedu.com/java-tomcat/ Tomcat是Apache软件基金会(Apache Software Foundati ...
- JAVA企业级应用TOMCAT实战(一)
一. Tomcat简介 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun和其他一些公司及个人共 ...
- JAVA企业级应用TOMCAT实战(三)
JVM优化涉及到两大方面我个人的理解 .如何分配JVM的内存空间 .我应该使用什么垃圾回收器 JVM产生的垃圾需要回收.回收有不同的回收器. JVM的调优需要了解各个垃圾回收机制的原理. 终极目标:降 ...
- Java 18套JAVA企业级大型项目实战分布式架构高并发高可用微服务电商项目实战架构
Java 开发环境:idea https://www.jianshu.com/p/7a824fea1ce7 从无到有构建大型电商微服务架构三个阶段SpringBoot+SpringCloud+Solr ...
- Java 权限框架 Shiro 实战二:与spring集成、filter机制
转自:https://www.cnblogs.com/digdeep/archive/2015/07/04/4620471.html Shiro和Spring的集成,涉及到很多相关的配置,涉及到shi ...
- JAVA企业级应用服务器之TOMCAT实战
JAVA企业级应用服务器之TOMCAT实战 链接:https://pan.baidu.com/s/1c6pZjLeMQqc9t-OXvUM66w 提取码:uwak 复制这段内容后打开百度网盘手机App ...
- [Java聊天室server]实战之二 监听类
前言 学习不论什么一个稍有难度的技术,要对其有充分理性的分析,之后果断做出决定---->也就是人们常说的"多谋善断":本系列尽管涉及的是socket相关的知识,但学习之前,更 ...
- 轻量级Java EE企业应用实战:Struts2+Spring5+Hibernate5/JPA2
轻量级Java EE企业应用实战(第5版)——Struts 2+Spring 5+Hibernate 5/JPA 2整合开发是<轻量级Java EE企业应用实战>的第5版,这一版保持了前几 ...
随机推荐
- Supervisor 使用和进阶4 (Event 的使用)
本文主要介绍 supervisor Event 的功能. supervisor 作为一个进程管理工具,在 3.0 版本之后,新增了 Event 的高级特性, 主要用于做(进程启动.退出.失败等)事件告 ...
- 【tensorflow2.0】张量的结构操作
张量的操作主要包括张量的结构操作和张量的数学运算. 张量结构操作诸如:张量创建,索引切片,维度变换,合并分割. 张量数学运算主要有:标量运算,向量运算,矩阵运算.另外我们会介绍张量运算的广播机制. 本 ...
- 前端笔记(使用html\css\jquery造n*n的格子,根据预算购买到最多的商品)
需求:创建一个n*n的格子,n是输入框的数字,点击重渲染可以重新画一个n*n的格子,鼠标移入格子中,对应的格子背景设变成红色,点击对应的格子,背景色变成蓝色,再点一次还原颜色. 要造格子有好几种方式, ...
- 云计算介绍、TCP/IP协议及配置
云计算介绍.TCP/IP协议及配置 1案例1:配置计算机名及工作组 1.1问题 本例要求为修改计算机名并加入工 ...
- intelij idea 和 eclipse 使用上的区别
一.项目创建区别 使用基于IntelliJ的IDE,都会对project和module的关系比较糊涂.用简单的一句话来概括是: IntelliJ系中的Project相当于Eclipse系中的works ...
- 28.2 api-- System (gc、arraycopy、exit)
/* * System:包含一些有用的类字段和方法.它不能被实例化 * static void arraycopy(Object src, int srcPos, Object dest, int d ...
- C++语言实现顺序栈
C++语言实现顺序栈 在写C语言实现顺序栈的时候,我已经向大家介绍了栈的特点以及介绍了栈的相关操作,并利用C语言实现了相关算法.在这里小编就不在继续给大家介绍了,需要温习的可以去我的博客看看.在这篇博 ...
- Java并发之显式锁和隐式锁的区别
Java并发之显式锁和隐式锁的区别 在面试的过程中有可能会问到:在Java并发编程中,锁有两种实现:使用隐式锁和使用显示锁分别是什么?两者的区别是什么?所谓的显式锁和隐式锁的区别也就是说说Synchr ...
- 009-数组-C语言笔记
009-数组-C语言笔记 学习目标 1.[掌握]数组的声明 2.[掌握]数组元素的赋值和调用 3.[掌握]数组的初始化 4.[掌握]数组的遍历 5.[掌握]数组在内存中的存储 6.[掌握]数组长度计算 ...
- AJ学IOS(03)UI之纯代码实现UI——图片查看器
AJ分享,必须精品 先看效果 主要实现类似看新闻的一个界面,不用拖拽,纯代码手工写. 首先分析app可以很容易知道他这里有两个UILabel一个UIImageView还有两个UIButton 定义UI ...