9 物理安全性 #
物理安全性很重要。Linux 生产服务器应安放于加锁的数据中心之内,只有通过安全检查的人员才能访问。您也可以考虑使用引导加载程序口令,具体视环境和情况而定。
此外,还要考虑如下问题:
哪些人拥有主机的直接物理访问权限?
他们是否应拥有这些权限?
是否可以保护主机不被篡改,以及是否应进行此保护?
特定系统上所需的物理安全措施数量视情况而定,并且可用资金不同,安全措施也可能会有很大差别。
9.1 系统锁 #
数据中心内的大部分服务器机架都包含锁定功能。这是位于机架正面的搭扣锁/圆筒锁,可让您转动插入锁定(或未锁定)位置的钥匙,以允许(或拒绝)进入。笼锁可防止有人篡改或窃取服务器的设备/介质,或者开箱直接操作/破坏硬件。防止系统重引导或从替代设备(例如 CD、DVD、闪存盘等)引导也很重要。
一些服务器还配有箱锁。根据系统供应商的设计和构造,这些锁可以发挥不同的作用。许多系统都设计为当尝试打开未开锁的系统时进行自我禁用。其他配有设备保护盖的系统将不允许插入或拔下键盘或鼠标。虽然有时锁是一项很实用的功能,但它们质量较差,很容易被恶意攻击者破坏。
9.2 锁定 BIOS #
本节介绍确保引导进程安全的基本方法。要了解使用 UEFI 和安全引导功能的更高级引导保护的相关信息,请参见第 17.1 节 “安全引导”。
BIOS(基本输入/输出系统)或其继承者 UEFI(统一可扩展固件接口)是 PC 类系统上最低级别的软件/固件。运行 Linux 的其他硬件类型(POWER、IBM Z)配有执行与 PC BIOS 类似功能的低级别固件。当本文档提及 BIOS 时,指的是 BIOS 和/或 UEFI。BIOS 指示系统配置,使系统处于一个明确定义的状态,并提供访问低级别硬件的例程。BIOS 执行已配置的 Linux 引导加载程序(例如 GRUB 2)来引导主机。
大部分 BIOS 实施都可配置为阻止未经授权的用户操作系统及引导设置。通常通过设置 BIOS 管理员或引导口令来完成。更改系统配置时需要输入管理员口令,而在每次正常引导时需要提供引导口令。对于大多数用例,设置管理员口令并将引导限制为内置硬盘便已足够。这样,攻击者便无法仅仅引导 Linux live CD 或闪存盘等设备。虽然这并不会提供高级别的安全(BIOS 可以被重置、去除或修改 — 假设用例访问权限),但它可以作为另一种保护措施。
许多 BIOS 固件实现都提供其他安全相关设置。您可以咨询系统供应商,查阅系统文档或在系统引导时检查 BIOS,来了解更多信息。
如果为系统设置了引导口令,主机将不会在无人照管的情况下引导(例如当系统重引导或发生电源故障时)。这是一种权衡。
首次设置系统时,通常不需要提供 BIOS 管理员口令。请勿忘记该口令,否则您将需要通过硬件操作清除 BIOS 内存来再次获得访问权限。
9.3 通过引导加载程序提供的安全性 #
SUSE Linux Enterprise Desktop 中默认使用的 Linux 引导加载程序 GRUB 2 可设置引导口令。它还提供了口令功能,以便只有管理员才能启动交互操作(例如编辑菜单项和进入命令行界面)。如果指定了口令,在您按 C 键和 E 键并输入正确的口令之前,GRUB 2 将不允许进行任何交互控制。
有关示例,请参见 GRUB 2 手册页。
设置这些口令时请务必记住它们。此外,启用这些口令可能只会减缓入侵,而不一定能阻止入侵。同样,有些人可能会从移动设备引导,并挂载您的根分区。如果您使用的是 BIOS 级别安全性和引导加载程序,比较好的做法是禁用从您计算机 BIOS 中的可移动设备进行引导的功能,然后通过口令来保护 BIOS 本身。
另请注意,需要将引导加载程序配置文件的模式更改为 600
(仅限 root
读取/写入)以对其进行保护,否则其他人将能够读取您的口令或哈希。
9.4 淘汰包含敏感数据的 Linux 服务器 #
安全策略包含即将被淘汰或被处置的存储媒体的特定处理过程。常常采用磁盘和媒体擦除过程,因为这会彻底销毁媒体。您可以在互联网上找到多个免费工具。搜索“dod 磁盘擦除实用程序”将返回多个搜索结果。要淘汰包含敏感数据的服务器,请务必确保无法从硬盘恢复数据。要确保已去除所有数据痕迹,可以使用 scrub
等擦除实用程序。许多擦除实用程序都会多次重写数据。这样可确保即使使用复杂的方法,也无法取回已擦除数据的任何部分。一些工具甚至可通过可引导移动设备来操作,并可根据美国国防部 (DoD) 标准去除数据。许多政府机构都会指定自己的数据安全标准。一些标准可能强于其他标准,但可能需要更多的实施时间。
一些设备(例如 SSD)使用耗损均衡功能,不一定会在同一物理位置写入新数据。此类设备会提供自己的删除功能。
9.4.1 scrub:磁盘重写实用程序 #
scrub
利用重复模式来重写硬盘、文件和其他设备,旨在增加从这些设备恢复数据的难度。它有三种基本操作模式:针对字符或块设备、针对文件,或者针对指定目录。有关详细信息,请参见手册页 man 1 scrub
。
- nnsa
用于清理可移动和不可移动硬盘的 4 轮 NNSA Policy Letter NAP-14.1-C (XVI-8),需要使用伪随机模式重写所有位置两次,然后使用一种已知模式:random(x2)、0x00、verify。
- dod
与 4 轮 DoD 522.22-M 第 8-306 节的过程 (d) 相同,用于清理可移动和不可移动加固磁盘。这需要使用一个字符、其补码、随机字符重写所有可寻址位置,然后进行校验。注意:scrub 首先执行一轮随机,以使校验更容易:random、0x00、0xff、verify。
- bsi
德国信息技术安全中心 (https://www.bsi.bund.de) 建议的 9 轮方法:0xff、0xfe、0xfd、0xfb、0xf7、0xef、0xdf、0xbf、0x7f。
- gutmann
下面引述的 Gutmann 文献中对规范化 35 轮序列进行了说明。
- schneier
Bruce Schneier 在“Applied Cryptography”(应用密码学,1996)中介绍的 7 轮方法:0x00、0xff、random(x5)
- pfitzner7
Roy Pfitzner 的 7 轮随机方法:random(x7)。
- pfitzner33
Roy Pfitzner 的 33 轮随机方法:random(x33)。
- usarmy
US Army AR380-19 方法:0x00、0xff、random。(注意:与 DoD 522.22-M 第 8-306 节的过程 (e) 相同,用于清理磁芯内存)。
- fillzero
1 轮模式:0x00。
- fillff
1 轮模式:0xff。
- random
1 轮模式:random(x1)。
- random2
2 轮模式:random(x2)。
- old
6 轮预发行版 1.7 擦除方法:0x00、0xff、0xaa、0x00、0x55、verify。
- fastold
5 轮模式:0x00、0xff、0xaa、0x55 和 verify。
- custom=string
1 轮自定义模式。字符串可能包含 C 样式数字转义符:\nnn(八进制)或 \xnn(十六进制)。
9.5 限制对可移动媒体的访问 #
在某些环境中,需要对可移动媒体的访问,例如 USB 存储设备或光学设备。udisks2
软件包随附的工具可帮助进行此类配置。
创建允许用户挂载和弹出可移动设备的用户组,例如 mmedia_all:
>
sudo
groupadd mmedia_all向新组添加特定用户
tux
:>
sudo
usermod -a -G mmedia_alltux
创建包含以下内容的
/etc/polkit-1/rules.d/10-mount.rules
文件:>
cat /etc/polkit-1/rules.d/10-mount.rules polkit.addRule(function(action, subject) { if (action.id =="org.freedesktop.udisks2.eject-media" && subject.isInGroup("mmedia_all")) { return polkit.Result.YES; } }); polkit.addRule(function(action, subject) { if (action.id =="org.freedesktop.udisks2.filesystem-mount" && subject.isInGroup("mmedia_all")) { return polkit.Result.YES; } });重要:规则文件命名规则文件的名称必须以数字开头,否则将忽略该名称。
规则文件按字母顺序进行处理。函数按其添加的顺序进行调用,直到其中一个函数返回值为止。因此,要添加在其他规则之前处理的授权规则,请将其放入 /etc/polkit-1/rules.d 中名称排序在其他规则文件之前的某个文件中,例如
/etc/polkit-1/rules.d/10-mount.rules
。每个函数应从polkit.Result
返回值。重启动
udisks2
:#
systemctl restart udisks2重启动
polkit
#
systemctl restart polkit
9.6 通过 USBGuard 强制执行 USB 设备授权,实现系统保护 #
USBGuard 软件框架通过强制执行的 USB 设备授权来帮助保护您的系统。它根据设备属性实现允许列表和阻止列表功能。
USBGuard 提供以下功能:
用于与正在运行的 USBGuard 守护程序交互的命令行界面
具有进程间通讯 (IPC) 接口的守护程序组件,用于动态交互和策略实施
用于编写 USB 设备授权策略的规则语言
用于与共享库中实施的守护程序组件交互的 C++ API
9.6.1 安装 USBGuard #
USBGuard 守护程序根据策略中定义的一组规则决定对哪个 USB 设备授权。要安装和配置 USBGuard,请使用以下命令:
要安装 USBGuard,请使用以下命令:
>
sudo
zypper install usbguard系统会安装 USBGuard 和所需的依赖项。如果要与 USBGuard 服务进行交互,可以安装
usbguard-tools
。要根据当前连接的 USB 设备生成规则集,请切换到
root
:#
usbguard generate-policy > /etc/usbguard/rules.conf注意您可以通过编辑
/etc/usbguard/rules.conf
文件来自定义 USBGuard。您可以手动启动 USBGuard 守护程序,或者通过切换到
root
来确保在系统启动时自动启用该守护程序:#
systemctl enable --now usbguard.service您可以授权或取消授权设备与系统交互,具体取决于
usbguard-daemon.conf
文件中选项ImplicitPolicyTarget
的值。此选项用于处理与策略中的任何规则都不匹配的设备。usbguard allow-device 6
usbguard block-device 6
您还可以使用
reject-device
选项取消授权,并从系统中去除设备。注意可以使用
usbguard --help
命令查看所有选项。
9.6.2 如何使用 USBGuard #
您可以配置安全策略,基于设备属性实现允许和阻止列表,从而通过强制执行的 USB 设备授权来保护您的系统。
9.6.2.1 USBGuard 配置文件 #
当系统分析命令行选项并使用它们配置 USBGuard 守护程序的运行时参数后,USBGuard 守护程序会加载 usbguard-daemon.conf
文件。默认情况下,该文件位于 /etc/usbguard/usbguard-daemon.conf
。文件中的一些选项包括:
RuleFile=PATH
USBGuard 守护程序会从此文件中加载策略规则集,并在其中编写通过 IPC(进程间通讯)接口接收的新规则。默认为
%sysconfdir%/usbguard/rules.conf
。ImplicitPolicyTarget= TARGET
如何处理与策略中的任何规则都不匹配的设备,例如:
允许 - 对每个现有设备授权
阻止 - 取消对每个现有设备的授权
拒绝 - 在逻辑上从系统中去除设备节点
PresentDevicePolicy= POLICY
如何处理守护程序启动时已连接的设备。
允许 - 对每个现有设备授权
阻止 - 取消对每个现有设备的授权
拒绝 - 去除所有现有设备
保留 - 同步内部状态
应用策略 - 评估所有现有设备的规则集
IPCAllowedUsers= USERNAME
以空格分隔的用户名列表,守护程序接受来自这些用户的 IPC 连接。
IPCAllowedGroups= GROUPNAME
以空格分隔的组名列表,守护程序接受来自这些组的 IPC 连接。
IPCAccessControlFiles= PATH
文件路径,守护程序将这些文件解释为 IPC 访问控制定义文件。
IPCAllowedUsers=root joe IPCAllowedGroups=wheel
该示例允许用户 root
、joe
和组 wheel
的成员拥有完整的 IPC 权限。
9.6.3 更多信息 #
要了解 USBGuard 的详细信息,请参见:
https://usbguard.github.io/ 中的上游文档
man usbguard
man usbguard-rules.conf
man usbguard-daemon
man usbguard-daemon.conf