Linux优化体系
· 阅读需 18 分钟
1. Linux系统优化
1.1 基础必备优化
-
关闭SElinux
-
Firewalld (CentOS7)
-
Iptables (CentOS6)
-
安全组 (阿里云)
-
添加普通用户,配置sudo,预防root密码忘记
tuboshu ALL=(ALL) NOPASSWD:ALL 或 tuboshu ALL=(ALL) NOPASSWD:/bin/su
-
hosts文件解析当前的主机名
-
锁定关键文件 chattr lsattr
- 基于文件系统的权限(系统隐藏权限)
- 给配置文件 +a 只能追加
- 给命令 +i 不能修改
-
系统字符集:
- 默认都是UTF-8
- 语言 en_US(推荐)
- 中文环境 zh_CN.UTF-8
-
调整用户登录提示信息 /etc/motd
-
清空 /etc/issue /etc/issue.net
1.2 基础服务优化
-
ssh 优化
cat /etc/ssh/sshd_config
UseDNS no # 禁止IP解析为对应的域名
GSSAPIAuthentication no
Port 52113 # 自定义端口
PermitRootLogin no #是否准许root远程登录
PasswordAuthentication yes #是否开启密码登录
ListenAddress 10.0.0.7:52113 #ListenAddress 准许用户从哪个网卡连接 还可以同时指定端口
ListenAddress 172.16.1.7:22 -
yum源:修改系统默认的yum源,增加epel源
-
时间同步:定时任务+ntpdate/chrony
-
调整文件描述符
-
每个进程可以打开的最大文件数量
# 1. 临时
ulimit -n65535
# 2. 永久 /etc/security/limits.conf #重启生效
echo '* - nofile 65535 ' >>/etc/security/limits.conf
# 3. 或者写为两行:
soft nofile 65535
hard nofile 65535 -
故障案例: 如果 ulimit 文件描述符设置过小 系统提示
too many open files
-bash: start_pipeline: pgrp pipe: Too many open files
vim: error while loading shared libraries: libm.so.6: cannot open shared object file: Error 24
-
-
修改历史命令环境变量
命令 描述 TMOUT 超时时间 HISTSIZE 控制history记录条数 HISTFILESIZE 文件记录条数 HISTCONTROL 控制history是否记录用过的命令 PROMPT_COMMAND 下1个命令之前会运行环境变量里面的命令,常用语用户审计 -
time out 不进行任何操作 300秒自动退出用户
export TMOUT=300
-
HIST history
export HISTFILE=1000 # history命令最多记录条数
export HISTFILESIZE=1000 # history 历史记录的文件里面最多记录条数 -
清空命令历史记录
history -c
-
把当前的shell历史命令内存缓冲区的内容写入命令历史文件
history -w
-
控制history命令如何记录历史命令
exprot HISTCONTROL=ignorespace # 只要以空格开头的命令 history不记录
-
1.3 内核优化
-
优化文件 /etc/sysctl.conf
-
参数生效命令
sysctl -p
-
内核参数存放文件 /proc/sys
内核参数及含义 | 含义 | 默认 |
---|---|---|
net.ipv4.ip_forward=1 | 是否开启内核转发 | 0 |
net.ipv4.icmp_echo_ignore_all=1 | 是否准许被ping | 0 |
net.ipv4.tcp_tw_recycle=1 | 开启tcp回收功能 | 0 |
net.ipv4.tcp_tw_reuse=1 | 开启tcp复用(重复利用) | 0 |
vm.swapiness=0 | 设置系统是否优先使用物理内存,数值越小越优先使用物理内存 | 30(C7) |
2. 服务优化之nginx
2.1 编译安装nginx
- 正式安装前的准备
# 卸载之前yum安装的nginx
分享Linux系统性能优化的实用技巧和最佳实践,提升服务器运行效率。
<!-- truncate -->
rpm -e 'rpm -qa | grep nginx' --nodeps
# 下载nginx源码包
分享Linux系统性能优化的实用技巧和最佳实践,提升服务器运行效率。
<!-- truncate -->
wget -P /app/tools http://nginx.org/download/nginx- 1.16.1.tar.gz
# 进 入软件下载目录
分享Linux系统性能优化的实用技巧和最佳实践,提升服务器运行效率。
<!-- truncate -->
cd /app/tools/
# 解压软件
分享Linux系统性能优化的实用技巧和最佳实践,提升服务器运行效率。
<!-- truncate -->
tar xf nginx-1.16.1.tar.gz
# 进入源代码编译安装的目录
分享Linux系统性能优化 的实用技巧和最佳实践,提升服务器运行效率。
<!-- truncate -->
cd nginx-1.16.1/
# 安装依赖软件包
分享Linux系统性能优化的实用技巧和最佳实践,提升服务器运行效率。
<!-- truncate -->
yum install -y openssl-devel pcre-devel
-
修改源码文件,伪造nginx真实版本信息----生产时可按需修改
-
需要修改的nginx源码配置文件:
- nginx-xxx/src/core/nginx.h
- nginx-xxx/src/http/ngx_http_header_filter_module.c
- nginx-xxx/src/http/ngx_http_special_response.c
-
修改方法:
# src/core/nginx.h 13 14 22行
[root@web03 ~]# sed -n '13,14p;22p' src/core/nginx.h
#define NGINX_VERSION "8.5.50"
#define NGINX_VER "Tomcat/" NGINX_VERSION
#define NGINX_VAR "Tomcat"
# /src/http/ngx_http_header_filter_module.c 49行
[root@web03 ~]# grep -n Tomcat src/http/ngx_http_header_filter_module.c
49:static u_char ngx_http_server_string[] = "Server: Tomcat" CRLF;
# src/http/ngx_http_special_response.c 36行
[root@web03 ~]# grep -n Tomcat src/http/ngx_http_special_response.c
36:"<hr><center>Tomcat</center>" CRLF
-
-
开始编译安装nginx
-
编译安装三部曲
- ./configure #进行配置 configure脚本,生成makefile,配置 完成后生成一个文件
- make #进行编辑(源代码(c语言)-->可以执行命令)
- make install # 创建目录,复制文件
-
具体操作
# 进行编译前的配置
./configure --prefix=/app/nginx-1.16.1 --user=nginx -- group=nginx --with-http_stub_status_module --with- http_ssl_module
# 进行编译
make
......
make[1]: Leaving directory '/app/tools/nginx-1.16.1' #出现此内容表示make成功
# 安装
make install
# 创建软链接
ln -s /app/nginx-1.16.1 /app/nginx
# 检查是否安装成功
[root@web03 ~]# /app/nginx/sbin/nginx -V
nginx version: Tomcat/8.5.50
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/app/nginx-1.16.1 --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
# 创建/sbin软链接
ln -s /app/nginx/sbin/nginx /sbin
# 启动nginx
nginx
# 检查语法
nginx -t
# 重新读取配置文件,要求nginx在运行
nginx -s reload
# 关闭nginx
nginx -s stop
-
2.2 nginx安全优化
2.2.1 隐藏nginx版本信息优化
# 增加server_tokens off
分享Linux系统性能优化的实用技巧和最佳实践,提升服务器运行效率。
<!-- truncate -->
vim /app/nginx/conf/nginx/conf
......
http {
......
server_tokens off;
......
}
# 注意:要使修改生效,要重新读取配置文件。
分享Linux系统性能优化的实用技巧和最佳实践,提升服务器运行效率。
<!-- truncate -->
2.2.2 修改nginx版本信息优化(上边编译安装前已经修改)
# src/core/nginx.h 13 14 22行
分享Linux系统性能优化的实用技巧和最佳实践,提升服务器运行效率。
<!-- truncate -->
[root@web03 ~]# sed -n '13,14p;22p' src/core/nginx.h
#define NGINX_VERSION "8.5.50"
#define NGINX_VER "Tomcat/" NGINX_VERSION
#define NGINX_VAR "Tomcat"
# /src/http/ngx_http_header_filter_module.c 49行
分享Linux系统性能优化的实用技巧和最佳实践,提升服务器运行效率。
<!-- truncate -->
[root@web03 ~]# grep -n Tomcat src/http/ngx_http_header_filter_module.c
49:static u_char ngx_http_server_string[] = "Server: Tomcat" CRLF;
# src/http/ngx_http_special_response.c 36行
分享Linux系统性能优化的实用技巧和最佳实践,提升服务器运行效率。
<!-- truncate -->
[root@web03 ~]# grep -n Tomcat src/http/ngx_http_special_response.c
36:"<hr><center>Tomcat</center>" CRLF
# 注意:要使修改生效,要重新读取配置文件。
分享Linux系统性能优化的实用技巧和最佳实践,提升服务器运行效率。
<!-- truncate -->
2.2.3 修改nginx软件work_processes进程用户信息
# 将nginx进程运行用户改为www
分享Linux系统性能优化的实用技巧和最佳实践,提升服务器运行效率。
<!-- truncate -->
[root@web03 ~]# cat /app/nginx/conf/nginx.conf
user www www;
......
2.2.4 优化nginx服务上传文件限制
# 默认是1m,改为100m
分享Linux系统性能优化的实用技巧和最佳实践,提升服务器运行效率。
<!-- truncate -->
[root@web03 ~]# cat /app/nginx/conf/nginx.conf
client_max_body_size 100m; # 放在http、server、location里都可以
2.2.5 nginx图片及目录防盗链
# 方法1:给所有图片、文档、视频加上水印
分享Linux系统性能优化的实用技巧和最佳实践,提升服务器运行效率。
<!-- truncate -->
# 方法2:根据http referer实现防盗链,在对应网页代码中加上,防盗链语句:
分享Linux系统性能优化的实用技巧和最佳实践,提升服务器运行效率。
<!-- truncate -->
if ($http_referer !~ "www.baidu.com"){ # 设置白名单,可加多个网站
return 403;
}
# 方法3:根据cookie防盗链
分享Linux系统性能优化的实用技巧和最佳实践,提升服务器运行效率。
<!-- truncate -->
用户第1次请求的时候,服务器给用户设置cookie
2.2.6 nginx站点目录及文件权限优化
# 整体用户权限 root root file 644 dir 755
分享Linux系统性能优化的实用技巧和最佳实践,提升服务器运行效率。
<!-- truncate -->
# 上传用户权限 www www file 644 dir 755
分享Linux系统性能优化的实用技巧和最佳实践,提升服务器运行效率。
<!-- truncate -->
# 注意: nginx/php/tomcat用户要统一
分享Linux系统性能优化的实用技巧和最佳实践,提升服务器运行效率。
<!-- truncate -->
# 设置html文件的权限命令
分享Linux系统性能优化的实用技巧和最佳实践,提升服务器运行效率。
<!-- truncate -->
find /app/nginx/html -type f | xargs chmod 644
# 设置html下目录的权限命令
分享Linux系统性能优化的实用技巧和最佳实践,提升服务器运行效率。
<!-- truncate -->
find /app/nginx/html/ -type d | xargs chmod 755
# 修改上传的文件所有者
分享Linux系统性能优化的实用技巧和最佳实践,提升服务器运行效率。
<!-- truncate -->
chown -R www.www /app/nginx/html/uploads
# 修改原因:如果权限设置不当,就会导致一些人把木马、病毒上传到linux中,如果这个木马、病毒被执行的话,可能会导致网站页面被修改;严重的话,可能导致网站linux系统被植入病毒,相当于获取了root权限,会很危险。
分享Linux系统性能优化的实用技巧和最佳实践,提升服务器运行效率。
<!-- truncate -->
2.2.7 nginx防爬虫优化
- 爬虫: wget/curl 访问网站页面,下载或收集页面存放在磁盘或数据库中。
- 爬虫应用:
- 搜索引擎:定时搜索各种网站的火爆的页面及文章,缓存到搜索引擎数据库中,加速用户搜索速度体验。
- 数据收集分析:通过wget/curl下载静态资源,利用python书写爬虫下载动态资源。
- 灰色产业:批量创建用户来刷人气等。
- 爬虫利弊
- 我们希望搜索引擎爬虫爬取网站数据,让网站更加靠前,容易被用户搜索到
- 我们不希望恶意爬取
- 常见预防方式:
- 君子协议:robots.txt robot协议
- 利用http_user_agent屏蔽,访问我网站的时候不能是bot|spider
- 利用程序开发验证码,阻止进行爬虫
2.2.8 利用nginx限制请求访问
-
限制http请求方法
-
GET 下载
-
POST 上传
-
HEAD 只查看响应头部
location /xxxx {
if ( $method ~ "POST")
{
return 403;
}
}
-
2.2.9 nginx监牢模式
- nginx通过普通用户运行时,nginx不能使用默认的80端口
- 1-1024端口是特权端口,只能root使用
2.2.10 控制nginx并发连接数
- limit_conn_zone # conn connection 连接数