下面我來(lái)講下grub,grub在編輯的時(shí)候可以進(jìn)入一種模式就是單用戶模式市咆,就是當(dāng)grub.conf文件未寫(xiě)入密碼時(shí)汉操,普通用戶將直接忽略系統(tǒng)密碼進(jìn)入系統(tǒng),所以這可以稱為一個(gè)捷徑蒙兰,也可以成為一個(gè)漏洞磷瘤,當(dāng)然linux的前輩們不可能連這個(gè)都想不到,他們也有自己的辦法搜变,這就是我們grub的兩層加密機(jī)制采缚,在選定登陸界面之前可以設(shè)置一次,啟動(dòng)內(nèi)核時(shí)也可以設(shè)置一次挠他,密碼也可以采取加密算法扳抽,這樣就可以為我們系統(tǒng)提供雙層保險(xiǎn)。好了說(shuō)了那么多殖侵,讓我么你做一個(gè)簡(jiǎn)單的練習(xí)贸呢。
- 破解root口令,并為grub設(shè)置保護(hù)功能
這個(gè)問(wèn)題再簡(jiǎn)單不過(guò)了拢军,在登陸選定內(nèi)核界面按e進(jìn)入grub的編輯界面楞陷,然后按‘b’登陸即‘boot’之意,這樣就破解了root的密碼了茉唉。
- 破壞本機(jī)grub stage1固蛾,而后在救援模式下修復(fù)之
下面我來(lái)講下stage1這個(gè)步驟是存在MBR前512字節(jié)里的结执,將之破壞的方式可以是這樣:dd if=/dev/zero of=/dev/sd# ,#表示grub所在磁盤(pán),這里假設(shè)我們已經(jīng)將MBR進(jìn)行破壞艾凯,我們只需在進(jìn)入RESCUE模式時(shí)重新安裝grub即可昌犹。grub-install --root-directory /dev/sd# 當(dāng)然我這是切根后的安裝,不然救援模式下是沒(méi)有g(shù)rub-install這個(gè)命令的览芳。
- 刪除vmlinuz和initramfs文件斜姥,無(wú)法啟動(dòng),恢復(fù)之
下面我來(lái)講下這兩個(gè)文件一個(gè)是內(nèi)核文件沧竟,一個(gè)是虛擬文件系統(tǒng)文件铸敏,都是grub的核心文件,我們?cè)诰帉?xiě)grub.conf這個(gè)配置文件的時(shí)候其他的都可以不寫(xiě)悟泵,但是這兩個(gè)文件卻不能省略杈笔。initramfs 文件可以在救援模式使用
mkinitrd命令進(jìn)行生成,mkinitrd initramfs-`uname -r`.img `uname -r`
下面我來(lái)講下幾種解決上述問(wèn)題的方法糕非。
1蒙具、有網(wǎng)絡(luò)時(shí),因?yàn)橐话愎纠锏闹鳈C(jī)里的內(nèi)核文件及文件系統(tǒng)文件的版本都是同一種朽肥,所以我們可以聯(lián)通上特定的主機(jī)禁筏,使用scp這個(gè)命令將缺失的文件拷貝過(guò)來(lái),前提是得有這個(gè)主機(jī)的密碼衡招。
2篱昔、當(dāng)沒(méi)有網(wǎng)絡(luò)時(shí)我們可以進(jìn)入救援模式,安裝內(nèi)核文件中的/boot目錄始腾,當(dāng)然如果不嫌麻煩可以將內(nèi)核全部重新安裝一遍州刽,不過(guò)命令是這樣的
rpm -ivh ~kernel.... +路徑 --force,內(nèi)核會(huì)自己判斷哪些缺失文件浪箭,這樣也節(jié)省了不少時(shí)間穗椅。
3.這種方法就是掛載光盤(pán)文件找到 isolinux目錄找到vmlinuz、initramfs文件進(jìn)行復(fù)制到奶栖、boot目錄即可匹表。
好的如果你覺(jué)得這些還不夠,后面還有猛料哦
- 刪除/etc/fstab和/boot 目錄的所有文件驼抹,并恢復(fù)之
其實(shí)這個(gè)也不復(fù)雜桑孩,就是進(jìn)入救援模式重新安裝內(nèi)核,前提是得先掛載光盤(pán)
chroot=/mnt/sysimage
rpm -ivh ~Packages/kernel~ --force| replacepkgs
然后進(jìn)而重新安裝grub文件框冀。
grub-install --root-directory=/ /dev/sd#
安裝完成后重新編輯grub.conf文件流椒。
啟動(dòng)后對(duì)/etc/fstab文件進(jìn)行修復(fù)。
- 增加新硬盤(pán)明也,在其上制作能單獨(dú)運(yùn)行kernel和bash的系統(tǒng)
這里假設(shè)我們?cè)瓉?lái)的硬盤(pán)在/dev/sda上面宣虾,我們這里新加一塊/dev/sdb
接下來(lái)我們對(duì)其進(jìn)行分區(qū)及格式化惯裕、fdisk /dev/sdb 分出200M大的一塊/dev/sdb1磁盤(pán) 然后在對(duì)其進(jìn)行格式化,mkfs.ext3 /dev/sdb1
完成后我們?cè)?mnt目錄里新建/sysroot 來(lái)模擬一個(gè)根文件系統(tǒng)绣硝,
我們?cè)?sysroot里新建根目錄的那些文件夾蜻势,這里使用如下腳本調(diào)入我們需要引入的命令,在執(zhí)行的時(shí)候我們將根寫(xiě)為/mnt/sysroot即可鹉胖。
``` shell
#!/bin/bash
Read -p ‘ Please input your root dirname’ rootdir
ch_root="$rootdir"
[ ! -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 or quit: " command
while [ "$command" != "quit" ];do
if bincopy $command ;then
libcopy $command
fi
read -p "Please input a command or quit: " command
done
執(zhí)行完成后我們將/bin/bash 拷貝到/mnt/sysroot/bin目錄中作為我們系統(tǒng)啟動(dòng)后的第一個(gè)初始化程序運(yùn)行握玛,然后我們將/boot目錄整個(gè)復(fù)制到/mnt/sysroot目錄中,這里我們重新編寫(xiě)一下/mnt/sysroot/boot/grub/grub.conf文件甫菠,我們注意更改一些grub的根和文件系統(tǒng)的根即可挠铲。好了,小伙伴們準(zhǔn)備好了嗎寂诱,趕緊去試一試吧拂苹,這里我就不貼圖了。
-
6痰洒、 下面我這里對(duì)上述問(wèn)題再深化了一下瓢棒,因?yàn)榫褪窍矚g折騰,根本停不下來(lái)丘喻,原來(lái)我們的boot目錄是在根文件系統(tǒng)下面脯宿,我們這里新加一塊硬盤(pán),讀入
echo '----' /sys/class/scic_host/host2/scan 將它進(jìn)行重新分區(qū)仓犬,假設(shè)我們這邊的根文件系統(tǒng)的磁盤(pán)是/dev/sda,我們這里新加的磁盤(pán)是/dev/sdb嗅绰,我們將之新加一個(gè)分區(qū)/dev/sdb1,格式化為ext3,,這里我們將/boot文件目錄下的文件先已到/tmp目錄下搀继,然后將它解掛載到/dev/sdb1,這里我們進(jìn)入救援模式,在輸入chroot =/mnt/sysimage后翠语,我們輸入
注意這里的安裝目錄寫(xiě)原來(lái)的根文件系統(tǒng)所在目錄叽躯,這里我們?nèi)菀谆煜酉聛?lái)我們重啟進(jìn)入硬件啟動(dòng)肌括,我們輸入
然后我們繼續(xù)輸入
然后輸入
進(jìn)入文件系統(tǒng)后重新編寫(xiě)/boot/grub/grub.conf文件即可点骑。