如何在 chroot 中執行“ls”命令?
我有瀏覽器 shell皮帶,我在 php 中執行 shell 命令並將它們返回到瀏覽器,我剛剛發現了 chroot 命令,我想
ls
在更改的根目錄上執行例如,實際上我需要執行bash -c "ls /"
. 我試過這個(我試過沒有 sudo 但它不起作用):sudo chroot ~/projects/jcubic/leash ls
但出現錯誤:
chroot: failed to run command ‘ls’: No such file or directory
我要正確使用這個命令嗎?是否可以在不同的根目錄上執行 ls ?
當我嘗試在沒有 sudo 的情況下執行 chroot 時,出現此錯誤:
chroot: cannot change root directory to '/home/kuba/projects/jcubic/leash': Operation not permitted
chroot: failed to run command ‘ls’: No such file or directory
要在 chroot 中執行任何命令,您需要在 chroot 中提供該程序(因為它不能使用安裝在
/
文件系統中的程序。最簡單的方法是將 from 複製
/usr/bin/ls
到/home/kuba/projects/jcubic/leash/usr/bin/
(您還需要依賴的共享庫:)ldd /usr/bin/ls
。
可以
ls
在不同的根目錄中執行,但ls
命令及其依賴的所有文件都必須存在於該根目錄中。無法啟動ls
命令,然後在該過程中更改根目錄:ls
沒有此功能。chroot 的全部意義在於將文件的可見性限制為特定目錄下的文件。當您執行時
chroot ~/projects/jcubic/leash ls
,該chroot
命令會更改其自己程序的根目錄(更改根目錄只會影響執行它的程序以及它隨後執行的任何程序),然後嘗試執行ls
在搜尋路徑上的目錄中呼叫的執行檔。由於現在是根目錄~/projects/jcubic/leash
,因此執行檔必須存在於諸如~/projects/jcubic/leash/bin
.如果你想在 chroot 中擁有一個帶有常用命令的普通系統,你需要安裝一個。諸如debootstrap(用於安裝 Debian 系統)之類的工具或諸如 Docker 之類的配置工具(它設置了一個 chrooted 並以其他方式受限的環境)可以提供幫助。
如果你只想要
ls
命令,你仍然需要複製多個ls
. 要執行ls
,您需要複製該ls
命令以及它所依賴的所有文件。由於ls
是一個動態連結的程序,你需要它的動態載入器以及它所依賴的所有動態庫。執行ldd /bin/ls
以列出所需的動態庫。例如:mkdir -p bin lib/x86_64-linux-gnu rsync -a /bin/ls bin/ rsync -a /lib/x86_64-linux-gnu/ lib/x86_64-linux-gnu/ chroot . ls
或者,一種更簡單的探索方法是獲取靜態連結的二進製文件,例如BusyBox(在 Debian 和衍生產品上作為
busybox-static
軟體包提供)。cp /bin/busybox . chroot . ./busybox ls