/proc/を読む方法/ fdディレクトリのどのプロセスにLinux機能がありますか?

/proc/を読む方法/ fdディレクトリのどのプロセスにLinux機能がありますか?

root以外のユーザーとしてプロセスを実行しています。プロセスバイナリには cap_sys_resource 機能が付与されました。同じユーザーがプロセスを所有していても、そのユーザーはその/proc//fdディレクトリを読み取ることはできません。 /proc/pid の権限は次のとおりです。

dr-xr-xr-x.   9 ec2-user ec2-user 0 May 12 01:03 .
dr-xr-xr-x. 249 root     root     0 Apr  3 13:34 ..
dr-xr-xr-x.   2 ec2-user ec2-user 0 May 12 01:03 attr
-rw-r--r--.   1 root     root     0 May 12 01:04 autogroup
-r--------.   1 root     root     0 May 12 01:03 auxv
-r--r--r--.   1 root     root     0 May 12 01:04 cgroup
--w-------.   1 root     root     0 May 12 01:04 clear_refs
-r--r--r--.   1 root     root     0 May 12 01:03 cmdline
-rw-r--r--.   1 root     root     0 May 12 01:04 comm
-rw-r--r--.   1 root     root     0 May 12 01:04 coredump_filter
-r--r--r--.   1 root     root     0 May 12 01:04 cpuset
lrwxrwxrwx.   1 root     root     0 May 12 01:04 cwd
-r--------.   1 root     root     0 May 12 01:04 environ
lrwxrwxrwx.   1 root     root     0 May 12 01:04 exe
dr-x------.   2 root     root     0 May 12 01:03 fd
dr-x------.   2 root     root     0 May 12 01:04 fdinfo
-rw-r--r--.   1 root     root     0 May 12 01:04 gid_map
-r--------.   1 root     root     0 May 12 01:04 io
-r--r--r--.   1 root     root     0 May 12 01:04 limits
-rw-r--r--.   1 root     root     0 May 12 01:04 loginuid
dr-x------.   2 root     root     0 May 12 01:04 map_files
-r--r--r--.   1 root     root     0 May 12 01:04 maps
-rw-------.   1 root     root     0 May 12 01:04 mem
-r--r--r--.   1 root     root     0 May 12 01:04 mountinfo
-r--r--r--.   1 root     root     0 May 12 01:04 mounts
-r--------.   1 root     root     0 May 12 01:04 mountstats
dr-xr-xr-x.   5 ec2-user ec2-user 0 May 12 01:04 net
dr-x--x--x.   2 root     root     0 May 12 01:03 ns
-r--r--r--.   1 root     root     0 May 12 01:04 numa_maps
-rw-r--r--.   1 root     root     0 May 12 01:04 oom_adj
-r--r--r--.   1 root     root     0 May 12 01:04 oom_score
-rw-r--r--.   1 root     root     0 May 12 01:04 oom_score_adj
-r--r--r--.   1 root     root     0 May 12 01:04 pagemap
-r--r--r--.   1 root     root     0 May 12 01:04 personality
-rw-r--r--.   1 root     root     0 May 12 01:04 projid_map
lrwxrwxrwx.   1 root     root     0 May 12 01:04 root
-rw-r--r--.   1 root     root     0 May 12 01:04 sched
-r--r--r--.   1 root     root     0 May 12 01:04 schedstat
-r--r--r--.   1 root     root     0 May 12 01:04 sessionid
-rw-r--r--.   1 root     root     0 May 12 01:04 setgroups
-r--r--r--.   1 root     root     0 May 12 01:04 smaps
-r--r--r--.   1 root     root     0 May 12 01:04 stack
-r--r--r--.   1 root     root     0 May 12 01:03 stat
-r--r--r--.   1 root     root     0 May 12 01:03 statm
-r--r--r--.   1 root     root     0 May 12 01:03 status
-r--r--r--.   1 root     root     0 May 12 01:04 syscall
dr-xr-xr-x.   3 ec2-user ec2-user 0 May 12 01:03 task
-r--r--r--.   1 root     root     0 May 12 01:04 timers
-rw-r--r--.   1 root     root     0 May 12 01:04 uid_map
-r--r--r--.   1 root     root     0 May 12 01:04 wchan

rootユーザーを使用せずに/ proc / / fdディレクトリを読み取る方法はありますか?

ベストアンサー1

技術的にはこれを可能にする方法があります。ほとんどの状況で実用的であるか役に立つかはわかりません。

呼び出すプログラムを変更できますprctl(PR_SET_DUMPABLE, 1, ...)。これは、ターゲットプログラムがパスワードファイルなどのより機密性の高い情報にアクセスする機能を使用している場合に危険です。このリスクはお客様の場合には適用されません。 CAP_SYS_RESOURCE関数のみを使用するため、その関数はプログラムが他の関数より多くの情報にアクセスすることを許可しません。


問題1:ディレクトリは所有者()/proc/[pid]/fd/のみにアクセスできるため、そのディレクトリへのアクセスが拒否されたことが確認されました。これが原因です:r-x------root

http://man7.org/linux/man-pages/man5/proc.5.html

各/proc/[pid]ディレクトリ内のファイルは、通常、プロセスの有効なユーザーと有効なグループIDによって所有されます。ただし、セキュリティ対策としてプロセスの「dumpable」属性が1以外の値に設定されている場合、所有権はroot:rootに設定されます。

[...]

プロセスの「ダンプ可能」属性は、次の理由で変更される可能性があります。

  • この属性は prctl(2) PR_SET_DUMPABLE 操作によって明示的に設定されます。

  • prctl(2) で説明されている理由により、この属性は /proc/sys/fs/suid_dumpable ファイルの値にリセットされました (下記)。

http://man7.org/linux/man-pages/man2/prctl.2.html

PR_SET_DUMPABLE(Linux 2.3.20以降)

デフォルトの動作がコアダンプを生成する信号が送出されたときに呼び出しプロセスに対してコアダンプが生成されるかどうかを決定する「dumpable」フラグの状態を設定します。

[...] (proc(5) の /proc/sys/fs/suid_dumpable の説明も参照してください。)

通常、このフラグは1に設定されます。ただし、次の条件では、/proc/sys/fs/suid_dumpableファイルに含まれる現在の値(デフォルトは0)にリセットされます。

  • プロセスの有効なユーザーまたはグループIDが変更されました。

  • プロセスのファイルシステムユーザーまたはグループIDが変更されました(資格情報(7)を参照)。

  • このプロセスは、設定されたユーザーIDまたはグループID設定プログラムを実行(execve(2))して、有効ユーザーIDまたは有効グループIDを変更します。

  • プロセスはファイル機能を持​​つプログラムを実行(execve(2))します。(能力(7)を参照)が、取得した許容能力がプロセスですでに許可した能力を超える場合にのみ適用されます。

問題2:単にリストできること自体/proc/[pid]/fd/はあまり役に立ちません。少なくとも開いたファイルが何を参照しているのか知りたいでしょう。

ディレクトリとその中のファイルに対する権限の後、procマニュアルページには、この「ダンプ可能」フラグに関連する別のセキュリティチェックがあることが表示されます。

このディレクトリのシンボリックリンクを逆参照または読み取る権限(readlink(2))は、ptraceアクセスモードPTRACE_MODE_READ_FSCREDSチェックによって制御されます。 ptrace(2) を参照してください。

http://man7.org/linux/man-pages/man2/ptrace.2.html

ターゲットプロセスの "dumpable"属性が1(SUID_DUMP_USER、prctl(2)のPR_SET_DUMPABLEの説明を参照)ではなく、呼び出し元がターゲットプロセスのユーザーネームスペースにCAP_SYS_PTRACE機能を持っていない場合、アクセスは拒否されます。

したがって、問題2を回避するもう1つの方法は、CAP_SYS_PTRACE機能がある場合です。 CAP_SYS_PTRACEを使用すると、他のプロセスを制御できます。これが実際のユーザーよりも強力ではないかどうかは議論の余地がありますroot

また、ファイル権限である問題1を迂回する必要があります。 CAP_DAC_READ_SEARCH(またはCAP_DAC_OVERRIDE)機能がある場合は、これを行うことができます。

おすすめ記事