如何在linux上使用chroot命令

chroot命令可以將您送進監獄,隔離您的開發或測試環境,或者只是提高系統的安全性。我們將向您展示最簡單的使用方法。...

chroot命令可以將您送進監獄,隔離您的開發或測試環境,或者只是提高系統的安全性。我們將向您展示最簡單的使用方法。

什麼是chroot?

如果您試圖衡量命令的有用性,則必須考慮它提供的功能及其易用性。如果它太複雜了,人們無法使用,或者太冗長了,以至於他們不想嘗試使用它,那麼它的功能也可能是零。如果沒有人使用它,它就不提供任何功能。

在與Linux使用者親自討論和在論壇上討論時,chroot命令似乎被認為是一個很難使用的命令,或者是一個過於挑剔和繁瑣的設定。似乎這個非常好的實用程式並沒有被儘可能多地使用。

使用chroot,您可以在一個封裝的檔案系統中設定和執行程式或互動式shell(如Bash),該檔案系統無法與常規檔案系統進行互動。chroot環境中的所有內容都被寫入和包含。chroot環境中的任何東西都不能在不升級到root許可權的情況下看到它自己的、特殊的根目錄。這就為這種環境贏得了一個chroot監獄的綽號。術語“jail”不應該與FreeBSD的jail命令混淆,後者建立了一個比通常的chroot環境更安全的chroot環境。

但實際上,有一種非常簡單的方法可以使用chroot,我們將逐步介紹它。我們使用常規的Linux命令,它可以在所有發行版上執行。一些Linux發行版有專門的工具來設定chroot環境,比如Ubuntu的debootstrap,但是我們的發行版是不可知的。

你應該什麼時候使用chroot?

chroot環境提供了類似於虛擬機器的功能,但它是一個更輕量級的解決方案。捕獲系統不需要安裝和配置虛擬機器監控程式,例如VirtualBox或virtualmachinemanager。它也不需要在捕獲系統中安裝核心。捕獲系統共享您現有的核心。

從某種意義上說,chroot環境更接近LXC等容器,而不是虛擬機器。它們輕量級,部署迅速,建立和啟動一個可以自動化。與容器一樣,配置它們的一種方便方法是安裝足夠的作業系統,以完成所需的任務。透過檢視如何使用chroot環境來回答“what is required”問題。

一些常見用途是:

軟體開發和產品驗證。開發人員編寫軟體,產品驗證團隊(PV)對其進行測試。有時PV發現的問題無法在開發人員的計算機上覆制。開發人員在他們的開發計算機上安裝了各種各樣的工具和庫,這是普通使用者和PV所沒有的。通常,為開發人員工作但不為其他人工作的新軟體使用的是開發人員PC上的資源,而該資源尚未包含在軟體的測試版本中。chroot允許開發人員在他們的計算機上有一個簡單的香草俘虜環境,他們可以在將軟體提供給PV之前將其浸入其中。可以使用軟體所需的最小依賴項來配置捕獲環境。

降低開發風險。開發人員可以建立一個專用的開發環境,這樣在其中發生的任何事情都不會弄亂他的實際PC。

正在執行不推薦使用的軟體。有時候你只需要執行一箇舊版本的東西。如果舊軟體的需求與您的Linux版本衝突或不相容,您可以為問題軟體建立一個chroot環境。

恢復和檔案系統升級:如果Linux安裝無法操作,可以使用chroot將損壞的檔案系統裝載到livecd上的裝載點。這允許您在損壞的系統中工作並嘗試修復它,就好像它是在root/上正常安裝的一樣。這意味著損壞系統中的預期檔案路徑將從根目錄而不是從livecd的裝入點正確引用。在描述如何將Linux檔案系統從ext2或ext3遷移到ext4的文章中使用了類似的技術。

圍欄應用。在chroot環境中執行FTP伺服器或其他連線到internet的裝置可以限制外部攻擊者可能造成的損害。這是加強系統安全性的重要一步。

相關:如何在Linux上將Ext2或Ext3檔案系統遷移到Ext4

建立chroot環境

我們需要一個目錄作為chroot環境的根目錄。因此,我們有一種引用該目錄的簡寫方法,我們將建立一個變數並在其中儲存目錄的名稱。這裡我們設定一個變數來儲存到“testroot”目錄的路徑。不管這個目錄是否還不存在,我們很快就會建立它。如果目錄確實存在,它應該是空的。

chr=/home/dave/testroot

如何在linux上使用chroot命令

如果目錄不存在,我們需要建立它。我們可以用這個命令。-p(parents)選項確保同時建立任何缺少的父目錄:

mkdir -p $chr

如何在linux上使用chroot命令

我們需要建立目錄來儲存chroot環境將需要的作業系統部分。我們將建立一個使用Bash作為互動式shell的簡約Linux環境。我們還將包括touch、rm和ls命令。這將允許我們使用Bash的所有內建命令和touch、rm和ls。我們將能夠建立、列出和刪除檔案,並使用Bash。在這個簡單的例子中,僅此而已。

列出需要在{}大括號擴充套件中建立的目錄。

mkdir -p $chr/{bin,lib,lib64}

如何在linux上使用chroot命令

現在我們將目錄更改為新的根目錄。

cd $chr

如何在linux上使用chroot命令

讓我們將我們在簡約主義Linux環境中需要的二進位制檔案從常規的“/bin”目錄複製到chroot“/bin”目錄中。v(verbose)選項使cp在執行每個複製操作時告訴我們它在做什麼。

cp -v /bin/{bash,touch,ls,rm} $chr/bin

如何在linux上使用chroot命令

這些檔案是為我們複製的:

如何在linux上使用chroot命令

這些二進位制檔案將具有依賴關係。我們需要發現它們是什麼,並將這些檔案複製到我們的環境中,否則bash、touch、rm和ls將無**常工作。我們需要依次為每個選定的命令執行此操作。我們先去狂歡一下。ldd命令將為我們列出依賴項。

ldd /bin/bash

如何在linux上使用chroot命令

依賴項在終端視窗中標識和列出:

如何在linux上使用chroot命令

我們需要把這些檔案複製到我們的新環境中。從列表中挑選細節,然後一次複製一個,這既耗時又容易出錯。

謝天謝地,我們可以半自動化。我們將再次列出依賴項,這次我們將形成一個列表。然後我們將在列表中迴圈複製檔案。

在這裡,我們使用ldd列出依賴項,並透過管道將結果輸入egrep。使用egrep與使用grep和-E(擴充套件正則表示式)選項相同。-o(僅匹配)選項將輸出限制為行的匹配部分。我們正在尋找以數字[0-9]結尾的匹配庫檔案。

list="$(ldd /bin/bash | egrep -o '/lib.*\.[0-9]')"

如何在linux上使用chroot命令

我們可以使用echo檢查列表的內容:

echo $list

如何在linux上使用chroot命令

現在我們已經有了這個列表,我們可以透過下面的迴圈逐步遍歷它,一次複製一個檔案。我們用變數i來遍歷列表。對於列表中的每個成員,我們將檔案複製到chroot根目錄中,它是$chr中的值。

v(verbose)選項使cp在執行每個副本時通知它。--parents選項確保在chroot環境中建立任何缺少的父目錄。

for i in $list; do cp -v --parents "$i" "${chr}"; done

如何在linux上使用chroot命令

這是輸出:

如何在linux上使用chroot命令

我們將使用該技術來捕獲其他每個命令的依賴關係。我們將使用迴圈技術來執行實際的複製。好訊息是我們只需要對收集依賴項的命令做一個小的編輯。

我們可以透過按幾次向上箭頭鍵從命令歷史中檢索命令,然後進行編輯。迴圈複製命令根本不需要更改。

在這裡,我們使用向上箭頭鍵來查詢命令,並將其編輯為touch而不是bash。

list="$(ldd /bin/touch | egrep -o '/lib.*\.[0-9]')"

如何在linux上使用chroot命令

我們現在可以重複與前面完全相同的迴圈命令:

for i in $list; do cp -v --parents "$i" "${chr}"; done

如何在linux上使用chroot命令

我們的檔案是為我們複製的:

如何在linux上使用chroot命令

現在可以編輯ls的list命令列:

list="$(ldd /bin/ls | egrep -o '/lib.*\.[0-9]')"

如何在linux上使用chroot命令

同樣,我們將使用相同的迴圈命令。它不關心列表中有哪些檔案。它盲目地透過列表為我們複製檔案。

for i in $list; do cp -v --parents "$i" "${chr}"; done

如何在linux上使用chroot命令

ls的依賴項也為我們複製過來了:

如何在linux上使用chroot命令

我們最後一次編輯了list命令列,使其適用於rm:

list="$(ldd /bin/ls | egrep -o '/lib.*\.[0-9]')"

如何在linux上使用chroot命令

最後一次使用迴圈複製命令:

for i in $list; do cp -v --parents "$i" "${chr}"; done

最後一個依賴項被複制到chroot環境中。我們終於可以使用chroot命令了。此命令設定chroot環境的根,並指定作為shell執行的應用程式。

sudo chroot $chr /bin/bash

如何在linux上使用chroot命令

我們的chroot環境現在處於活動狀態。終端視窗提示已更改,並且互動shell是由bash shell在我們的環境中處理的。

如何在linux上使用chroot命令

我們可以嘗試我們帶入環境中的命令。

ls ls /home/dave/Documents

如何在linux上使用chroot命令

當我們在環境中使用ls命令時,它的工作方式與我們預期的一樣。當我們嘗試訪問環境之外的目錄時,命令失敗。

我們可以使用touch建立一個檔案,ls列出它,rm刪除它。

touch sample_file.txt ls rm sample_file.txt ls

如何在linux上使用chroot命令

當然,我們也可以使用bashshell提供的內建命令。如果在命令列中鍵入help,Bash將為您列出它們。

help

如何在linux上使用chroot命令

使用exit退出chroot環境:

exit

如何在linux上使用chroot命令

如果要刪除chroot環境,只需刪除它:

rm -r testroot/

如何在linux上使用chroot命令

這將遞迴地刪除chroot環境中的檔案和目錄。

為方便而自動化

如果您認為chroot環境可能對您有用,但它們的設定有點不方便,請記住,您可以透過使用別名、函式和指令碼來減輕重複任務的壓力和風險。

相關:如何在Linux上建立別名和Shell函式

  • 發表於 2021-04-03 03:19
  • 閱讀 ( 66 )
  • 分類:網際網路

你可能感興趣的文章

什麼是容器linux?您應該使用它嗎?

...在啟動時啟動。此外,在啟動時,雲配置檔案讓主機知道如何加入現有叢集。這個 ...

  • 發佈於 2021-03-15 05:37
  • 閲讀 ( 48 )

如何在linux上安裝和使用powershell

... 在本文中,我將向您展示如何在Linux上安裝、執行和使用PowerShell! ...

  • 發佈於 2021-03-16 02:34
  • 閲讀 ( 51 )

如何從usb啟動raspberry pi 3

...的USB硬碟驅動器。這是一個重要的發展,所以讓我們看看如何設定你的樹莓皮3從USB啟動。 ...

  • 發佈於 2021-03-17 12:42
  • 閲讀 ( 100 )

如何在android和termux上使用linux命令列

...許您在Android裝置上安裝誠實善良的Linux應用程式。下面是如何使用Termux應用程式。 ...

  • 發佈於 2021-03-18 07:26
  • 閲讀 ( 58 )

如何在windows10上獲得linux bash shell

... 如何在windows10上安裝linux bash shell ...

  • 發佈於 2021-03-21 11:48
  • 閲讀 ( 58 )

linux下如何重新命名檔案

要在Linux中重新命名檔案嗎?如果您知道如何在Windows、macOS或Chrome作業系統中完成這項工作,那麼您就知道如何在這裡完成這項工作。在大多數版本的Linux上,您只需右鍵單擊一個檔案並選擇Rename選項。 ...

  • 發佈於 2021-03-22 02:48
  • 閲讀 ( 64 )

如何在linux上使用groupadd管理使用者組

... 相關:如何在Linux中更改密碼 ...

  • 發佈於 2021-03-26 17:15
  • 閲讀 ( 41 )

如何在linux中新增使用者

想在Linux系統上新增使用者但不知道如何新增?在Linux上使用命令列介面管理使用者無疑是一項複雜的工作。而對於初學者來說,即使新增新使用者也是一場噩夢。 ...

  • 發佈於 2021-03-26 23:29
  • 閲讀 ( 65 )

如何在ubuntu上安裝ftp伺服器

... 許多Linux伺服器執行Ubuntu。那麼,讓我們看看如何在Ubuntu伺服器上設定FTP伺服器。 ...

  • 發佈於 2021-03-30 13:11
  • 閲讀 ( 54 )

為什麼linux的systemd在這麼多年後仍然存在分歧

...在和以前一樣具有分裂性。儘管許多主要的Linux發行版都使用它,但鐵桿反對者並沒有鬆懈。 linux引導序列 開啟計算機電源後,硬體將引導,然後(根據計算機使用的引導扇區型別)執行主引導記錄(MBR)或執行統一可擴充套...

  • 發佈於 2021-04-02 02:56
  • 閲讀 ( 44 )
DUAN2215923
DUAN2215923

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章

相關推薦