2

Bluecoveライブラリを使用する Java プロジェクトがあります。このライブラリには、プロジェクトで必要な特定のアクションを実行するためのルート権限が必要です。プロジェクトは Java ベースですが、Linux 専用であることに注意してください。

プロジェクトには、root 権限を必要としない多くの機能があり、そのうちのいくつかは root 権限機能と対話する必要があり、いくつかはそうではありません。

さらに、プロジェクトはroot 権限でユーザーが入力したデータを使用してhciconfigなどのプログラムを実行します。

このすべてのルート アクティビティにより、システムのセキュリティが心配になりました。ターゲットマシンはユーザー自身のコンピューターであり、このシステムを公共の端末で実行するつもりはありませんが、未知の外部 Bluetooth デバイスがこのシステムと対話できるため、セキュリティは依然として重要です。

これまでのところ、私のセキュリティ対策には、ユーザー入力を大幅にフィルタリングし、外部の Bluetooth デバイスがシステムに実行させるすべてのアクションに細心の注意を払うことが含まれていましたが、これにはますます不満が募っています。

人々は何を勧めますか?1 つ考えられるのは、システムを 2 つまたは 3 つのモジュールに分割することです。1 つには GUI と非ルート バックエンドが含まれ、もう 1 つには Bluecove ルート バックエンドと、場合によっては hciconfig のルート ラッパーと使用されるその他のツールが含まれます。

Apache などの一部のプログラムが、一度実行すると特権を「ドロップダウン」することに気付きました。これはどのように達成され、効果的ですか?

4

1 に答える 1

3

あなたが指摘したように、setuidシステムコール(libc内)はどのApacheを実行するか、プロセスの特権を効果的に落とします。JNI またはJNA経由で libc を呼び出すことができます。

これは、Java プログラムの場合でも非常にうまく機能しますが、root から非 root に移行すると、昇格された特権を必要とする操作を実行できなくなります。したがって、この手法は、Apache のようにすべての特権操作を前もって実行できる場合にのみ使用できます。

もう 1 つの可能性は、プログラムを 2 つのプロセスに分割することです。起動時に、プログラムはルートとして実行される別のプログラムを fork し、元のプログラムを非ルートに降格させます。2 つのプロセスは、stdin/stdout を介して通信できます。

于 2010-02-02T17:04:02.493 に答える