開機破壞并且修復之
自制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.www58058.com/46532
內容很完整,操作性強,贊一個,