Linux 中的 chroot 是什么以及它的工作原理
您是否想在Linux上在隔離的空間中運行應用程序或服務?或者您是否想測試和調試應用程序而不會干擾系統的其他部分?如果是這樣,您就需要了解 chroot,這是Linux中內置的一個強大機制,可以讓您在系統內創建一個獨立的環境。
什么是 Linux 中的 chroot?
讓我們詳細探討chroot,了解其好處、使用場景,如何在Linux系統上設置它,以及如果需要的話,如何跳出(chroot)環境。
chroot 就是 change-root,可以說是最簡單和古老的容器化軟件之一,它允許用戶安全地將應用程序和服務隔離。在計算術語中,隔離是將程序限制在一個受限空間內,具有預定義的資源。
如果您熟悉 Docker 及其工作原理,您可以將 chroot 視為其大幅簡化的版本。chroot 通過更改程序的根目錄,限制訪問和可見性,從而提供了額外的隔離和安全層級。
基本上,您創建一個單獨的目錄,將所有程序的依賴項復制到新目錄中,然后運行chroot命令。這使得程序能夠正常運行,同時無法訪問基本文件系統。
將程序設置為 chroot 環境是一種在安全空間中測試其可靠性的好方法,而不會改變實際系統的文件。此外,在 chroot 環境中,您還可以減少受到受損軟件包引起的安全風險,因為在 chroot 環境中,受損的軟件包將無法訪問和修改敏感系統文件。
程序只能訪問和查看導入到 chroot 目錄中的文件,也被稱為”chroot監獄”。這樣可以防止程序及其子進程干擾基本系統的運行。
什么是chroot監獄?
一個 chroot 監獄是一個隔離的環境,其中運行和執行chroot程序。chroot 監獄這個術語源自這樣一個概念:chroot 環境內的進程及其子進程無法訪問或查看基本文件系統,并且受限于chroot所預定的資源。
現在你對 chroot 的概念有了清楚的了解,讓我們動手實踐,學習如何創建一個 chroot 監獄并在其中執行程序。
如何創建 chroot 監獄并在其中執行程序
chroot 監獄(chroot jail)實質上是一個目錄,其中包含了程序正常運行所需的所有資源、文件、二進制文件和其他依賴項。
然而,與常規的 Linux 環境不同,chroot監獄的環境受到嚴格限制,程序無法訪問外部或額外的文件和系統資源。
例如,要在 chroot 監獄中運行 Bash shell,你需要將 Bash 二進制文件及其所有依賴項復制到chroot目錄中。
下面是創建 chroot 監獄并生成 Bash shell 的步驟:
(1) 要成功運行一個程序,你需要將它的所有依賴項復制到 chroot 監獄的目錄中。讓我們使用 which 和 ldd 命令找到二進制文件(在本例中為Bash)及其所有依賴項的位置:
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]
└─$ which bash
/usr/bin/bash
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]
└─$ ldd /usr/bin/bash
(2) 現在你知道了二進制文件和其依賴項的位置,將它們復制到你想要轉換為 chroot 監獄的目錄中。使用 mkdir 命令創建必要的目錄,并使用 cp命令將所有文件復制到相應的目錄中:
mkdir bin lib lib64 && cp -r /lib/ * ./lib && cp -r /lib64/* ./lib64/ && cp /bin/bash /bin/
(3) 最后,當程序和它的依賴項復制完成后,你可以使用 sudo 前綴以提升的權限運行 chroot 命令,在所選擇的目錄中生成 chroot 環境。默認情況下,它將生成一個Bash shell。下面是要輸入的命令:
linuxmi@linuxmi:~$ sudo chroot www.linuxmi.com
這就是生成chroot監獄并在其中運行程序的所有步驟。
如何逃離chroot監獄
雖然 chroot 監獄對于測試不穩定的軟件很有用,但在處理 SSH 連接時也很有用,因為將連接的用戶設置為 chroot 環境是保護 SSH 服務器的眾多方法之一。
另一方面,如果你是一名滲透測試人員,并且已登錄到目標的 SSH 服務器,發現它是一個 chroot 環境,可能會感到沮喪,感覺走投無路。
然而,有很多方法可以逃離錯誤配置的 chroot 獄,有些方法需要 C 編程技巧,而其他方法可以使用工具自動化。一些簡單的 chroot 逃逸方法包括:
- 嵌套的 chroot 調用
- 帶有保存的文件描述符的嵌套 chroot 調用
- 根目錄掛載方法
- procfs 逃逸
- ptrace 逃逸
請注意,要使用這些方法之一進行 chroot 逃逸,你需要在系統中具有升級的特權。通過訪問 chw00t 的 GitHub 存儲庫,你可以了解更多關于這些逃逸方法的信息,那是一個 chroot 逃逸自動化工具。
現在你應該對 Linux 中的 chroot 了如指掌了
現在您知道 chroot 是什么、它是如何工作的以及如何實現它,您應該能夠毫不費力地從終端對應用程序進行沙盒處理。請記住,如您所知,有多種方法可以打破 chroot 環境。
這表明 chroot 絕不是作為安全功能實現而設計的。因此,您應該非常謹慎地使用 chroot,因為不正確的配置最終可能會適得其反并危及系統的安全性。
最好堅持使用專用的沙盒解決方案,如容器化軟件或虛擬機。它們都以沙盒和安全性為中心,因此除非有新的零日漏洞,否則您無需擔心系統的安全性和完整性。
如果您不確定在容器化和虛擬化軟件之間選擇哪一個,您對兩者都應該嘗試,并親自看看哪一個更好。