1. 程式人生 > >根據自己喜好定制Linux系統

根據自己喜好定制Linux系統

更改gurb啟動菜單背景圖片 加密grub 定制linux系統 編譯安裝linux系統內核 恢復boot目錄

1、修改Linux系統的啟動菜單的背景圖片

默認情況下,Linux系統啟動時,grub菜單的背景圖片為/boot/grub/splash.xpm.gz,啟動時如圖1所示,我們可以修改linux系統的grub菜單背景圖片,此處我們修改為windos系統圖片(具體可以根據自己的喜好修改)。

技術分享

圖一

在使用前需要將圖片轉化為Linux系統支持的圖片格式.xpm,需要使用convert命令轉化,如果系統沒有convert命令則需要安裝軟件包ImageMagick。轉化過程如下:

[[email protected] grub]# cd /boot/grub/

[[email protected] grub]# convert -resize 640x480 -colors 14 1.jpgwin.xpm

[[email protected] grub]# gzip win.xpm

[[email protected] grub]# grep -i "s#splashimage=(hd0,0)/grub/splash.xpm.gz#splashimage=

(hd0,0)/grub/win.xpm.gz#g" /boot/grub/grub.conf

改變後的grub引導菜單如圖二所示:

技術分享

圖二

2、將Linux系統的運行級別改為6,然後恢復

Linux系統運行級別6級別為重啟,如果將系統運行級別改為6,則系統無法正常啟動,開機後一直處於重啟的死循環中(如果同學或者朋友的系統Linux系統,可以惡搞一下,然後幫忙回復)。

更改系統運行級別為6(修改/etc/inittab文件最後一行數字為6,如圖三所示):

技術分享

圖三

修改完成後下一次啟動系統時系統會時,系統會一直處於重啟的死循環中,無法正常啟動起來。既然,能讓系統啟動不起來,那自然有辦法讓系統正常啟動起來。那下面我們就來修復。

由於系統無法啟動起來,所以我們不能通過正常的流程來修復;在系統啟動的過程總,我們進入grub引導界面(在系統剛啟動時的等待界面,我們按下任意鍵進入會進入grub菜單界面)如圖四所示;此時,我們根據提示按下‘e’鍵,編輯grub,我們選擇第二項內核,再次按下“e”進行編輯。在最後輸入single或者1(如圖五所示)意思為此次進入系統的1級別;修改完成後我們按下回車返回到上一級,在上一級我們按下“b”鍵讓從當前的設置引導啟動系統。由於我們設置系統的運行級別為1,所有在進入系統時不需要密碼,系統啟動完成後會直接進入系統,如圖6所示。

技術分享

圖四

技術分享

圖五

技術分享

圖六

進入系統後,我們繼續修改/etc/inittab將運行級別改回來(改為3或5),既然系統可以正常啟動了,此時進入系統沒有要求輸入密碼,我們是不是又可以搞點別的破壞了,比如,偷偷給root用戶設置一個別的密碼呢?

3、對grub加密

既然Linux系統這麽不安全,別人在不知道我們系統密碼的情況下,隨便進入我們的修通,修改我們系統的密碼。我們是不是應該做點防護措施了。既然,他們是通過修改編輯grub進入我們的系統,那我們幹脆就將grub加密。

對grub加密,也就是設置密碼文件,在/boot/grub/grub.conf配置文件的第三行設置密碼,如圖七所示。

技術分享

圖七

但是,按上面方法設置的密碼是明文的,讓別人隨便瞄一眼就知道你的grub密碼了,既然這樣,那我們就給密碼加密。我們使用md5加密,先生成加密字符串:

[[email protected] ~]# grub-md5-crypt

Password:

Retype password:

$1$35.oF/$UVcZ.CXw0MPuie76eaJw5/

加密字符串生成後,那我們就將grub密碼設置為加密的密碼,如圖8所示。

技術分享

圖八

聽說md5加密算法已經被人破解了,感覺有點不安全,我麽我們幹脆用SHA512加密,同時再設置一個進入系統的密碼,同樣,我們先生成加密字符串:

[[email protected] ~]# grub-crypt

Password:

Retype password:

$6$aaX9ZQMAZZrbDwiZ$nhx6gc1s9ICXeKtBMM41d3LtDTyY4Jnbg2Gp2JXALATFl.25DSuAEsYplSvQwBpayc6j0QUs17VhSkRiXNRkB0

生成完成後我們就設置密碼,如圖9所示:

技術分享

圖九

當設置密碼後,我們編輯grub時需要密碼,選擇grub菜單進入系統是提示也要輸入密碼。這下,我們的系統密碼不會輕易被人修改了。

4、刪除/boot下所有及/etc/fstab

上面的幾種玩法,感覺不好玩,不夠刺激,那我們現在來點更刺激的,那我們進入系統後,執行下rm –rf /* ,這萬萬可使不得,如果真的這麽做了,真的該跑路了。既然不能那樣,那我們就這樣,我們把執行如下命令:rm –rf /boot/* /etc/fstab,我們這樣做相當於把硬盤的掛載文件,所有的與系統相關的引導文件都刪除了。這樣做後想讓系統啟動起來真的難啊!如果真的這麽做了就要想辦法恢復了......

(1)首先要修復fstab文件

我們先通過光盤修復模式進入一個bash,通過“fdisk -l”命令查看磁盤分區信息,然後建立掛載點,將分區掛載到掛載點(如果是邏輯卷,先要使用命令” vgchange -ay”激活邏輯卷),分別查看是分區分別屬於哪個掛載點。然後掛載到系統根目錄下,如圖10所示,掛載後通過ls命令可以判斷/dev/sda1為根目錄(目錄下的內容已被刪除),/dev/sda3為根目錄。

技術分享

圖10

掛載完成後我們需要在/mnt/sda3/etc/下新建fstab文件,將磁盤掛載信息寫入其中,配置文件內容如圖11所示,並重啟,重新進入光盤修復模式。

技術分享

11

(2)修復引導文件

重新進入光盤修復模式後,確保分區已經正確掛載,此時,我們開始修復系統引導文件。修復過程如圖12所示:

技術分享

圖十二

引導文件修復後我們需要生成內核文件vmlinuz和虛擬文件系統initramfs。我們可以通過安裝內核來生成,安裝內核前需要掛載光盤。具體安裝過程如圖十三所示。

技術分享

圖十三

安裝完成戶我們要新建/boot/grub/grub.conf文件,/boot/grub/grub.conf文件的配置如圖十四所示,grub.conf文件生成後我們重新系統,如果不出意外,系統就可以正常啟動了。

技術分享

圖十四

5、我們自制一個Linux系統,安裝在自己的U盤中

(1)準備工作:找一個U盤,分兩個區,文件系統格式化為ext4。分別用於掛載/boot和根/。格式化完成後創建根掛載點”/mnt/sysroot”,掛載根目錄並在根目錄下創建其他必須的目錄,並掛載/boot。操作如下

[[email protected] ~]# mount /dev/sdb2 /mnt/sysroot/

[[email protected] ~]# mkdir -p/mnt/sysroot/{bin,boot,dev,etc,home,lib,lib64,media,mnt,opt,proc,root,ssbin,srv,sys,tmp,usr,var}

[[email protected] ~]# mount /dev/sdb1 /mnt/sysroot/boot/

(2)安裝grub及相關的內核文件

[[email protected] ~]# grub-install --root-directory=/mnt/sysroot/dev/sdb

[[email protected] ~]# cp /boot/vmlinuz-2.6.32-642.el6.x86_64/mnt/sysroot/boot/vmlinuz

[[email protected] ~]# cp /boot/initramfs-2.6.32-642.el6.x86_64.img/mnt/sysroot/boot/initramfs

[[email protected] ~]# ls /mnt/sysroot/boot/

grub initramfs lost+found vmlinuz

[[email protected] ~]# ls /mnt/sysroot/boot/grub/

device.map iso9660_stage1_5 stage1 xfs_stage1_5

e2fs_stage1_5 jfs_stage1_5 stage2

fat_stage1_5 minix_stage1_5 ufs2_stage1_5

ffs_stage1_5 reiserfs_stage1_5 vstafs_stage1_5

(3)創建/mnt/sysroot/boot/grub下的grub.conf文件

[[email protected] ~]# vim /mnt/sysroot/boot/grub/grub.conf

default 0

timeout 3

title dayi123linux

kernel /vmlinuz root=/dev/sda2

initrd /initramfs.img

(4)創建/etc/fstab文件

[[email protected] ~]# cat /mnt/sysroot/etc/fstab

UUID=605ccf9b-725b-4383-a0ac-a145072b3a80 /boot ext4 defaults 0 0

UUID=d8ebedaa-e6e8-4f90-8c70-cda8c5e122a0 / ext4 defaults 0 0

(5)copy所需要的命令及相關的庫文件(我們通過腳本實現,在copy命令的,但是一定要記得不要忘了copy最重要的bash),copy完成後我們可以將根切換過去,使用我們copy過去的命令。

[[email protected] ~]# sh copycmd.sh

Please input a command: bash

Please input a command or quit: ip

Please input a command or quit: mv

Please input a command or quit: cp

Please input a command or quit: rm

Please input a command or quit: vi

[[email protected] ~]# chroot /mnt/sysroot/

bash-4.1# ls

bin dev home lib64 media opt root srv sys usr

boot etc lib lost+found mnt proc sbin ssbin tmp var

copy命令時我們通過腳本實現,腳本內容如下:

#!/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

(6)為我們定制的Linux系統創建init文件,並加入執行權限,這樣我們就可以以我們定制的系統單獨啟動了!!!,啟動後如圖十五所示。

[[email protected] ~]# vim /mnt/sysroot/sbin/init

#!/bin/sh

echo "welcome dayiliunx"

[[email protected] ~]# chmod +x /mnt/sysroot/sbin/init

技術分享

圖十五

6、編譯安裝內核

(1)編譯安裝前準備工作:

編譯安裝前先安裝下開發包組“DevelopmentTools”,這樣可以避免在編譯安裝的時候出現很多問題,安裝前要確保你編譯安裝的目錄至少有10G的空閑空間,。同時需要到Linux內核官網(https://www.kernel.org/)下載內核並解壓,我的系統為centos7.3,我下載了最新的內核4.11,具體操作如下:

[[email protected] data]# yum groupinstall "DevelopmentTools" -y

[[email protected] data]# wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.11.tar.xz

[[email protected] data]# tar -xf linux-4.11.tar.xz

[[email protected] data]# du -sh linux-4.11

780M linux-4.11

(2)設置編譯安裝

基本準備工作完成後,我們就開始編譯安裝,首先我們先準備文本的配置文件,文本配置文件內容包括各種模塊的安裝,設置太多了,所以我們就幹脆將/boot目錄下的文本配置文件拷貝過來。其此,我們安裝一些基本的依賴包,以免在安裝時報錯,配置文件都是老司機安裝時總結出得,但未必適合你的系統,我們先安裝下。在安裝的過程中,還有依賴錯誤,我們再去安裝,具體操作如下:

[[email protected] data]#cd linux-4.11

[[email protected] linux-4.11]# cp /boot/config-3.10.0-514.el7.x86_64.config

[[email protected] linux-4.11]# yum install ncurses-devel -y

[[email protected] linux-4.11]#yum install openssl-devel

[[email protected] linux-4.11]#yum install bc –y

基本設置完成後,我們配置內核選項,根據我們的需求選擇需要的模塊及安裝方式(以模塊的方式安裝還是打入到內核中)。我們通過make menuconfig配置內核選項

[[email protected] linux-4.11]# make menuconfig

首先,我們選擇我們編譯安裝的版本號,在頁面中我們先選擇“General setup”菜單,按下回車,然後選擇第三行“local version– append to kernel release”回車,輸入編譯安裝版本號信息,然後退出保存,操作如圖十六所示。

技術分享

圖十六

其次,我們既然編譯安裝,那我們不妨在操作的時候選擇一些其他功能,Linux默認不支持ntfs格式的文件系統,ext4文件系統驅動是以模塊的方式安裝到“/lib/modules/3.10.0-514.el7.x86_64/kernel/fs/ext4/ext4.ko”,我們不放在編譯的時候設置ext4驅動直接打到內核中,並設置以模塊的方式安裝ntfs文件系統驅動。

我們首先設置將ext4文件系統驅動打到內核中,我們在圖十六出現的第一個菜單中,找到“File systems”菜單,按下回車。如圖十七所示,我們找到“TheExtended 4 (ext4)filesystem”按下空格,前面的“M”會變為“*”,如圖十八所示。也就意味著編譯安裝時,ext4驅動會被打到內核中。

技術分享

圖十七

技術分享

圖十八

我們繼續在圖十七所示的界面中找到“NTFS file system support”,按下空格,前面會出現“M”號,如圖十九所示。也就意味著在安裝系統時以模塊的方式安裝NTFS文件系統的驅動,同時在選中下面出現的兩項,也就是選中按下空格,前面出現“*”即可。設置完成後我們保存退出

技術分享

十九

設置完成後我們可以檢查下是不是選擇了所需要的模塊,可以在.config文件中搜索查看。如下所示:

[[email protected] linux-4.11]# grep -i ntfs .config

CONFIG_NTFS_FS=m

CONFIG_NTFS_DEBUG=y

CONFIG_NTFS_RW=y

(3)設置完成後我們就開始編譯安裝內核,需要在解壓目錄下

先執行命令” make –j 2”進行編譯,編譯非常耗時,編譯時我們先查看下cpu,根據cpu性能開啟多個進程,這樣會快些。

[[email protected] data]#cd /data/linux-4.11 #進到解壓目錄

[[email protected] linux-4.11]#make –j 2 #編譯以2個進程進行

編譯完成後,我們執行命令“make modules install”安裝模塊

[[email protected] linux-4.11]#make modules_install #安裝模塊

模塊安裝完成後,我們執行命令”make install”安裝內核相關的模塊:

[[email protected] linux-4.11]#make install

安裝內核後會在boot目錄下生成相關的內核文件,同時也會生成相關的模塊文件,如下所示:

[[email protected] boot]# ls /lib/modules/4.11.0-1.0dayilinux123/kernel/fs/nfs/

blocklayout filelayout flexfilelayout nfs.ko nfsv3.ko nfsv4.ko objlayout

config-3.10.0-514.el7.x86_64

grub

grub2

initramfs-0-rescue-24a2cfa5360f487e87dfb1ed47f3d34f.img

initramfs-3.10.0-514.el7.x86_64.img

initramfs-3.10.0-514.el7.x86_64kdump.img

initramfs-4.11.0-1.0dayilinux123.img

initrd-plymouth.img

symvers-3.10.0-514.el7.x86_64.gz

System.map

System.map-3.10.0-514.el7.x86_64

System.map-4.11.0-1.0dayilinux123

vmlinuz

vmlinuz-0-rescue-24a2cfa5360f487e87dfb1ed47f3d34f

vmlinuz-3.10.0-514.el7.x86_64

vmlinuz-4.11.0-1.0dayilinux123

至此我們的內核也就編譯安裝完成了,我們重新啟動系統,在進入系統的時候,我門在grub菜單除選擇我們自己編譯安裝的內核進入系統,進入系統後我們查看我們當前系統內核為我們編譯安裝的內核,如圖20所示:

技術分享

20

(4)卸載編譯安裝的內核:

在編譯安裝內核之前,感覺編譯安裝內核很高大上;但是,在安裝完成後,感覺也沒什麽卵用,況且我們系統自帶的內核都是經過操作系統發行的官方測試過的,穩定性,兼容性都是不錯的,既然沒什麽卵用,那我們幹脆卸了吧!

清理操作(根據自己的需求選擇清理):

make clean:清理大多數編譯生成的文件,但會保留config文件等

make mrproper: 清理所有編譯生成的文件、config及某些備份文件

make distclean:mrproper、patches以及編輯器備份文件

卸載操作:

1)刪除/lib/modules/目錄下不需要的內核庫文件

2)刪除/usr/src/linux/目錄下不需要的內核源碼

3)刪除/boot目錄下啟動的內核和內核映像文件

4)更改grub的配置文件,刪除不需要的內核啟動列表

7、Linux系統的神奇目錄/proc目錄

(1)/proc目錄:

1)作用:內核把自己內部狀態信息及統計信息,以及可配置參數通過proc偽文件系統加以輸出

2)查看常用的信息

/proc/sys/fs/file-max該文件指定了可以分配的文件句柄的最大數目

/proc/cpuinfocpu 存放cpu信息

/proc/filesystems 內核當前支持的文件系統類型

/proc/mdstat多硬盤,RAID配置信息(md=multiple disks)

/proc/meminfoRAM使用的相關信息

/proc/modules所有加載到內核的模塊列表

/proc/mounts系統中使用的所有掛載

/proc/stat所有的CPU活動信息

/proc/uptime系統已經運行了多久

/proc/swaps交換空間的使用情況

/proc/versionLinux內核版本和gcc版本

/proc/net網卡設備信息

/proc/ttytty設備信息

/proc/net/dev顯示網絡適配器及統計信息

/proc/vmstat虛擬內存統計信息

/proc/zoneinfo顯示內存空間的統計信息

3)通過修改/proc來臨時啟用關閉系統某功能

修改主機名:echo "dayi123" > /proc/sys/kernel/hostname

禁ping(不允許別人ping你的主機):echo1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

(2)跟/proc目錄相關的sysctl命令:

1)作用:sysctl命令被用於在內核運行時動態地修改內核的運行參數,可用的內核參數在目錄/proc/sys中

2)配置文件:/etc/sysctl.conf

3)用法:

設置某參數 sysctl-w parameter=VALUE

通過讀取配置文件設置參數 sysctl-p[/path/to/conf_file]

查看所有生效參數 sysctl -a

設置禁止別人ping你的電腦(也可以用下面的方法來實現):

#將配置寫入配置文件

[[email protected] ~]# echo "net.ipv4.icmp_echo_ignore_all =1" >>/etc/sysctl.conf

#使配置立即生效

[[email protected] ~]# /sbin/sysctl -p

net.ipv4.icmp_echo_ignore_all = 1

[[email protected] ~]# sysctl -w net.ipv4.route.flush=1

net.ipv4.route.flush = 1


本文出自 “dayi123” 博客,請務必保留此出處http://dayi123.blog.51cto.com/12064061/1925349

根據自己喜好定制Linux系統