本文首发于我的个人网站: https://hewanyue.com/
本文作者: Hechao
本文链接: https://hewanyue.com/blog/b365780e.html
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。本文将详细讲解tomcat在linux环境(以CentOS为例)中的安装与配置。
安装jdk
JDK是java Development Kit的缩写,即java语言的软件开发包,是javac、javap、jdb等开发、调试、编译工具。
OpenJDK是Sun公司采用GPL v2协议发布的JDK开源版本,可以用于商业用途,于2009年正式发布。它是基于JDK7的beta版开发,但为了也将java SE 6开源,从OpenJDK7的b20构建反向分之开发,从中剥离了不符合java SE 6规范的代码,发布了OpenJDK 6。所以OpenJDK6和JDK6没有关系。
在CentOS中,可以选择yum安装openjdk
yum install java-1.8.0-openjdk
通过java -version
可以看到版本信息为
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8,0_212-b04)
OpenJDK 64-Bit Server VM (build 25.212-b04,mixed mode)
也可以去Oracle官网下载JDK 8的rpm包安装(需要注册)
yum install jdk-8u191-linux-x64,rpm
而通过java -version
看到版本信息为
[root@localhost ~]# java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)
部署tomcat
确定JDK版本之后,我们就可以准备开始部署tomcat了。
首先要去官网下载源码包,国内用的是清华大学的镜像下载地址,下载速度还是可以接受的。
生产中我们一般不会选用最新版的tomcat9,而是选用tomcat8更为稳妥。tomcat8的下载链接是http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.47/bin/apache-tomcat-8.5.47.tar.gz
wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.47/bin/apache-tomcat-8.5.47.tar.gz
解压到想要安装的任意指定目录,例如/apps/tomcat/
目录
tar xvf apache-tomcat-8.5.47.tar.gz -C /apps/
更改目录名称(也可以用软连接方式)。
mv /apps/apache-tomcat-8.5.47 /apps/tomcat
配置环境变量
jdk需要配置环境变量才可以找到,否则会无法访问jsp文件。
需要在环境变量配置文件中加入
export JAVA_HOME=/usr/java/default
export PATH=$JAVA_HOME/bin:$PATH
于是,运行下面命令即可
cat > /etc/profile.d/jdk.sh <<"END"
export JAVA_HOME=/usr/java/default
export PATH=$JAVA_HOME/bin:$PATH
END
运行命令使环境变量生效
. /etc/profile.d/jdk.sh
修改进程属主
一般来说,tomcat服务如果以root身份启动,风险还是很高的,因为tomcat本身bug还是有不少的,如果被别有用心之人加以利用,入侵进来,就可以获得root权限,这造成的后果绝对是灾难级的,这甚至会威胁到其他服务器的安全。为了规避这一风险,我们一般都会将tomcat服务以一个系统用户的身>份启动,例如java用户。
创建java用户useradd -r java
更改服务目录的属主属组chown -R tomcat/*
启动服务时,我们使用命令su - java -c '/apps/tomcat/bin/startup.sh'
来启动,就可以以java用户的身份来启动进程了。
配置文件
tomcat中配置文件目录在tomcat/conf/server.xml,其中需要注意的是:
<Server port="8005" shutdown="SHUTDOWN">
这代表管理端监听在8005端口,向管理端发送SHUTDOWN
指令就会是tomcat直接终止,而且这是不需要密码权限控制的。如果在生产环境中,如果有任何人有意或者无意向tomcat服务器的8005端口发送了SHUTDOWN指令,整个服务都会被终止掉,,而且还不需要密码验证,这对我们的影响无疑是巨大的,所以我们通常都会将此处的管理监听端口改掉,或将shutdown指令设为别的复杂口令,让别人无法轻易或不小心将我们的服务器shutdown~
可采取MD5值的方式,选任一文件做MD5运算后得到的随机数值即为口令。
sed -i "s@SHUTDOWN@`md5sum /root/.ssh/authorized_keys |cut -d' ' -f1`@" tomcat/conf/server.xml
此时,就可以通过安装目录下的tomcat/bin/startup.sh
来启动tomcat服务了。
su - java -c '/apps/tomcat/bin/startup.sh'
然后查看端口
ss -tanl
即可看到8080端口已经处于监听状态了
[root@localhost ~]# ss -tanl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 100 :::8009 :::*
LISTEN 0 100 :::8080 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*
LISTEN 0 1 ::ffff:127.0.0.1:8005 :::*
[root@localhost ~]#
访问tomcat服务器的ip的8080端口,可看到如下图所示界面,即表示tomcat安装成功。
不过,想使用tomcat自带的Manager App及Host Manager工具,还需要做一些额外的配置,此时如果直接访问会显示403权限拒绝,如下图所示。
修改应用访问控制
错误提示说明已经说得很明白了,首先确保已经修改了应用的反问控制权限,,如果还没有,you’ll need to edit the Manager’s context.xml
file。
那这个context.xml在哪里呢?它是指应用的上下文设置文件,路径就是tomcat目录下的webapps/manager/META-INF/context.xml
文件,另一个应用Host Manager的路径就是tomcat目录下的webapps/host-manager/META-INF/context.xml
所以我们要修改这两个配置文件中的访问控制,将我们的访问IP加到里面,这样我们的访问IP才有权限去访问这两个管理应用。
<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|172.18.*|192.168.32.*" />
在allow=
标签后面,加上我们的ip,支持通配符写法和PCRE格式的正则表达式写法,用|
隔开。两个应用的配置文件都要修改。
创建权限角色
光将我们的来访IP加入许可白名单还是不够的,我们还需要一个有权限的账户才可以访问这些管理工具
路径是tomcat目录下的conf/tomcat-users.xml
文件。
<tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="admin" password="123456" roles="manager-gui,admin-gui"/>
在下面加入后三行,先创建角色"manager-gui"
和"admin-gui"
,分别是Manager App的管理员和Host Manager的管理员。然后设置用户名密码及其所处的角色,也可以设置两个不同的用户来分别充当这两个角色。用户名密码可自行设置。
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="admin" password="123456" roles="manager-gui,admin-gui"/>
有了管理员权限的账户,在被允许的客户端上就可以访问Manager App
和Host Manager
这两个工具了。点击图标访问,出现如下图所示的提示输入用户名密码弹窗,说明配置正确。
附:一键部署tomcat脚本
附上我自己用的tomcat脚本供大家参考(未配置管理工具)
DST="/apps"
[ -a jdk-8u231-linux-x64.rpm ] || { echo ' the absence of jdk' ;exit 1;}
[ -d $DST/*tomcat* ] && { echo "tomcat is aready installed into $DST/tomcat" ;exit 2;}
id java &>/dev/null && { echo 'user java is exist,redis is aready installed' ; exit 3;}
iptables -F
systemctl disable firewalld
sed -i '@SELINUX=enforcing@SELINUX=disabled@' /etc/selinux/config
setenforce 0
mkdir -p /data$DST
#mkdir -p $DST
ln -s /data$DST $DST
yum install jdk-8u231-linux-x64.rpm
tar xf *tomcat-*.tar.* -C $DST/
mv $DST/*tomcat-* $DST/tomcat
sed -i "s@SHUTDOWN@`md5sum /root/.ssh/authorized_keys |cut -d' ' -f1`@" $DST/tomcat/conf/server.xml
cat > /etc/profile.d/jdk.sh <<"END"
export JAVA_HOME=/usr/java/default
export PATH=$JAVA_HOME/bin:$PATH
END
. /etc/profile.d/jdk.sh
useradd -r java
chown -R java.java $DST/tomcat/*
su - java -c '$DST/tomcat/bin/startup.sh'