26条针对现代Linux服务器的安全强化技巧

26条针对现代Linux服务器的安全强化技巧

每个人都说Linux默认是安全的,在某种程度上,这点是被认可的(这是一个有争议的话题)。然而,Linux默认内置了一个安全模型。

你需要根据自己的需求调整和定制它,这样可以帮助提高系统的安全性。Linux的管理可能更具挑战性,但它提供了更大的灵活性和配置选项。

在生产环境中保护系统免受黑客和攻击者的侵害,是系统管理员面临的一个挑战性任务。这是我们关于“如何保护Linux系统”或“加固Linux系统”的第一篇文章。

在这篇文章中,我们将解释26个有用的技巧和方法来保护你的Linux系统。希望以下的技巧和方法能在某种程度上帮助你增强系统的安全性。

1.物理系统安全——设置GRUB密码

增强安全性的一个有效方法是设置GRUB密码,GRUB是大多数Linux发行版在计算机启动时用来加载操作系统的引导加载程序。

通过设置 GRUB 密码,您可以添加额外的防御层,以防止未经授权的用户试图篡改或未经授权访问您的系统。

登录您的 Linux 服务器并打开 GRUB 配置文件,该文件位于如图所示的不同路径。

对于 Ubuntu/Debian:/etc/default/grub

对于 CentOS/RHEL:/etc/grub2.cfg或/boot/grub/grub.cfg

接下来,使用nano或vi等文本编辑器以root 权限(sudo)编辑此文件。

查找以GRUB_CMDLINE_LINUX或类似开头的行并附加到GRUB_PASSWORD=<password>该行的末尾。

GRUB_CMDLINE_LINUX="quiet splash"
GRUB_PASSWORD=password123

编辑配置文件后,更新 GRUB 以应用更改。

sudo update-grub # 对于 Ubuntu/Debian
sudo grub2-mkconfig -o /boot/grub2/grub.cfg # 对于 CentOS/RHEL 7
sudo grub2-mkconfig -o /boot/grub/grub.cfg # 对于 CentOS/RHEL 8

重新启动服务器以应用 GRUB 密码。

sudo reboot

2.创建不同的分区以提高数据安全性

拥有不同的分区对于在发生灾难时获得更高的数据安全性非常重要。通过创建不同的分区,可以对数据进行分离和分组。

当发生意外事故时,只有该分区的数据会损坏,而其他分区上的数据将保留下来。确保您有以下单独的分区,并且第三方应用程序应安装在/opt下的单独文件系统上。

/
/boot
/usr
/var
/home
/tmp
/opt

大多数 Linux 发行版允许您在安装过程中使用引导或手动分区选项创建和配置分区。

安装后,您可以使用fdisk、parted等工具或GParted等图形工具来创建和管理分区。

使用 fdisk 的示例:

sudo fdisk /dev/sda

按照提示创建新的分区并将其分配给适当的文件系统。

3. 最小化软件包以减少漏洞:删除不需要的服务

保护 Linux 系统的关键策略之一是尽量减少已安装的软件包和正在运行的服务的数量。每个软件包和服务都可能带来漏洞,因此保持系统精简高效是强化服务器的关键步骤。

首先确定服务器特定功能不需要的包和服务,这可以使用包管理工具(例如dpkg或rpm)和服务管理实用程序来完成。

dpkg --list # 对于基于 Debian 的系统
rpm -qa # 对于基于 Red Hat 的系统
systemctl 列表单元 --type=service --state=running

一旦您确定了不必要的软件包,您就可以使用包管理器(例如apt或yum )将其删除。

sudo apt remove package_name # 对于基于 Debian 的系统
sudo yum remove package_name # 对于基于 Red Hat 的系统

删除不需要的软件包后,下一步是禁用和停止不需要的服务。

sudo systemctl stop service_name
sudo systemctl disable service_name

4. 检查 Linux 中的监听网络端口
监控和管理网络端口是保护 Linux 系统安全的一个重要方面,了解哪些端口是开放的并正在监听可以帮助您识别潜在的漏洞并确保只有必要的服务可访问。

为了检查网络端口,我们将使用netstat或ss命令行工具,它们提供各种与网络相关的信息,包括开放端口和监听服务。

sudo netstat -tuln
或者
sudo ss -tuln

5. 使用安全外壳 (SSH) 增强安全性

安全外壳( SSH ) 是一种广泛使用的协议,它提供了一种安全的方式来访问和管理您的 Linux 服务器。但是,为了最大限度地提高安全性,您应该遵循一些最佳做法,例如禁用 root 登录、仅允许特定用户、使用 SSH 协议 2 以及更改默认 SSH 端口。

禁用 root 登录会强制用户使用其用户帐户登录,从而提供更好的责任感并降低未经授权访问的风险。

sudo nano /etc/ssh/sshd_config

找到以下行PermitRootLogin并将其值更改为no:

PermitRootLogin no

将 SSH 访问限制为特定用户可确保只有授权用户才能登录,从而增加了一层安全性。

在文件末尾添加一行来指定允许的用户:

AllowUsers user1 user2

将默认 SSH 端口(22)更改为非标准端口可以帮助减少对服务器的自动攻击次数。

Port 2222

重新启动 SSH 服务以应用更改:

sudo systemctl restart sshd

6. 保持系统更新

使用系统默认包管理器(例如基于Debian 的发行版的apt或基于Red Hat 的系统的yum )定期将您的 Linux 发行版和所有已安装的包更新到最新的安全补丁和错误修复。

sudo apt update # 对于基于 Debian 的系统
sudo yum update # 对于基于 Red Hat 的系统

7. 管理 Cron Job 权限

Cron是类 Unix 操作系统中功能强大的实用程序,允许用户安排作业以特定间隔运行。

但是,在某些情况下,您可能需要控制谁可以或不可以创建和运行 cron 作业。Cron 具有内置功能,可使用/etc/cron.allow和/etc/cron.deny文件管理这些权限。

要允许特定用户使用 cron,请编辑/etc/cron.allow文件并输入要拒绝的用户的用户名(每行一个)。

user1
user2

要拒绝特定用户使用 cron,请编辑/etc/cron.deny文件并输入您要允许的用户的用户名(每行一个)。

user3
user4

要完全禁止所有用户使用 cron,您可以将该ALL行添加到/etc/cron.deny文件中。

ALL

8. 禁用 USB 存储检测

很多时候,我们希望限制用户在系统中使用USB记忆棒,以保护数据免遭盗窃。

创建一个文件“ nano /etc/modprobe.d/no-usb.conf ”并添加以下行将不会检测USB存储。

blacklist usb_storage

创建黑名单文件后,更新 initramfs(初始 RAM 文件系统),以确保在启动过程中不会加载黑名单模块:

sudo update-initramfs -u

重新启动系统以使更改生效。

9. 开启 SELinux 保护

安全增强型 Linux ( SELinux ) 是内核中提供的强制访问控制安全机制。禁用SELinux意味着从系统中删除安全机制。在删除它之前请三思,如果您的系统连接到互联网并可供公众访问,那么请再三考虑。

SELinux提供了三种基本操作模式,它们是:

强制执行:这是在机器上启用并强制执行SELinux安全策略的默认模式。

宽容:在此模式下,SELinux不会在系统上强制执行安全策略,只会发出警告和记录操作。此模式在解决 SELinux相关 问题方面非常有用。

已禁用:SELinux已关闭。

您可以使用“ system-config-selinux ”、“ getenforce ”或“ sestatus ”命令从命令行查看SELinux模式的当前状态。

# sestatus

如果被禁用,请使用以下命令启用SELinux 。

# setenforce enforcing

它也可以从“ /etc/selinux/config ”文件进行管理,您可以在其中启用或禁用它。

10. 在 Linux 服务器上删除 X 桌面

您的专用LAMP服务器无需运行KDE、GNOME或XFCE等X Window桌面。您可以删除或禁用它们以提高服务器的安全性和性能。

在删除任何桌面环境之前,请确定您的服务器上安装了哪一个桌面环境。

dpkg -l | grep desktop
或者
yum grouplist | grep -i desktop

一旦识别,您可以删除桌面环境以及任何相关的软件包。

删除 GNOME 桌面环境:

sudo apt-get purge gnome-shell gnome-session gnome-terminal # 对于基于 Debian 的系统
sudo yum groupremove "GNOME 桌面环境" # 对于基于 Red Hat 的系统

删除 KDE Plasma 桌面环境:

sudo apt-get purge kde-plasma-desktop # 对于基于 Debian 的系统
sudo yum groupremove "KDE Plasma Workspaces" # 对于基于 Red Hat 的系统

删除 Xfce 桌面环境:

sudo apt-get purge xfce4 # 对于基于 Debian 的系统
sudo yum groupremove "Xfce" # 对于基于 Red Hat 的系统

如果您的服务器还安装了 X 服务器(GUI 的显示服务器系统),您可以将其删除以进一步降低潜在的安全风险。

sudo apt-get purge xserver-xorg-core xserver-xorg # 对于基于 Debian 的系统
sudo yum remove xorg-x11-server-Xorg xorg-x11-server-common # 对于基于 Red Hat 的系统

确保服务器启动到基于文本的控制台而不是启动图形桌面环境。

sudo systemctl set-default multi-user.target # 对于基于 systemd 的系统
sudo systemctl set-default graphic.target # 如果需要,可以恢复到图形模式

删除桌面环境和(可选)X 服务器后,重新启动服务器以应用更改。

11. 在 Linux 服务器上禁用 IPv6 协议

如果您不使用IPv6协议,那么您应该禁用它,因为大多数应用程序或策略不需要IPv6协议,并且目前服务器上不需要它。

您需要编辑网络配置文件以禁用 IPv6。

sudo nano /etc/sysctl.conf

将以下行添加到文件末尾:

# Disable IPv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

接下来,将更改应用到正在运行的系统。

sudo sysctl -p

通过检查网络接口和配置来验证 IPv6 是否已被禁用。

ip addr show

您应该只会看到分配给网络接口的 IPv4 地址。IPv6 地址不应存在。

12. 限制用户在 Linux 上使用旧密码

如果您希望禁止用户使用相同的旧密码,这非常有用。旧密码文件位于/etc/security/opasswd 。这可以通过使用PAM模块来实现。

打开RHEL / CentOS / Fedora下的 ‘ /etc/pam.d/system-auth ‘ 文件。

# vi /etc/pam.d/system-auth

打开Ubuntu/Debian/Linux Mint下的‘/etc/pam.d/common-password ’文件。

# vi /etc/pam.d/common-password

将以下行添加到“ auth ”部分。

auth adequate pam_unix.so likeauth nullok

在“密码”部分添加以下行,以禁止用户重复使用其最近5 个密码。

password   sufficient    pam_unix.so nullok use_authtok md5 shadow remember=5

服务器仅记住最近5 个密码。如果您尝试使用最近5个旧密码中的任何一个,您将收到类似以下的错误。

Password has been already used. Choose another.

13.如何检查用户密码过期

在 Linux 中,用户的密码以加密格式存储在“ /etc/shadow ”文件中。要检查用户的密码过期情况,您需要使用“ chage ”命令,该命令显示有关密码过期的详细信息以及上次更改密码的日期。系统将

使用这些详细信息来决定用户何时必须更改其密码。

要查看任何现有用户的老化信息(例如到期日期和时间),请使用以下命令。

#chage -l username

要更改任何用户的密码期限,请使用以下命令。

#chage -M 60 username
#chage -M 60 -m 7 -W 7 userName

命令分解:

-M设置最大天数

-m设置最少天数

-W设置警告天数

14.手动锁定和解锁帐户

锁定和解锁功能非常有用,您可以锁定帐户一周或一个月,而不是从系统中删除帐户。要锁定特定用户,您可以使用以下命令。

passwd -l accountName

注意:锁定的用户仅对root用户可用。锁定是通过用 ( ! ) 字符串替换加密密码来执行的。如果有人尝试使用此帐户访问系统,他将收到类似以下的错误。

su - accountName
This account is currently not available.

要解锁或启用对锁定帐户的访问,请使用命令 as。这将删除带有加密密码的( ! ) 字符串。

passwd -u accountName

15. 强制使用更强的密码

许多用户使用软密码或弱密码,他们的密码可能会被基于字典的攻击或暴力攻击所破解。

PAM(可插入身份验证模块)模块堆栈中提供了“ pam_cracklib ”模块,它将强制用户设置强密码。

使用编辑器打开以下文件。

vi /etc/pam.d/system-auth

并添加一行使用信用参数,如(lcredit,ucredit,dcredi t,和/或ocredit分别为小写,大写,数字和其他)

/lib/security/$ISA/pam_cracklib.so retry=3 minlen=8 lcredit=-1 ucredit=-2 dcredit=-2 ocredit=-1

16. 启用和配置防火墙:firewalld 和 ufw

防火墙对于保护 Linux 服务器至关重要,它可以根据预先确定的安全规则控制传入和传出的网络流量。Linux 有两种最广泛使用的防火墙解决方案:用于基于 RHEL 的发行版的Firewalld和用于基于 Debian 的系统的ufw。

如果您的系统上尚未安装firewalld或ufw ,您可以使用包管理器进行安装。

安装 Firewalld:

sudo dnf install firewalld
sudo systemctl enable firewalld
sudo systemctl start firewalld

安装 Ufw:

sudo apt-get install ufw
sudo ufw enable
sudo ufw status

17. 在 Linux 上禁用 Ctrl+Alt+Delete

在大多数 Linux 发行版中,按“ CTRL-ALT-DELETE”将使系统进入重新启动过程。因此,如果有人误操作,至少在生产服务器上启用此选项并不是一个好主意。

要禁用Ctrl+Alt+Delete ,请创建或编辑Ctrl+Alt+Delete组合键的覆盖文件。

sudo systemctl edit ctrl-alt-del.target

将以下行添加到覆盖文件以禁用该组合键:

[Service]
ExecStart=

进行更改后,重新加载 systemd 配置并屏蔽ctrl-alt-del.target确保它不会被触发:

sudo systemctl daemon-reload
sudo systemctl mask ctrl-alt-del.target

18. 在 Linux 上检查账户是否为空密码

任何账户的密码为空都意味着网络上的任何人都可以未经授权访问该账户,这是 Linux 服务器内部安全性的一部分。因此,您必须确保所有账户都使用强密码,并且没有人拥有任何授权访问权限。空密码账户存在安全风险,很容易被黑客入侵。

要检查是否有任何密码为空的帐户,请使用以下命令。

sudo cat /etc/shadow | awk -F: '($2==""){print $1}'

19. 登录前显示 SSH 横幅

在 SSH 登录提示之前显示横幅消息可以成为向尝试访问 Linux 服务器的用户提供法律声明、警告或信息的有效方式。

要设置这样的横幅,您需要创建一个包含要显示的消息的文本文件。

sudo nano /etc/ssh/ssh-banner

添加您的横幅消息:

***********************************************************************
WARNING: Unauthorized access to this system is prohibited.

All activities on this system are logged and monitored. By logging in,
you acknowledge that you are authorized to access this system and agree
to abide by all relevant policies and regulations.

Unauthorized users will be prosecuted to the fullest extent of the law.
***********************************************************************

接下来,您需要配置 SSH 服务器以在登录提示之前显示横幅。

sudo nano /etc/ssh/sshd_config

查找并修改Banner指令:

Banner /etc/ssh/ssh-banner

进行这些更改后,重新启动 SSH 服务以应用新配置。

sudo systemctl restart sshd

20. 监控 Linux 上的用户活动

如果您要处理大量用户,那么收集每个用户的活动和他们使用的流程的信息并在以后或出现任何类型的性能或安全问题时进行分析非常重要。但我们如何监控和收集用户活动信息呢?

有两个有用的工具,称为“ psacct ”和“ acct ”,用于监视系统上的用户活动和进程。这些工具在系统后台运行,并持续跟踪系统上的每个用户活动以及Apache、MySQL、SSH、FTP等服务所消耗的资源。

21.定期监控Linux日志

定期检查日志是管理和保护 Linux 系统的重要部分,因为日志提供了系统事件、用户活动和潜在安全事件的详细记录。

通过定期检查这些日志(通常存储在/var/log目录中),您可以及早发现问题,应对安全威胁,并确保系统顺利运行。

/var/log/message – 保存整个系统日志或当前活动日志。
/var/log/auth.log – 身份验证日志。
/var/log/kern.log – 内核日志。
/var/log/cron.log – Crond 日志(cron 作业)。
/var/log/maillog – 邮件服务器日志。
/var/log/boot.log – 系统启动日志。
/var/log/mysqld.log – MySQL 数据库服务器日志文件。
/var/log/secure – 身份验证日志。
/var/log/utmp或/var/log/wtmp:登录记录文件。
/var/log/yum.lo g:Yum 日志文件。

22. 使用 rsync 在 Linux 中备份文件

使用rsync在 Linux 中备份文件是一种高效可靠的方法,因为它可以在两个位置之间同步文件和目录,非常适合备份。

要备份本地系统上的文件,请使用以下命令:

rsync -av --delete /source/directory/ /backup/directory/

要备份远程系统上的文件,请使用以下命令:

rsync -avz -e ssh /source/directory/ user@remote_host:/backup/directory/

23. 网卡绑定

在 Linux 中,NIC Bonding是一项功能,允许您将多个网络接口组合成一个绑定接口,以提高网络可靠性、冗余度和性能。

24. 在 Linux 中将 /boot 保持为只读

Linux 中的/boot目录包含启动操作系统所需的基本文件,例如内核、初始 ramdisk (initrd) 和引导加载程序配置文件。

确保/boot以只读方式挂载可以防止对这些关键文件进行未经授权的修改,从而增强系统安全性和完整性。

为此,打开“ /etc/fstab ”文件。

vi /etc/fstab

在底部添加以下行,保存并关闭。

LABEL=/boot     /boot     ext4     defaults,ro     1 2

请注意,如果您将来需要升级内核,则需要将更改重置为读写。

25. 在 Linux 中忽略 ICMP 或广播请求

在 Linux 中,您可以将系统配置为忽略 ICMP(Internet 控制消息协议)或广播请求,以增强安全性并减少不必要的网络流量。

使用文本编辑器打开/etc/sysctl.conf文件:

sudo nano /etc/sysctl.conf

添加或修改以下行以设置 ICMP 回显忽略标志:

net.ipv4.icmp_echo_ignore_all=1

应用更改:

sysctl -p

26. 实施入侵检测和预防

为了增强网络安全性,安装和配置入侵检测系统 (IDS) 或入侵防御系统 (IPS) 来监控流量并检测潜在攻击。

Snort和Suricata等 IDS 选项可分析网络数据包中的可疑活动并提供警报。Snort提供灵活的基于规则的检测,而Suricata支持多线程处理和高级协议。

如需主动防御,请考虑使用Fail2ban,它可以检测可疑行为并通过阻止违规 IP 来应对。每个工具都可以根据您的特定安全需求进行配置,提供强大的入侵防护并帮助维护网络完整性。

未经允许不得转载:A5数据 » 26条针对现代Linux服务器的安全强化技巧

相关文章

contact