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

slm*_*slm 4 linux centos grub2 vagrant

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

SS1

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

也许我在某个时候修改了它,不再记得用于保护 GRUB2 启动菜单的用户名和密码。

在任何一种情况下,与其进一步寻找这个,我怎样才能简单地将 GRUB2 中的凭据更改为我想要的任何内容?

slm*_*slm 5

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

$ vagrant ssh
$ sudo -Es
Run Code Online (Sandbox Code Playgroud)

成为 root 后,您可以通过以下两种方式之一将凭据重置为您想要的任何内容。

RHEL & CentOS 7.2+ & Fedora

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

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

$ grub2-setpassword
Enter password:
Confirm password:
$
Run Code Online (Sandbox Code Playgroud)

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

$ cat /boot/grub2/user.cfg
GRUB2_PASSWORD=grub.pbkdf2.sha512.10000.5A95A11398D5DEAA9B205DCEA37E0FDCC069CF6D0C398E8C9FF2ED1D8DE072DDE1D916F955266C306AAC7CA62E0D29A7C6558F3B29E40008289DBE857B8354CE.DD410AA2E5D6495BA723147046B88B89A585656AF4298F07CBC93E7A4F73713A824AE1F3448F837809B6655861A1BA5F0FB615206470E4228E57F7BCF11442A3
Run Code Online (Sandbox Code Playgroud)

您可以在基于 CentOS 的发行版上查看 GRUB2 如何使用此文件,方法/etc/grub.d如下:

$ grep -l user.cfg /etc/grub.d/*
/etc/grub.d/01_users
Run Code Online (Sandbox Code Playgroud)

该文件的内容:

$ 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
Run Code Online (Sandbox Code Playgroud)

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

SS2

我们现在可以进入菜单:

SS3

Ubuntu 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

3. 重建 GRUB2 grub.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
Run Code Online (Sandbox Code Playgroud)

这将采取所有内容/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 ###
...
Run Code Online (Sandbox Code Playgroud)

对此:

$ 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 ###
...
Run Code Online (Sandbox Code Playgroud)

参考