/dev/sda1
にいくつかのデバイス(たとえば/home/user1
)をマウントしています。また、/tmp/chroot
の下に完全なLinuxシステムがあり、ディレクトリ/tmp/chroot/home
にはuser2
という名前のディレクトリが1つだけ含まれています。
/tmp/chroot
内にchroot
がある場合は、そこに/dev
、/sys
、および/proc
をマウントし、mount
コマンド(またはcat /proc/mounts
)、/dev/sda1
が/home/user1
にマウントされているのを確認できますが、ディレクトリ/home/user1
は(chrootに)もう存在しません。
また、jchroot
の代わりにchroot
を試してみました(これはchroot
に似たインターフェイスを備えたプログラムですが、新しいマウント名前空間と新しいPID名前空間を作成します)が、結果は同じだ。
これは正常な動作ですか? chrootの外部のマウントポイントに関する情報にアクセスできるのは奇妙に聞こえます。
それらを/proc/mounts
から消えさせる方法はありますか?
はい、chrootの代わりに(または同様に)「unshare」を使用する必要があります。 chrootは、プロセスのルートディレクトリのみを変更します。それより上にあるものに到達することは実際には困難ですが、抜け出す方法はたくさんあります。それは刑務所ではありません。
「lxc」(Linuxコンテナ)など、これを行うツールがいくつかあります。
これは、chroot内で予想される動作です。 chrootは、実際には、プロセスがファイルシステム '/'のルートディレクトリと見なすものを、起動時に '/'としてマウントされたものとは異なるディレクトリに変更するだけです。このプロセスは、「/」ファイルシステムだけでなく、カーネル自体への同じグローバルアクセスを引き続き持っています。
カーネルは、chrootされたプロセスにchrootが「本物」であると信じ込ませるために、/ procまたはデバイスに対して修正やエミュレーションを行いません。これの副作用として、chrootでスーパーユーザーとして実行されているプロセスは、さまざまな方法でchrootから簡単に抜け出すことができます(たとえば、実際のルートがある場所に/ devをマウントして/ dev/sdaXをマウントする、または単にmknod a newデバイスのエントリとそれを使用したマウント-カーネルは気にしません)。 chrootされたプロセスは、デバイスドライバーをinsmodして、好きなことを実行することもできます...
プロセスを「だまして」、現在実行されているシステムとは異なるシステムで実行されていると考えたり、セキュリティのレイヤーを提供したりする場合、chrootはおそらく間違ったテクノロジーです。ユーザー・モードLinuxまたはおそらくLinuxを調べることをお勧めします。コンテナ