Netwrix 1Secure 提供跨数据和身份的统一可见性——免费试用14天,享有完全访问权限。开始免费试用

资源中心最佳实践

Linux 服务器加固与安全最佳实践

Linux 服务器加固与安全最佳实践

简介

在您的计算环境中(包括 Unix 和 Linux 系统)实施安全的配置,是一项关键的安全最佳实践,因为它可以缩小攻击面,并限制网络攻击可能造成的损害。事实上,系统加固是许多合规指令中的核心控制措施。

本指南将解释什么是配置加固,以及如何为您的 Linux 和 Unix 系统建立加固后的构建标准。

系统加固的基础

最安全的 Linux 服务器或其他计算机,是那些处于关机状态并且与网络断开连接的设备。但如果我们希望实际使用这台机器来提供 IT 服务,就必须在其启动并接入网络(甚至互联网)时,尽可能增强其安全防护能力。

这时就需要进行加固(hardening)。对系统进行加固,意味着为安全运行和数据保护优化其配置。可被利用的漏洞范围非常广,因此需要遵循三条主要规则:

  • 移除不属于该计算机职责所需的功能。 例如,操作系统和其他应用程序通常以“快速启动(quick start)”状态交付,预先加载了实用工具和功能,便于满足用户可能需要的用途。然而,提供的功能越多,主机暴露的攻击面就越大。因此,请务必禁用不需要的功能,并尽可能避免添加不必要的功能。
  • 及时打补丁并更新。 软件设计中的缺陷会形成攻击者可利用的漏洞。软件供应商会提供补丁或更新后的软件版本以修复这些问题,因此请确保包括操作系统在内的所有软件始终保持完全更新。
  • 保持安全的配置设置。 至关重要的是,要启用并持续维护安全设置。

Linux 系统加固

毫不意外,Linux 安全加固本身就是一项专业流程,因为市面上存在种类繁多、细微差异各不相同的 Linux 发行版。尽管关于 Linux 服务器加固的最佳实践并不缺少各类指南、检查清单和建议——包括 Center for Internet Security (CIS) 基准以及 DISA STIGs——但本指南将提供需要采用的关键配置选项。

重要: 在应用加固设置之前,请确保已备份系统,并在重启后进行测试。很容易被锁定在外!

移除不需要的功能

首先移除所有不需要用来运行服务器的功能、实用工具和服务。卸载不必要的软件,并禁用不需要的系统服务。由于基础设施中的硬件同样可能存在可被利用的漏洞,请确保任何可访问的接口(例如 USB 端口)都已禁用,必要时甚至应从设备上进行物理移除。

该流程是先登录,然后获取已安装的软件包和服务的报告,再进行审查以识别哪些可以移除或禁用。对于保留的关键项,请检查是否有可用补丁,以修复可被利用(被攻击者利用)已知漏洞。

如何在 Linux/Unix 系统上列出软件

系统

使用的命令

Linux(例如:RedHat或CentOS)

rpm -qa --qf '%{NAME} %{VERSION} %{VENDOR}\\n'

Debian Linux(例如:Ubuntu)

dpkg -l

Fedora Linux

从终端或PuTTY会话列出软件:

service --status-all

chkconfig --list

systemctl -a

停止服务:

Service <Service-Name> stop

Chkconfig <Service-Name>

Systemctl stop <Service-Name>

禁用服务:

Systemctl disable <Service-Name>

Chkconfig <Service-Name> off

还要检查 /etc/init.d/ 路径下的任何服务控制脚本,并运行 ls /etc/init.d/ 来显示所有启动脚本;然后重命名或删除任何要禁用的脚本。

尽量减少开放端口和其他网络漏洞

基于网络的攻击是最常见的威胁之一。为降低风险,请识别所有对网络开放且可访问的端口,并移除任何不需要的、与之对应的进程。要在 Linux 上列出开放端口,请使用以下命令:

      ss -tulpn | egrep “LISTEN” | awk ‘{print “IP-Port “ $4 “ PID/Name “ $7}’
      

此外:

  • 确保 TCP Wrappers 服务处于启用状态。
  • 同时定义一个 etc/hosts.allow 白名单以及一个 etc/hosts.deny 黑名单。
  • 使用 iptablesFirewalld 服务,并为 IP V4 和 V6 流量都设置“拒绝全部”(Deny All)策略。即使你正在使用网络内的第三方 WAF 和防火墙保护,也要这样做。
  • 阻止 ICMP 流量,以防止黑客工具用于设备发现的“ping 扫描”。

审查用户帐户和身份验证

检查本地用户帐户并删除任何不需要的帐户。对于保留的本地用户帐户,应配置强密码策略,涵盖密码复杂度、长度、过期时间、可复用性以及更改频率。此外,请确保对存储的密码使用强哈希算法。

用户帐户和身份验证应通过诸如 Active Directory 之类的集中式控制系统来进行管理;更理想的是使用现代的 privileged access management (PAM) 解决方案,它支持“Zero Standing Privilege(零常驻特权)”策略,从而抵消了传统用户帐户和永久分配特权所带来的许多问题。当然,切勿使用 root,并且始终确保仅在确有需要时才使用 sudo 提权。

如何为本地帐户配置密码策略

找到并编辑以下配置文件: /etc/security/pwquality.conf

要强制使用 14 个字符的密码:

      minlen = 14
      

要对所有密码强制复杂性:

      minclass = 14
      

      dcredit = -1

ucredit = -1

ocredit = -1

lcredit = -1
      


要实施强密码锁定策略:

更新 /etc/pam.d/system-auth 和 /etc/pam.d/password-auth 文件,以设置以下选项:

      auth required pam_faillock.so preauth silent deny=5 unlock_time=900

auth required pam_faillock.so authfail deny=5 unlock_time=900
      

要实施至少 5 个密码的密码历史策略:

在 /etc/pam.d/password-auth 中的 pam_pwhistory.so 和 pam_unix.so 行中添加记住记忆选项 remember=5:

      password requisite pam_pwhistory.so try_first_pass local_users_only enforce-for-root retry=3 remember=5

password sufficient pam_unix.so sha512 shadow try_first_pass use_authtok remember=5
      

要实施强密码哈希:

按如下方式更新 /etc/pam.d/system-auth/etc/pam.d/password-auth 文件:

/etc/pam.d/password-auth:

      password sufficient pam_unix.so sha512 shadow try_first_pass use_authtok
      

/etc/pam.d/system-auth:

      password sufficient pam_unix.so sha512 shadow try_first_pass use_authtok remember=5
      

审查服务账户

应审查系统账户和服务账户,并移除任何不再需要的账户。

服务帐户之所以“加固”,是因为它们仅支持本地运行的进程操作,并且不提供用户 Shell,因此这些帐户绝不能通过用户登录来访问服务器。不过,加固的核心理念是最小化功能,因此仍应移除未使用的服务帐户。

Linux 与 Unix 的 SSH 加固

作为远程管理 Linux 系统的主要通道,SSH 需要特别关注。要加固 SSH 服务器的运行,需要在该设置文件中启用一些默认设置。/etc/ssh/sshd_config 文件中的相关选项。 

SSH 用于所有 Linux 和 Unix 的访问,因此以下指南同样适用于 Unix 的加固。

启用 SSH 协议的 v2

例如,默认配置会启用已过时且安全性较低的 SSH 协议版本 1。CIS 加固指南建议启用版本 2 以增强安全性。为此,只需在配置文件(/etc/ssh/sshd_config)中通过删除 # 来取消对 Protocol 2 设置的注释,如下所示:

/etc/ssh/sshd_config 中的默认条目 /etc/ssh/sshd_config

      # The default requires explicit activation of protocol 1

# Protocol 2
      

更安全的配置:

      # The default requires explicit activation of protocol 1

Protocol 2
      

进一步加固

此外,请将以下推荐的 CIS 加固设置应用到配置文件中:

      LogLevel INFO

IgnoreRhosts yes

…

PermitEmptyPasswords no

…

LoginGraceTime 60

PermitRootLogin no

MaxAuthTries 4

HostbasedAuthentication no

…

X11Forwarding no…

PermitUserEnvironment no

…

ClientAliveInterval 300

ClientAliveCountMax 0

…

Banner /etc/issue.net

 …

AllowUsers <Specify user names, separated by spaces, e.g. user1 user2>
      

补充说明:

/etc/issue.net 需要创建/编辑该文件,以包含合适的 Banner,例如:

警告! 未经授权访问本系统被禁止,并将依法追究责任。通过访问本系统,即表示您同意:如怀疑存在未经授权的使用行为,可能会对您的操作进行监控。

AllowUsers, AllowGroups 一起,也支持作为配置开关/关键字使用。

Apache Web 服务器加固

Linux 是托管基于互联网的 Web 应用程序的首选平台,Apache Tomcat 和 Apache HTTP Server(通常称为 Apache HTTPD)是提供 Web 内容时最受欢迎的两种选择。

Apache 配置加固的方法也是一样的:尽量减少功能,并在可用的情况下启用安全的配置设置。

确认仅启用了必要的 Apache 模块:

      httpd -M
      

例如,mod_davmod_dav_fs 应始终禁用;而 log_config 模块应始终加载并启用。

确认 package.access 的定义仅包含以下允许的软件包:

package.access = sun.,org.apache.catalina.,org.apache.coyote.,

org.apache.tomcat.,org.apache.jasper.

配置 server.xml 文件:

位于 server.xml 的文件(在 CATALINA_HOME/conf  路径中)是 Web 服务器的核心配置存储。建议在 server.xml 中包含的设置如下:

  • 禁用关闭端口:
      Server port="-1" shutdown="SHUTDOWN">
      
  • 移除未使用的连接器,包括默认 HTTPConnector AJPConnector。要移除 HTTPConnector,请删除或注释掉此标签:
      Connector className="org.apache.catalina.connector.http.HttpConnector"

...

connectionTimeout="60000"/>
      

移除默认的 presence-advertising 设置:

适用于 Tomcat:

xpoweredBy 属性设置为 false

      xpoweredBy="false" />
      

适用于 HTTP Server:

  • 移除默认 index.html,并对以下来自 /etc/httpd/conf.d/welcome.conf  的内容逐行使用 # 或 ## 进行注释:
      ##<LocationMatch "^/+$">

## Options -Indexes

## ErrorDocument 403 /error/noindex.html

##</LocationMatch>
      
  • 注释掉 Server-Status 部分:
      ##<Location /server-status>

## SetHandler server-status

## Order deny,allow

## Deny from all

## Allow from .example.com

##</Location>
      
  • 注释掉 server-info 部分:
      ##<Location /server-info>

## SetHandler server-info

## Order deny,allow

## Deny from all

## Allow from .example.com

##</Location>
      

禁用诊断跟踪功能:

将每个 allowTrace  属性的值设置为 Connector 中的 false

禁用应用程序的自动部署,并禁用开机启动时的部署:

      autoDeploy="false"

deployOnStartup="false"
      

进一步加固:

  • 确保文件和文件夹权限足够严格,并使 Apache 服务使用非 shell 的服务帐户运行(即不能用于登录系统的帐户)。禁用目录列表和浏览。
      $CATALINA_HOME

$CATALINA_BASE
      

面向 Linux 的内核加固

SELinux 会修改 Linux 内核以强制执行强制访问控制(MAC),从而限制 Linux 进程如何访问文件和程序。此额外的限制层提供了针对 root kit 恶意软件的基础防护机制。对于 Debian 发行版,AppArmor 提供了等效级别的 MAC。

SELinux 设置

在 CentOS/RHEL 上安装 SELinux:

      dnf install libselinux
      

启用 SELinux:

默认情况下,SELinux 会被禁用。要在启动时启用 SELinux,请 edit/etc/default/grub 并删除这些默认设置:

      selinux=0

enforcing=0
      

将 SELinux 配置设置为 enforcing

编辑 /etc/selinux/config 文件以包含以下内容:

      SELINUX=enforcing

SELINUXTYPE=default
      

检查所有服务是否都以由 SELinux 控制的安全上下文运行:

下面的命令将列出从 init 进程启动的任何服务,这些服务可能需要为其分配非默认的安全上下文:

      ps -eZ | egrep "initrc" | egrep -vw "tr|ps|egrep|bash|awk" | tr ':' ' ' | awk '{ print $NF }'
      

重新启动计算机,确保已加载所有设置。

AppArmor 设置

在 Ubuntu/Debian 上安装 AppArmor:

      apt-get install apparmor apparmor-profiles apparmor-utils
      

在启动时启用 AppArmor:

编辑 /etc/default/grub 并添加以下设置:

      GRUB_CMDLINE_LINUX="apparmor=1 security=apparmor"
      

确保所有 AppArmor 配置文件都处于 enforce 模式:

      aa-enforce /etc/apparmor.d/*
      

嵌入式 Linux 加固

嵌入式 Linux 为嵌入式设备或嵌入式系统提供精简版的操作系统,例如智能手机、智能电视、机顶盒以及宽带互联网路由器。

当不需要通常由服务器级 Linux 设备所提供的全部功能范围,并且为节省制造成本而将存储、内存和 CPU 等硬件资源尽量缩减时,具有更小占用空间的简化操作系统就很有吸引力。 例如,谷歌开发的开源 Android 平台针对智能手机和电视进行了优化,而 OpenWrt 路由器固件则用于多种宽带路由器。

操作系统中包含的功能会因预期应用而差异很大。例如,Android 包含屏幕锁定、人脸识别、PIN 输入支持以及位置服务;这些功能在家用路由器的操作系统中并不需要,但会包含 VPN、访客 Wi‑Fi 和带宽限速等功能。 因此,安全加固(hardening)建议会专门与所使用的特定设备和平台绑定。

Android 加固要点

确保设备固件是最新版本:

转到 Settings | System | System Updates;选择 Check for Update 并安装所有可用的更新。

安装 Google Play 和安全更新:

转到 Settings | Security:

  • 选择 Google Security Check-Up 并应用所有可用的更新。
  • 选择 Google Play system update 并应用所有可用的更新。

启用通用设备安全:

  1. 转到 Settings | Security | Device Security,然后执行以下操作:
  • ‘Screen Lock’ 设置为 ‘Enabled’。
  • ‘Pattern Visible’ 设置为 ‘Disabled’。
  • ‘Automatically Lock’ 设置为 ‘Immediately’。
  • 设置 ‘Power Button Instantly Locks’‘On’。
  • 设置设备管理员应用 ‘Find My Device’‘Enabled’。
  • 设置 ‘Allow remote lock and erase’‘Enabled’。

2. 进入 Settings | System | Advanced ,然后执行以下操作:

  • 设置 ‘Developer Options’‘Off’。

3. 转到 Settings | Apps & Notifications | Advanced | Special App Access ,然后执行以下操作:

  • ‘Install Unknown Apps’ 设置为 ‘Not Allowed’。

4. 打开 Play Store | Menu 并执行以下操作:

  • 选择 ‘My Apps & Games’ ,然后点击 ‘Update All’。

OpenWrt 加固要点

  • 将管理员密码从默认值更改。
  • 确保固件始终更新到最新版本。

Kali Linux 加固

Kali Linux 已针对成为渗透测试人员的首选平台进行了优化,因此包含广泛的安全审计和渗透测试工具。

由于 Kali Linux 是基于 Debian 的 Linux 发行版,你可以使用上面的 Linux 加固建议来解决 Kali Linux 系统中的安全弱点。

Linux Mint 安全加固

同样地,对于 Linux Mint,由于它是从 Ubuntu 派生的桌面 Linux 平台,应当采用用于 Debian-Linux 的相同加固流程。按前面的 Linux Hardening Checklist 步骤逐项操作,并将这些措施应用到你的 Linux Mint 系统中。

加固 Arch Linux

作为一款不直接源自 Debian 或 Fedora 的独立 Linux 发行版,Arch Linux 在加固措施方面属于个案情况,尽管关于如何以及加固什么的理念是相似的。Arch 代码被有意构建为精简的“no filler”Linux 发行版,因此在移除/禁用不必要服务方面通常需要更少的加固工作。

结语

即使是加固后的系统仍然可能被入侵,尤其是通过以下方式:

  • 零日威胁——我们并不知情、因此也未加以防护的漏洞利用
  • 勒索软件和其他恶意软件
  • 内部威胁,包括使用被劫持凭据的黑客,以及滥用其访问权限的用户

因此,除了加固系统之外,还需要额外的防御措施。尤其重要的是监控系统和文件的完整性。任何非预期的变更都可能导致入侵或其他安全事件。Netwrix Change Tracker 可对所有非计划变更提供实时告警,并支持所有 Linux 和 Unix 平台。

Netwrix Change Tracker

使用来自 Netwrix 的安全配置管理软件,增强对 Linux/Unix 系统完整性的信心。

申请免费试用

分享到