GRUB引导菜单加密仅限制菜单操作,无法阻止物理篡改;需结合BIOS/UEFI密码、LUKS全盘加密、Secure Boot及TPM绑定才能实现有效防护。

GRUB引导菜单加密能防止他人通过单用户模式重置root密码或修改内核参数,但无法完全阻止物理接触下的系统篡改;真正有效的防护需结合BIOS/UEFI密码、全盘加密(如LUKS)和安全启动(Secure Boot)。
为GRUB菜单设置密码(仅限菜单操作限制)
此步骤可阻止未授权用户编辑启动项或进入GRUB命令行,但不加密磁盘内容,也无法阻止绕过GRUB直接从Live USB启动。
- 生成加密密码:在终端运行 grub-mkpasswd-pbkdf2,输入密码后复制输出的
grub.pbkdf2...字符串 - 编辑 /etc/grub.d/40_custom,添加如下内容(替换为你的加密串):
set superusers="admin" password_pbkdf2 admin grub.pbkdf2.sha512.10000.8A2...[省略]
- 若需对特定菜单项加锁,在对应启动项的
menuentry块开头添加--users admin,例如:menuentry 'Ubuntu' --users admin { ... } - 更新配置:sudo update-grub(Debian/Ubuntu)或 sudo grub2-mkconfig -o /boot/grub2/grub.cfg(RHEL/CentOS)
启用Secure Boot并签名GRUB与内核模块
Secure Boot可验证启动链完整性,防止未签名的GRUB、内核或驱动加载,是防篡改的关键一环。
- 确认主板已开启UEFI模式且Secure Boot处于Enabled状态(在开机时进BIOS/UEFI设置)
- 安装 mokutil 工具,用 sudo mokutil --sb-state 检查当前状态
- 确保系统使用已签名的GRUB2(多数现代发行版默认支持),内核模块需经 kernel signing key 签名;自编译模块须手动签名并导入MOK(Machine Owner Key)
- 若启用自定义内核或第三方驱动(如NVIDIA),需用 sudo mokutil --import 注册公钥,并在下次重启时按提示完成密钥注册
配合LUKS全盘加密与TPM绑定(高安全场景)
仅靠GRUB密码毫无意义——攻击者可关机后用另一系统挂载你的/boot或/分区。LUKS加密根分区+TPM密封密钥才能实现“无物理接触即无法解密”。
- 安装系统时选择LUKS加密(或对已有系统迁移:备份→重装加密→恢复数据)
- 将LUKS主密钥封装进TPM2芯片(需硬件支持),使用 systemd-cryptenroll 工具:
sudo systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=7 /dev/sda2
- 确保initramfs包含TPM2和cryptsetup支持(检查 /etc/crypttab 和 dracut --regenerate-all 或 update-initramfs -u)
- 此时即使获取硬盘,无本机TPM2和指定PCR状态(如Secure Boot开启、特定固件版本)则无法自动解锁
物理层必须同步加固
所有软件级保护在物理访问面前形同虚设。忽略这一步,前面所有配置都可能被绕过。
- 设置BIOS/UEFI管理员密码,并禁用USB/CD启动(或设为仅第一启动项为硬盘)
- 禁用调试接口:关闭JTAG、Serial Console、Thunderbolt热插拔(部分平台需在UEFI中设置“Security Level”为High或Enable Security Boot with DMA Protection)
- 服务器或高敏设备建议启用机箱入侵检测(Chassis Intrusion Detection),触发后清空TPM或锁定启动
- 对笔记本等便携设备,考虑使用物理锁具(如Kensington锁)并禁用唤醒源(如LAN/Wake-on-USB)防止远程唤醒后冷启动攻击










