chroot的用法


chroot命令用來在指定的根目錄下運行指令。chroot,即 change root directory (更改 root 目錄)。在 linux 系統中,系統默認的目錄結構都是以/,即是以根 (root) 開始的。而在使用 chroot 之后,系統的目錄結構將以指定的位置作為/位置。

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

  1. 增加了系統的安全性,限制了用戶的權力;

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

  2. 建立一個與原系統隔離的系統目錄結構,方便用戶的開發;

    使用 chroot 后,系統讀取的是新根下的目錄和文件,這是一個與原系統根下文件不相關的目錄結構。在這個新的環境中,可以用來測試軟件的靜態編譯以及一些與系統不相關的獨立開發。

  3. 切換系統的根目錄位置,引導 Linux 系統啟動以及急救系統等。

    chroot 的作用就是切換系統的根位置,而這個作用最為明顯的是在系統初始引導磁盤的處理過程中使用,從初始 RAM 磁盤 (initrd) 切換系統的根位置並執行真正的 init。另外,當系統出現一些問題時,我們也可以使用 chroot 來切換到一個臨時的系統。

做個演示:

  • 創建一個目錄作為根目錄,chroot MyRootDir默認會執行${SHELL} -i,即MyRootDir/bin/bash,所以需要拷貝bash到指定目錄

  

  • 直接執行chroot MyRootDir出現錯誤:chroot: failed to run command ‘/bin/bash’: No such file or directory,原因是缺少bash相關的庫,使用ldd查看庫並拷貝(此例子中為簡化演示,直接拷貝/lib目錄)

  

  • 這樣就執行新根目錄內的命令

  

  

  • 也可以手動指定bash路徑切換,這樣就不需要將bash放入新根路徑的/bin目錄下

  

chroot的第三個參數為運行的指令,該指令位於新的root路徑,從下面可以驗證改命令執行的不是系統路徑的命令

 

下面是chroot的命令說明:

 從chroot的用法可以看出它的使用場景有一定的局限性,首先它依賴於一台現成的unix系統(根目錄必須存在於某台現有系統上),其次chroot僅僅是在系統目錄上進行了隔離,並沒有對進程、網絡等層面進行隔離。

首先檢驗一下進程空間:

在pts/0端切換到新的根目錄,執行ping 127.0.0.1操作,該操作屬於新根目錄下進行的

新開一個終端界面,查看ping進程可以看到在原系統下面是可以看到新根目錄下執行的進程。chroot並沒有在進程層面上進行隔離

同樣地在新根目錄下執行ifconfig等網絡操作可以看到網絡信息跟原系統是完全一樣的。chroot並沒有在網絡層面上進行隔離

chroot並不能完全保證系統安全,在很多層面上chroot並沒有進行完全隔離

詳細技術講解參見:https://www.ibm.com/developerworks/cn/linux/l-cn-chroot/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM