您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關Linux系統chroot命令該如何使用,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
chroot,既是Linux的一條命令,也是它的一個系統調用。
chroot的作用就是就是改變當前環境的根目錄到一個文件夾,這個文件夾之外的東西,
因此若是運行不信任的代碼或程序,使用chroot作為一個安全沙箱是個很好的選擇。
在經過 chroot 之后,系統讀取到的目錄和文件將不在是舊系統根下的而是新根下(即被指定的新的位置)的目錄結構和文件,因此它帶來的好處大致有以下3個:
增加了系統的安全性,限制了用戶的權力;
在經過 chroot 之后,在新根下將訪問不到舊系統的根目錄結構和文件,這樣就增強了系統的安全性。這個一般是在登錄 (login) 前使用 chroot,以此達到用戶不能訪問一些特定的文件。
建立一個與原系統隔離的系統目錄結構,方便用戶的開發;
使用 chroot 后,系統讀取的是新根下的目錄和文件,這是一個與原系統根下文件不相關的目錄結構。在這個新的環境中,可以用來測試軟件的靜態編譯以及一些與系統不相關的獨立開發。
切換系統的根目錄位置,引導 Linux 系統啟動以及急救系統等。
chroot 的作用就是切換系統的根位置,而這個作用最為明顯的是在系統初始引導磁盤的處理過程中使用,從初始 RAM 磁盤 (initrd) 切換系統的根位置并執行真正的 init。另外,當系統出現一些問題時,我們也可以使用 chroot 來切換到一個臨時的系統。
為了更好的理解 chroot 發揮的作用,我們將嘗試指定一個特定的位置進行根目錄切換。但是由于在經過 chroot 之后,系統讀取到的 bin/ 等與系統相關目錄將不再是舊系統根目錄下的,而是切換后新根下的目錄結構和文件,因此我們有必要準備一些目錄結構以及必要的文件。
清單 1. 準備切換的目錄結構
busybox
Busybox 被稱為是嵌入式 Linux 中的瑞士軍刀。Busybox 包含了許多有用的命令,如 cat、find 等,但是它的體積卻非常的小。
$ pwd /home/wstone/Build/work $ tree . . |-- bin | |-- ash -> busybox | |-- bash | `-- busybox |-- etc `-- newhome
這里使用了靜態編譯后的 busybox 來提供必要的命令,使用靜態編譯僅是為了避免動態庫文件的拷貝。當然我們也可以拷貝舊系統的下的命令到新的目錄結構中使用,但是那些命令通常是動態編譯的,這就意味著我們不得不拷貝相關的動態庫文件到相應的目錄結構中。同時這里的 bash 也非真正的 Bourne Again shell,而是一個執行 ash 的 shell 腳本。在
中,展示了位于舊系統中的 chroot 命令的使用。需要注意的是在使用 chroot 時,要求擁有相關的操作權限。清單 2. 位于系統中的 chroot 的使用
mount /dev/hda1 /new-root cd /new-root pivot_root . old-root exec chroot . /sbin/initdev/console 2>&1 umount /old-root
我們可以看到當前路徑(/home/wstone/Build/work/),在經過 chroot 后轉變成了 / 目錄,同時從新根下讀取了與系統相關的目錄結構。使用 ls 命令失敗是由于我們創建的測試目錄結構中并沒有包含命令 ls,但是我們成功的使用了 busybox 中的 ls。以上看到的只是 chroot 的一種使用方式,其實標準的 chroot (Coreutils – GNU core utilities 提供的 chroot)使用方式有2種:
清單 3. 標準 chroot 的2種使用方式
chroot NEWROOT [COMMAND...] chroot OPTION
剛才我們使用的是方式[2]。這將在沒有給定環境時,默認執行 /bin/sh,但是當給定環境后,將運行 ${SHELL} –i,即與環境相同的可交互的 shell。我們的目錄結構中并沒有包含sh,顯然
中的 chroot 運行了 ${SHELL} –i。當然我們也可以在進行切換時指定需要的命令,即使用方式[1]。清單 4. chroot 另一種方式的使用
# chroot . /bin/ash #
在
中,嘗試了在經過 chroot 后,執行新目錄結構下的 ash shell。不得不說的是,如果新根下的目錄結構和文件準備的夠充分,那么一個新的簡單的 Linux 系統就可以使用了。其實更為常見的是在初始 RAM 磁盤 (initrd)中使用 chroot,以此來執行系統的 init。 中,展示的是在 Linux 2.4 內核 initrd 中使用 chroot。清單 5. 在 Linux 2.4 內核 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 內核的升級,initrd 處理機制和格式發生了變化,在 Linux 2.6 內核 initrd 中不能再使用 pivot_root,因此一般也不再使用 chroot,而是選擇使用 busybox 提供的 switch_root 或者 klibc 提供的 run-init 進行根目錄的切換。(這并不是說不能在 Linux 2.6內核 initrd 中使用 chroot,選擇 switch_root 或 run-init 僅是出于習慣和方便的考慮。)但是實質上,它們僅是將 chroot 的功能進行了封裝,以此更加方便簡單的切換根目錄。
清單 6. 在 Linux 2.6 內核 initrd 中 chroot 的使用
find -xdev / -exec rm '{}' '; cd /newmount; mount --move . /; chroot .
switch_root 和 run-init 完成了類似
中的功能,刪除 rootfs 的全部內容以釋放空間,以及掛載新的根文件系統并進行切換。在 busybox 和 klibc中也有提供 chroot 命令,只是功能上與 Coreutils (GNU core utilities) 包含的 chroot 有稍許差異。Linux是一種免費使用和自由傳播的類UNIX操作系統,是一個基于POSIX的多用戶、多任務、支持多線程和多CPU的操作系統,使用Linux能運行主要的Unix工具軟件、應用程序和網絡協議。
以上就是Linux系統chroot命令該如何使用,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。