关于 开机启动加密破坏修复 自制linux系统

 

   开机破坏并且修复之   

   自制linux系统 

 

 

 

        CentOS 6启动流程:

POST –> Boot Sequence(BIOS) –> Boot Loader –>

Kernel(ramdisk) –> rootfs –> switchroot –> /sbin/init —

>(/etc/inittab, /etc/init/*.conf) –> 设定默认运行级别–> 系统

初始化脚本rc.sysinit –> 关闭或启动对应级别的服务–> 启动终端

grub: GRand Unified Bootloader

grub 0.x: grub legacy

grub 1.x: grub2

grub legacy:

            stage1: mbr

            stage1_5: mbr之后的扇区,让stage1中的bootloader

能识别stage2所在的分区上的文件系统

stage2:磁盘分区(/boot/grub/)

=================================================================

开机加密口令 防止单用户恶意破解口令

生成加密口令

第一步:

[root@Compro ~]# grub-md5-crypt

Password: 输入口令时不显示

Retype password: 输入口令时不显示

$1$6lDgy$WpWXTfAKA/mcC6goW90If.    这个就是加密过后的口令

下面命令也是可以生成加密口令的

openssl passwd -1

xxxxxx

xxxxxx

第二步:

在配置文件中 :vim /boot/grub/grub.conf

添加 :第一个title开的的字符上方 添加加上 password –md5 加密过的口令

例如:

password –md5 $1$6lDgy$WpWXTfAKA/mcC6goW90If 

title CentOS 6 (2.6.32-642.el6.x86_64)

        root (hd0,0)

然后保存重启

第三步:

开机开始的时候任意键进入菜单界面:这是单用户的ace等口令是无效的,提示输入p 会让输入passwd:也就是刚才上面保存过的加密口令;输入成功则显示出来ace等口令,输入就可以进入单用户修改口令,当然如果在不知道加密口令的用户直接敲回车会正常启动,防止了恶意破解口令

也可以将加密的口令放在配置文件的前后,放在前面是防止进入单用户界

password –md5 $1$6lDgy$WpWXTfAKA/mcC6goW90If

title CentOS 6 (2.6.32-642.el6.x86_64)

        root (hd0,0)

        kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=/dev/mapper/vg_compro-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=vg_compro/lv_swap crashkernel=auto.UTF-8  KEYBOARDTYPE=pc KEYTABLE=us rd_LVM_LV=vg_compro/lv_root rd_NO_DM rhgb quiet

        initrd /initramfs-2.6.32-642.el6.x86_64.img

        password 口令

在末尾添加加密口令是 启动开始的大概几秒钟,直接弹出来passwd:输入加密的口令登录启动系统

================================================================

开机任意键进入菜单界面的一个背景图片

在配置文件中找到以下字符

splashimage=(hd0,0)/grub/splash.xpm.gz

修改背景

1 先做一张分辨率640*480的图 命名为bjtp 上传系统家目录中

2 安装一个linux的修图工具

[root@Compro ~]# yum -y install ImageMagick

3 转换图片格式

[root@Compro ~]# convert -resize 640×480 -colors 14 bjtp.png bjtp.xpm

查看格式

[root@Compro ~]# more bjtp.xpm

压缩

[root@Compro ~]# gzip bjtp.xpm

拷贝到grub

[root@Compro ~]# cp  bjtp.xpm.gz /boot/grub/

修改配置文件

[root@Compro ~]# vim /boot/grub/grub.conf

splashimage=(hd0,0)/grub/bjtp.xpm.gz    将文件名称修改一下就可以了

重启reboot开机过程中按下任意键进入菜单的界面,这是还就可以看到刚刚修改的图片了

==================================================================

破坏第1阶段并且修复

[root@Compro ~]#  dd if=/dev/zero of=/dev/sda bs=1 count=446

然后查看一下

[root@Compro ~]#  hexdump -C -v /dev/sda -n 512

重启reboot 这时候会无法启动 启动的时候自动进入光盘引导界面,这时候选择第三项救援模式

修复:

进入救援模式下的shell界面切根

bash-4.1# chroot /mnt/sysimage/

bash-4.1# grub-install /dev/sda

bash-4.1# exit

bash-4.1# exit

reboot重启就好了

================================================================

破坏第1.5阶段并且修复

[root@Compro ~]# dd if=/dev/zero of=/dev/sda bs=512 count=2 seek=1

[root@Compro ~]# hexdump -C -v /dev/sda -n 1024

重启后手动光盘引导进入救援模式shell界面

输入命令grub

bash-4.1# grub> root (hd0,0)

grup> setup (hd0)

grup> quit 

bash-4.1# exit

reboot重启就好了

=================================================================

删除/grub目录所有内容

[root@Compro ~]# rm -rf /boot/grub/

[root@Compro ~]# reboot 重启

开机手动光盘引导进入救援模式

bash-4.1# chroot /mnt/sysimage

bash-4.1# cd /boot

bash-4.1# grub-install /dev/sda

bash-4.1# cd /boot/grub/       这时候没有grub.conf配置文件需要手写一份

bash-4.1# exit

bash-4.1# exit

reboot 重启

启动界面会提示grub> 输入内容

grub> kernel (hd0,0)/vmlinuz….. root=/dev/sda2

grub> initrd (hd0,0)/initramfs…. 

grub> boot

修过过程中再次提示输入上面的命令不过在之前开头加上grub> root (hd0,0)就ok了

创建vim /boot/grub/grub.conf

default=0

timeout=5

title Compro

root(hd0,0)

kernel /vmlinuz-2.6… root=/dev/sda2

initrd /inirtamfs….

==========================================================

删除boot目录并且恢复之 (大招,一招致命,解决 以上所有破坏)

[root@Compro ~]# umount /boot

[root@Compro ~]# rm -rf /boot

[root@Compro ~]# reboot

直接进入救援模式

bash-4.1# mkdir /mnt/cdrom

bash-4.1# mount /dev/cdrom /mnt/cdrom

bash-4.1# rpm -ivh /mnt/cdrom/Pachages/kernel-2* –root=/mnt/sysimage –replacepkgs 或者 force

bash-4.1# chroot /mnt/sysimage/

bash-4.1# grub-install /dev/ada

bash-4.1# vim /boot/grub/grub.conf

default=0

timeout=3

title Compro

root (hd0,0)

kernel /vmlinuz… root=/dev/sda2

initrd /initagfs  ….

==================================================================

自制Linux系统:

添加新的硬盘,用 [root@Compro ~]# echo '- – -' > /sys/class/scsi_host/host2/scan   加载

1分区并创建文件系统

[root@Compro ~]# fdisk /dev/sdb

分两个必要的分区

/dev/sdb1对应/boot /dev/sdb2对应根/

[root@Compro ~]# mkfs.ext4 /dev/sdb2

[root@Compro ~]# mkfs.ext4 /dev/sdb2

2挂载boot

[root@Compro ~]# mkdir /mnt/boot

[root@Compro ~]# mount /dev/sdb1 /mnt/boot/

[root@Compro ~]# cd /mnt/boot/

[root@Compro boot]# cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /boot/initramfs-2.6.32-642.el6.x86_64.img .

3安装grub

[root@Compro boot]# grub-install /dev/sdb –root-directory=/mnt

4、建立grub.conf:

[root@Compro boot]# cd grub/

[root@Compro grub]# vim grub.conf

default=0

default=0

timeout=3

title Compro

root (hd0,0)

kernel /vmlinuz-2.6.32-642.el6.x86_64 root=/dev/sda2 selinux=0 init=/bin/bash

initrd /initramfs-2.6.32-642.el6.x86_64.img

5、创建一级目录

[root@Compro ~]# mkdir /mnt/sysroot

[root@Compro ~]# mount /dev/sdb2 /mnt/sysroot/

[root@Compro ~]# cd /mnt/sysroot/

[root@Compro sysroot]# mkdir -pv {etc,lib,lib64,bin,sbin,tmp,var,usr,sys,proc,opt,home,root,boot,dev,mnt,media}

6、[root@Compro sysroot]# vim etc/fstab

/dev/sda1 /boot ext4 defaults 1 1

/dev/sda2  /    ext4 defaults 1 2

8、复制bash和相关库文件 复制相关命令及相关库文件

如:ls,cat,vim,reboot,hostname等  

这里使用的是脚本

[root@Compro sysroot]# /root/copycmd.sh

Please input a command: bash

Please input a command or quit: vim

Please input a command or quit: cat

Please input a command or quit: ls

Please input a command or quit: ifconfig

Please input a command or quit: df

Please input a command or quit: mount

Please input a command or quit: umount

Please input a command or quit: rpm

Please input a command or quit: reboot

Please input a command or quit: hostname

Please input a command or quit: halt

Please input a command or quit: quit

这里已经完成了,下面看脚本内容

#!/bin/bash 

ch_root="/mnt/sysroot"

[ ! -d $ch_root ] && mkdir $ch_root 

bincopy() {

    if which $1 &>/dev/null; then

        local cmd_path=`which –skip-alias $1`

        local bin_dir=`dirname $cmd_path`

        [ -d ${ch_root}${bin_dir} ] || mkdir -p ${ch_root}${bin_dir}

        [ -f ${ch_root}${cmd_path} ] || cp $cmd_path ${ch_root}${bin_dir}

        return 0

    else

        echo "Command not found."

        return 1

    fi

}

libcopy() {

    local lib_list=$(ldd `which –skip-alias $1` | grep -Eo '/[^[:space:]]+')

    for loop in $lib_list;do

        local lib_dir=`dirname $loop`

        [ -d ${ch_root}${lib_dir} ] || mkdir -p  ${ch_root}${lib_dir}

        [ -f ${ch_root}${loop} ] || cp $loop ${ch_root}${lib_dir}

    done

}  

read -p "Please input a command: " command 

while [ "$command" != "quit" ];do

    if bincopy $command ;then

        libcopy $command

    fi

    read -p "Please input a command or quit: " command

done

=====================================================================

原创文章,作者:小马哥,如若转载,请注明出处:http://www.178linux.com/46532

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-20 11:10

    内容很完整,操作性强,赞一个,

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code