web-dev-qa-db-ja.com

Linux機能を備えたプロセスの/ proc / <pid> / fdディレクトリを読み取る方法は?

非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ディレクトリを読み取る方法はありますか?

3
Hakan Baba

本当のルートはそれを行うことができるはずです。誰が読み込もうとしているのか、もっと具体的にする必要があると思います/proc/pid/fd/より具体的な解決策を提案してほしい場合!

含まれているケースでは、rootに通常の機能の一部が欠落している可能性があることに注意してください。これにより、権限チェックをバイパスできます。

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

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

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

ターゲットプロセスの「ダンプ可能」属性に1以外の値(SUID_DUMP_USER、prctl(2)のPR_SET_DUMPABLEの説明を参照)があり、呼び出し元がターゲットプロセスのユーザー名前空間にCAP_SYS_PTRACE機能を持っていない場合、アクセスを拒否します。

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

PR_SET_DUMPABLE(Linux 2.3.20以降)「dumpable」フラグの状態を設定します。これにより、デフォルトの動作がコアダンプの生成であるシグナルの配信時に、呼び出しプロセスに対してコアダンプが生成されるかどうかが決まります。 2.6.12までのカーネルでは、arg2は0(SUID_DUMP_DISABLE、プロセスはダンプ不可能)または1(SUID_DUMP_USER、プロセスはダンプ可能)でなければなりません。カーネル2.6.13と2.6.17の間では、値2も許可されていました。これにより、通常はダンプされないバイナリが、ルートのみが読み取り可能にダンプされました。セキュリティ上の理由から、この機能は削除されました。 (proc(5)の/ proc/sys/fs/suid_dumpableの説明も参照してください。)通常、このフラグは1に設定されますが、ファイル/ proc/sys/fs /に含まれる現在の値にリセットされます。次の状況では、suid_dumpable(デフォルトでは値は0です):

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

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

  • プロセスはset-user-IDまたはset-group-IDプログラムを実行(execve(2))し、実効ユーザーIDまたは実効グループIDを変更します。

  • プロセスは、ファイル機能を備えたプログラムを実行(execve(2))します(capabilities(7)を参照)。ただし、許可された機能がそれらを超える場合のみプロセスですでに許可されています。

3
sourcejedi