溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Linux系統(tǒng)chroot命令該如何使用

發(fā)布時間:2022-01-27 09:24:50 來源:億速云 閱讀:267 作者:kk 欄目:開發(fā)技術(shù)

本篇文章給大家分享的是有關(guān)Linux系統(tǒng)chroot命令該如何使用,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

chroot簡介:

  • chroot,既是Linux的一條命令,也是它的一個系統(tǒng)調(diào)用。

  • chroot的作用就是就是改變當(dāng)前環(huán)境的根目錄到一個文件夾,這個文件夾之外的東西,

  • 對于當(dāng)前環(huán)境都是不可見的。

  • 因此若是運行不信任的代碼或程序,使用chroot作為一個安全沙箱是個很好的選擇。

為何使用 chroot

在經(jīng)過 chroot 之后,系統(tǒng)讀取到的目錄和文件將不在是舊系統(tǒng)根下的而是新根下(即被指定的新的位置)的目錄結(jié)構(gòu)和文件,因此它帶來的好處大致有以下3個:

  1. 增加了系統(tǒng)的安全性,限制了用戶的權(quán)力;

    在經(jīng)過 chroot 之后,在新根下將訪問不到舊系統(tǒng)的根目錄結(jié)構(gòu)和文件,這樣就增強了系統(tǒng)的安全性。這個一般是在登錄 (login) 前使用 chroot,以此達到用戶不能訪問一些特定的文件。

  2. 建立一個與原系統(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ā)。

  3. 切換系統(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 的使用

為了更好的理解 chroot 發(fā)揮的作用,我們將嘗試指定一個特定的位置進行根目錄切換。但是由于在經(jīng)過 chroot 之后,系統(tǒng)讀取到的 bin/ 等與系統(tǒng)相關(guān)目錄將不再是舊系統(tǒng)根目錄下的,而是切換后新根下的目錄結(jié)構(gòu)和文件,因此我們有必要準(zhǔn)備一些目錄結(jié)構(gòu)以及必要的文件。

清單 1. 準(zhǔn)備切換的目錄結(jié)構(gòu)

busybox

Busybox 被稱為是嵌入式 Linux 中的瑞士軍刀。Busybox 包含了許多有用的命令,如 cat、find 等,但是它的體積卻非常的小。

 $ pwd
 /home/wstone/Build/work
 $ tree .
 .
 |-- bin
 | |-- ash -> busybox
 | |-- bash
 | `-- busybox
 |-- etc
 `-- newhome

這里使用了靜態(tài)編譯后的 busybox 來提供必要的命令,使用靜態(tài)編譯僅是為了避免動態(tài)庫文件的拷貝。當(dāng)然我們也可以拷貝舊系統(tǒng)的下的命令到新的目錄結(jié)構(gòu)中使用,但是那些命令通常是動態(tài)編譯的,這就意味著我們不得不拷貝相關(guān)的動態(tài)庫文件到相應(yīng)的目錄結(jié)構(gòu)中。同時這里的 bash 也非真正的 Bourne Again shell,而是一個執(zhí)行 ash 的 shell 腳本。在清單 2中,展示了位于舊系統(tǒng)中的 chroot 命令的使用。需要注意的是在使用 chroot 時,要求擁有相關(guān)的操作權(quán)限。

清單 2. 位于系統(tǒng)中的 chroot 的使用

 mount /dev/hda1 /new-root
 cd /new-root
 pivot_root . old-root
 exec chroot . /sbin/initdev/console 2>&1
 umount /old-root

我們可以看到當(dāng)前路徑(/home/wstone/Build/work/),在經(jīng)過 chroot 后轉(zhuǎn)變成了 / 目錄,同時從新根下讀取了與系統(tǒng)相關(guān)的目錄結(jié)構(gòu)。使用 ls 命令失敗是由于我們創(chuàng)建的測試目錄結(jié)構(gòu)中并沒有包含命令 ls,但是我們成功的使用了 busybox 中的 ls。以上看到的只是 chroot 的一種使用方式,其實標(biāo)準(zhǔn)的 chroot (Coreutils – GNU core utilities 提供的 chroot)使用方式有2種:

清單 3. 標(biāo)準(zhǔn) chroot 的2種使用方式

 chroot NEWROOT [COMMAND...]
 
 chroot OPTION

剛才我們使用的是方式[2]。這將在沒有給定環(huán)境時,默認執(zhí)行 /bin/sh,但是當(dāng)給定環(huán)境后,將運行 ${SHELL} –i,即與環(huán)境相同的可交互的 shell。我們的目錄結(jié)構(gòu)中并沒有包含sh,顯然清單 2中的 chroot 運行了 ${SHELL} –i。當(dāng)然我們也可以在進行切換時指定需要的命令,即使用方式[1]。

清單 4. chroot 另一種方式的使用

 # chroot . /bin/ash
 #

清單 4 中,嘗試了在經(jīng)過 chroot 后,執(zhí)行新目錄結(jié)構(gòu)下的 ash shell。不得不說的是,如果新根下的目錄結(jié)構(gòu)和文件準(zhǔn)備的夠充分,那么一個新的簡單的 Linux 系統(tǒng)就可以使用了。其實更為常見的是在初始 RAM 磁盤 (initrd)中使用 chroot,以此來執(zhí)行系統(tǒng)的 init。清單 5 中,展示的是在 Linux 2.4 內(nèi)核 initrd 中使用 chroot。

清單 5. 在 Linux 2.4 內(nèi)核 initrd 中使用 chroot 的示例

 mount /dev/hda1 /new-root
 cd /new-root
 pivot_root . old-root
 exec chroot . /sbin/initdev/console 2>&1
 umount /old-root

由于 Linux 內(nèi)核的升級,initrd 處理機制和格式發(fā)生了變化,在 Linux 2.6 內(nèi)核 initrd 中不能再使用 pivot_root,因此一般也不再使用 chroot,而是選擇使用 busybox 提供的 switch_root 或者 klibc 提供的 run-init 進行根目錄的切換。(這并不是說不能在 Linux 2.6內(nèi)核 initrd 中使用 chroot,選擇 switch_root 或 run-init 僅是出于習(xí)慣和方便的考慮。)但是實質(zhì)上,它們僅是將 chroot 的功能進行了封裝,以此更加方便簡單的切換根目錄。

清單 6. 在 Linux 2.6 內(nèi)核 initrd 中 chroot 的使用

 find -xdev / -exec rm '{}' ';
 cd /newmount; mount --move . /; chroot .

switch_root 和 run-init 完成了類似清單 6中的功能,刪除 rootfs 的全部內(nèi)容以釋放空間,以及掛載新的根文件系統(tǒng)并進行切換。在 busybox 和 klibc中也有提供 chroot 命令,只是功能上與 Coreutils (GNU core utilities) 包含的 chroot 有稍許差異。

什么是Linux系統(tǒng)

Linux是一種免費使用和自由傳播的類UNIX操作系統(tǒng),是一個基于POSIX的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng),使用Linux能運行主要的Unix工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。

以上就是Linux系統(tǒng)chroot命令該如何使用,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI