web-dev-qa-db-ja.com

procが通常のユーザーとして起動されているにもかかわらず、/ proc / <pid> / *リソースがrootによって所有される原因は何ですか?

Bashなどの一部のprocは、そのprocを作成したユーザーが/proc/<pid>/リソース全体を読み取り可能にしていることに気付きました。ただし、chromeやgnome-keyring-daemonなどの他のprocは、プロセス自体が通常のユーザーによって所有されており、suidが呼び出されていないにもかかわらず、ほとんどの/proc/<pid>/リソースにrootからのみアクセスできます。

カーネルを少し掘り下げて、タスクに「ダンプ可能」フラグがない場合、/ proc /のものが制限されることがわかりましたが、どのシナリオでタスクがダンプ不能になるかを理解するのに苦労しています(setuidの場合を除くこれはchromeまたはgnome-keyring)には適用されません:

https://github.com/torvalds/linux/blob/164c09978cebebd8b5fc198e9243777dbaecdfa0/fs/proc/base.c#L1532

根本的なメカニズムとその理由を理解するのを手伝ってくれる人はいますか?

ありがとう!

編集:

SSHエージェント(gnome-keyring-daemonなど)をユーザーがダンプできるようにしたくない理由についての優れたドキュメントを見つけました。まだわからないhowgnome-keyring-daemonがそれ自体をダンプ不能にしています。

https://github.com/torvalds/linux/blob/164c09978cebebd8b5fc198e9243777dbaecdfa0/Documentation/security/Yama.txt#L

7
alienth

Linuxには、dumpableフラグを変更するシステムコールがあります。これがいくつかのサンプルコードです 私が書いた 数年前:

#include <sys/prctl.h>
...
/* The last three arguments are just padding, because the
 * system call requires five arguments.
 */
prctl(PR_SET_DUMPABLE,1,42,42,42);

それはgnome-keyring-daemonセキュリティ上の理由から、意図的にdumpableフラグをゼロに設定します。

7
kasperd