コマンドを確認unshare
し、そのマニュアルページに従って
unshare - run program with some namespaces unshared from parent
また、次の名前空間がリストされていることがわかります。
mount namespace
mounting and unmounting filesystems will not affect rest of the system.
これを行う目的は何ですか?マウントネームスペース?私はいくつかの例でこの概念を理解しようとしました。
ベストアンサー1
Runはunshare -m
呼び出しプロセスにマウント名前空間のプライベートコピーを提供し、ファイルシステムプロパティの共有を解除し、ルートディレクトリ、現在のディレクトリ、またはumaskプロパティを他のプロセスと共有しないようにします。
それでは、上記の節は正確に何を言うのでしょうか?簡単な例を考えてみましょう。
ターミナル1:
最初の端末で次のコマンドを実行します。
#Creating a new process
unshare -m /bin/bash
#creating a new mount point
secret_dir=`mktemp -d --tmpdir=/tmp`
#creating a new mount point for the above created directory.
mount -n -o size=1m -t tmpfs tmpfs $secret_dir
#checking the available mount points.
grep /tmp /proc/mounts
最後のコマンドが私に与えた結果は次のとおりです。
tmpfs /tmp/tmp.7KtrAsd9lx tmpfs rw,relatime,size=1024k 0 0
これで、次のコマンドも実行しました。
cd /tmp/tmp.7KtrAsd9lx
touch hello
touch helloagain
ls -lFa
このコマンドの出力はls
次のとおりです。
ls -lFa
total 4
drwxrwxrwt 2 root root 80 Sep 3 22:23 ./
drwxrwxrwt. 16 root root 4096 Sep 3 22:22 ../
-rw-r--r-- 1 root root 0 Sep 3 22:23 hello
-rw-r--r-- 1 root root 0 Sep 3 22:23 helloagain
それでは、このすべてのことをする上で最大の問題は何ですか?なぜこれを行うべきですか?
次に別の端末を開きます(NO2。) 次のコマンドを実行します。
cd /tmp/tmp.7KtrAsd9lx
ls -lFa
出力は次のとおりです。
ls -lFa
total 8
drwx------ 2 root root 4096 Sep 3 22:22 ./
drwxrwxrwt. 16 root root 4096 Sep 3 22:22 ../
ファイルが見えませhello
んhelloagain
。ファイルを確認するためにrootとしてログインすることもありました。だから利点は、この機能を使用すると、他のルート所有プロセスでも表示または閲覧できない個人用一時ファイルシステムを作成できます。
マニュアルページunshare
から
mount 名前空間 ファイルシステムのマウントとマウント解除は、ファイルシステムが明示的に共有として表示されない限り (mount --make-shared を使用、共有フラグは /proc/self/ 参照) システムの残りの部分 (CLONE_NEWNS フラグ)影響しません。 )。
unshare --mount の後、mount --make-rprivate または mount --make-rslave を使用して、新しいネームスペースのマウントポイントを実際に親ネームスペースで共有解除することをお勧めします。
名前空間で使用されるメモリはカーネルのVFSです。最初からすぐに設定すると、root権限なしでrootユーザーである完全な仮想環境を作成できます。
引用:
この例は、次の詳細を使用して構築されました。このブログ投稿。また、この回答は以下で引用されました。素晴らしい説明マイク。これに関するもう一つの素晴らしい内容は、以下の答えで見つけることができます。ここ。