Linux系统优化及性能调优

目录

一、基本优化

1. SELinux和防火墙优化

1.1 selinux概述

1.2 selinux三种工作模式 

1.3 切换selinux模式

1.4 防火墙概述

1.5 firewalld管理工具

2. 自启动服务优化 

2.1 Systemd

2.2 SysVinit

3. 禁用超级管理员

4. 普通用户提权

5. 使用国内yum源

5.1 配置阿里云YUM源

5.2 配置清华大学YUM源

5.3 选择配置EPEL源

5.4 更新YUM缓存

5.4 测试新的YUM源

二、性能调优

1. 开启路由转发功能

2. 调整TCP连接数

3. 禁ping


一、基本优化

1. SELinux和防火墙优化

1.1 selinux概述

SELinux(Security-Enhanced Linux)是一种强制访问控制(MAC)安全机制,它在Linux操作系统中提供了额外的安全层。SELinux是由美国国家安全局(NSA)开发的,旨在提供对进程、文件和日志的访问控制策略。SELinux通过定义一系列的安全策略来控制应用程序和用户对系统资源的访问。这些策略定义了哪些用户和程序可以访问系统上的资源,以及它们可以执行哪些操作。

1.2 selinux三种工作模式 

① Enforcing(强制模式):这是SELinux的默认模式,它会强制执行所有的安全策略,并拒绝所有未经授权的访问。在这种模式下,任何违反策略的行为都会被阻止,并记录到日志中。

② Permissive(许可模式):在这种模式下,SELinux仍然会检查所有的访问请求,但不会实际阻止违反策略的行为。相反,它会记录所有的违规行为,就像在强制模式下一样。这种模式对于调试SELinux策略非常有用,因为它允许管理员看到哪些操作会被阻止,而不会实际影响系统的正常运行。

③ Disabled(禁用模式):在这种模式下,SELinux被完全禁用,不会检查访问请求也不会应用任何安全策略。这意味着系统将只依赖于传统的离散访问控制(DAC)机制,如文件权限和所有权。禁用SELinux会降低系统的安全性,因此通常不推荐这样做,除非确实需要。

1.3 切换selinux模式

① 临时切换

可以使用setenforce命令来切换selinux的模式。

[root@localhost ~]# setenforce 0
#临时关闭
[root@localhost ~]# setenforce 1
#临时开启

② 永久切换

可以修改/etc/selinux/config配置文件来切换selinux的模式。

[root@localhost ~]# vim /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted 

修改SELINUX=后面的参数来改变工作模式:
enforcing:强制模式
permissive:宽容模式
disabled:禁用模式

[root@localhost ~]# reboot  #修改完配置文件需要重启才能生效

③ 查看状态

[root@localhost ~]# getenforce
#这个命令会显示SELinux的当前模式(Enforcing、Permissive或Disabled)
[root@localhost ~]# sestatus
#sestatus会显示SELinux的当前模式(强制、许可或禁用)和配置状态。

1.4 防火墙概述

Linux系统中的防火墙主要通过iptables或firewalld服务来管理。这两种服务提供了网络层的过滤和防火墙规则的管理功能,帮助保护系统免受未授权访问和网络攻击。iptables相关介绍请参考:Linux防火墙与iptables五表五链规则介绍-CSDN博客

1.5 firewalld管理工具

[root@localhost ~]# systemctl status firewalld
#查看firewalld状态
[root@localhost ~]# systemctl start firewalld
#关闭firewalld
[root@localhost ~]# systemctl enable/disable firewalld
#开机自启动/静止firewalld
[root@localhost ~]# systemctl enable/disable --now firewalld
#开机自启动/静止,并立刻开启/关闭firewalld

2. 自启动服务优化 

在Linux系统中,关闭不必要的开机自启动程序是一个重要的系统优化步骤,可以提高系统启动速度和运行效率。根据系统使用的初始化系统(如Systemd或SysVinit),关闭自启动程序的方法有所不同。

2.1 Systemd

Systemd是许多现代Linux发行版(如CentOS 7/8、Fedora、Ubuntu 15.04及以后版本)的初始化系统和系统管理器。

① 列出所有启动服务

systemctl list-unit-files --type=service | grep enabled

② 确定了不需要在启动时运行的服务后,使用以下命令禁用它们

systemctl disable 服务名.service
systemctl disable --now 服务名.service  #禁止自启并立刻关闭

2.2 SysVinit

尽管许多现代Linux发行版已经转向使用Systemd,但仍有一些发行版使用传统的SysVinit系统。如:centos6。

① 查看当前所有自启动的服务

对于使用SysVinit的系统,可以通过检查/etc/rc.d或/etc/init.d目录下的脚本来查看哪些服务设置为自启动。

ls /etc/rc.d/rc*.d/S*
或者
ls /etc/init.d

并使用chkconfig命令查看服务的启动状态

chkconfig --list | grep '3:on'
#chkconfig --list:这个命令用于显示所有系统服务的启动状态
#3:on表示在运行级别3中启用的服务
#列出所有在运行级别3下被配置为自动启动的服务
#linux操作系统运行级别如下:
0:关机
1:单用户,类似于windows的急救模式
2:字符界面:缺少nfs等功能
3:字符界面
4:字符界面:保留,未使用过
5:图形界面
6:重启

② 禁用不必要的服务 

使用chkconfig命令禁用不需要的服务。

chkconfig 服务名 off

3. 禁用超级管理员

在Linux系统中,超级管理员(通常是root用户)拥有对系统的完全控制权,包括访问和修改所有文件、运行任何命令等。出于安全考虑,有时可能需要限制root用户的直接登录能力,而不是完全禁用root用户(这在实际操作中是不可行的,因为root权限对于系统管理是必需的)。 

① 禁用root用户的SSH远程登录

编辑SSH配置文件/etc/ssh/sshd_config,找到PermitRootLogin修改或添加以下行:

 38 #PermitRootLogin yes
     PermitRootLogin no

这将禁止root用户通过SSH远程登录。之后,需要重启SSH服务以应用更改: 

systemctl restart sshd

② 修改root用户的shell为禁用登录的shell 

这个方法会阻止root用户登录到系统的shell。通过更改root用户的默认shell为一个不允许登录的shell(例如/sbin/nologin或/bin/false),可以实现这一点。

usermod -s /sbin/nologin root
或者
sudo usermod -s /bin/false root
#理论上非/bin/bash即可

注意:这会阻止root用户通过直接登录获取shell访问,但请注意,通过sudo或su切换到root用户的能力不会受到影响。

③ 注意事项

  • 在禁用root用户直接登录之前,确保至少有一个普通用户具有通过sudo获取root权限的能力,以便可以进行必要的系统管理任务。
  • 完全禁用root账户(例如通过更改密码或删除账户)是不推荐的,因为这可能会导致系统管理和维护工作变得非常困难,甚至不可能执行。
  • 这些措施增加了系统的安全性,因为它们可以防止未经授权的用户直接以root身份登录系统。然而,仍然需要采取其他安全措施来保护系统,如定期更新软件、使用强密码和配置防火墙等。 

4. 普通用户提权

在Linux系统中,sudoers文件是用来配置sudo命令的行为的文件,允许指定哪些用户可以以超级用户的权限执行特定的命令。对于大多数Linux发行版来说,推荐使用visudo命令来编辑sudoers文件,因为它可以在编辑过程中检查语法错误,避免在保存后由于语法错误而失去sudo访问权限。

① 以root或具有sudo权限的用户身份登录到Linux系统。

② 执行以下命令以编辑sudoers文件:

visudo
sudo visudo

③ 在sudoers文件中找到类似以下行的条目:

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
#允许超级用户root在任何终端以任何用户的身份通过sudo命令执行任何命令
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL
#允许属于wheel用户组的用户在任何终端以任何用户的身份通过sudo命令执行任何命令
#whell组为超级管理员组,root严格意思并不能代表超级管理员

④  若要授予用户fql执行任何命令的sudo权限,可以在文件中添加以下行:

## Allow root to run any commands anywhere
#root    ALL=(ALL)       ALL     #建议注释,否则谁叫root谁就拥有无上的权利,很危险
 fql     ALL=(ALL:ALL)   ALL     #添加此行

这行的含义是允许fql以任何用户的身份,在任何终端使用sudo命令执行任何命令。如果你希望fql用户只能执行特定的命令,而不是所有命令,你可以使用更细粒度的授权语法。例如,要允许fql用户仅运行/usr/sbin/reboot命令,可以使用以下行:

fql    ALL=(ALL) /usr/sbin/reboot

 这表明fql用户可以使用sudo运行/usr/sbin/reboot命令,但不能执行其他命令。

⑤ 保存文件并退出,如果有必要,重启系统以使更改生效,或者在其他终端会话中验证新的sudo权限。

5. 使用国内yum源

在Linux系统中,配置国内的YUM源可以帮助提高软件包安装和更新的速度。以下是如何为CentOS系统配置国内YUM源的步骤,以阿里云和清华大学的YUM源为例: 

首先备份原有的YUM源配置 

[fql@localhost ~]$ cd /etc/yum.repos.d/
[fql@localhost yum.repos.d]$ sudo mkdir backup
[fql@localhost yum.repos.d]$ ls
backup            CentOS-CR.repo         CentOS-fasttrack.repo  CentOS-Sources.repo
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo      CentOS-Vault.repo
[fql@localhost yum.repos.d]$ sudo mv *.repo backup/

5.1 配置阿里云YUM源

下载阿里云的YUM源配置:

对于CentOS 7,可以使用以下命令:

sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

对于CentOS 8,命令稍有不同:

sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo

5.2 配置清华大学YUM源

下载清华大学的YUM源配置:

对于CentOS 7,使用以下命令:

sudo wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.tuna.tsinghua.edu.cn/help/centos-vault/

对于CentOS 8,命令稍有不同:

sudo wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.tuna.tsinghua.edu.cn/help/centos/

注意:阿里云与清华园yum源二选一即可 

5.3 选择配置EPEL源

使用阿里云的EPEL源:

对于CentOS 7,使用以下命令:

sudo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

 对于CentOS 8,使用以下命令:

sudo wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-8.repo

5.4 更新YUM缓存

配置完新的YUM源之后,需要清除YUM缓存并生成新的缓存:

sudo yum clean all
sudo yum makecache

5.4 测试新的YUM源

通过安装或更新一个软件包来测试新配置的YUM源是否工作正常:

sudo yum install -y tree

二、性能调优

1. 开启路由转发功能

在Linux系统中,路由转发功能是指将接收到的数据包从一个网络接口转发到另一个网络接口的能力。这对于将数据包从一个网络传输到另一个网络非常重要,特别是在充当网络路由器、防火墙或网关的设备上。开启路由转发功能步骤如下:

① 临时性地开启路由转发功能,可以使用以下命令:

sudo sysctl net.ipv4.ip_forward=1

这将使IPv4的路由转发功能在当前会话中生效。在系统重新启动后,该设置将失效。 

② 若要使路由转发功能永久生效,需要编辑/etc/sysctl.conf文件,并添加以下行: 

net.ipv4.ip_forward = 1

保存文件后,运行以下命令使配置生效:

sudo sysctl -p

2. 调整TCP连接数

在Linux系统中,调整TCP连接数是一项重要的性能调优任务。通过增加或调整TCP连接数,可以提高系统的并发连接处理能力。调整TCP连接数步骤如下:

① 修改系统参数: 你可以通过sysctl命令或编辑/etc/sysctl.conf文件来修改TCP连接数参数。例如,要增加端口范围内允许的最大连接数:

net.ipv4.ip_local_port_range = 1024 65535
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535

② 修改文件描述符限制: 对于高并发场景,你可能还需要增加文件描述符限制,以确保系统可以处理更多的连接。这可以通过修改/etc/security/limits.conf文件实现。详情请参考:Linux系统安全及应用-CSDN博客5.8 limit 相关内容。

在修改了参数后,需要重新加载sysctl配置:

sudo sysctl -p

3. 禁ping

在Linux系统中,禁用ping其实是指禁止ICMP协议的回显请求(ping请求),也就是禁止对该系统进行ping操作。这通常是出于安全或者隐私的考虑。禁用ping的方法如下:

① 使用防火墙规则: 你可以使用iptables或者firewalld等防火墙管理工具,针对ICMP协议进行相应的规则配置,禁止ping请求。

使用iptables禁止ping:

sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

使用firewalld禁止ping:

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" protocol value="icmp" drop'

② 修改内核参数: 你也可以通过修改内核参数来禁用ICMP协议,阻止ping请求。在/etc/sysctl.conf文件中添加以下行来禁用ICMP请求:

net.ipv4.icmp_echo_ignore_all = 1

保存文件后,运行以下命令使配置生效:

sudo sysctl -p

 其他Linux系统调优相关介绍请参考:Linux系统安全及应用-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/274487.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从服务器到云原生:企业IT基础设施的演进之路

随着数字经济的迅猛发展,企业IT数字化转型已成为推动业务创新和提升竞争力的关键。在这一转型过程中,基础设施的建设与升级显得尤为重要。企业需要不断优化和更新他们的基础设施,以适应不断变化的市场需求和技术发展。本文将探讨企业IT数字化…

python便民超市管理系统flask-django-nodejs-php

随着人们生活节奏的加快,以前传统的购物方式发生了巨大的改变,以前一个超市要想经营好自己的门店,每天都要忙着记账出账,尤其是出库入库统计,如果忙中出乱,可能导致今天所有的营业流水,要重新换…

【视频异常检测】Real-world Anomaly Detection in Surveillance Videos 论文阅读

Real-world Anomaly Detection in Surveillance Videos 论文阅读 Abstract1. Introduction2. Related Work3. Proposed Anomaly Detection Method3.1. Multiple Instance Learning3.2. Deep MIL Ranking Model 4. Dataset4.1. Previous datasets4.2. Our dataset 5. Experiment…

Unity发布webgl设置占满浏览器运行

Unity发布webgl设置占满浏览器运行 Unity发布webgl的时候index.html的模板文件 模板文件路径,根据自己的需求修改。 C:\Program Files\Unity\Hub\Editor\2021.1.18f1c1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\WebGLTemplates\Default再桌面新建一个t…

Node.js常用命令:了解Node.js的核心命令和用法

学习目标: 理解Node.js和npm的概念及其在开发中的作用;掌握Node.js的核心命令,包括node、npm、npx等;学会使用node命令来执行JavaScript文件和模块;熟悉npm命令,包括安装、更新、卸载依赖包等操作&#xf…

大数据技术学习笔记(十三)—— HBase

目录 1 Hbase 概述1.1 Hbase 定义1.2 HBase 数据模型1.2.1 HBase 逻辑结构1.2.2 HBase 物理存储结构1.2.3 数据模型 1.3 HBase 基本架构 2 HBase Shell 操作2.1 基本操作2.2 namespace 操作2.3 表操作 3 HBase 原理深入3.1 RegionServer 架构3.2 HBase 写流程3.3 MemStore Flus…

CentOS 7.9 常用环境配置

文章目录 环境准备安装docker安装Java安装maven安装git安装MYSQL安装Redis安装RabbitMq安装minio 环境准备 操作系统版本为centos 7.9,内核版本需要在3.10以上 sudo uname -rsudo cat /etc/redhat-release1.确认环境好后,安装工具包并设置仓库 sudo yum…

YOLOv5源码逐行超详细注释与解读(1)——项目目录结构解析

前言 前面简单介绍了YOLOv5的网络结构和创新点(直通车:【YOLO系列】YOLOv5超详细解读(网络详解)) 在接下来我们会进入到YOLOv5更深一步的学习,首先从源码解读开始。 因为我是纯小白,刚开始下…

经典控制算法——PID算法原理分析及优化

今天为大家介绍一下经典控制算法之一的PID控制方法。PID控制方法从提出至今已有百余年历史,其由于结构简单、易于实现、鲁棒性好、可靠性高等特点,在机电、冶金、机械、化工等行业中应用广泛。 在大学期间,参加的智能汽车竞赛中就使用到了PID经典控制算法,对于智能小车的调…

源码部署LAMP架构

LAMP 文章目录 LAMP1. lamp简介2. web服务器工作流程2.1 cgi与fastcgi2.2 httpd与php结合的方式2.3 web工作流程 3. LAMP平台构建3.1 安装httpd3.2 安装mysql3.3 安装php3.4 验证 1. lamp简介 有了前面学习的知识的铺垫,今天可以来学习下第一个常用的web架构了。 …

spring suite搭建springboot操作

一、前言 有时候久了没开新项目了,重新开发一个新项目,搭建springboot的过程都有点淡忘了,所有温故知新。 二、搭建步骤 从0开始搭建springboot 1.创建work空间。步骤FileNewJava Working Set。 2.选择Java Working Set。 3.自…

[Java、Android面试]_08_强软弱虚四种引用及应用场景

本人今年参加了很多面试,也有幸拿到了一些大厂的offer,整理了众多面试资料,后续还会分享众多面试资料。 整理成了面试系列,由于时间有限,每天整理一点,后续会陆续分享出来,感兴趣的朋友可关注收…

【Week Y2】使用自己的数据集训练YOLO-v5s

Y2-使用自己的数据集训练YOLO-v5s 零、遇到的问题汇总(1)遇到git的import error(2)Error:Dataset not found(3)Error:删除中文后,训练图片路径不存在 一、.xml文件里保存…

docker入门(一)—— docker概述

docker 概述 docker 官网:http://www.docker.com 官网文档: https://docs.docker.com/get-docker/ Docker Hub官网:https://hub.docker.com (仓库) 什么是 docker docker 是一个开源的容器化平台,可以…

Hive借助java反射解决User-agent编码乱码问题

一、需求背景 在截取到浏览器user-agent,并想保存入数据库中,经查询发现展示的为编码后的结果。 现需要经过url解码过程,将解码后的结果保存进数据库,那么有几种实现方式。 二、问题解决 1、百度:url在线解码工具 …

学生课程数据库综合操作(SQL)

1.学生,课程,选课关系表 Student 列名说明数据类型约束Sno学号字符(8)主键Sname姓名字符(12)非空,唯一Ssex性别字符(2)取“男”或“女”,默认“男”Sage年龄整…

android 怎么自定义view

首先了解view的绘制流程: 所以onmeasure ---测量view onlayout---确定view大小----》所以继承ViewGroup必须要重写onlayout,确定子view 而onDraw----是继承view时候需要操作的。 所以:自定义ViewGroup一般是利用现有的组件根据特定的布局方式来组成新的组件。 自定义Vi…

【博士每天一篇文献-综述】Brain network communication_ concepts, models and applications

阅读时间:2023-12-1 1 介绍 年份:2023 作者:Caio Seguin,Olaf Sporns印第安纳大学心理与脑科学系 期刊: nature reviews neuroscience 引用量:33 中文翻译参考:https://swarma.org/?p44524 …

vue3实现输入框短信验证码功能---全网始祖

组件功能分析 1.按键删除,清空当前input,并跳转prevInput & 获取焦点,按键delete,清空当前input,并跳转nextInput & 获取焦点。按键Home/End键,焦点跳转first/最后一个input输入框。ArrowLeft/ArrowRight键点击…

虚拟游戏理财 - 华为OD统一考试(C卷)

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C++ 题目描述 在一款虚拟游戏中生活,你必须进行投资以增强在虚拟游戏中的资产以免被淘汰出局。 现有一家Bank,它提供有若干理财产品m,风险及投资回报不同,你有N (元)进行投资,能接受的总风,险值为X。 你要在可接…
最新文章