不能直接编辑 /boot/grub2/grub.cfg,因为它是通过 grub2-mkconfig 根据 /etc/grub.d/ 脚本和 /etc/default/grub 自动生成的只读文件,手动修改会在下次更新时被覆盖,易导致引导失败;正确做法是修改 /etc/grub.d/40_custom 并运行 grub2-mkconfig -o /boot/grub2/grub.cfg。

别直接改 /boot/grub2/grub.cfg —— 它是自动生成的,手动改完下次内核更新或运行 grub2-mkconfig 就会被覆盖,而且极易导致系统无法启动。
为什么不能直接编辑 grub.cfg
这个文件是只读输出产物,由 /etc/grub.d/ 下的脚本(如 00_header、40_custom)拼接生成。硬改它:
- 重启后可能失效(只要执行过
grub2-mkconfig -o /boot/grub2/grub.cfg) - 出错无提示,引导卡死在黑屏或
grub rescue>提示符 - 恢复困难,需依赖安装盘进 rescue 模式
正确做法:在 /etc/grub.d/40_custom 中添加加密密码配置
这是官方推荐的、安全可维护的位置。操作前先备份:
cp /etc/grub.d/40_custom /etc/grub.d/40_custom.bak
然后编辑该文件,在末尾添加(注意缩进和换行):
cat << 'EOF' set superusers="admin" password_pbkdf2 admin grub.pbkdf2.sha512.10000.380AD91E6C36BB4018B5CABDAFF5CABC52A16B6EFF503B6BB2E21199C006C526AEE3A2FF8CF41F9A07AEFB1E8E2275ABB44C41B1429B9C5D509786E2B57A51DA.989F1E9FAC061899E1BB8CB38D2119B26E6CE79A5CBB637E5A611AE099EBBF7CD9BCF1A3EC516CE0E4AD007B7DF8E679220BC845E07E440F134DED2537081F54 EOF
-
set superusers必须存在,且用户名要和password_pbkdf2后的第一个参数一致 -
password_pbkdf2行必须完整粘贴grub2-mkpasswd-pbkdf2生成的整段哈希(含grub.pbkdf2.sha512...) - 不要用明文
password,它已被弃用且不安全
生成加密密码时容易踩的坑
运行 grub2-mkpasswd-pbkdf2 时:
- 必须在目标系统上执行(不同发行版哈希格式可能不兼容)
- 输入密码后会要求**再次确认**,两次不一致则失败,无错误提示
- 生成结果里只有以
grub.pbkdf2.sha512.开头的那整行才有效,前面的PBKDF2 hash of your password is是提示文字,别复制进去 - 如果终端显示不全,加
| cat或重定向到文件再查看:grub2-mkpasswd-pbkdf2 > /tmp/pwdhash
应用配置并验证是否生效
保存 40_custom 后,必须重建配置:
grub2-mkconfig -o /boot/grub2/grub.cfg
然后重启,在 GRUB 菜单界面按 e 进入编辑模式,会弹出用户名/密码提示。注意:
- 输错三次会退出编辑,回到菜单(不是锁死系统)
- 密码对大小写敏感,且不显示星号或光标移动
- 若仍能直接编辑,说明
grub.cfg没被真正更新——检查命令是否报错、是否漏了-o参数、是否有 SELinux 拒绝写入(ls -Z /boot/grub2/grub.cfg看上下文)
最常被忽略的一点:grub2-mkconfig 成功不代表配置生效——它只负责写文件;最终是否起作用,取决于你改的是哪个 /etc/grub.d/ 文件、有没有语法错误、以及当前 GRUB 是否加载了新生成的 grub.cfg(某些虚拟机或 UEFI 系统缓存旧配置,需强制重装 grub2-install)。


















