2. Linux系统安装与分区安全
Linux 主机的安全基线并不是从系统装好、登录进去之后才开始的,而是从安装介质进入引导菜单的那一刻就已经确定。安装阶段决定了内核与引导程序是否可信、磁盘上的数据是否可被离线读取、关键引导文件是否可被篡改。如果这一层没有做好,后续的防火墙、SELinux、审计规则都可能被绕过——攻击者只要拿到磁盘或能改写引导分区,就能在系统启动前植入代码。本节围绕安装介质校验、磁盘分区方案、LVM 加密、/boot 与 /boot/efi 保护、安全引导与 UEFI 锁定五个环节,说明每一步的实际做法与判断依据。
安装介质校验:先确认镜像可信
从官网或镜像站下载的 ISO 必须经过完整性校验,避免下载过程中被替换或损坏。发行版通常同时提供校验文件和签名文件,例如 Rocky Linux 9 的目录下会有 Rocky-9.4-x86_64-dvd.iso、CHECKSUM 和 CHECKSUM.asc。校验分两步:先用 SHA256 比对哈希,再用 GPG 验证 CHECKSUM 文件本身的签名,只有签名有效,哈希值才可信。
# 1. 计算本地镜像哈希
sha256sum Rocky-9.4-x86_64-dvd.iso
# 2. 导入发行版公钥并验证校验文件签名
gpg --import RPM-GPG-KEY-Rocky-9
gpg --verify CHECKSUM.asc CHECKSUM
# 3. 比对哈希(示例值,实际以官方为准)
grep Rocky-9.4-x86_64-dvd.iso CHECKSUM
判断依据很直接:gpg --verify 输出 Good signature,且本地 sha256sum 结果与 CHECKSUM 中对应行完全一致,才可写入 U 盘。若只比对哈希而不验签,攻击者可以同时替换 ISO 和 CHECKSUM,校验就失去意义。写入介质后,还应在目标机 BIOS/UEFI 中确认从该介质启动,并在安装器菜单里选择“Test this media & install”做一次介质自检。
磁盘分区方案:按安全边界划分
分区不只是容量规划,更是安全边界的划分。把 /home、/var、/tmp 独立出来,可以分别施加 nodev、nosuid、noexec 挂载选项,限制用户目录和临时目录中的可执行文件与设备文件。典型的安全分区方案如下表(以 200 GB 磁盘为例,数值为示例规划):
| 挂载点 | 建议容量 | 关键挂载选项 | 安全目的 |
|---|---|---|---|
| /boot | 1 GB | 默认 | 存放内核与 initramfs |
| /boot/efi | 600 MB | vfat, umask=0077 | UEFI 引导分区 |
| / | 50 GB | 默认 | 系统根 |
| /var | 40 GB | nosuid | 日志与服务数据 |
| /tmp | 10 GB | nodev,nosuid,noexec | 阻止临时目录执行 |
| /home | 剩余 | nodev,nosuid | 用户数据隔离 |
这些选项写入 /etc/fstab 后生效,例如:
/dev/mapper/vg_root-tmp /tmp xfs defaults,nodev,nosuid,noexec 0 0
注意 noexec 会让部分依赖 /tmp 执行的程序异常,上线前需在测试环境验证。分区方案确定后,安装器中的“手动分区”应逐项创建,而不是交给自动分区。
LVM 加密:让离线数据不可读
LVM 提供卷组与逻辑卷的灵活管理,而 LUKS 在其下层对物理卷加密。推荐结构是:物理分区 → LUKS 容器 → LVM PV → VG → 多个 LV。这样整块磁盘(除 /boot 外)都处于加密保护下,磁盘被拆下接入其他机器也无法读取。
# 安装器外的手工示意(实际由安装器完成)
cryptsetup luksFormat /dev/sda2
cryptsetup open /dev/sda2 cryptlvm
pvcreate /dev/mapper/cryptlvm
vgcreate vg_root /dev/mapper/cryptlvm
lvcreate -L 50G -n lv_root vg_root
mkfs.xfs /dev/vg_root/lv_root
开机时由 initramfs 提示输入口令解锁 LUKS,再激活 LVM 并挂载根分区。判断加密是否生效,可在系统内执行 lsblk -f,看到 crypto_LUKS 类型以及 cryptlvm 映射层;cryptsetup status cryptlvm 应显示 is active。口令强度直接决定离线破解难度,建议使用长口令或结合 TPM2 自动解锁,但 TPM 方案需评估物理接触风险。
/boot 与 /boot/efi 保护
/boot 存放内核与 initramfs,无法被 LUKS 加密(引导程序读不了),因此它是攻击面。保护手段包括:限制挂载权限、设置文件属性、监控完整性。例如给内核与 initramfs 加不可变属性:
chattr +i /boot/vmlinuz-*
chattr +i /boot/initramfs-*.img
lsattr /boot/vmlinuz-*
/boot/efi 是 FAT32 分区,权限模型弱,应通过 umask=0077 挂载,使只有 root 可读写。同时用 AIDE 或 rpm 校验定期比对 /boot 内容:rpm -Va | grep /boot 若出现 5(内容变化)标记,说明内核或 initramfs 被改动,需立即排查。
安全引导与 UEFI 锁定
Secure Boot 由固件验证引导加载程序的签名,阻止未签名的 bootloader 或内核模块加载。启用后,mokutil --sb-state 应输出 SecureBoot enabled。若使用自编译内核或第三方驱动,需要通过 MOK 注册密钥,否则模块会被拒绝。UEFI 固件本身应设置管理员口令,关闭从外部介质启动,并开启固件写保护,防止攻击者修改启动顺序或刷入恶意固件。
下面这张图把安装阶段的安全控制点串成一条从介质到运行系统的信任链,便于对照检查每个环节的输入、保护对象与验证方式。
把上述控制点落到安装流程中,可以形成一份安装后立即执行的核查清单:确认 gpg --verify 通过、lsblk -f 显示 LUKS 层、findmnt /tmp 含 noexec、lsattr /boot/vmlinuz-* 含 i 属性、mokutil --sb-state 为 enabled。任何一项不满足,都应在系统接入生产网络前修正,而不是等到运行期再补。