目录
一、基本优化
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博客