常用服务的搭建、配置及优化
一、设置FTP服务,利用本地用户访问FTP
1、在线安装ftp服务
yum install vsftpd -y
2、设置本地用户验证访问ftp,并禁止切换到ftp以外的目录(默认登录的根目录为本地用户的家目录)
vim /etc/vsftpd/vsftpd.conf
local_enable=Yes #启用本地用户
anonymous_enable=NO #关闭匿名用户访问
write_enable=YES #开放服务器的写权限(若要上传,必须开启)
anon_umask=077 #可设置仅宿主用户拥有被上传的文件的权限(反掩码)
chroot_local_user=YES #将访问禁锢在用户的宿主目录中
allow_writeable_chroot=YES #允许被限制的用户主目录具有写权限
3、systemctl restart vsftpd #重启服务 4、新建用户
useradd ftpuser # 新建名为 ftpuser 的用户,并自动建立/home/ftpuser 目录
passwd ftpuser # 设置该用户的密码
5、修改匿名用户、本地用户登录的默认根目录
anon_root=/var/www/html #anon_root 针对匿名用户
local_root=/var/www/html #local_root 针对系统用户
6、使用user_list用户列表文件和设置白名单和黑名单
vim /etc/vsftp/user_list
//末尾加上用户
7、vim /etc/vsftpd/vsftpd.conf
userlist_enable=YES #启用user_list用户列表文件
userlist_deny=NO #设置白名单,仅允许user_list用户列表文件的用户访问。默认为YES,为黑名单,禁用
8、systemctl restart vsftpd #重启服务
9、测试是否成功
二、Tomcat的安装配置优化
目录:
(一)、Tomcat概述
(二)、Tomcat 8.5 安装
(三)、目录结构
(四)、Tomcat管理端管理
(五)、服务部署
(六)、JVM
(七)、Tomcat 优化
(八)、Tomcat安全优化
(九)、如何部署应用程序
(一)、Tomcat概述
Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。
在维护版本有tomcat 7,8,9,10,目前线上常用的有7,8。
(二)、Tomcat 8.5 安装
tomcat 各软件版本下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/
jdk开发软件下载链接:https://www.oracle.com/cn/java/technologies/javase/javase-jdk8-downloads.html
1、下载相关软件到指定目录内
[root@web01 ~]# ll /server/tools/
total 220604
-rw-r--r-- 1 root root 10492067 Mar 11 09:58 apache-tomcat-8.5.61.tar.gz
-rw-r--r-- 1 root root 143722924 Mar 10 16:05 jdk-8u281-linux-x64.tar.gz
-rw-r--r-- 1 root root 71677863 Mar 11 12:05 jpress-v3.3.0.war
2、解压下载好的 jdk、tomcat软件包
tar zxf apache-tomcat-8.5.61.tar.gz -C /app/
tar zxf jdk-8u281-linux-x64.tar.gz -C /app/
## 添加软件链接
ln -s /app/apache-tomcat-8.5.61/ /app/tomcat
ln -s /app/jdk1.8.0_281/ /app/jdk
3、配置环境变量
## 添加环境变量到profile文件
cat >>/etc/profile<<'EOF'
export JAVA_HOME=/app/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
export TOMCAT_HOME=/app/tomcat
EOF
## 查看是否添加成功
tail -n 10 /etc/profile
## 重新加载profile文件
source /etc/profile
4、查看版本信息
## 查看java安装信息
[root@web01 ~]# java -version
java version "1.8.0_281"
Java(TM) SE Runtime Environment (build 1.8.0_281-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.281-b09, mixed mode)
## 查看tomcat安装信息
[root@web01 ~]# /app/tomcat/bin/version.sh
Using CATALINA_BASE: /app/tomcat
Using CATALINA_HOME: /app/tomcat
Using CATALINA_TMPDIR: /app/tomcat/temp
Using JRE_HOME: /app/jdk
Using CLASSPATH: /app/tomcat/bin/bootstrap.jar:/app/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Server version: Apache Tomcat/8.5.61
Server built: Dec 3 2020 14:03:28 UTC
Server number: 8.5.61.0
OS Name: Linux
OS Version: 3.10.0-1160.el7.x86_64
Architecture: amd64
JVM Version: 1.8.0_281-b09
JVM Vendor: Oracle Corporation
5、启动停止服务
## 启动服务
/app/tomcat/bin/startup.sh
## 停止服务
/app/tomcat/bin/shutdown.sh
6、通过浏览器访问
(三)、目录结构
conf/ #tomcat配置文件目录
conf/server.xml #主配置文件
conf/web.xml #额外补充功能
conf/tomcat-user.xml #tomcat管理端配置文件,配置用户名密码
logs/ #日志目录
logs/catalina.out #最全日志
logs/catalina.2020-03-02.log #catalina.out的切割日志
logs/localhost_access_log.2020-03-02.txt #访问日志
webapps #站点目录
(四)、Tomcat管理端管理
搭建测试服务的时候,可以开启管理端,但在生产环境中一定要关闭。
管理端的用户,需要在 tomcat/conf/tomcat-users.xml 中进行配置。
vim /app/tomcat/conf/tomcat-users.xml #将文件原内容清空,加入以下内容,设置用户密码均为tomcat
<?xml version="1.0" encoding="UTF-8"?>
<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="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>
</tomcat-users>
tomcat 从 8.5 版本以后添加了管理端的限制,只允许本地登录管理端,解决办法看下边
1、找到 tomcat 目录中包含 ‘127’ 的文件
2、修改 127 为 \d+ 或者 *
3、重启tomcat进程
4、登录tomcat网页,点击”Server Status"
5、提示输入账号密码
6、可以看到服务器状态了
(五)、服务部署
如果开发给的是war包,则把war包放入webapps目录里边即可,tomcat可以自动解压,自动部署
如果开发给的是jar包,相当于把tomcat放到到jar中,利用java命令处理,例:java -jar xxx.jvar
(六)、JVM
1、使用 Server JRE 替代JDK。
服务器上不要安装JDK,请使用 Server JRE. 服务器上根本不需要编译器,代码应该在Release服务器上完成编译打包工作。
理由:一旦服务器被控制,可以防止在其服务器上编译其他恶意代码并植入到你的程序中。
2、 JAVA_OPTS
export JAVA_OPTS="-server -Xms512m -Xmx4096m -XX:PermSize=64M -XX:MaxPermSize=512m"
-Xms 指定初始化时化的栈内存
-Xmx 指定最大栈内存
提示 Java 8 以后 -XX:PermSize 与 -XX:MaxPermSize 两个配置项被废弃
3、java.security 优化
打开$JAVA_HOME/jre/lib/security/java.security文件,找到下面的内容:
securerandom.source=file:/dev/urandom
替换成
securerandom.source=file:/dev/./urandom
(七)、Tomcat 优化
1、maxThreads 连接数限制
maxThreads 是 Tomcat 所能接受最大连接数。一般设置不要超过8000以上,如果你的网站访问量非常大可能使用运行多个Tomcat实例的方法。
即,在一个服务器上启动多个tomcat然后做负载均衡处理。
<Connector port="8080" address="localhost"
maxThreads="2048" maxHttpHeaderSize="8192"
emptySessionPath="true" protocol="HTTP/1.1"
enableLookups="false" redirectPort="8181" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
提示 很多做过php运维的朋友在这里会犯一个大错误,php优化服务器通常怎做法是安装cpu以及内存的情况配置连接数,连接数过万都很正常,但java不同jvm配置要非常小心,稍有差错就会崩溃。
maxThreads 配置要结合 JVM -Xmx 参数调整,也就是要考虑内存开销。
maxThreads 客户请求最大线程数
minSpareThreads 初始化时创建的 socket 线程数
maxSpareThreads 连接器的最大空闲 socket 线程数
2、虚拟主机
不要使用Tomcat的虚拟主机,每个站点一个实例。即,启动多个tomcat.
这也是PHP运维在这里常犯的错误,PHP的做法是一个Web下面放置多个虚拟主机,而不是每个主机启动一个web服务器。Tomcat 是多线程,共享内存,任何一个虚拟主机中的应用出现崩溃,会影响到所有应用程序。采用多个实例方式虽然开销比较大,但保证了应用程序隔离与安全。
3、压缩传输
通常所说的gzip压缩,Tomcat通过在server.xml配置设置压缩的选项。
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
compression="on"
compressionMinSize1="2048"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,,application/octet-stream"/>
提示 压缩会增加Tomcat负担,最好采用Nginx + Tomcat 或者 Apache + Tomcat 方式,压缩交由Nginx/Apache 去做。
compression 打开压缩功能
compressionMinSize 启用压缩的输出内容大小,这里面默认为2KB
compressableMimeType 压缩类型
(八)、Tomcat安全优化
1、关闭端口保护
[root@web01 tomcat]# netstat -ntpl Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp6 0 0 127.0.0.1:8005 :::* LISTEN 6180/java tcp6 0 0 :::8080 :::* LISTEN 6180/java
启动tomcat服务会启动一个关闭端口,可以通过指定命令,访问这个接口,关闭tomcat
更改这个接口,以及关闭指令
[root@web01 tomcat]# vim /app/tomcat/conf/server.xml
<Server port="8527" shutdown="GUANBI">
2、ajp连接端口保护
如果不和apache一起使用,可以把这个连接端口关闭
<!--
<Connector protocol="AJP/1.3"
address="::1"
port="8009"
redirectPort="8443" />
-->
3、禁用管理端
管理端主要应用在tomcat测试环境中
a.删除默认的conf/tomcat-users.xml文件,重启tomcat后将会自动生成新的文件
b.删除webapps下默认的所有目录和文件
c.将tomcat应用根目录配置为tomcat安装目录以外的目录
4、降权启动(监牢模式)
a.添加用户 tomcat
b.修改 tomcat 所有者
c.通过普通用户管理 tomcat
5、文件列表访问控制
nginx默认会展示站点目录下所有的内容,tomcat默认是关闭的,配置内容如下:
vim /app/tomcat/conf/web.xml
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
6、版本信息隐藏
不同版本会有不同的漏洞,防止被有心人利用,最好对外隐藏版本信息
当出现 404 页面时可能看到Tomcat的版本信息 HTTP Status 404 - /sdf type Status report message /sdf description The requested resource is not available. Apache Tomcat/8.0.32 隐藏Tomcat 404页面版本信息的方法如下 mkdir -p apache-tomcat-8.0.33/lib/org/apache/catalina/util cat >> apache-tomcat-8.0.33/lib/org/apache/catalina/util/ServerInfo.properties <<EOF server.info=Apache server.number= server.built= EOF 测试 HTTP Status 404 - /sdf type Status report message /sdf description The requested resource is not available. Apache
7、server header重写
vim $CATALINA_HOME/conf/server.xml
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="8192"
minSpareThreads="64"
maxSpareThreads="128"
acceptCount="128"
enableLookups="false"
server="Neo App Srv 1.0"/>
# curl -I http://localhost:8080/
HTTP/1.1 400 Bad Request
Transfer-Encoding: chunked
Date: Thu, 20 Oct 2011 09:51:55 GMT
Connection: close
Server: Neo App Srv 1.0
8、 应用程序安全
关闭war自动部署 unpackWARs="false" autoDeploy="false"。防止被植入木马等恶意程序
关闭 reloadable="false" 也用于防止被植入木马
(九)、如何部署应用程序
应用程序部署与tomcat启动,不能使用同一个用户。
我的tomcat 安装在 /srv目录下,Tomcat启动用户为daemon; 应用程序放在/www目录下www所有者是www用户。这样的目的是一旦tomcat被植入web shell程序,它将不能创建或编辑/www目录下面的任何内容。
adduser --home /www -c "Web Application" www
我的Tomcat安装在/srv目录下,但应用程序放在/www目录下,一般是这样的结构。
/www/example.com/www.example.com
每次升级将压错包解压到 /www/http://example.com/目录下,http://www.example.com 是符号连接,连接到刚刚解压的目录。
这个可以实现通过符号连接在多个版本之间快速切换。