にいくつかのデバイス(たとえば/dev/sda1
)が取り付けられています/home/user1
。私も私の下に完全なLinuxシステムがあり、/tmp/chroot
ディレクトリ/tmp/chroot/home
にはuser2
。
、mount、およびそこ(または)chroot
でコマンドを実行すると、まだmountを見ることができ、ディレクトリはもはや(chrootに)存在しません。/tmp/chroot
/dev
/sys
/proc
mount
cat /proc/mounts
/dev/sda1
/home/user1
/home/user1
jchroot
代わりにchroot
(同様のインターフェースを持っていますが、新しいマウントネームスペースと新しいPIDネームスペースを生成するプログラム)を試しましたが、chroot
結果は同じです。
これは正常な行動ですか? chrootの外側のマウントポイントに関する情報にアクセスできますが、奇妙に聞こえます。
それらを消す方法はありますか/proc/mounts
?
答え1
これはchrootで予想される動作です。 chrootは、実際にプロセスに表示されているファイルシステムのルートディレクトリ "/"を起動時に "/"としてマウントされたディレクトリとは異なるディレクトリに変更します。プロセスはまだカーネル自体に対して同じグローバルアクセス権を持っていますが、「/」ファイルシステムへのアクセス権はありません。
カーネルは、chrootプロセスがchrootが「本当」であると信じるようにするために/ procまたはデバイスを修理またはエミュレートしません。これに対する副作用として、chrootからスーパーユーザーとして実行されるすべてのプロセスは、さまざまな方法で簡単にchrootから外れる可能性があります(例:/ devマウントと実際のルートを持つ/ dev / sdaXマウントまたはmknodのみマウント)。新しいデバイスが入り、それを使用してマウントされます。カーネルは関係ありません。 chrootプロセスはデバイスドライバをインストールし、必要なものをすべて実行することもできます。
プロセスが現在実行中のシステムとは異なるシステムで実行されていると思うように「だまされたり」セキュリティ層を提供したい場合は、chrootはおそらく間違った技術である可能性があるため、ユーザーモードのLinuxを調べることをお勧めします。またはおそらくLinuxコンテナ
答え2
はい、chrootの代わりに(または同時に)「unshare」を使用する必要があります。 chrootはプロセスのルートディレクトリのみを変更します。実際、それより高いものを達成することは難しいですが、突破する方法があります。ここは刑務所ではありません。
これを行うツールは「lxc」(Linuxコンテナ)と同じです。