web-dev-qa-db-ja.com

この「chroot」/ tmpディレクトリの作成について説明していただけますか?

次のリンクされた記事では、「chroot」/ tmpディレクトリを作成する方法を説明しています。私は彼らがしたことに少し混乱しています。誰かが次のコマンドが何をしているのか説明できますか?

Noexecおよび/ 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はどこから来たのですか?それは私が混乱している部分です。

この背後にあるロジックは何ですか?

4
fromvega

手順2では、マウントされた//root/chrootにバインドします。

手順2.5をls /root/chrootとして作成すると、/のすべてのディレクトリが一覧表示されます。システムの/tmpディレクトリを含みます。

touch /root/chroot/testの場合、testls /の出力に含まれていることがわかります。 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を共有していません。

2
garethTheRed
_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された環境に入ります。

今あなたの質問:

  1. 最初のマウントコマンドは2番目のコマンドに影響しますか?

    はい。 _/root/chroot_ディレクトリをバインドする前に、chrootされた環境のルート(_/tmp_)をバインドマウントする必要があります。 _/root/chroot/tmp_を_/_にバインドするまで、_/root/chroot_は存在しません。

  2. 2番目のステップでは、新しいディレクトリ_/root/chroot_をルートディレクトリにバインドします。それは、3番目のステップで_/root/tmp_が実際に_/root/chroot/root/tmp_を指していることを意味しますか?

    はい。 _/_のすべては、_/root/chroot_を介してアクセスできます。

  3. _/root/chroot/tmp_はどこから来たのですか?

    _/root/chroot/tmp_は、手順2で_/_を_/root/chroot_にバインドした後に存在します。

3
grekasius