web-dev-qa-db-ja.com

chrootのマウントポイント

/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から消えさせる方法はありますか?

4

はい、chrootの代わりに(または同様に)「unshare」を使用する必要があります。 chrootは、プロセスのルートディレクトリのみを変更します。それより上にあるものに到達することは実際には困難ですが、抜け出す方法はたくさんあります。それは刑務所ではありません。

「lxc」(Linuxコンテナ)など、これを行うツールがいくつかあります。

3
MarkR

これは、chroot内で予想される動作です。 chrootは、実際には、プロセスがファイルシステム '/'のルートディレクトリと見なすものを、起動時に '/'としてマウントされたものとは異なるディレクトリに変更するだけです。このプロセスは、「/」ファイルシステムだけでなく、カーネル自体への同じグローバルアクセスを引き続き持っています。

カーネルは、chrootされたプロセスにchrootが「本物」であると信じ込ませるために、/ procまたはデバイスに対して修正やエミュレーションを行いません。これの副作用として、chrootでスーパーユーザーとして実行されているプロセスは、さまざまな方法でchrootから簡単に抜け出すことができます(たとえば、実際のルートがある場所に/ devをマウントして/ dev/sdaXをマウントする、または単にmknod a newデバイスのエントリとそれを使用したマウント-カーネルは気にしません)。 chrootされたプロセスは、デバイスドライバーをinsmodして、好きなことを実行することもできます...

プロセスを「だまして」、現在実行されているシステムとは異なるシステムで実行されていると考えたり、セキュリティのレイヤーを提供したりする場合、chrootはおそらく間違ったテクノロジーです。ユーザー・モードLinuxまたはおそらくLinuxを調べることをお勧めします。コンテナ

3
bdk