次のリンクされた記事では、「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をルートディレクトリにバインドします。それは、3番目のステップで/ root/tmpが実際に/ root/chroot/root/tmpを指していることを意味しますか? / root/chroot/tmpはどこから来たのですか?それは私が混乱している部分です。
この背後にあるロジックは何ですか?
手順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
を返すことがわかります。 Inode
は、ディスク上の特定のファイル/ディレクトリを参照するデータ構造です。どちらも同じInode
を返すため、両方のパスがまったく同じディレクトリを指しています。
したがって、ステップ3は、すでにバインドされている/root/tmp
内のシステム/tmp
ディレクトリの上に/root/chroot
ディレクトリをバインドマウントします。
手順4でchroot
を実行すると、システム全体の/
の代わりに/tmp
の/root
ディレクトリを使用してchrootされた/tmp
になります。このように、chrootはシステム上の他のすべてのユーザーと/tmp
を共有していません。
_mkdir -p /root/chroot /root/tmp
_
Chrootされた環境で使用するディレクトリを作成します。 _/root/chroot
_は、chrootされた環境のルートディレクトリになります。 _/root/tmp
_は、chrootされた環境の_/tmp
_ディレクトリとして機能します。
_mount --bind / /root/chroot
_
これにより、_/
_ディレクトリに_/root/chroot
_経由でアクセスできるようになります。これは、_/
_の_/root/chroot
_ディレクトリをミラーリングしていると考えてください(実際にはミラーではありませんが、_/
_へのポインタです)。
_mount --bind /root/tmp /root/chroot/tmp
_
これにより、chrootされた環境の_/root/tmp
_ディレクトリを介してカスタム_/tmp
_ディレクトリにアクセスできるようになります。このようにして、chrootされた環境では、システムの_/tmp
_から_/tmp
_ディレクトリが分離されます。この手順をスキップすると、chrootされた_/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
_にバインドした後に存在します。