3

プロセスをルートとして生成し、その権限をルート以外のユーザーにドロップする必要があったため、これを実装するためにバイナリに setbit を使用し、所有者をルートに変更しました。次に、プロセスを非ルートユーザーとして生成し、最初は root として開始しました。必要なタスクを実行した後、 setuid(getuid()) 呼び出しを使用してその権限を非ルートユーザーにドロップしました。これで何が起こるかというと、場所 /proc/(pid)/ にあるすべてのファイルの所有者:グループはルート:ルートのままです。私のプロセスによって生成されたスレッドが原因です(特権を削除した後)。/proc/(pid)/exe でアクセスを拒否してください。setuid が owner:group をファイルの場所 /proc/(pid) に設定しない理由を知っている人はいますか?

4

1 に答える 1

3

Linux では、プロセスが開始時に set-id であった場合、またはユーザーがバイナリを実行する権限を持っているが読み取れない場合、およびおそらく他の条件の下でも、「ダンプ可能」フラグがカーネル内でクリアされます。セキュリティ上の理由から、このフラグはいくつかのことを防ぎます: コア ダンプを禁止し (コア ダンプは特権情報を漏らす可能性があります)、通常のユーザーがデバッガーをアタッチできないようにし/proc/<pid>、そのプロセスのほとんどのファイルへのアクセスを制限します。

一度クリアすると、プロセスが特権を失ったとしても、そのフラグを再度設定することはできません。

(実際にprctl(PR_SET_DUMPABLE)はフラグの値を変更できるシステムコールがありますが、システムコールは一般的な用途ではないと思います。)

さらに重要なことに、読み取り可能/オープン可能であることに依存するプログラムで、/proc/<pid>/exeまたは他のファイルで何をしているのか疑問に思います。/proc/<pid>

于 2012-01-06T14:26:55.667 に答える