web-dev-qa-db-ja.com

実行中のプログラムを他のLinuxシステムから分離する方法はありますか?

まず、仮想化とコンテナについて知っています。 「彼はコンテナが欲しい」というのがあなたの頭に浮かんだことだと思います。 (それを否定しないでください!)

ただし、コンテナーはchrootに似ています。コンテナー内でbashを実行する場合は、コンテナー内のどこかにbash実行可能ファイルをコピー/ミラーリングする必要がありますFSおよび必要なすべてのライブラリ(誤解した場合)何か、私を訂正してください)。


私が知りたいのは、busyboxのようなプログラムを現在の名前空間から(元のFSを使用しているので、コピーは必要ありません)開始でき、その後それを分離できるかどうかです(たとえば、Linux FS名前空間)1つの一意のディレクトリにアクセスできるようにします。

どういうわけか、ssh(実際にはsftp)は、sshd実行可能ファイルがchrootされたFSにある必要なしに、このようなことを実行できるようです。しかし、私はまだ自分で何が起こっているのかを理解するスキルが不足しています。

2
LouisTP

あなたはおそらくコンテナを探していると思います。

またはおそらくそうではありません。結局のところ、Linux名前空間はかなり透過的です。私はしません信じるすでに呼び出されているプロセスの名前空間をunshareする方法はありますが、呼び出し時に名前空間をunshareすることは間違いありません。効果はほとんどまたはまったくありません。

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

you

...そして別の端末から...

cd   /tmp
cat  you

hey

...マウントツリーはデフォルトで親名前空間から共有であり、busyboxのマウント伝播フラグはすべてデフォルトでプライベートに設定されていますが、マウントツリーへの変更が名前空間で何らかの形で行われるまで、違いはありません。これを行う必要はありませんthrough 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

...新しいプライベートtmpfsがnsenterコマンドの共有/tmpにマウントされたため...

cd ..
umount tmp
cat tmp/hey

you
1
mikeserv