chroot簡介
chroot,即 change root directory (更改 root 目錄)。在 linux 系統(tǒng)中,系統(tǒng)默認(rèn)的目錄結(jié)構(gòu)都是以 /
,即是以根 (root) 開始的。而在使用 chroot 之后,系統(tǒng)的目錄結(jié)構(gòu)將以指定的位置作為 /
位置。
chroot是在unix系統(tǒng)的一個操作,針對正在運作的軟件進(jìn)程和它的子進(jìn)程,改變它外顯的根目錄。一個運行在這個環(huán)境下,經(jīng)由chroot設(shè)置根目錄的程序,它不能夠?qū)@個指定根目錄之外的文件進(jìn)行訪問動作,不能讀取,也不能更改它的內(nèi)容。
由chroot創(chuàng)造出的那個根目錄,叫做“chroot監(jiān)獄”(chroot jail,或chroot prison)。
為何使用 chroot
在經(jīng)過 chroot 之后,系統(tǒng)讀取到的目錄和文件將不在是舊系統(tǒng)根下的而是新根下(即被指定的新的位置)的目錄結(jié)構(gòu)和文件,因此它帶來的好處大致有以下3個:
- 增加了系統(tǒng)的安全性,限制了用戶的權(quán)力;
在經(jīng)過 chroot 之后,在新根下將訪問不到舊系統(tǒng)的根目錄結(jié)構(gòu)和文件,這樣就增強了系統(tǒng)的安全性。這個一般是在登錄 (login) 前使用 chroot,以此達(dá)到用戶不能訪問一些特定的文件。 - 建立一個與原系統(tǒng)隔離的系統(tǒng)目錄結(jié)構(gòu),方便用戶的開發(fā);
使用 chroot 后,系統(tǒng)讀取的是新根下的目錄和文件,這是一個與原系統(tǒng)根下文件不相關(guān)的目錄結(jié)構(gòu)。在這個新的環(huán)境中,可以用來測試軟件的靜態(tài)編譯以及一些與系統(tǒng)不相關(guān)的獨立開發(fā)。 - 切換系統(tǒng)的根目錄位置,引導(dǎo) Linux 系統(tǒng)啟動以及急救系統(tǒng)等。
chroot 的作用就是切換系統(tǒng)的根位置,而這個作用最為明顯的是在系統(tǒng)初始引導(dǎo)磁盤的處理過程中使用,從初始 RAM 磁盤 (initrd) 切換系統(tǒng)的根位置并執(zhí)行真正的 init。另外,當(dāng)系統(tǒng)出現(xiàn)一些問題時,我們也可以使用 chroot 來切換到一個臨時的系統(tǒng)。
chroot 的使用
下面以Gentoo、Arch為例,說明chroot過程:
- 確定chroot的目標(biāo)目錄:
如果LiveCD環(huán)境,掛載系統(tǒng)所在根分區(qū)
mount /dev/sdx /mnt/gentoo
- 掛載/proc
mount -t proc none /mnt/gentoo/proc/
或
mount -t proc proc /mnt/gentoo/proc/
- 掛載/sys,/dev/
mount --rbind /sys /mnt/gentoo/sys/
mount --rbind /dev /mnt/gentoo/dev/
- 可選:
mount --rbind /tmp /mnt/gentoo/tmp (gentoo)
mount --rbind /run /mnt/arch/run (arch)
- 復(fù)制DNS信息:
cp /etc/resolv.conf etc/resolv.conf
- chroot
chroot /mnt/gentoo /bin/bash
- 更新環(huán)境變量:
env-update (gentoo)
source /etc/profile
- Optionally, create a unique prompt to be able to differentiate your chroot environment:
export PS1="(chroot) $PS1"
結(jié)束語
在 Linux 系統(tǒng)初始引導(dǎo)的過程中,通常都有使用 chroot。但是 chroot 的好處不僅于此,它還增加了系統(tǒng)的安全性等。