系统毁灭者MBR

[toc]

安全控制

一.重置root密码

Centos7 与之前的版本不同,当忘记 root 密码,并采用 GRUB2 为启动器时,将无法通过单用户模式重 置 root 密码

1
# 1.启动系统,并在GRUB2启动屏显时,按下 e 键进入编辑模式

image-20220525143741425

1
# 2.按e后,看到如下画面:

image-20220525143824081

1
# 3.找到 linux16 开头的行,按 end 键跳转到最后,空格后,输入 rd.break

image-20220525144314955

1
# 4.按 ctrl+x 进入紧急救援模式

image-20220525144530907

1
2
3
4
5
6
7
8
9
10
11
12
# 5.重新挂载系统分区,输入
mount -o remount,rw /sysroot
# 6.再输入
chroot /sysroot
# 改变根
# 7.当前目录变为根目录,即可更改密码
echo 123456 | passwd --stdin root
# 8.如果之前系统启用了 SElinux,则必须运行
touch /.autorelabel
否则将无法正常启动系统
# 9.输入 exit 退出
# 10.输入 reboot 重新启动

image-20220525145647885

1
# 登录测试,密码123456更新成功

image-20220525150014292

二.强密码修改安全性

矛与盾

方法一

  • 为 GRUB2 菜单加上防编辑密码,以防止恶意者像如上一样修改 root 密码
1
2
3
4
5
# 1.用 grub2-mkpasswd-pbkdf2 命令生成加密口令
[root@localhost ~]# grub2-mkpasswd-pbkdf2
输入口令: # 不是root密码
Reenter password:
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.D167D00E2EB2403C60A1F73D67E8E09ED1D0BD871ECC04D15AC815C9E1FCC178D4BC2B05FA4A1DEA67FBC1DD29CEF48EF662E1D5DB8C16AAB4F27FC353815FF5.43D49742A39635DE65BF5631802EB4041E38E65A05AB8AD6F498538873FA241599DE784CE0CF63E4E3FE68DC0FE635251A74EBC53C62239480AE558D68BA77D3

然后

1
2
3
4
5
6
[root@localhost ~]# vim /etc/grub.d/00_header 
# 在最后位置写入这个脚本命令
cat <<EOF
set superusers="root" # 这个是账号,可以随心填,但是要记住它和上面的密码
password_pbkdf2 root grub.pbkdf2.sha512.10000.D167D00E2EB2403C60A1F73D67E8E09ED1D0BD871ECC04D15AC815C9E1FCC178D4BC2B05FA4A1DEA67FBC1DD29CEF48EF662E1D5DB8C16AAB4F27FC353815FF5.43D49742A39635DE65BF5631802EB4041E38E65A05AB8AD6F498538873FA241599DE784CE0CF63E4E3FE68DC0FE635251A74EBC53C62239480AE558D68BA77D3
EOF

重新生成grub2

1
2
3
4
5
6
7
8
9
[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg 
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-1160.66.1.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1160.66.1.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-1160.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1160.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-dbecb3d028cd4f5db6753a52b01ffd86
Found initrd image: /boot/initramfs-0-rescue-dbecb3d028cd4f5db6753a52b01ffd86.img
done

方法二

1
2
3
4
[root@localhost ~]# vim /boot/grub2/grub.cfg
set superusers="root"
password_pbkdf2 root grub.pbkdf2.sha512.10000.D167D00E2EB2403C60A1F73D67E8E09ED1D0BD871ECC04D15AC815C9E1FCC178D4BC2B05FA4A1DEA67FBC1DD29CEF48EF662E1D5DB8C16AAB4F27FC353815FF5.43D49742A39635DE65BF5631802EB4041E38E65A05AB8AD6F498538873FA241599DE784CE0CF63E4E3FE68DC0FE635251A74EBC53C62239480AE558D68BA77D3
### END /etc/grub.d/00_header # 在这个文件上面写入以上参数,也可以达到一样效果。。。我是傻x

进入grub2

1
# 再次进入 GRUB2 页面,发现需要输入账户名与密码

image-20220525155917825

image-20220525155936054

image-20220525160014769

三.破坏MBR

  • MBR

    • master boot record
    • 主引导记录,也叫主引导扇区
    • 硬盘的 0 柱面,0 磁头,1 扇区称为主引导扇区
    • 其中 446 Byte 是 bootloader,64 Byte 是 partition table,剩下的 2 Byte 是 magic number
    • 一般破坏的是bootloader

    Linux是文件型的操作系统,所有的信息和数据都以文件形式保存于系统中,但是并不是所有的数据,主 引导记录就不是以文件的形式保存,无法进行备份,只能通过 dd 命令备份

  • 先进行备份,再破坏

    • 使用 dd 命令,将 sda 的 MBR 进行备份
    • 用 zero设备生成 446 字节的 “0” 写入 MBR
    • 重启后发现系统已坏
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
[root@localhost ~]# fdisk -l

磁盘 /dev/sda:107.4 GB, 107374182400 字节,209715200 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000b88c2

设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 209715199 103808000 8e Linux LVM

磁盘 /dev/mapper/centos-root:53.7 GB, 53687091200 字节,104857600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/mapper/centos-swap:4160 MB, 4160749568 字节,8126464 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/mapper/centos-home:48.4 GB, 48444211200 字节,94617600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

[root@localhost ~]# dd if=/dev/sda of=/root/mbr.bak count=1 bs=512
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000344858 秒,1.5 MB/秒
[root@localhost ~]# dd if=/dev/zero of=/dev/sda count=1 bs=446
记录了1+0 的读入
记录了1+0 的写出
446字节(446 B)已复制,0.000186601 秒,2.4 MB/秒

  • if=/dev/sda
    • interface 输入接口
  • of=/root/mbr.bak
    • outerface 输出接口
  • count=1
    • 写一块
  • bs=512
    • 将整个扇区选中

  • Unix/Linux将每一个设备都当成一个文件,放在/dev目录

    • 这些文件有的对应着一个真实存在的物理设备

    • 有的则代表一个虚拟设备,提供一些特定的功能

  • /dev/null

    • “空”设备,也有人称它为黑洞

    • 任何输入到这个“设备”的数据都将被直接丢弃

    • 最常用的用法是把不需要的输出重定向到这个文件

  • /dev/zero

    • “零”设备,可以无限的提供空字符(0x00,ASCII代码NUL)

    • 常用来生成一个特定大小的文件

1
[root@localhost ~]# dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress #创建4G的交换空间 大小根据需要自定

这也是我喜欢用交换文件而不是交换分区的一个特点之一_方便

四.修复MBR

1
2
[root@localhost ~]# reboot
# 重启后,发现无法正常启动

image-20220525174104226

  • 连接光盘,重启后进入系统安装光盘,在光盘引导界面选择 Troubleshooting

image-20220525190633165

  • 选择救援模式 Rescue a Centos system

image-20220525190612467

  • 输入1,选择Continue,以 rw 模式挂载分区

image-20220525190742957

  • 回车,进入救援模式

image-20220525190905564

  • grub2-install 命令重建 Bootloader,随后 sync 写入硬盘,reboot 重启系统
1
2
3
4
5
sh-4.2# chroot /mnt/sysimage
sh-4.2# grub2-install /dev/sda
sh-4.2# sync
sh-4.2# exit
sh-4.2# reboot
  • 重启后,可正常进入开机引导

image-20220525191143114

五. 修复GRUB

**若grub配置文件丢失,开机会直接进入 grub 界面,显示为 grub> **

由于 grub2 的文件极其复杂,所以一定要做好备份

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
[root@localhost ~]# fdisk -l

磁盘 /dev/sda:107.4 GB, 107374182400 字节,209715200 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x00000000

设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 209715199 103808000 8e Linux LVM

磁盘 /dev/mapper/centos-root:53.7 GB, 53687091200 字节,104857600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/mapper/centos-swap:4160 MB, 4160749568 字节,8126464 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/mapper/centos-home:48.4 GB, 48444211200 字节,94617600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
└─centos-home 253:2 0 45.1G 0 lvm /home
sr0 11:0 1 4.4G 0 rom /run/media/root/CentOS 7 x86_64

1
2
3
4
5
6
7
8
9
10
# 先备份,再破坏
[root@localhost ~]# mkdir grub2.bak
[root@localhost ~]# chmod 600 grub2.bak/
[root@localhost ~]# cp -rp /boot/grub2/* ./grub2.bak/
[root@localhost ~]# ls grub2.bak/
device.map fonts grub.cfg grubenv i386-pc locale
# 破坏
[root@localhost ~]# rm /boot/grub2/grub.cfg
rm:是否删除普通文件 "/boot/grub2/grub.cfg"?y
[root@localhost ~]# reboot

image-20220525191903755

  • 重启后,进入 “ grub> ” 状态,输入以下命令设置启动参数
1
2
3
4
5
6
7
8
9
grub> insmod xfs
# 第0块磁盘的第1个分区
grub> set root='hd0,1'
# 内核文件
# mapper是逻辑卷组
grub> linux16 /vmlinuz-3.10.0-229.el7.x86_64
root=/dev/mapper/centos-root
grub> initrd16 /initramfs-3.10.0-229.el7.x86_64.img
grub> boot

恢复grub

1
2
[root@localhost ~]# cp ./grub2.bak/grub.cfg /boot/grub2/
[root@localhost ~]# reboot