Android ターミナル エミュレーター内で動作する Linux エコシステムをセットアップしようとしていますが、実際にはルート アクセス権がありません。/bin/sh
これは、コンパイルして使用しようとしているすべてのプログラムのソース コードなどで、すべての参照を調整する必要があることを意味します。
アプリケーションを開始する前に設定LD_PRELOAD
すると、fakeroot と同じように libc 関数の動作を変更できます。そのため、絶対パス名 (/dev、/sys、/proc などを除く) を持つすべてのシステム コールを、書き込みアクセス権のあるフォルダーにリダイレクトするライブラリを作成するだけです。
このライブラリは、次のことを行う必要があります。
- すべてのパス名を書き換えて、偽のルート ディレクトリ内にとどまるようにします。
- それでも、このディレクトリの外部からの参照を許可します。たとえば
procfs
、システムの絶対パス名が引き続き提供されるためです。 - 子プロセスが誤って LD_PRELOAD を設定解除しないようにする
しかし、これはどのようにうまくいくでしょうか?低レベルのコードに関しては、私は専門家ではありません。
- このような「偽のルート ディレクトリ」をどの程度一貫してエミュレートできますか? 協力しないカーネルによって最初から運命づけられているのでしょうか?
- 「偽のルート」内のプロセスが誤って抜け出すのはどれほど簡単でしょうか? アセンブラ コードを介して意図的にエスケープしようとしているわけではありません。
編集:このライブラリは、そのシステムでコンパイルしたすべてのソフトウェアを libc に対してリンクする限り、libc の代わりとしても機能する可能性がありますか?