grub2密码保护是防止物理接触提权的第一道防线,需结合secure boot、bios/uefi密码、luks全盘加密及tpm绑定才能有效防护;仅设grub密码无法阻止live cd/usb或重装系统等绕过方式。

直接在 GRUB2 启动菜单编辑内核参数(如加 init=/bin/bash 或 rd.break)是物理接触下最常见、最有效的提权手段。加固的核心不是“防不住就不防”,而是让攻击者无法在不触发告警、不留下痕迹、不需密码的前提下完成参数修改。
锁定 GRUB2 启动菜单并设置管理员密码
默认 GRUB2 菜单可自由编辑,必须启用密码保护才能限制修改权限。
- 生成加密密码:运行
grub2-mkpasswd-pbkdf2,按提示输入强密码,复制输出的grub.pbkdf2...字符串 - 编辑配置文件:
sudo vim /etc/grub.d/40_custom,在末尾添加:set superusers="admin" password_pbkdf2 admin grub.pbkdf2...(粘贴上一步结果)
- 为每个启动项添加权限控制:在
/etc/default/grub中确认GRUB_DISABLE_RECOVERY="true"已启用,并确保GRUB_CMDLINE_LINUX不含rd.break或init=/bin/bash类调试参数 - 更新配置:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
禁用单用户模式与紧急 shell 入口
即使菜单被锁,攻击者仍可能通过中断启动流程进入 emergency 或 rescue 模式。需从内核参数和系统服务两层封堵。
- 移除默认的单用户入口:编辑
/etc/sudoers,确认没有ALL=(ALL) NOPASSWD: /sbin/sulogin这类放行 - 屏蔽关键启动参数:在
/etc/default/grub的GRUB_CMDLINE_LINUX中加入:rd.systemd.unit=multi-user.target systemd.unit=multi-user.target - 禁用 rescue.target 和 emergency.target 的自动激活:运行
sudo systemctl mask rescue.target emergency.target
配合 BIOS/UEFI 层级防护
GRUB 密码本身可被绕过(如重装系统、换硬盘),必须与固件层策略联动才有效。
- BIOS/UEFI 中启用 Secure Boot,并只允许签名的 GRUB2 和内核镜像加载
- 禁用所有非必要启动设备(USB、CD/DVD、网络 PXE),仅保留内置硬盘
- 设置 BIOS/UEFI 管理员密码(非开机密码),防止重置启动顺序或关闭 Secure Boot
- 若主板支持,启用 TPM 2.0 并绑定 GRUB 配置哈希,使任何菜单修改触发启动失败
验证与持续防护
加固后必须现场测试效果,且不能忽略日志与响应机制。
- 重启并尝试按
e编辑启动项——应提示输入 GRUB 用户名和密码,且仅admin可编辑 - 检查
journalctl -b | grep -i "emergency\|rescue\|single",确认无意外进入记录 - 将 GRUB 配置文件加入文件完整性监控(如 AIDE 或 auditd 规则),变化即告警
- 对物理服务器,同步落实机箱锁、BMC 访问审计、USB 存储禁用等配套措施,避免“只锁门不关窗”











