Chrootを使用すると、ルートディレクトリまたは特定のプロセスのルートディレクトリを変更できます。これは明らかに、プロセスを指定されたツリーに制限します(権限を放棄しない限り)。
しかし、この場合、またどんな限界が生じるのか気になります。特に、デバイスやその他のリソースへのアクセスに関して。明らかに、これはプロセスが元のツリーに再ルートされないと仮定します。
私の考えでは、そのような急激な変化はシステム機能にさらに影響を与えます。しかし、具体的な内容は見つかりません。
そうではないかもしれませんが、その可能性は低く見え、確かに知りたいです。
答え1
機能的には何もありません。文字通りこのchroot()
呼び出しが行うことは、カーネルがプロセスのアンカーパスを確認する位置を更新するだけです。特に、root権限も放棄しない限り、この場合はまだアクセス権があり/proc
(/sys
適切なシステムコールを実行できるため、mount()
外部バイナリは必要ありません)、まだデバイスノードにアクセスできます(mknod()
システムを使用して再作成できます) )。呼び出し)外部バイナリは必要なく、文字通り想像できるすべてのことを行います。
chrooting の直後に root 権限を放棄する場合 (ほとんどのうまく動作するアプリケーションがそうであるように) 外部プログラムやライブラリが必要ない場合は、切り替えたユーザー コンテキストでできることを続けることができます。 chroot環境にはありません。
しかし、それでも、chroot自体の実際のセキュリティ値はほぼゼロに近いことに注意してください。実際に本物さまざまなメカニズムでchrootをエスケープするのは簡単です(真剣に、お気に入りの検索エンジンで「chrootからエスケープ」を検索すると、少なくとも6つの方法がリストされた結果を見つけることができます)。任意のアプリケーションでこの脆弱性を悪用するために必要なのは、ACEの脆弱性だけです。これは、もともとchroot()
セキュリティのために設計されたわけではなく、孤立した環境で新しいソフトウェアをテストできるように設計された開発者ツールでした。システム)。
答え2
デバイスへのアクセス:chroot環境に必要なデバイスノードの独自のコピーが含まれていないと、アクセスできません。たとえば、/dev/null
chroot環境にデバイスノードがない場合、chrootされた対話型シェルは奇妙に動作する可能性があります。
/dev/log
chroot環境で追加のプロセスを作成するようにsyslogデーモンを設定しない限り、chroot環境のプロセスはsyslogメッセージを送信できません。
/proc
/sys
ファイルシステムがバンドルされていない場合、またはchroot環境で利用できない場合、それを使用するシステムステータスクエリツールは機能しません。