某电商APP 项目安全框架方案 (草稿)

一、方案简介

某电商APP系统目前部署在阿里云平台系统上,使用了阿里云平台系统的基础设施。

安全防护一般涉及如下方面:物理安全、网络安全、主机安全、应用安全、数据安全。

除了上述安全技术防护外,安全管理亦不容忽视,大的分类一般涉及:安全管理制度、安全管理机构、人员安全管理、系统建设管理、系统运维管理。

可以通过自有力量或委托第三方专业安全评测机构定期对系统进行测评,对测评过程中发现的主要安全问题进行处置。

二、方案详述

2.1安全防护需要考虑的层面及控制点

上述简介中提及的安全技术/安全管理分类一般涉及到如下安全控制点,需要对这些点分别作测评,具体操作可参考相关国标、行业规范、以及最佳实践。

安全层面安全控制点
物理安全物理位置的选择
物理访问控制
防盗窃和防破坏
防雷击
防火
防水和防潮
防静电
温湿度控制
电力供应
电磁防护
网络安全结构安全
访问控制
边界完整性检查
入侵防范
恶意代码防护
安全审计
网络设备防护
主机安全访问控制
入侵防范
恶意代码防范
资源控制
身份鉴别
安全审计
剩余信息保护
应用安全身份鉴别
访问控制
安全审计
剩余信息保护
资源控制
通信完整性
通信保密性
抗抵赖
软件容错
安全管理制度管理制度
制度和发布
评审和修订
安全管理机构岗位设置
人员配备
授权和审批
沟通和合作
审核和检查
人员安全管理人员录用
人员离岗
人员考核
安全意识教育和培训
外部人员访问管理
系统建设管理系统定级
安全方案设计
产品采购和使用
自行软件开发
外包软件开发
工程实施
测试验收
系统交付
系统备案
等级测评
安全服务商选择
系统运维管理环境管理
资产管理
介质管理
设备管理
监控管理和安全管理中心
网络安全管理
系统安全管理
恶意代码防范管理
密码管理
变更管理
备份与恢复管理
安全事件处置
应急预案管理

说明:鉴于信息系统的复杂性和特殊性,上述某些安全控制点及相关要求可能不适用于所有信息系统,应对其做必要的梳理、裁剪或补充(参见:四、互联网应用安全)。

2.2系统安全测试方式及要点

信息系统安全测评的方式主要有访谈、核查、测试及综合风险分析。现对其要点简述如下:

访谈:应注意广度和深度,广度上访谈应覆盖不同类型的人员,包括系统负责人、开发人员、系统管理人员等。深度上访谈应包含通用和高级的问题以及一些有难度和探索性的问题。

核查:包括文档核查及配置核查。

测试:包括案例验证测试、漏洞扫描测试、渗透测试。

风险分析方法:根据安全事件可能性和安全事件后果对系统面临的风险进行分析。

2.3对标阿里云产品及服务选型

上述安全控制点及相关要求对标阿里云产品及服务,建议的选型如下:

阿里云产品/服务功能说明
态势感知
(企业版)
安全事件分析:发生安全事件后,通过日志证据进行调查,评估资产受损范围和影响
操作审计:对主机服务器的操作日志进行审计,对高危操作和严重问题进行细粒度排查
业务流量统计:对web访问日志进行统计和分析,追踪来访者的环境和状态,对业务和服务响应进行筛选
安骑士
(企业版)
入侵防御以及病毒防控功能。
云堡垒机
(企业版)
对所有设备进行集中管理,具有三员管理机制,对管理人员行为进行审核。支持令牌
数据库审计数据库安全审计
高防IP1、包括但不限于以下攻击类型 ICMP Flood、UDP Flood、TCP Flood、SYN Flood、ACK Flood、CC攻击等;
2、DDoS防护服务可随时更换防护的IP,自由配置 高级别防护;
3、DDoS防护阈值弹性调整,随时升级更高级别的防护,整个过程服务无中断;
4、提供实时精准的流量报表及攻击详情,及时准确获得当前服务详情;
Web应用
防火墙
应用攻击防护:强大的内置防护规则可以防护诸如SQL注入,XSS跨站脚本,远程文件包含、木马上传隔离以及其他OWASP的Top威胁攻击,支持HTTP/HTTPS应用接入;
精准防护:根据网站实际防护场景需求,实现HTTP/HTTPS的常见字段的细粒度访问控制,过滤针对网站的恶意流量;支持IP、URL、Referer、User-Agent等HTTP常见字段的自定义防护规则匹配,可支持盗链防护、网站后台保护等防护场景;
CC攻击防护:充分利用阿里云大数据安全优势、建立威胁情报与可信访问分析模型、快速识别恶意流量;多种防护算法结合防御、包括对单一源IP的访问频率控制、重定向跳转验证、人机识别等;针对海量慢速请求攻击、采用高级防护算法、统计响应码、URL请求分布、异常Referer及User-Agent特征识别,可结合精准防护进行综合防护;
业务风控:实时解决垃圾注册、刷库撞库、活动作弊、论坛灌水等严重业务风险,无需网站修改源码/调用API接口等繁琐操作即可实现快速上线防护;
快速更新:在云盾的安全专家发现了新型的漏洞威胁后,能够立刻将对应的安全补丁同步到云盾Web应用防火墙中,保障您的网站业务不被侵害受损;

三、方案可借鉴的最佳实践

3.1安全不能停留在制度上。

3.2预防为主、持续改进。

3.3安全方案的设计通常应遵循以下原则:(1)木桶原则:木桶的最大容积取决于最短的一块木板;(2)整体性原则:综合考虑安全防护、监测和应急恢复;(3)有效性与实用性原则:不能影响系统的正常运行和合法用户的操作;(4)等级性原则:区分安全层次和安全级别,包括对信息保密程度分级、对用户操作权限分级、对信息系统安全程度分级、对系统实现结构的分级等;(5)动态化原则:安全只是相对的和暂时的。

四、互联网应用安全

互联网应用不同于传统应用,突出表现在以下两点:(1)用户群体、使用时间、使用习惯存在不确定性;(2)应用更新迭代频繁。

一个百万用户量级以上的互联网应用,其很多问题已经不能就事论事来研究和解决,需要系统性的方法和战略性的眼光。

基于上述特点,互联网应用必须做顶层规划和详细设计,从安全角度出发,每个层面需考虑和解决三高问题:高可用、高性能、高扩展。

高可用架构一般表现在以下几方面:冗余备份、失效转移、模块解耦、降级限流、异步处理、异地多活、自动化运维。

高性能一般表现在以下两个方面:时间性能(系统执行的时间)和空间性能(系统占用的空间)。提高性能通常从代码优化、工具优化、系统优化三个方面入手。

高扩展:分垂直扩展和水平扩展,互联网应用系统一定要能水平扩展。

上述三高涉及许多技术及细节,不能生搬硬套,需要基于业务需求做架构设计、数据设计、实现细节详细设计。

五、安全工作如何落地

前面提及更多的是理论,如何落地需要智慧,如技术实现维度场景、一题多解场景、跨时间轴的场景、风险和影响的平衡等。不同发展阶段的安全建设应有所区别,举例如下:

5.1中小型(初创期):保障最基本的部分,追求最高性价比,不求大而全。映射到技术实现,具体工作如下:

  • 基本的补丁管理
  • 漏洞管理
  • L3-L7的基本的访问控制
  • 没有弱密码,管好密码。
  • 账号认证鉴权不求各种基于条件的实时风控,但求基本功能到位。
  • 参考开发语言的安全编程规范
  • 参考系统加固最佳实践文档

以上工作部分可以借助于云平台提供的安全能力,或者第三方安全厂商提供的安全能力。

5.2大中型(发展、成熟期):典型特征是业务营收的持续性需要安全来保障,配备专职安全人员或安全团队,具备初步的纵深防御能力。映射到技术实现,具体工作如下:

  • L2-L7中的每一层拥有完整的安全设计。
  • 对所有的服务器、PC终端、移动设备,具有统一集中的状态感知、安全检测及防护能力。
  • 应用层面细粒度控制
  • 全流量入侵检测能力
  • 无死角1天漏洞发现能力
  • 在安全等级较高的区域建立纵深防御和一定的0天发现能力
  • 初具规模的安全专职团队
  • 对应用交付有自主的评估和修补能力
  • 从IT服务层面建立必要的流程、业务持续性以及风控应急措施。
  • 对业务安全形成自己的风控及安全管理方法论
  • 将难以自己实现的部分外包

这个层级的安全需求有些难以具体量化。

根据经验,企业在安全方面的预算,应该等分成三部分(根据实际情况和不同阶段动态调整):1/3投入到外部情报收集,包括众测和SRC的建设;1/3投入到安全感知系统建设,只有先看到,才能实施有效防御;1/3投入到防御系统的建设。第一个1/3可以理解为红军,第二个1/3和第三个1/3可以理解为蓝军。加强蓝军自身的安全能力,并通过红军来验证自身安全能力的强弱和可靠性,基于上述思路,风险就逐渐收敛了。

Set Up and Configure an OpenVPN Server on CentOS 7

Installing OpenVPN

# yum install epel-release

# yum install openvpn

Building CA with EasyRSA

# cd /usr/local/src

# wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.5/EasyRSA-nix-3.0.5.tgz

# tar xzf EasyRSA-nix-3.0.5.tgz -C /usr/local

# cd /usr/local/EasyRSA-3.0.5/

# cp vars.example vars

uncomment and update the following entries to match your information:

# vi vars

set_var EASYRSA_REQ_COUNTRY    “CN”

set_var EASYRSA_REQ_PROVINCE   “Jiangsu”

set_var EASYRSA_REQ_CITY       “Suzhou”

set_var EASYRSA_REQ_ORG        “Betterit”

set_var EASYRSA_REQ_EMAIL      “admin@betterit.info”

set_var EASYRSA_REQ_OU         “IT”

Save and close the file.

Before generating a CA keypair first we need to initialize a new PKI with:

# ./easyrsa init-pki

The next step is to build the CA:

# ./easyrsa build-ca

You’ll be asked to set a password for the CA key and enter a common name for your CA.

Once completed, the script will create two files — CA public certificate ca.crt and CA private key ca.key.

Now that the Certificate Authority (CA) is created, you can use it to sign certificate requests for one or multiple OpenVPN servers and clients.

Note:If you don’t want to be prompted for a password each time you sign your certificates, run the build-ca command using the nopass option: ./easyrsa build-ca nopass.

Creating Diffie-Hellman and HMAC keys

[root@iZbp16cdvzk4ribfwjca03Z EasyRSA-3.0.5]# ./easyrsa gen-dh

Note: using Easy-RSA configuration from: ./vars

Using SSL: openssl OpenSSL 1.0.2k-fips  26 Jan 2017

Generating DH parameters, 2048 bit long safe prime, generator 2

This is going to take a long time

……………………………………………………..+………………………..

……………………….+………………….+…………………………………………………………………………………….++*++*

DH parameters of size 2048 created at /usr/local/EasyRSA-3.0.5/pki/dh.pem

[root@iZbp16cdvzk4ribfwjca03Z EasyRSA-3.0.5]#

Copy the dh.pem file to the /etc/openvpn directory:

# cp pki/dh.pem /etc/openvpn/

generate a HMAC signature using the openvpn binary:

# openvpn –genkey –secret ta.key

Once completed copy the ta.key file to the /etc/openvpn directory:

# cp ta.key /etc/openvpn/

Creating Server Certificate and Private Key

./easyrsa gen-req vpnsvr01 nopass

We are using the nopass argument because we want to start the OpenVPN server without a password input. Also in this example, we are using vpnsvr01 as a server name (entity) identifier. If you choose a different name for your server don’t forget to adjust the instructions below where the server name is used.

The command will create two files, a private key (vpnsvr01.key) and a certificate request file (vpnsvr01.req).

Copy the private key to the /etc/openvpn directory:

# cp pki/private/vpnsvr01.key /etc/openvpn/

run the following command to sign the request:

./easyrsa sign-req server vpnsvr01

The first argument can either be server or client and the second one is the server short (entity) name.

# cp pki/ca.crt /etc/openvpn/

# cp pki/issued/vpnsvr01.crt /etc/openvpn/

Upon completing the steps outlined in this section, you should have the following new files on your OpenVPN server:

/etc/openvpn/ca.crt

/etc/openvpn/dh.pem

/etc/openvpn/ta.key

/etc/openvpn/vpnsvr01.crt

/etc/openvpn/vpnsvr01.key

Configuring the OpenVPN Service

We will use the sample configuration file provided with OpenVPN installation package as a starting point and then add our own custom configuration options to it.

# cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn/vpnsvr01.conf

Open the file and Find the Certificate, Key and DH parameters directives and change the file names:

# vi /etc/openvpn/vpnsvr01.conf

cert vpnsvr01.crt

key vpnsvr01.key

dh dh.pem

To redirect the clients traffic through the VPN find and uncomment the redirect-gateway and dhcp-option options:

push “redirect-gateway def1 bypass-dhcp”

push “dhcp-option DNS 208.67.222.222”

push “dhcp-option DNS 208.67.220.220”

By default OpenDNS resolvers are used. You can change it and use Google or any other DNS resolvers you want.

Find the user and group directives and uncomment these settings by removing the “;” at the beginning of each line:

user nobody

group nogroup

Append the following line at the end of the file. This directive will change the message authentication algorithm (HMAC) from SHA1 to SHA256

auth SHA256

Once you are done, the server configuration file (excluding comments) should look something like this:

port 1194

proto udp

dev tun

ca ca.crt

cert vpnsvr01.crt

key vpnsvr01.key  # This file should be kept secret

dh dh.pem

server 10.8.0.0 255.255.255.0

ifconfig-pool-persist ipp.txt

push “dhcp-option DNS 208.67.222.222”

push “dhcp-option DNS 208.67.220.220”

keepalive 10 120

tls-auth ta.key 0 # This file is secret

cipher AES-256-CBC

user nobody

group nobody

persist-key

persist-tun

status openvpn-status.log

verb 3

explicit-exit-notify 1

auth SHA256

Starting OpenVPN Service

# systemctl start openvpn@vpnsvr01

Verify whether the service has started successfully by typing:

# systemctl status openvpn@vpnsvr01

Enable the service to automatically start on boot with:

# systemctl enable openvpn@vpnsvr01

When starting, the OpenVPN Server creates a tun device tun0. To check if the device is available, type:

# ip a show tun0

Firewall and Server Networking Configuration

In order to forward network packets properly, we need to enable IP forwarding.

Open the /etc/sysctl.conf file and add the following line:

net.ipv4.ip_forward = 1

Apply the new settings by running the following command:

sysctl -p

Now we need to add firewall rules open OpenVPN port and to enable masquerading.

Start by adding the tun0 interface to the trusted zone:

firewall-cmd –permanent –zone=trusted –add-interface=tun0

Open the default openvpn port 1194 by adding the openvpn service to the list of services allowed by firewalld :

firewall-cmd –permanent –add-service openvpn

Set IP masquerading on trusted zone:

firewall-cmd –permanent –zone=trusted –add-masquerade

Before adding the nat rule you need to know the public network interface of your CentOS OpenVPN Server. You can easily find the interface by running the following command:

ip -o -4 route show to default | awk ‘{print $5}’

In our case, the interface is named eth0 as shown on the output below. Your interface may have a different name.

The following command will allow the traffic to leave the VPN, giving your VPN clients access to the Internet. Don’t forget to replace eth0 to match the name of public network interface you found in the previous command.

firewall-cmd –permanent –direct –passthrough ipv4 -t nat -A POSTROUTING -s  10.8.0.0/24 -o eth0 -j MASQUERADE

Finally reload the firewall rules for changes to take effect:

firewall-cmd –reload

Creating the Client Configuration Infrastructure

The whole process of generating the client certificate and configuration file is as follows:

  1. Generate a private key and certificate request on the OpenVPN server.
  2. Send the request to the CA machine to be signed.
  3. Copy the signed SSL certificate to the OpenVPN server and generate a configuration file.
  4. Send the configuration file to the VPN client’s machine.

Start by creating a set of directories to store the clients files:

# cd /etc/openvpn

# mkdir -p openvpn-clients/{configs,base,files}

  • base directory will store the base files and configuration that will be shared across all client files.
  • configs directory will store the generated client configuration.
  • files directory will store client-specific certificate/key pair.

Copy the ca.crt and ta.key files to the openvpn-clients/base directory:

# cp ta.key openvpn-clients/base

# cp ca.crt openvpn-clients/base

Next copy the sample VPN client configuration file into the client-~/openvpn-clients/base directory. We will use this file as a base configuration:

# cp /usr/share/doc/openvpn-*/sample/sample-config-files/client.conf openvpn-clients/base

Now we need to edit the file to match our server settings and configuration.

# vi openvpn-clients/base/client.conf

Find the remote directive and change the default placeholder with the public IP address of your OpenVPN server:

# The hostname/IP and port of the server.

# You can have multiple remote entries

# to load balance between the servers.

remote YOUR_SERVER_IP 1194

Locate and comment the ca, cert, and key directives. The certs and keys will be added within the configuration file:

# SSL/TLS parms.

# See the server config file for more

# description.  It’s best to use

# a separate .crt/.key file pair

# for each client.  A single ca

# file can be used for all clients.

# ca ca.crt

# cert client.crt

# key client.key

Append the following lines at the end of the file to match the server settings:

auth SHA256

key-direction 1

Once you are done, the server configuration file should look something like this:

client

dev tun

proto udp

remote 118.31.38.47 1194

resolv-retry infinite

nobind

persist-key

persist-tun

remote-cert-tls server

tls-auth ta.key 1

cipher AES-256-CBC

verb 3

auth SHA256

key-direction 1

Next, create a simple bash script that will merge the base configuration and files with the client certificate and key, and store the generated configuration in the openvpn-clients/configs directory.

vi openvpn-clients/gen_config.sh

#!/bin/bash

FILES_DIR=/etc/openvpn/openvpn-clients/files

BASE_DIR=/etc/openvpn/openvpn-clients/base

CONFIGS_DIR=/etc/openvpn/openvpn-clients/configs

BASE_CONF=${BASE_DIR}/client.conf

CA_FILE=${BASE_DIR}/ca.crt

TA_FILE=${BASE_DIR}/ta.key

CLIENT_CERT=${FILES_DIR}/${1}.crt

CLIENT_KEY=${FILES_DIR}/${1}.key

# Test for files

for i in “$BASE_CONF” “$CA_FILE” “$TA_FILE” “$CLIENT_CERT” “$CLIENT_KEY”; do

    if [[ ! -f $i ]]; then

        echo ” The file $i does not exist”

        exit 1

    fi

    if [[ ! -r $i ]]; then

        echo ” The file $i is not readable.”

        exit 1

    fi

done

# Generate client config

cat > ${CONFIGS_DIR}/${1}.ovpn <<EOF

$(cat ${BASE_CONF})

<key>

$(cat ${CLIENT_KEY})

</key>

<cert>

$(cat ${CLIENT_CERT})

</cert>

<ca>

$(cat ${CA_FILE})

</ca>

<tls-auth>

$(cat ${TA_FILE})

</tls-auth>

EOF

Save the file and make it executable by running:

chmod u+x openvpn-clients/gen_config.sh

Creating Client Certificate Private Key and Configuration

In this example the name of the first VPN client will be david.

# cd /usr/local/EasyRSA-3.0.5/

# ./easyrsa gen-req david nopass

The command will create two files, a private key (david.key) and a certificate request file (david.req).

Copy the private key david.key to the /etc/openvpn/openvpn-clients/files directory you created in the previous section:

# cp pki/private/david.key /etc/openvpn/openvpn-clients/files/

run the following command to sign the request:

# ./easyrsa sign-req client david

Copy the david.crt file to the /etc/openvpn/openvpn-clients/files directory

# cp pki/issued/david.crt /etc/openvpn/openvpn-clients/files/

The final step is to generate a client configuration using the gen_config.sh script:

# cd /etc/openvpn/openvpn-clients/

# ./gen_config.sh david

The script will create a file named david.ovpn in the configs directory.

At this point the client configuration is created. You can now transfer the configuration file to the device you intend to use as a client.

Revoking Client Certificates

Revoking a certificate means to invalidate a signed certificate so that it can no longer be used for accessing the OpenVPN server.

Run the easyrsa script using the revoke argument, followed by the client name you want to revoke:

# ./easyrsa revoke david

Use the gen-crl option to generate a certificate revocation list (CRL):

# ./easyrsa gen-crl

Copy the file crl.pem to the /etc/openvpn directory:

# cp pki/crl.pem /etc/openvpn/

Open the OpenVPN server configuration file,Paste the following line at the end of the file:

# vi /etc/openvpn/vpnsvr01.conf

crl-verify crl.pem

Restart the OpenVPN service for the revocation directive to take effect:

# systemctl restart openvpn@vpnsvr01

注意事项:

1.openvpn服务器防火墙必须开启,并配置相关规则。不开启防火墙,openvpn客户端连接后无法连通openvpn服务器所在网段及其它网段IP。

2.openvpn客户端要连通openvpn服务器所在网段及其它网段IP,还需在openvpn服务器配置文件中添加类似如下配置项:

push “route 192.168.50.0 255.255.255.0”  //openvpn服务器所在网段IP

push “route 192.168.30.0 255.255.255.0”  //其它网段IP

3.openvpn客户端连接后,要利用openvpn服务器上网,即openvpn客户端连接后的公网IP与openvpn服务器的公网IP相同,需要在openvpn服务器配置文件中开启如下配置项:

push “redirect-gateway def1 bypass-dhcp”

4.通过./easyrsa gen-req david nopass创建生成的配置文件(ovpn)连接服务器时无需输入密码,若连接时需要输入密码,则使用./easyrsa gen-req david并设置密码。

5.默认情况下日志消息写入/var/log/messages,openvpn服务器配置文件中取消如下配置项前的注释可将日志消息写入openvpn.log。

;log-append openvpn.log

6.若openvpn服务器配置文件中去掉配置项crl-verify crl.pem并重启openvpn,则吊销证书的用户仍可连接。

附录:创建用户证书、创建用户VPN配置文件、吊销用户证书操作都可通过脚本简化操作。

脚本内容参考如下:

创建用户证书:

# cat create_client_cert.sh

#!/bin/bash

echo “Please input a client name for the client certificate.”

read -p “Client name: ” -e CLIENT

cd /usr/local/EasyRSA-3.0.5/

./easyrsa gen-req $CLIENT

cp pki/private/$CLIENT.key /etc/openvpn/openvpn-clients/files/

./easyrsa sign-req client $CLIENT

cp pki/issued/$CLIENT.crt /etc/openvpn/openvpn-clients/files/

echo “Client $CLIENT cert created”

exit

创建用户VPN配置文件:

# cat gen_client_ovpn.sh

#!/bin/bash

echo “Please input a client cert name for the client ovpn.”

read -p “Client name: ” -e CLIENT

FILES_DIR=/etc/openvpn/openvpn-clients/files

BASE_DIR=/etc/openvpn/openvpn-clients/base

CONFIGS_DIR=/etc/openvpn/openvpn-clients/configs

BASE_CONF=${BASE_DIR}/client.conf

CA_FILE=${BASE_DIR}/ca.crt

TA_FILE=${BASE_DIR}/ta.key

CLIENT_CERT=${FILES_DIR}/$CLIENT.crt

CLIENT_KEY=${FILES_DIR}/$CLIENT.key

cat > ${CONFIGS_DIR}/$CLIENT.ovpn <<EOF

$(cat ${BASE_CONF})

<key>

$(cat ${CLIENT_KEY})

</key>

<cert>

$(cat ${CLIENT_CERT})

</cert>

<ca>

$(cat ${CA_FILE})

</ca>

<tls-auth>

$(cat ${TA_FILE})

</tls-auth>

EOF

echo “Client $CLIENT ovpn created”

exit

注:VPN配置文件存放路径:/etc/openvpn/openvpn-clients/configs,用户使用生成的ovpn文件及创建用户证书时设置的密钥即可连接VPN服务器。

吊销用户证书:

# cat revoke_client_cert.sh

#!/bin/bash

echo “Please input a client cert name for revoke.”

read -p “Client name: ” -e CLIENT

cd /usr/local/EasyRSA-3.0.5/

./easyrsa revoke $CLIENT

./easyrsa gen-crl

\cp -f pki/crl.pem /etc/openvpn/

systemctl restart openvpn@vpnsvr

echo “Client $CLIENT cert revoked”

exit

注:运行此脚本吊销用户证书后,用户即无法连接VPN服务器。若需要恢复使用,需再次创建用户证书及VPN配置文件。

CentOS7.6安装apache-tomcat-8.5.34

注:参考本文可架设多用户多服务的Java虚拟主机,即配置tomcat以指定身份运行,且一台服务器上可安装任意多个tomcat服务。

一、环境

CentOS 7.6

java version “1.8.0_191”

apache-tomcat-8.5.34

二、安装jdk

# mkdir -p /usr/java

# tar zxf jdk-8u191-linux-x64.tar.gz -C /usr/java/

# alternatives –config java (注:请留意版本的数量N,然后采用N+1(如果alternatives –config java指令没有输出,你可假设 N=0)。

#alternatives –install /usr/bin/java java /usr/java/jdk1.8.0_191/bin/java 1 # alternatives –install /usr/bin/jar jar /usr/java/jdk1.8.0_191/bin/jar 1 #alternatives –install /usr/bin/javac javac /usr/java/jdk1.8.0_191/bin/javac 1

# java -version

java version “1.8.0_191” Java(TM) SE Runtime Environment (build 1.8.0_191-b12)

Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

配置环境变量

编辑/etc/profile,添加如下内容:

export JAVA_HOME=/usr/java/jdk1.8.0_191

export JRE_HOME=/usr/java/jdk1.8.0_191/jre

export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

使环境变量生效:source /etc/profile

三、下载并解压Tomcat

下载文件解压到/usr/local目录下

tar zxvf apache-tomcat-8.5.34.tar.gz -C /usr/local

cd /usr/local

ln -s apache-tomcat-8.5.34 tomcat

四、编译安装tomcat daemon服务守候程序

cd /usr/local/tomcat/bin

tar zxvf commons-daemon-native.tar.gz

1、解压后会生成一个commons-daemon-1.1.0-native-src目录,cd到这个目录的Linux子目录 cd commons-daemon-1.1.0-native-src/unix

2、安装gcc(如已安装则忽略)

yum -y install gcc

3、执行编译安装

./configure 注意:需要先安装好make,gcc等编译工具

make

4、执行make后会生成一个jsvc的文件,将其复制到tomcat的bin目录

cp jsvc /usr/local/tomcat/bin

5、在tomcat/bin目录里面有一个daemon.sh 这个文件就是启动和关闭tomcat的服务守候程序

修改daemon环境变量:

vi /usr/local/tomcat/bin/daemon.sh,找到类似下面配置段:

test “.$TOMCAT_USER” = . && TOMCAT_USER=tomcat

# Set JAVA_HOME to working JDK or JRE

# JAVA_HOME=/opt/jdk-1.6.0.22

修改TOMCAT_USER=tomcat为您要指定身份运行的linux账号用户名,此处指定用户名为tomcat。

并把JAVA_HOME=…前面的注释(即“#”号)去掉,并设置为jdk的安装目录路径。修改后的配置段如下:

test “.$TOMCAT_USER” = . && TOMCAT_USER=tomcat

# Set JAVA_HOME to working JDK or JRE JAVA_HOME=/usr/java/jdk1.8.0_191

6、现在修改/usr/local/tomcat目录的所有者为tomcat(即您要指定身份运行的linux帐号):

useradd -M tomcat

chsh tomcat -s /sbin/nologin

chown -R -H tomcat /usr/local/tomcat 因/usr/local/tomcat为符号链接,所以加参数-H,若不是符合链接,无需加参数-H

7、为tomcat/bin/目录下的*.sh添加相应的x权限:

chmod +x /usr/local/tomcat/bin/*.sh

8、现在,可以测试一下daemon是否可以启动运行,启动方式如下:

/usr/local/tomcat/bin/daemon.sh start

curl http://localhost:8080

#测试一下是否启动

9、停止tomcat, 对应的命令为:/usr/local/tomcat/bin/daemon.sh stop

10、添加tomcat为Linux的服务,这时就简单了,只需要创建一个软链到/etc/init.d/目录中即可:

ln -s /usr/local/tomcat/bin/daemon.sh /etc/init.d/tomcat

11、现在就可以用它启动/关闭tomcat了:

/etc/init.d/tomcat start

/etc/init.d/tomcat stop

12、设置tomcat服务开机启动,需要在daemon.sh中增加以下的语句:

#!/bin/sh #这句是原文件里有的,下面的2句是要添加的

# chkconfig: 2345 90 15

# description: Tomcat-en Manager

13、再运行chkconfig命令增加tomcat服务,而达到自启动:

chkconfig –add tomcat

重启机器,测试一下。

附录1:再创建一个tomcat服务(tomcat1)

如果想再创建一个tomcat服务,只需要将/usr/local/tomcat这个目录复制一份,例如: cp -r apache-tomcat-8.5.34 tomcat1

再修改一下tomcat1的端口号(/usr/local/tomcat/conf/server.xml、/usr/local/tomcat1/conf/server.xml中的端口号不能与其它的服务重复)。最后从上面所述第5步开始,创建另一个服务即可。

通过这种方式,您就可以为一台Linux服务器创建任意多个tomcat服务了。最后只需要安装一个前端服务器(例如Nginx或Apache),将不同域名的请求转发到不同的tomcat服务程序就可以了。

(1)将/usr/local/tomcat这个目录复制一份

cp -r apache-tomcat-8.5.34 tomcat1

(2)修改端口号(shutdown、HTTP、AJP),如端口分别修改为8007、8081、8010

vi /usr/local/tomcat1/conf/server.xml

并保存。

(3)修改/usr/local/tomcat1目录的所有者为tomcat

chown -R tomcat /usr/local/tomcat1

(4)为tomcat1/bin/目录下的*.sh添加相应的x权限

chmod +x /usr/local/tomcat1/bin/*.sh

(5)测试一下daemon是否可以启动运行,启动方式如下:

/usr/local/tomcat1/bin/daemon.sh start

curl http://localhost:8081

(6)停止tomcat, 对应的命令为

/usr/local/tomcat1/bin/daemon.sh stop

(7)添加tomcat为Linux的服务,这时就简单了,只需要创建一个软链到/etc/init.d/目录中即可

ln -s /usr/local/tomcat1/bin/daemon.sh /etc/init.d/tomcat1

(8)现在就可以用它启动/关闭tomcat了:

/etc/init.d/tomcat1 start

/etc/init.d/tomcat1 stop

(9)设置tomcat服务开机启动

chkconfig –add tomcat1