如何更改 GRUB2 用户名和密码?

如何更改 GRUB2 用户名和密码?

我最近下载了官方的centos/7 Vagrant 云虚拟机。在尝试通过密钥重新启动期间访问其 GRUB2 菜单时e,我遇到了输入用户名 + 密码的提示。

SS1

我没有成功地在该虚拟机的官方页面上的任何地方找到这个引用,在宣布这一消息的博客文章,也不在任何这些 git 存储库中:

也许我在某个时候对此进行了修改,并且不再记得用于保护 GRUB2 引导菜单的用户名和密码。

无论哪种情况,我都不用进一步寻找这个问题,而是如何简单地将 GRUB2 中的凭据更改为我想要的任何内容?

答案1

由于在启动 Vagrant VM 时您通常可以通过 root 访问权限sudo,因此您可以简单地登录并成为 root,如下所示:

$ vagrant ssh
$ sudo -Es

一旦您获得 root 权限,您就可以通过以下两种方式之一将凭据重置为您想要的任何内容。

RHEL & CentOS 7.2+ & Fedora

从 RHEL & CentOS 7.2+ & Fedora 开始,包含一个帮助程序脚本/工具 ,grub2-setpassword它极大地简化了执行此操作的过程。

要使用它,您需要执行以下操作:

$ grub2-setpassword
Enter password:
Confirm password:
$

完成上述操作后,密码将自动在此文件中设置/boot/grub2/user.cfg::

$ cat /boot/grub2/user.cfg
GRUB2_PASSWORD=grub.pbkdf2.sha512.10000.5A95A11398D5DEAA9B205DCEA37E0FDCC069CF6D0C398E8C9FF2ED1D8DE072DDE1D916F955266C306AAC7CA62E0D29A7C6558F3B29E40008289DBE857B8354CE.DD410AA2E5D6495BA723147046B88B89A585656AF4298F07CBC93E7A4F73713A824AE1F3448F837809B6655861A1BA5F0FB615206470E4228E57F7BCF11442A3

您可以通过如下方式查找该文件,了解基于 CentOS 的发行版上的 GRUB2 如何使用该文件/etc/grub.d

$ grep -l user.cfg /etc/grub.d/*
/etc/grub.d/01_users

该文件的内容:

$ cat /etc/grub.d/01_users
#!/bin/sh -e
cat << EOF
if [ -f \${prefix}/user.cfg ]; then
  source \${prefix}/user.cfg
  if [ -n "\${GRUB2_PASSWORD}" ]; then
    set superusers="root"
    export superusers
    password_pbkdf2 root \${GRUB2_PASSWORD}
  fi
fi
EOF

啊,所以默认用户将是“root”。很好,如果我们重新启动虚拟机并尝试使用凭据“root”和我们提供的密码grub2-setpassword

SS2

我们现在可以进入菜单:

SS3

乌班图 16.04+

在不提供脚本的其他发行版上,grub2-setpassword该过程有点复杂,但并不可怕。

1.生成加密密码

您需要使用GRUB2工具来加密您的密码:

$ grub-mkpasswd-pbkdf2
Enter password:
Reenter password:
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.465B5EE2D2F6A767304EB397D6D97C70BC38653F95AFE58B24F190D5DABB0143920F736C125B91FB9F298AFF3D0F8FBBFB8228D5C8C9DD371ADBB1044CC80BFC.52D87AFD47A5BE2D7B6CF755D26CD5F481557DBCF5E725ABA44BF003A2970D3F775E8657428EDC201D86A3DF07D7A8109AFD5764EA058BE94D840F42ED17C3E2

2.在GRUB2配置中添加密码

然后获取该命令的输出,grub.pbkdf2.sha512.10000.....并将其复制/粘贴到文件中。

$ cat /etc/grub.d/40_custom
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

set superusers="root"
password_pbkdf2 root grub.pbkdf2.sha512.10000.465B5EE2D2F6A767304EB397D6D97C70BC38653F95AFE58B24F190D5DABB0143920F736C125B91FB9F298AFF3D0F8FBBFB8228D5C8C9DD371ADBB1044CC80BFC.52D87AFD47A5BE2D7B6CF755D26CD5F481557DBCF5E725ABA44BF003A2970D3F775E8657428EDC201D86A3DF07D7A8109AFD5764EA058BE94D840F42ED17C3E2

笔记:我们将用户名设置为“root”,它可以是您想要的任何内容。如果您更改它,请务必更改两行 ( superusers="root"& password_pbkdf2 root ...)。

3. 重建GRUB2grub.cfg

现在我们需要重新生成我们的grub.cfg

$ grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.4.0-130-generic
Found initrd image: /boot/initrd.img-4.4.0-130-generic
done

这会将 的所有内容/etc/grub.d合并到一个新的grub.cfg.所以我们的40_custom部分grub.cfg将从这里开始:

$ cat /boot/grub/grub.cfg
...
### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###
...

对此:

$ cat /boot/grub/grub.cfg
...
### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

set superusers="root"
password_pbkdf2 root grub.pbkdf2.sha512.10000.465B5EE2D2F6A767304EB397D6D97C70BC38653F95AFE58B24F190D5DABB0143920F736C125B91FB9F298AFF3D0F8FBBFB8228D5C8C9DD371ADBB1044CC80BFC.52D87AFD47A5BE2D7B6CF755D26CD5F481557DBCF5E725ABA44BF003A2970D3F775E8657428EDC201D86A3DF07D7A8109AFD5764EA058BE94D840F42ED17C3E2
### END /etc/grub.d/40_custom ###
...

参考

相关内容