Chroot

有沒有辦法將正在執行的程序與 Linux 系統的其餘部分隔離開來?

  • November 21, 2015

首先,我了解虛擬化和容器。我敢肯定“他想要容器”是你腦海中浮現的。(不要否認!)

然而容器就像 chroot:如果你想在其中執行 bash,你需要複製/鏡像容器 FS 中某處的 bash 執行檔以及所有必需的庫。(如果我誤解了什麼,請糾正我)。


我想知道的是我是否可以從目前命名空間啟動一個像busybox這樣的程序(使用原始FS,所以不需要複製)然後隔離它(例如使用Linux FS命名空間)讓它訪問一個唯一的目錄。

不知何故,ssh(實際上是 sftp)似乎能夠做這樣的事情,而不需要 sshd 執行檔位於 chrooted FS 中。但是我仍然缺乏自己理解正在發生的事情的技能。

我想你可能正在尋找容器。

或者也許不是。畢竟,Linux 命名空間可以非常透明。我不相信有一種方法可以unshare為已經被呼叫的程序命名空間,但你絕對可以unshare在呼叫時使用命名空間而幾乎沒有影響。

cd   /tmp
echo you >hey
sudo unshare -m busybox
echo hey >you; cat  hey

you

…從另一個終端…

cd   /tmp
cat  you

hey

…預設情況下,掛載樹與父命名空間共享,並且,雖然預設情況下busybox’ 的掛載傳播標誌都設置為私有,但在命名空間中以某種方式影響掛載樹的更改之前沒有區別。這也不需要通過busybox來完成。

…在busybox終端…

echo "#$$"

#8854

…現在從另一個…

sudo nsenter -t8854 -m mount -t tmpfs none /tmp
cd .; cat hey

you

…但是從busybox’ 的終端,因此我們剛剛從命名空間mount

cd .;  cat hey

cat: hey: no such file or directory

/tmp…因為在nsenter命令中的共享上安裝了一個新的私有 tmpfs …

cd ..
umount tmp
cat tmp/hey

you

引用自:https://unix.stackexchange.com/questions/244501