プロセスをルートとして生成し、その権限をルート以外のユーザーにドロップする必要があったため、これを実装するためにバイナリに setbit を使用し、所有者をルートに変更しました。次に、プロセスを非ルートユーザーとして生成し、最初は root として開始しました。必要なタスクを実行した後、 setuid(getuid()) 呼び出しを使用してその権限を非ルートユーザーにドロップしました。これで何が起こるかというと、場所 /proc/(pid)/ にあるすべてのファイルの所有者:グループはルート:ルートのままです。私のプロセスによって生成されたスレッドが原因です(特権を削除した後)。/proc/(pid)/exe でアクセスを拒否してください。setuid が owner:group をファイルの場所 /proc/(pid) に設定しない理由を知っている人はいますか?
1182 次
1 に答える
3
Linux では、プロセスが開始時に set-id であった場合、またはユーザーがバイナリを実行する権限を持っているが読み取れない場合、およびおそらく他の条件の下でも、「ダンプ可能」フラグがカーネル内でクリアされます。セキュリティ上の理由から、このフラグはいくつかのことを防ぎます: コア ダンプを禁止し (コア ダンプは特権情報を漏らす可能性があります)、通常のユーザーがデバッガーをアタッチできないようにし/proc/<pid>
、そのプロセスのほとんどのファイルへのアクセスを制限します。
一度クリアすると、プロセスが特権を失ったとしても、そのフラグを再度設定することはできません。
(実際にprctl(PR_SET_DUMPABLE)
はフラグの値を変更できるシステムコールがありますが、システムコールは一般的な用途ではないと思います。)
さらに重要なことに、読み取り可能/オープン可能であることに依存するプログラムで、/proc/<pid>/exe
または他のファイルで何をしているのか疑問に思います。/proc/<pid>
于 2012-01-06T14:26:55.667 に答える