centos7 设置grub密码及单用户登录实例代码

CentOS 7 设置 grub 密码及单用户登录

GRUB 是 Linux 中的一款启动管理器,它的主要任务是加载系统内核并启动操作系统。在 Linux 中,如果你拥有 root 权限,那么就相当于拥有了系统的最高权限。如果你的机器是通过 GRUB 单用户方式启动的,那么恶意用户只需要进入单用户模式就可以轻易地获取系统的 root 权限,从而对系统造成安全威胁。因此,为了加强系统的安全性,在 CentOS 7 中我们需要设置 grub 密码以及禁止单用户登录。

步骤一: 编辑 grub 配置文件

我们需要修改 grub 配置文件 /etc/grub2.cfg,但是直接修改该文件可能有风险,因为如果该文件格式不正确,可能会导致系统启动失败。因此,我们需要先将该文件的备份并拷贝出一份可编辑的文件进行修改。

1.1 首先备份 grub 配置文件:

# cp /etc/grub2.cfg /etc/grub2.cfg.bak

1.2 再将备份文件拷贝出一份可编辑文件:

# cp /etc/grub2.cfg /root/grub2.cfg.edit

1.3 用编辑器打开 /root/grub2.cfg.edit 文件:

# vim /root/grub2.cfg.edit

步骤二: 在 grub 配置文件中添加密码

2.1 在启动项配置模块中添加 --users 和 --password 命令(下面示例中用的是 sha512 加密方式):

password_pbkdf2 superuser grub.pbkdf2.sha512.10000.A3F3008E3D05F6C581A18DC897A9197D5DDBE5E5A7D6D7DAEA1A3B38C9365101810FBBC8FACD9BAA2443A3AF650258F46E74B5529ACBBC16E2EA7899C6FF3C36.C2AE7928094ACD3490E70CFCB3DDECA34F08AFA8BF9F7D702DE156AD86D07AF1AC3A9D2E23DEB8FFA5F277FBF2B2F6D4B369800E757BEC1D7ECC862AFA1EEC80

menuentry 'CentOS Linux (3.10.0-327.28.3.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-327.28.3.el7.x86_64-advanced-1edf06e2-aa3d-401d-92e5-c7d8c47e6df3' {
    load_video
    set gfxpayload=keep
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1'  e2372d8e-bcdf-4729-9cb3-54470d3ef1f8
    else
      search --no-floppy --fs-uuid --set=root e2372d8e-bcdf-4729-9cb3-54470d3ef1f8
    fi
    linux16 /vmlinuz-3.10.0-327.28.3.el7.x86_64 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet selinux=0 plymouth.ignore-serial-consoles
    password_pbkdf2 superuser grub.pbkdf2.sha512.10000.A3F3008E3D05F6C581A18DC897A9197D5DDBE5E5A7D6D7DAEA1A3B38C9365101810FBBC8FACD9BAA2443A3AF650258F46E74B5529ACBBC16E2EA7899C6FF3C36.C2AE7928094ACD3490E70CFCB3DDECA34F08AFA8BF9F7D702DE156AD86D07AF1AC3A9D2E23DEB8FFA5F277FBF2B2F6D4B369800E757BEC1D7ECC862AFA1EEC80
    initrd16 /initramfs-3.10.0-327.28.3.el7.x86_64.img
}

set default="0"
if [ "$prev_saved_entry" ]; then
    set saved_entry="$prev_saved_entry"
    save_env saved_entry
    set prev_saved_entry=
    save_env prev_saved_entry
    set boot_once=true
fi

function load_video {
    insmod efi_gop
    insmod efi_uga
    insmod video_bochs
    insmod video_cirrus
}

### 步骤三: 重新生成 grub 配置文件
3.1 用生成命令生成一个新的 grub 配置文件 /boot/grub2/grub.cfg:

grub2-mkconfig -o /boot/grub2/grub.cfg


### 步骤四:测试 grub 密码设置及单用户登录

4.1 重启系统,进入 grub 引导界面,选择 CentOS 启动项,并点击 e 键,进入编辑模式。你会看到命令行末尾已添加了一个 password 命令:

...
linux16 /vmlinuz-3.10.0-327.28.3.el7.x86_64 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet selinux=0 plymouth.ignore-serial-consoles password_pbkdf2 superuser grub.pbkdf2.sha512.10000.A3F3008E3D05F6C581A18DC897A9197D5DDBE5E5A7D6D7DAEA1A3B38C9365101810FBBC8FACD9BAA2443A3AF650258F46E74B5529ACBBC16E2EA7899C6FF3C36.C2AE7928094ACD3490E70CFCB3DDECA34F08AFA8BF9F7D702DE156AD86D07AF1AC3A9D2E23DEB8FFA5F277FBF2B2F6D4B369800E757BEC1D7ECC862AFA1EEC80
initrd16 /initramfs-3.10.0-327.28.3.el7.x86_64.img


4.2 在命令行末尾添加一个 -1 或者单词 single(均表示进入单用户模式),并按 Ctrl+X 继续启动系统:

...
linux16 /vmlinuz-3.10.0-327.28.3.el7.x86_64 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet selinux=0 plymouth.ignore-serial-consoles password_pbkdf2 superuser grub.pbkdf2.sha512.10000.A3F3008E3D05F6C581A18DC897A9197D5DDBE5E5A7D6D7DAEA1A3B38C9365101810FBBC8FACD9BAA2443A3AF650258F46E74B5529ACBBC16E2EA7899C6FF3C36.C2AE7928094ACD3490E70CFCB3DDECA34F08AFA8BF9F7D702DE156AD86D07AF1AC3A9D2E23DEB8FFA5F277FBF2B2F6D4B369800E757BEC1D7ECC862AFA1EEC80 -1
initrd16 /initramfs-3.10.0-327.28.3.el7.x86_64.img


4.3 系统启动后,你会看到如下提示信息,此时你需要输入 grub 密码才能进入系统(下面示例中用的是超级用户的密码:123456):

Give root password for maintenance
(or type Control-D to continue):


至此,你已经完成了设置 grub 密码及禁止单用户登录的操作。

示例 1: 通过文件生成 gz 格式密码

grub-mkpasswd-pbkdf2

Enter password:
Reenter password:
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.A3F3008E3D05F6C581A18DC897A9197D5DDBE5E5A7D6D7DAEA1A3B38C9365101810FBBC8FACD9BAA2443A3AF650258F46E74B5529ACBBC16E2EA7899C6FF3C36.C2AE7928094ACD3490E70CFCB3DDECA34F08AFA8BF9F7D702DE156AD86D07AF1AC3A9D2E23DEB8FFA5F277FBF2B2F6D4B369800E757BEC1D7ECC862AFA1EEC80


示例 2: 通过命令行生成 gz 格式密码

grub2-mkpasswd-pbkdf2 1 ↵

Enter password:
Reenter password:
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.C9B41FD0341F41E5902FDE1D7C3C78FC7F61AE5752C7399B268AA5D49C17E6F0FB28E1D4A356B272EA6F7ED56DF518B7A4BBAA9D32820417C16161FB31391ECE.3F0154CA56E6E11AA4FCBC685A5DC54C19C21FF016D491FFCE49F78554C5257B88EEFB15721DB7CC95F164C68D917FEED2E0B6F5AA0C4B34CB69C5EB940A70C5
```

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:centos7 设置grub密码及单用户登录实例代码 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Java语言中4种内部类的超详细讲解

    Java语言中4种内部类的超详细讲解 在Java语言中,内部类是指定义在其他类内部的类。它们可以访问外部类的成员,并且提供了一种实现封装和组织代码的方式。Java语言中有四种类型的内部类,分别是:成员内部类、静态内部类、局部内部类和匿名内部类。下面将对这四种内部类进行详细讲解,并提供示例说明。 1. 成员内部类(Member Inner Class) 成员内…

    other 2023年8月8日
    00
  • php简单实现单态设计模式的方法分析

    当我们需要确保一个类只能有一个实例时,可以使用单态设计模式(Singleton Design Pattern)来实现。在PHP中,我们可以通过以下几个步骤来简单实现单态设计模式。 步骤一:创建一个基础类 首先,我们需要创建一个基础类,它将作为所有单态类的模板。这个基础类将包含一个名为$instance的静态变量和一个名为__construct的私有构造函数。…

    other 2023年6月27日
    00
  • UVa 297 Quadtrees(树的递归)

    UVa 297 Quadtrees(树的递归) 1. 题目背景 本题是UVA的题目,题目编号为297。本题是一个经典的树的递归应用题目,需要考生熟练掌握递归的编程技巧。 2. 题目描述 Quadtrees(四叉树)是一种常见的数据结构,它可以表示二维图像。在本题中,我们需要以字符串的形式给出两个代表二维图像的四叉树,然后将它们合并成一个四叉树,并计算出合并后…

    其他 2023年3月28日
    00
  • Vue的土著指令和自定义指令实例详解

    关于“Vue的土著指令和自定义指令实例详解”的攻略,我会分为以下几个部分进行讲解: 什么是指令 Vue的土著指令有哪些 自定义指令的使用 实例说明 1. 什么是指令 指令是Vue提供的一种特殊属性,用于对DOM元素进行特定操作。指令在DOM元素上以v-开头,后面跟上指令名称。通过指令,我们可以实现对元素的某些行为进行控制,例如元素的展示、隐藏、绑定数据等。 …

    other 2023年6月25日
    00
  • 笔记本电脑开机蓝屏不断重启问题的解决方法

    笔记本电脑开机蓝屏不断重启问题的解决方法 在使用笔记本电脑时,出现开机蓝屏并不罕见。硬件或软件问题都有可能导致这种情况出现,而这些问题的解决方法也各有不同。本文将带您深入了解笔记本电脑开机蓝屏不断重启问题的解决方法。 步骤一:查看错误提示 在出现蓝屏后,电脑会显示错误提示,这些信息对于问题的解决至关重要。下面是一个示例错误提示: UNEXPECTED_KER…

    other 2023年6月27日
    00
  • Go语言中的方法、接口和嵌入类型详解

    Go语言中的方法、接口和嵌入类型详解 方法 Go语言中,方法是一种作用于特定类型变量的函数。它类似于C++或者Java中的方法。在一个类型中定义方法给了这个类型的对象被调用这个方法的可能。在Golang中,方法的语法格式如下: func (receiver type) methodName(parameters) (results) { // 方法体 } 其…

    other 2023年6月26日
    00
  • Android自定义DataGridView数据表格控件

    Android自定义DataGridView数据表格控件 简介 DataGridView是Windows Forms中的数据表格控件,用于显示和编辑数据。在Android开发中,我们也有时候需要自定义一些复杂的表格控件来满足我们的需求,本文将详细讲解如何实现一个自定义的DataGridView数据表格控件。 实现步骤 步骤一:定义布局文件 首先,我们需要定义…

    other 2023年6月27日
    00
  • 微信小程序 生命周期函数详解

    微信小程序 生命周期函数详解 什么是生命周期函数 在小程序中,生命周期函数指的是小程序在不同阶段会自动执行的函数。小程序框架在不同的阶段会执行不同的生命周期函数,让开发者能够在生命周期函数中完成代码逻辑。 生命周期函数分类 小程序中的生命周期函数分为两类: 应用生命周期函数 页面生命周期函数 应用生命周期函数 应用生命周期函数是指小程序作为整个应用的部分,每…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部