2

Android ターミナル エミュレーター内で動作する Linux エコシステムをセットアップしようとしていますが、実際にはルート アクセス権がありません。/bin/shこれは、コンパイルして使用しようとしているすべてのプログラムのソース コードなどで、すべての参照を調整する必要があることを意味します。

アプリケーションを開始する前に設定LD_PRELOADすると、fakeroot と同じように libc 関数の動作を変更できます。そのため、絶対パス名 (/dev、/sys、/proc などを除く) を持つすべてのシステム コールを、書き込みアクセス権のあるフォルダーにリダイレクトするライブラリを作成するだけです。

このライブラリは、次のことを行う必要があります。

  • すべてのパス名を書き換えて、偽のルート ディレクトリ内にとどまるようにします。
  • それでも、このディレクトリの外部からの参照を許可します。たとえばprocfs、システムの絶対パス名が引き続き提供されるためです。
  • 子プロセスが誤って LD_PRELOAD を設定解除しないようにする

しかし、これはどのようにうまくいくでしょうか?低レベルのコードに関しては、私は専門家ではありません。

  • このような「偽のルート ディレクトリ」をどの程度一貫してエミュレートできますか? 協力しないカーネルによって最初から運命づけられているのでしょうか?
  • 「偽のルート」内のプロセスが誤って抜け出すのはどれほど簡単でしょうか? アセンブラ コードを介して意図的にエスケープしようとしているわけではありません。

編集:このライブラリは、そのシステムでコンパイルしたすべてのソフトウェアを libc に対してリンクする限り、libc の代わりとしても機能する可能性がありますか?

4

0 に答える 0