chroot "jail" - 它是什麼以及如何使用它?

chroot "jail" - 它是什麼以及如何使用它?

我聽說過/讀過很多關於 linux 下 chroot Jail 的內容,但從未使用過它(我日常使用 Fedora),那麼什麼是 chroot “jail”?我何時以及為什麼可以使用/不使用它,還有什麼我應該知道的嗎?我該如何創建一個?

答案1

chroot 監獄是一種將進程及其子程序與系統其他部分隔離的方法。它應該只用於不以 root 身分運行的進程,因為 root 使用者可以輕鬆地越獄。

這個想法是創建一個目錄樹,在其中複製或連結進程運行所需的所有系統檔案。然後,您使用chroot()系統呼叫將根目錄變更為該新樹的根目錄,並啟動在該 chroot 環境中執行的程序。由於它實際上無法引用修改後的根目錄之外的路徑,因此它無法在這些位置惡意執行操作(讀取/寫入等)。

在 Linux 上,使用綁定掛載是填滿 chroot 樹的好方法。例如,使用它,您可以拉入類似/lib和的資料夾,/usr/lib但不拉入。/usr只需將您想要的目錄樹綁定到您在監獄目錄中建立的目錄。

答案2

「chroot監獄」是一個用詞不當,應該真正消失,但人們仍在使用它。chroot是一個工具,可讓您將檔案系統上的目錄模擬為檔案系統的根。這意味著您可以擁有以下資料夾結構:

-- foo
    -- bar
    -- baz
-- bazz

如果你chroot foo這樣做ls /,你會看到:

-- bar
-- baz

ls(以及您正在執行的任何其他工具)而言,這些是檔案系統上唯一的目錄。 「監獄」一詞用詞不當的原因chroot並不是為了力量留在模擬檔案系統中的程式;知道自己位於 chroot「監獄」中的程式可以相當容易地逃脫,因此您不應該將其用作chroot安全措施來阻止程式修改模擬檔案系統之外的文件

答案3

基本上,您只是更改環境的根目錄。所以

/

變成

/some-jail/ (or whatever directory you want)

當應用程式存取 / 時,它們將獲得 /some-jail/。此外,應用程式無法突破 /some-jail/,因此您知道它不會存取您電腦上的任何其他內容。這是一種非常簡單的方式,可以說「嘿,您只能存取我為您提供的這些內容,而您無法存取系統上的其他任何內容」。

答案4

chroot 很容易理解為一個更現代的術語虛擬環境。該進程會取得一個新的虛擬根目錄來建立路徑可見性。這主要是一種方便簡單的方法來控制進程可以引用哪些檔案和函式庫。這對於隔離實際檔案系統上可能具有不同版本的事物非常有幫助。

您也可以將其視為檔案系統中可見內容的一種過濾器。

重要的是也要考慮在 chroot 之後更改當前工作目錄,以避免意外的檔案系統視圖。

一個令人誤解的事情是“監獄”一詞。歷史上曾使用 chroot 來模擬 FreeBSD 所謂的監獄(其他人可能稱之為沙箱)。為此,還需要自行降低進程的權限。這不是一個很好的安全模型。

一個常見的用例是編譯需要引用特定工具鏈或一組函式庫、檔案和工具的軟體,這些工具鍊是系統實際擁有的子集。

相關內容