まず、仮想化とコンテナについて学びました。 「彼はコンテナが欲しい」と思うと確信しています。 (否定しないでください!)
しかし、コンテナはchrootと同じです。コンテナでbashを実行するには、bash実行可能ファイルとすべての必須ライブラリをコンテナFSのどこかにコピー/ミラーリングする必要があります。 (私が間違って理解したことがあれば訂正してください。)
私が知りたいのは、現在のネームスペースで(生のFSを使用しているのでコピーする必要はありません)、busyboxなどのプログラムを起動できるかどうか、それから独自のディレクトリにアクセスできるように分離します(たとえば、Linux FS名前空間を使用)。
とにかく、ssh(実際にはsftp)は、sshd実行可能ファイルがchrooted FSに存在することなく同様の操作を実行できるようです。しかし、私はまだ私に何が起こっているのか理解する能力が不足していました。
答え1
コンテナを探していると思います。
またはそうでないかもしれません。結局のところ、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
...新しいプライベートtmpfsがコマンドの共有にマウントされるためですnsenter
...
cd ..
umount tmp
cat tmp/hey
you