3

Gentoo のportage には、ビルドおよびパッケージング ディレクトリ外への書き込みを防止してログに記録する機能があります。

Checkinstallは、書き込みを監視し、完了後に生成されたすべてのファイルをパッケージ化できます。

Autotools には、DESTDIR通常、ほとんどのファイルシステム アクティビティを別の場所に転送できるようにするマクロがあります。

  • Gentooサンドボックス方式の安全性を利用して、これを自分で行うにはどうすればよいですか?
  • SELinux、rlimit、またはその他のリソース制限 API を使用できますか?
  • C、Python からこれを行うには、どの API を使用できますか?

Update0

  • 使用されるメカニズムには、ルート権限や関連する/永続的なシステム変更は必要ありません。これにより、ユーザーの作成と使用が除外されますchroot()
  • あなたが言及した API のドキュメントにリンクしてください。何らかの理由でそれらを見つけるのは非常に困難です。

アップデート1

  • これは事故防止のためです。私は悪意のあるコードについては心配していません。
4

5 に答える 5

2

Debian がこの種の問題を処理する方法は、そもそもインストール コードを root として実行しないことです。パッケージ ビルド スクリプトは通常のユーザーとして実行され、インストール スクリプトはfakerootを使用して実行されます。この LD_PRELOAD ライブラリは、権限チェックの呼び出しをリダイレクトして、インストーラーが実際に root として実行されているように見せるため、結果として得られるファイルの所有権と権限は正しくなります (つまり、 、 /usr/bin/installfakeroot 環境内から実行する場合stat、環境内からさらに s を実行すると適切なルート所有権が示されます) が、実際にはインストーラーは通常のユーザーとして実行されます。

ビルドは、場合によっては (主に開発目的で)、pbuilder などを使用して chroot で行われます。ただし、 pbuilderを使用する各ビルドは、ベース システムを超えてすべての依存関係を再インストールするため、必要なすべての依存関係をテストする役割を果たします。依存関係が指定されている (これが chroot を使用する主な理由であり、偶発的なインストールに対する保護ではありません)

于 2011-06-21T04:39:33.173 に答える
0

あなたが説明しているのはcontainerのように聞こえます。コンテナー インフラストラクチャのセットアップが完了したら、コンテナーの作成は非常に安価であり、非常に安全です。

于 2011-06-21T01:07:21.390 に答える
0

1 つのアプローチは、プロセスを仮想化する方法と同様にwine、ファイル パスを再解釈することです。ただし、それを実装するにはかなりの義務があります。

より洗練されたアプローチはchroot()、ファイルシステムのサブツリーをプロセスのルート ディレクトリとして設定するシステム コールを使用することです。/bin、/tmp、/usr、/etc などの仮想サブツリーをプロセスに表示させたいときに作成し、仮想ツリーで chroot を呼び出してから、ターゲットの実行可能ファイルを実行します。外部のツリー参照ファイル内にシンボリック リンクを作成できるかどうかは思い出せませんが、そうは思いません。しかし、確かに、必要なものはすべてサンドボックスにコピーできます。コピーが完了したら、オリジナルと比較して変更を確認します。

于 2011-06-21T00:33:30.280 に答える
0

おそらく、通常のユーザー権限でサンドボックスの安全性を取得できますか? したがって、ショーを実行しているプロセスには、特定のディレクトリへの特定のアクセス権があります。

chrootオプションになりますが、これらのルート外への書き込みの試行を追跡する方法がわかりません。

もう 1 つのアイデアは、システム コールをインターセプトすることです。私はこれについてあまり知りませんstraceが、最初はプログラムを実行してみて、気に入ったものがあるかどうかを確認してください。

編集:

カーネルモジュールの使用はオプションですか? 書き込みシステムコールを独自のものに置き換えることができるため、必要なものをすべて防止してログに記録することもできます。

于 2011-06-21T00:35:41.717 に答える
0

これを行うには 2 つの方法があります。LD_PRELOAD1 つは、libc などの syscall につながるライブラリ呼び出しをフックし、dlsym/を呼び出すために使用する方法dlopenです。これにより、システムコールを直接フックすることはできなくなります。

syscall をフックできる 2 番目の方法は、実行可能ファイルを で実行することptraceです。これにより、発生したときに syscall を停止して調べるオプションが提供されます。これは、特にファイルシステムの制限された領域への呼び出しをサンドボックス化するようにプログラムで設定できます。

于 2016-03-31T23:59:58.017 に答える