当前位置:首页 > 行业动态 > 正文

如何为Linux系统配置GRUB加密保护?

GRUB加密Linux系统需编辑/etc/default/grub配置文件,添加超级用户和密码,通过grub-mkpasswd-pbkdf2生成PBKDF2加密口令,更新GRUB后重启生效,此操作可防止未授权用户修改启动项,需确保root权限及配置文件备份,避免系统无法引导。

加密前的准备工作

  1. 备份配置文件
    执行命令备份默认配置,防止操作失误:

    sudo cp /etc/grub.d/40_custom /etc/grub.d/40_custom.bak
    sudo cp /boot/grub/grub.cfg /boot/grub/grub.cfg.bak
  2. 安装必要工具
    确保系统已安装grub2工具包:

    # Debian/Ubuntu
    sudo apt install grub2-common
    # CentOS/RHEL
    sudo yum install grub2-tools

生成加密密码

  1. 创建PBKDF2哈希密码
    使用grub-mkpasswd-pbkdf2生成安全密码(若未找到命令,安装grub2-common包):

    grub-mkpasswd-pbkdf2

    输入两次自定义密码后,将输出类似以下结果:

    PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.2F3D4...
  2. 记录哈希值
    复制完整的grub.pbkdf2...字符串,后续配置将使用该值。


配置GRUB加密

  1. 编辑自定义配置文件
    打开/etc/grub.d/40_custom文件:

    sudo nano /etc/grub.d/40_custom
  2. 添加密码验证模块
    在文件末尾插入以下内容(替换your_hash为实际生成的哈希值):

    set superusers="admin"  # 定义管理员用户名
    password_pbkdf2 admin your_hash
    export superusers
  3. 设置启动项权限
    修改/etc/grub.d/10_linux文件,在CLASS变量后添加--unrestricted参数,允许普通启动项无需密码:

    CLASS="--class gnu-linux --class gnu --class os --unrestricted"

生效与验证

  1. 更新GRUB配置
    生成新的启动菜单:

    sudo update-grub  # Debian/Ubuntu
    sudo grub2-mkconfig -o /boot/grub2/grub.cfg  # CentOS/RHEL
  2. 重启测试加密效果

    sudo reboot
    • 正常启动系统时无需输入密码
    • 在GRUB界面按下e编辑启动参数时,会提示输入用户名(admin)和密码
  3. 紧急恢复方法
    若遗忘密码,需通过Live CD进入系统,挂载根分区后修改/etc/grub.d/40_custom文件清除密码配置,重新生成grub.cfg


高级安全策略

  1. 禁用恢复模式
    编辑/etc/default/grub,添加:

    GRUB_DISABLE_RECOVERY="true"
  2. 缩短GRUB等待时间
    修改GRUB_TIMEOUT为更短值(如3秒),减少攻击窗口:

    GRUB_TIMEOUT=3
  3. UEFI安全启动兼容
    若使用UEFI,需确保GRUB版本≥2.06,并通过mokutil注册密钥:

    sudo mokutil --import /path/to/public_key.der

注意事项

  • 定期更换密码并更新哈希值
  • 物理安全是前提,加密无法防止硬盘拆卸攻击
  • 建议启用全盘加密(LUKS)实现多层防护

引用说明:本文方法参考GRUB官方手册及Red Hat/CentOS系统安全指南,测试环境为Ubuntu 22.04 LTS与CentOS Stream 9,关键操作已通过QEMU虚拟机验证。

0