小c学Linux(12)--centos 6.5 grub引导详解

系统运行级别:

 0-6:7个级别
  0:关机
    1:单用户模式,直接以root用户登录
    2:多用户模式,不支持NFS文件系统
    3:完全多用户模式,文本模式,不启动图形界面
    4:预留级别
    5:完全多用户模式,图形模式
    6:重启

bootloader

grub简介

MBR里的446个字节的引导程序。
grub:
1. 1st stage 位于MBR中,为了引导2nd stage
2. 1.5 stage 位于boot基本磁盘分区中,识别内核文件所在分区
3. 2nd stage 位于boot基本磁盘分区中,grub真正的引导程序

grub三大功能:
配置文件:/boot/grub/grub.conf

  1. 选择要启动的内核或系统
    hiddenmenu:隐藏选择界面(默认)
  2. 交互式接口
    e:进入编辑模式
  3. 设置密码保护
    • 进入选择内核界面需要密码
    • 系统启动需要密码

一般用户的电脑装完机后是没有设置grub密码保护的,我们可以通过单用户模式,直接以root用户登陆,破解管理员密码。开机按任意键进入grub界面

小c学Linux(12)--centos 6.5 grub引导详解_第1张图片

e键进入编辑模式

小c学Linux(12)--centos 6.5 grub引导详解_第2张图片

编辑kernel,在后面空格+1

小c学Linux(12)--centos 6.5 grub引导详解_第3张图片

保存按b以root用户直接登录
passwd修改root用户密码

小c学Linux(12)--centos 6.5 grub引导详解_第4张图片

密码修改成功。init 3修改运行级别,系统重启,用修改的密码登陆,成功。

所以当我们忘记root密码,只要没有设置grub还是能够通过这种方式找回来的。

grub设置密码保护
这里写图片描述
将得到的md5码写入grub.conf配置文件。
全局下password --md5 md5码
titile下password --md5 md5码

grub配置文件

/etc/boot/grub/grub.conf

小c学Linux(12)--centos 6.5 grub引导详解_第5张图片

   default=#:指定默认启动的内核或os
   timeout=#:等待用户选择要启动的内核或os的时长,单位为秒钟
   splashimage=   :指定使用的背景图片
   hiddenmenu:隐藏菜单
   password --md5 md5码 设置内核界面的密码
   title. 操作系统或内核的标题
        root(hd0,0)设定内核文件所在的分区为grub的根
                (Device Part)
         Device(磁盘)表示方式:在grub中,统统以hd开头,并紧跟一个数字做各磁盘设备的标记,从0开始
         part表示方式:代表分区,从0开始编号
        kernel.  定义要使用的文件,后面可以附加传递给内核的启动参数
            指定内核文件及传递给内核的参数
        参数:ro root=设备文件,quiet 静默模式输出
        initrd. 指定为内核提供额外驱动等功能的ram disk或ram fs文件
        文件:通常为cpio归档,并使用gzip压缩,通常以.img作为文件后缀
        password --md5 md5码 设置系统进入密码

模拟grub损坏

  1. 破坏bootloaderdd if=/dev/zero of=/dev/sda bs=100 count=1,**bootloader**446字节,100<446
  2. 使用光盘镜像修复,进入bios将光盘作为启动项
  3. chroot /mnt/sysimage/将系统根挂载至/mnt/sysimage下
  4. grub进入grub命令行
  5. root (hd0,0) setup (hd0)如果提示root command not found
  6. 5没有成功,则:grub-install --root-directory=/ /dev/sda

    –root-directory=/ : 这是/boot的父目录,也就是系统根目录

  7. sysn同步到磁盘

  8. exit保存退出
  9. reboot重新启动
  10. ok

利用grub给第二块磁盘制作一个简单可启动的linux

  1. fdisk -l /dev/sd[a-z]查看一下有几块磁盘
  2. fdisk /dev/sdb分区
  3. mke2fs -t ext4 /dev/{sdb1,sdb2}
  4. mount /dev/sdb1 /mnt/boot
  5. mount /dev/sdb2 /mnt/sysroot
  6. 创建grub:grub-install --root-directory=/mnt /dev/sdb
  7. 创建根文件系统:mkdir -pv /mnt/sysroot/{etc/rc.d,dev,var,lib,lib64,bin sbin,sys,tmp}
  8. 复制bash,ls,mkdir命令到制作的系统上/mnt/sysroot
#!/bin/bash
#
#DESCRIPTION : MOVE COMMAND
#VERSION : 1.0
#author : xiaoc

copy(){
    for i in $*;do
        dir=`dirname $i`
        [ -d /mnt/sysroot$dir ] || mkdir -p /mnt/sysroot$dir
        [ -f /mnt/sysroot$i ] || cp $i /mnt/sysroot$dir/
    done
}

main(){
    ldd_path=`which ldd`
    while true;do
        read -p "Enter a command : " command
        [[ "$command" == "quit" ]] && echo "quit" && exit 0
        command_path=`which --skip-alias $command 2> /dev/null`
        if [[ -x $command_path ]];then
            copy `$ldd_path $command_path | grep -o "/[^[:space:]]\{1,\}"`
            copy $command_path
        else
            echo "not a command"
        fi
    done
}
main
  1. 复制linux内核和initrd到/mnt/boot下
    cp /boot/vmlinuz-Version /mnt/boot/vmlinuz
    cp /boot/initramfs-Version.img /mnt/boot/iniyramfs.img
  2. 链接一下bashln -sv bash sh因为很多内置脚本都是访问sh
  3. 配置grub.conf文件,用制作的sdb重启,完成
 vim /mnt/boot/grub/grub.conf
       default=0
       timeout=5
       title
         root(hd0,0)
         kernel /vmlinuz ro root=/dev/sda1 selinux=0 init=/bin/bash
         initramfs /initramfs

系统初始化脚本:`/etc/rc.d/rc.sysinit

 设置主机名:
      打印文本欢迎信息
      激活SELinux和udev
      激活swap
      挂载/etc/fstab定义的本地文件系统
      实现检查根文件系统并对其以读写重新挂载
      设置系统时钟
      装载键盘映射
      根据/etc/sysctl.conf设置内核参数
      激活RAID和LVM设备
      清理操作

以上仅在centos 6.5上可行….


你可能感兴趣的:(linux)