25 个强化 Linux 服务器安全的技巧
每个人都说 Linux 默认情况下是安全的,并且在某种程度上达成一致(这是有争议的话题)。然而,Linux 默认情况下具有内置的安全模型。需要根据您的需要对其进行调整和定制,这可能有助于使系统更安全。 Linux 更难管理,但提供了更多的灵活性和配置选项。
对于系统管理员来说,保护生产中的系统免遭黑客和破解者的攻击是一项具有挑战性的任务。这是我们第一篇与“如何保护 Linux 盒子”或“强化 Linux 盒子”相关的文章。在这篇文章中,我们将解释 25 个有用的提示和技巧来保护您的 Linux 系统。希望以下提示和技巧能够帮助您更好地保护您的系统。
1. 物理系统安全
配置BIOS以禁用从BIOSCD/DVD、外部设备、软盘驱动器启动/强>。接下来,启用BIOS密码并使用密码保护GRUB以限制对系统的物理访问。
- 设置 GRUB 密码以保护 Linux 服务器
2. 磁盘分区
为了在发生灾难时获得更高的数据安全性,拥有不同的分区非常重要。通过创建不同的分区,可以对数据进行分离和分组。当发生意外事故时,只有该分区的数据会被损坏,而其他分区的数据仍然存在。确保您必须具有以下单独的分区,并确保第三方应用程序应安装在 /opt 下的单独文件系统上。
/
/boot
/usr
/var
/home
/tmp
/opt
3. 最小化软件包以最大程度地减少漏洞
您真的想要安装所有类型的服务吗?建议避免安装无用的软件包,以避免软件包出现漏洞。这可以最小化一项服务的危害可能导致其他服务的危害的风险。查找并删除或禁用服务器中不需要的服务,以最大程度地减少漏洞。使用“chkconfig”命令查找在运行级别 3 上运行的服务。
/sbin/chkconfig --list |grep '3:on'
一旦发现任何不需要的服务正在运行,请使用以下命令禁用它们。
chkconfig serviceName off
使用RPM软件包管理器(例如“yum”或“apt-get”工具)列出系统上所有已安装的软件包并使用以下命令删除它们以下命令。
yum -y remove package-name
sudo apt-get remove package-name
- 5 chkconfig 命令示例
- 20 个 RPM 命令的实用示例
- 用于 Linux 包管理的 20 个 Linux YUM 命令
- 25 个用于管理包管理的 APT-GET 和 APT-CACHE 命令
4.检查监听网络端口
借助“netstat”网络命令,您可以查看所有开放端口和关联程序。正如我上面所说,使用“chkconfig”命令禁用系统中所有不需要的网络服务。
netstat -tulpn
- Linux 中用于网络管理的 20 个 Netstat 命令
5.使用安全外壳(SSH)
Telnet和rlogin协议使用纯文本,而不是加密格式,这是安全漏洞。 SSH是一种安全协议,在与服务器通信时使用加密技术。
除非必要,否则切勿直接以root身份登录。使用“sudo”执行命令。 sudo 在 /etc/sudoers 文件中指定,也可以使用在 VI 编辑器中打开的“visudo”实用程序进行编辑。
还建议将默认的 SSH 22 端口号更改为其他更高级别的端口号。打开SSH主配置文件并设置以下一些参数来限制用户访问。
vi /etc/ssh/sshd_config
禁用 root 登录
PermitRootLogin no
只允许特定用户
AllowUsers username
使用SSH协议2版本
Protocol 2
- 保护 SSH 服务器安全的 5 个最佳实践
6.保持系统更新
始终使用最新版本的补丁、安全修复程序和可用的内核来更新系统。
yum updates
yum check-update
7. 锁定 Cronjobs
Cron 有自己的内置功能,它允许指定谁可以、谁可能不想运行作业。这是通过使用名为 /etc/cron.allow 和 /etc/cron.deny 的文件来控制的。要使用 cron 锁定用户,只需在 cron.deny 中添加用户名,并在 cron.allow 文件中添加允许用户运行 cron 即可。如果您想禁止所有用户使用 cron,请将“ALL”行添加到 cron.deny 文件中。
echo ALL >>/etc/cron.deny
- Linux 中的 11 个 Cron 调度示例
8.禁用U盘检测
很多时候,我们希望限制用户在系统中使用USB记忆棒,以保护数据免遭窃取。创建文件“/etc/modprobe.d/no-usb”并添加以下行将不会检测USB存储。
install usb-storage /bin/true
9.开启SELinux
安全增强型Linux(SELinux)是内核中提供的强制访问控制安全机制。禁用SELinux意味着从系统中删除安全机制。在删除之前请仔细考虑,如果您的系统连接到互联网并可供公众访问,那么请多考虑一下。
SELinux 提供了三种基本的操作模式,它们确实是。
- 强制:这是默认模式,在计算机上启用并强制实施SELinux安全策略。
- 宽容:在此模式下,SELinux不会在系统上强制执行安全策略,仅警告和记录操作。此模式对于解决 SELinux 相关问题非常有用。
- 禁用:SELinux 已关闭。
您可以使用“system-config-selinux”、“getenforce”或“”从命令行查看SELinux模式的当前状态。 sestatus '命令。
sestatus
如果已禁用,请使用以下命令启用SELinux。
setenforce enforcing
它还可以从“/etc/selinux/config”文件进行管理,您可以在其中启用或禁用它。
10.删除KDE/GNOME桌面
无需在专用 LAMP 服务器上运行 X Window 桌面,例如 KDE 或 GNOME。您可以删除或禁用它们以提高服务器的安全性和性能。要禁用简单的打开文件“/etc/inittab”并将运行级别设置为3。如果您希望将其从系统中完全删除,请使用以下命令。
yum groupremove "X Window System"
11.关闭IPv6
如果您不使用 IPv6 协议,则应禁用它,因为大多数应用程序或策略不需要 IPv6 协议,并且当前服务器上不需要它。转到网络配置文件并添加以下行以禁用它。
vi /etc/sysconfig/network
NETWORKING_IPV6=no
IPV6INIT=no
12.限制用户使用旧密码
如果您想禁止用户使用相同的旧密码,这非常有用。旧密码文件位于/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 sufficient 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_cracklib”模块在PAM(可插入身份验证模块)模块堆栈中提供,该模块将强制用户设置强密码。使用编辑器打开以下文件。
另请阅读:
vi /etc/pam.d/system-auth
并使用信用参数添加行(lcredit、ucredit、dcredit 和/或 ocredit 分别小写、大写、数字等)
/lib/security/$ISA/pam_cracklib.so retry=3 minlen=8 lcredit=-1 ucredit=-2 dcredit=-2 ocredit=-1
16.启用Iptables(防火墙)
强烈建议启用 Linux 防火墙以保护服务器的未经授权的访问。应用iptables中的规则来过滤传入、传出和转发数据包。我们可以在特定的udp/tcp端口号中指定允许和拒绝的源和目标地址。
- 基本 IPTable 指南和技巧
17. 在 Inittab 中禁用 Ctrl+Alt+Delete
在大多数 Linux 发行版中,按“CTRL-ALT-DELETE” 将使系统重新启动。因此,如果有人错误地执行了此操作,那么至少在生产服务器上启用此选项并不是一个好主意。
这是在“/etc/inittab”文件中定义的,如果仔细查看该文件,您将看到类似于下面的行。默认情况下,该行不会被注释掉。我们必须把它注释掉。这个特定的按键序列信号将关闭系统。
Trap CTRL-ALT-DELETE
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
18. 检查账户密码是否为空
任何具有空密码的帐户都意味着网络上的任何人都可以对其进行未经授权的访问,这是 Linux 服务器内安全的一部分。因此,您必须确保所有帐户都有强密码,并且没有人拥有任何授权访问权限。空密码帐户存在安全风险,并且很容易被黑客攻击。要检查是否存在密码为空的帐户,请使用以下命令。
cat /etc/shadow | awk -F: '($2==""){print $1}'
19. 登录前显示 SSH 横幅
在 SSH 身份验证之前,最好设置一个合法横幅或带有一些安全警告的安全横幅。要设置此类横幅,请阅读以下文章。
- 向用户显示 SSH 警告消息
20. 监控用户活动
如果您正在与大量用户打交道,那么收集每个用户活动和他们所使用的进程的信息并在以后进行分析或以防出现任何类型的性能、安全问题非常重要。但我们如何监控和收集用户活动信息。
有两个有用的工具,称为“psacct”和“acct”,用于监视系统上的用户活动和进程。这些工具在系统后台运行,持续跟踪系统上的每个用户活动以及 Apache、MySQL、SSH 等服务消耗的资源, FTP等。有关安装、配置和使用的更多信息,请访问以下网址。
- 使用 psacct 或 acct 命令监视用户活动
21.定期查看日志
将日志移至专用日志服务器中,这样可以防止入侵者轻易修改本地日志。以下是常见 Linux 默认日志文件名称及其用法:
- /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.log:Yum 日志文件。
22.重要文件备份
在生产系统中,有必要对重要文件进行备份并将其保存在安全库、远程站点或异地以便灾难恢复。
23. 网卡绑定
网卡绑定有两种模式,需要在绑定界面中提及。
- mode=0 – 循环赛
- mode=1 – 活动和备份
NIC 绑定帮助我们避免单点故障。在NIC绑定中,我们将两个或多个网络以太网卡绑定在一起,并创建一个虚拟接口,我们可以在其中分配IP地址以与其他卡通信服务器。如果一张 NIC 卡因任何原因发生故障或不可用,我们的网络仍可用。
另请阅读:在 Linux 中创建 NIC 通道绑定
24.将/boot保持为只读
Linux内核及其相关文件位于/boot目录中,默认为可读写。将其更改为只读可降低关键启动文件未经授权修改的风险。为此,请打开“/etc/fstab”文件。
vi /etc/fstab
在底部添加以下行,保存并关闭它。
LABEL=/boot /boot ext2 defaults,ro 1 2
请注意,如果以后需要升级内核,则需要将更改重置为读写。
25. 忽略 ICMP 或广播请求
在“/etc/sysctl.conf”文件中添加以下行以忽略ping或广播请求。
Ignore ICMP request:
net.ipv4.icmp_echo_ignore_all = 1
Ignore Broadcast request:
net.ipv4.icmp_echo_ignore_broadcasts = 1
通过运行以下命令加载新设置或更改
#sysctl -p
如果您错过了上面列表中的任何重要的安全或强化技巧,或者您有任何其他需要包含在列表中的技巧。请在我们的评论框中留下您的评论。 TecMint 始终乐于接受意见、建议以及改进讨论。