実行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
それで、これらすべてを行う上で大したことは何ですか?なぜそれをする必要がありますか?
今、別のターミナル(ターミナル2)を開き、以下のコマンドを実行します。
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でログイン。そのため、この機能により、他のルート所有プロセスでも表示または参照できないプライベート一時ファイルシステムを作成できるという利点があります。
のmanページからunshare
、
mount namespaceファイルシステムのマウントとアンマウントは、システムの残りの部分(CLONE_NEWNSフラグ)には影響しません。ただし、明示的に共有としてマークされているファイルシステムを除きます(mount --make-sharedを使用。共有フラグについては/ proc / self / mountinfoを参照)。
unshare --mountの後にmount --make-rprivateまたはmount --make-rslaveを使用して、新しい名前空間のマウントポイントが親の名前空間と実際に共有されていないことを確認することをお勧めします。
名前空間に使用されているメモリは、カーネルからのVFSです。そして-そもそもセットアップすれば、ルート権限のないルートユーザーである仮想環境全体を作成できます。
参照:
例は、このブログ投稿の詳細を使用して構成されています。また、この答えの引用は、マイクからのこの素晴らしい説明からです。これに関する別の素晴らしい読書はここからの答えから見つけることができます。