以下のリンク記事では、「chroot」/ tmpディレクトリを作成する方法について説明します。私は彼らが何をしているのか少し混乱しています。次のコマンドの機能を説明できる人はいますか?
1. # mkdir -p /root/chroot /root/tmp
2. # mount --bind / /root/chroot
3. # mount --bind /root/tmp /root/chroot/tmp
4. # chroot /root/chroot
最初のステップ、なぜ作ったのですか?/root/tmpまさか/root/chroot/tmp?
最初のインストールコマンドは2番目のインストールコマンドに影響しますか? 2番目のステップでは、新しいディレクトリをバインドします。/root/chrootルートディレクトリに。これは第三段階で/root/tmp実際に以下を指す/root/chroot/root/tmp?どこ/root/chroot/tmpから?これが私を混乱させる部分です。
これの論理は何ですか?
答え1
mkdir -p /root/chroot /root/tmp
chroot環境用のディレクトリを作成します。/root/chroot
chroot 環境のルートディレクトリになります。 chroot 環境/root/tmp
として機能するディレクトリです。/tmp
mount --bind / /root/chroot
/
これにより、ディレクトリが表示されます/root/chroot
。ディレクトリを/
ミラーディレクトリとして扱います/root/chroot
(実際にはミラーではありませんが、そのディレクトリへのポインタです/
)。
mount --bind /root/tmp /root/chroot/tmp
これにより、chroot環境のディレクトリを介してカスタム/root/tmp
ディレクトリにアクセスできます。/tmp
これにより、chroot環境のディレクトリがシステム/tmp
の/tmp
。/tmp
/tmp
chroot /root/chroot
ここでchroot環境を入力してください。
今あなたの質問:
最初のインストールコマンドは2番目のインストールコマンドに影響しますか?
はい。ディレクトリ
/root/chroot
をバインドする前に、chroot環境のルートディレクトリ()をバインドマウントする必要があります/tmp
。にバインドされるまでは存在しません/root/chroot/tmp
。/
/root/chroot
2番目のステップでは、新しいディレクトリを
/root/chroot
ルートディレクトリにバインドします。これは、ステップ3が/root/tmp
実際にそれを指すことを意味しますか/root/chroot/root/tmp
?はい。のすべてのコンテンツ
/
を経由してアクセスできます/root/chroot
。それはどこから出たの
/root/chroot/tmp
?/root/chroot/tmp
ステップ2でバインドした/
後は存在します。/root/chroot
答え2
ステップ2では/
。/root/chroot
手順2.5を作成すると、システムディレクトリを含むリストされているls /root/chroot
すべてのディレクトリを見つけることができます。/
/tmp
出力でもtouch /root/chroot/test
この内容を見ることができます。ご存知のように、それも出てきます。とはまったく同じ場所です。test
ls /
rm /test
/root/chroot/
/
/root/chroot/
詳しくは、実行するstat /
とstat /root/chroot
両方が同じものを返すことがわかりますInode
。 Anは、Inode
ディスク上の特定のファイル/ディレクトリを参照するデータ構造です。どちらも同じコンテンツを返すので、Inode
両方のパスはまったく同じディレクトリを指します。
したがって、手順3では、バインドマウントされたシステムディレクトリにディレクトリをマウントします/root/tmp
。/tmp
/root/chroot
chroot
手順4を実行すると、/
システム全体のディレクトリの代わりにinディレクトリを使用して/tmp
chroot状態に入ります。このようにして、chrootはシステムの他のすべてのユーザーと共有されません。/root
/tmp
/tmp