Chroot
有沒有辦法將正在執行的程序與 Linux 系統的其餘部分隔離開來?
首先,我了解虛擬化和容器。我敢肯定“他想要容器”是你腦海中浮現的。(不要否認!)
然而容器就像 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