linux 服务器的25个强化安全提示

2022-06-02 15:42:28 浏览数 (1)

Linux默认情况下是安全的,并同意进行一些扩展(这是有争议的话题)。但是,默认情况下,Linux 具有内置的安全模型。需要根据你的需要对其进行调整和自定义,这可能有助于构建更安全的系统。Linux 更难管理,但提供了更多的灵活性和配置选项。

1. 物理系统安全

配置 BIOS 禁用从启动 CD/DVD, External Devices, Floppy DriveBIOS. 接下来,启用BIOS 密码和保护 GRUB 使用密码来限制对系统的物理访问。

2. 磁盘分区

如果发生任何事故,拥有不同的分区以获得更高的数据安全性很重要。通过创建不同的分区,可以对数据进行分离和分组。当发生意外事故时,只会损坏该分区的数据,而其他分区的数据则保存下来。确保你必须有以下单独的分区,并确保第三方应用程序应安装在单独的文件系统下/opt.

代码语言:javascript复制
/
/boot
/usr
/var
/home
/tmp
/opt

3. 禁止不必要开机启动的服务

从服务器中查找并删除或禁用不需要的服务,以最大限度地减少漏洞。使用 chkconfig 命令来找出正在运行的服务 runlevel 3.

代码语言:javascript复制
# /sbin/chkconfig --list |grep '3:on'

一旦发现任何不需要的服务正在运行,请使用以下命令禁用它们。

代码语言:javascript复制
# chkconfig serviceName off

使用 RPM 包管理器,例如yum或者 apt-get工具列出系统上所有已安装的软件包并使用以下命令删除它们。

代码语言:javascript复制
# yum -y remove package-name
代码语言:javascript复制
# sudo apt-get remove package-name

4.检查监听网络端口

netstat 网络命令可以查看所有打开的端口和相关程序。使用 chkconfig 命令禁用系统中所有不需要的网络服务。

代码语言:javascript复制
# netstat -tulpn

5. 使用安全(SSH)

Telnetrlogin 协议使用纯文本,而不是加密格式,这是安全漏洞。SSH 是一种在与服务器通信时使用加密技术的安全协议。切勿直接以身份登录 root除非必要。用 ”sudo”来执行命令。sudo 在/etc/sudoers 文件也可以用visudo应用程序打开 VI 编辑。建议更改默认值 SSH 22端口号与其他一些更高级别的端口号。打开主SSH 配置文件,并做一些如下参数来限制用户访问。

代码语言:javascript复制
# vi /etc/ssh/sshd_config
禁用 root 登录
代码语言:javascript复制
PermitRootLogin no
只允许特定用户
代码语言:javascript复制
AllowUsers username
使用 SSH 协议 2 版本
代码语言:javascript复制
Protocol 2

6. 保持系统更新

当系统可用时,始终使用最新版本的补丁、安全修复和内核更新系统。

代码语言:javascript复制
# yum updates
# yum check-update

7. 锁定 Cronjobs

Cron有它自己的内置功能,它允许指定谁可以和谁不想运行作业。这是通过使用名为的文件来控制的/etc/cron.allow/etc/cron.deny. 要使用 cron 锁定用户,只需在cron.deny 并允许用户运行 cron add in cron.allow文件。如果你想禁止所有用户使用 cron,请添加 ALL 行到 cron.deny 文件。

代码语言:javascript复制
# echo ALL >>/etc/cron.deny

8. 禁用U盘检测

很多时候我们想限制用户使用 USB避免系统数据遭窃取。创建一个文件/etc/modprobe.d/no-usb 并添加以下行将不会检测到 USB 贮存。

代码语言:javascript复制
install usb-storage /bin/true

9. 开启SELinux

Security-Enhanced Linux (SELinux) 是内核提供的强制访问控制安全机制。禁用SELinux意味着从系统中删除安全机制。在删除之前请三思,如果你的系统连接到互联网并被公众访问,那么请多考虑一下。SELinux 提供了三种基本的操作模式,它们是。

  1. Enforcing:这是启用和强制执行的默认模式 SELinux 机器上的安全策略。
  2. Permissive: 在这种模式下, SELinux不会在系统上强制执行安全策略,只会警告和记录操作。此模式在故障排除方面非常有用SELinux 相关问题。
  3. DisabledSELinux 已关闭。

你可以查看当前状态 SELinux 使用 ' 从命令行模式system-config-selinux, getenforce 或者 sestatus 命令。

代码语言:javascript复制
# sestatus

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

代码语言:javascript复制
# setenforce enforcing

它也可以从 /etc/selinux/config 文件,你可以在其中启用或禁用它。

10. 删除 KDE/GNOME 桌面

没有必要跑 X Window 台式机之类的 KDE 或者 GNOME在你的专用LAMP服务器上。你可以删除或禁用它们以提高服务器的安全性和性能。禁用简单打开文件/etc/inittab 并将运行级别设置为 3. 如果你希望将其从系统中完全删除,请使用以下命令。

代码语言:javascript复制
# yum groupremove "X Window System"

11. 关闭 IPv6

如果你不使用 IPv6 协议,那么你应该禁用它,因为大多数应用程序或策略不需要 IPv6协议,目前在服务器上不需要它。转到网络配置文件并添加以下行以禁用它。

代码语言:javascript复制
# vi /etc/sysconfig/network
代码语言:javascript复制
NETWORKING_IPV6=no
IPV6INIT=no

12. 限制用户使用旧密码

如果你想禁止用户使用相同的旧密码,这将非常有用。旧密码文件位于/etc/security/opasswd. 这可以通过使用来实现PAM 模块。打开 /etc/pam.d/system-auth 文件在 RHEL / CentOS / Fedora.

代码语言:javascript复制
# vi /etc/pam.d/system-auth

打开 ‘/etc/pam.d/common-password 文件

代码语言:javascript复制
# vi /etc/pam.d/common-password

将以下行添加到auth 部分。

代码语言:javascript复制
auth        sufficient    pam_unix.so likeauth nullok

将以下行添加到password 部分禁止用户重复使用最后一个 5 他或她的密码。

代码语言:javascript复制
password   sufficient    pam_unix.so nullok use_authtok md5 shadow remember=5

只有最后 5服务器记住密码。如果你尝试使用最后一个5 旧密码,你会收到类似的错误。

代码语言:javascript复制
Password has been already used. Choose another.

13. 如何查看用户密码是否过期

在 Linux 中,用户的密码存储在 /etc/shadow 加密格式的文件。要检查用户的密码过期,你需要使用 chage 命令。它显示密码到期详细信息以及最后一次密码更改日期。系统使用这些详细信息来决定用户何时必须更改他/她的密码。查看任何现有用户的老化信息,例如 expiry datetime,使用以下命令。

代码语言:javascript复制
#chage -l username

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

代码语言:javascript复制
#chage -M 60 username
#chage -M 60 -m 7 -W 7 userName
参数
  1. -M 设置最大天数
  2. -m 设置最少天数
  3. -W 设置警告天数

14.手动锁定和解锁帐户

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

代码语言:javascript复制
# passwd -l accountName

Note : 锁定的用户仍然可用 root仅限用户。锁定是通过用 (!) 。如果有人尝试使用此帐户访问系统,他将收到类似于以下内容的错误。

代码语言:javascript复制
# su - accountName
This account is currently not available.

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

代码语言:javascript复制
# passwd -u accountName

15. 使用更强的密码

许多用户使用软密码或弱密码,他们的密码可能会被黑客入侵 dictionary based或蛮力攻击。这 pam_cracklib 模块在 PAM (Pluggable Authentication Modules) 模块堆栈,这将强制用户设置强密码。使用编辑器打开以下文件。> 另请阅读:

代码语言:javascript复制
# vi /etc/pam.d/system-auth

并使用信用参数添加行作为 (lcredit, ucredit, dcredit 和/或 ocredit 分别为小写、大写、数字等)

代码语言:javascript复制
/lib/security/$ISA/pam_cracklib.so retry=3 minlen=8 lcredit=-1 ucredit=-2 dcredit=-2 ocredit=-1

16.启用Iptables(防火墙)

强烈建议启用 Linux firewall以保护你的服务器未经授权的访问。应用规则iptables 过滤器 incoming, outgoingforwarding数据包。我们可以指定源地址和目的地址来允许和拒绝特定的udp/tcp 端口号。

17.在Inittab中禁用Ctrl Alt Delete

在大多数 Linux 发行版中,按 CTRL-ALT-DELETE’将使你的系统重新启动过程。因此,如果有人错误地这样做,至少在生产服务器上启用此选项并不是一个好主意。> 这在 ' 中定义/etc/inittab 文件,如果你仔细查看该文件,你将看到类似于下面的一行。默认情况下,该行没有被注释掉。我们必须将其注释掉。这个特定的按键序列信号将关闭系统。

代码语言:javascript复制
# Trap CTRL-ALT-DELETE
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now

18. 检查帐户是否有空密码

任何具有空密码的帐户都意味着它可以对网络上的任何人进行未经授权的访问,这是 Linux 服务器内安全的一部分。因此,你必须确保所有帐户都具有强密码,并且没有人具有任何授权访问权限。空密码帐户存在安全风险,很容易被黑客入侵。要检查是否有任何密码为空的帐户,请使用以下命令。

代码语言:javascript复制
# cat /etc/shadow | awk -F: '($2==""){print $1}'

19. 登录前显示 SSH Banner

在 SSH 身份验证之前,最好有一个带有一些安全警告的合法横幅或安全横幅。要设置此类横幅,请阅读以下文章。

20. 监控用户活动

如果你要与大量用户打交道,那么收集他们使用的每个用户活动和进程的信息并在以后或在任何类型的性能、安全问题的情况下对其进行分析很重要。但是我们如何监控和收集用户活动信息。有两个有用的工具叫做psacctacct 用于监视系统上的用户活动和进程。这些工具在系统后台运行,并持续跟踪系统上的每个用户活动和服务消耗的资源,例如Apache, MySQL, SSH, FTP

21. 定期查看日志

将日志移动到专用日志服务器中,这样可以防止入侵者轻松修改本地日志。以下是常见的 Linux 默认日志文件名称及其用法:

  1. /var/log/message – 整个系统日志或当前活动日志可用的地方。
  2. /var/log/auth.log – 身份验证日志。
  3. /var/log/kern.log – 内核日志。
  4. /var/log/cron.log – Crond 日志(cron 作业)。
  5. /var/log/maillog – 邮件服务器日志。
  6. /var/log/boot.log – 系统启动日志。
  7. /var/log/mysqld.log – MySQL 数据库服务器日志文件。
  8. /var/log/secure – 身份验证日志。
  9. /var/log/utmp 或者 /var/log/wtmp : 登录记录文件。
  10. /var/log/yum.log:Yum 日志文件。

22.重要文件备份

在生产系统中,有必要对重要文件进行备份并将它们保存在安全库、远程站点或异地灾难恢复中。

23. 网卡绑定

有两种模式 NIC

  1. mode=0 – Round Robin
  2. mode=1 – Active and Backup

NIC Bonding帮助我们避免单点故障。在网卡绑定中,我们将两个或多个网络以太网卡绑定在一起,形成一个虚拟的接口,在这个虚拟接口中,我们可以分配IP地址与其他服务器进行通信。我们的网络将可用的情况下,一个网卡是down或不可用的任何原因。

24. 保持 /boot 为只读

Linux内核及其相关文件在 /boot 目录默认为 read-write. 将其更改为read-only降低未经授权修改关键引导文件的风险。为此,打开/etc/fstab“ 文件。

代码语言:javascript复制
# vi /etc/fstab

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

代码语言:javascript复制
LABEL=/boot     /boot     ext2     defaults,ro     1 2

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

25. 忽略 ICMP 或广播请求

/etc/sysctl.conf要忽略的文件 ping 或者 broadcast 要求。

代码语言:javascript复制
Ignore ICMP request:
net.ipv4.icmp_echo_ignore_all = 1

Ignore Broadcast request:
net.ipv4.icmp_echo_ignore_broadcasts = 1

通过运行以下命令加载新设置或更改

代码语言:javascript复制
#sysctl -p

相关文章

linux之ssh命令

Linux之yum命令

Linux之netstat命令

0 人点赞